> ## Documentation Index
> Fetch the complete documentation index at: https://globalprs-docs.sadhguru.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Welcome to the Global Program Registration System (Global PRS)

# Global PRS

Global PRS is a unified registration system for all Isha programs worldwide. It provides a stable and flexible platform for managing program registrations across different regions.

## Key Features

<CardGroup cols={2}>
  <Card title="Unified Platform" icon="globe">
    Single system for all Isha programs worldwide
  </Card>

  <Card title="Flexible Design" icon="puzzle">
    Customizable to meet regional requirements
  </Card>

  <Card title="Scalable Architecture" icon="server">
    Independent scaling of system components
  </Card>

  <Card title="Secure Operations" icon="shield">
    Enterprise-grade security and compliance
  </Card>
</CardGroup>

## User Roles

<CardGroup cols={2}>
  <Card title="Participants" icon="user">
    Program registration and management
  </Card>

  <Card title="Program Team" icon="gear">
    Program setup and configuration
  </Card>

  <Card title="Volunteers" icon="users">
    Program execution and coordination
  </Card>

  <Card title="Support Teams" icon="headset">
    Marketing, finance, and legal support
  </Card>
</CardGroup>

## Core Modules

<CardGroup cols={2}>
  <Card title="Programs" icon="calendar">
    Create and manage program offerings
  </Card>

  <Card title="Forms" icon="clipboard">
    Build custom registration forms
  </Card>

  <Card title="Flows" icon="diagram-project">
    Design registration journeys
  </Card>

  <Card title="Fields" icon="input-text">
    Configure data collection
  </Card>
</CardGroup>

<AccordionGroup>
  <Accordion title="Modular Design">
    Components are designed to be generic and modular. This modularity allows for updates or changes in one part of the system without necessitating a complete overhaul, enhancing maintainability and efficiency.
  </Accordion>

  <Accordion title="Scalability">
    The architecture allows for horizontal scaling, particularly in the API layer, to handle increased load without stressing the Odoo systems.
  </Accordion>

  <Accordion title="Decoupled Workers">
    Odoo workers are decoupled from the Odoo server, providing the flexibility to integrate other platforms for backend jobs in the future.
  </Accordion>

  <Accordion title="Integration Layer">
    A separate external layer handles all integrations, allowing teams to build and manage necessary connections with other systems independently.
  </Accordion>

  <Accordion title="Security">
    Enhanced security measures are enforced at the API layer to ensure that only authorized systems can submit forms and access data.
  </Accordion>
</AccordionGroup>

## Guiding Principles

<CardGroup cols={3}>
  <Card title="Participant-First Approach" icon="user-check">
    Focus on participant needs when designing all aspects of the system, including what volunteers need to help participants.
  </Card>

  <Card title="Simple and Clean Experience" icon="wand-magic-sparkles">
    Ensure the system is intuitive and easy to navigate, requiring minimal orientation for new internal users.
  </Card>

  <Card title="Stability & Scale" icon="server">
    The system should be able to scale up while staying stable and performing reliably.
  </Card>
</CardGroup>

## Technology Stack

<CardGroup cols={2}>
  <Card title="Management System" icon="cogs">
    Odoo/Python
  </Card>

  <Card title="Database" icon="database">
    PostgreSQL
  </Card>

  <Card title="Cache" icon="bolt">
    Redis
  </Card>

  <Card title="API" icon="code">
    Litestar/Python (Earlier Gin/Go)
  </Card>

  <Card title="Frontend" icon="window">
    React/TypeScript
  </Card>

  <Card title="Workers" icon="gears">
    Celery/Python
  </Card>
</CardGroup>

## Sample Data Flow

<Steps>
  <Step title="Program Setup in Odoo">
    Business team configures programs (forms, flows, fields) in Odoo, and the data is stored in PostgreSQL.
  </Step>

  <Step title="Pushing to Cache">
    Once saved, the form configurations are cached in Redis, reducing database queries and speeding up access.
  </Step>

  <Step title="Fetching Configurations via API">
    When a user accesses the registration form, the API retrieves the configuration from Redis and sends it to the frontend.
  </Step>

  <Step title="Rendering the Form">
    The frontend dynamically renders the form using the JSON configuration, providing a flexible and responsive interface.
  </Step>

  <Step title="Form Submission">
    Users fill out the form and submit it. The submission is sent to the API, with security measures like authentication for private APIs and WAF for public ones.
  </Step>

  <Step title="Data Saved to Database">
    The API processes the submission, storing basic info in PostgreSQL tables and dynamic responses as JSON.
  </Step>

  <Step title="View Registrations in Odoo">
    Program teams can immediately access submissions in Odoo and perform necessary actions.
  </Step>

  <Step title="Delayed Tasks via Workers">
    Tasks like sending confirmation emails or updating external systems are handled by Celery workers asynchronously.
  </Step>

  <Step title="Connected Apps">
    Other apps (e.g., MyMedic) use the same API to render forms and manage registrations.
  </Step>
</Steps>

## Next Steps

<CardGroup cols={2}>
  <Card title="User Types" icon="users" href="/user-types/system-configurator">
    Learn about the different user roles and their responsibilities in the Global PRS system
  </Card>

  <Card title="System Architecture" icon="sitemap" href="/system-architecture">
    Understand the technical architecture and components of the Global PRS system
  </Card>

  <Card title="Fundamental Modules" icon="cubes" href="/modules/overview">
    Explore the core modules that make up the Global PRS system
  </Card>

  <Card title="Implementation Guides" icon="book" href="/guides/creating-program">
    Follow step-by-step guides to implement and use the Global PRS system
  </Card>
</CardGroup>
