# manishsuthar01/gopratle architecture

> Architecture diagram of the GitHub repository manishsuthar01/gopratle, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/manishsuthar01/gopratle
- Repository: https://github.com/manishsuthar01/gopratle

## Overview

GoPratle is an event-requirement posting platform: organizers build a category-specific planner, performer, or crew request, review it, and submit it for a reference. The web app keeps a persisted draft and sends requests to an Express API, which validates, applies idempotency/business rules, and stores requirements in MongoDB. The README documents the main workflow and backend layering; source excerpts confirm key API calls and setup wiring. Some frontend component links and storage details rely on README documentation rather than sampled implementation.

Main entry points: [`apps/web/components/requirements/RequirementWizard.tsx`](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/RequirementWizard.tsx) (Requirement Wizard), [`apps/api/src/app.ts`](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/app.ts) (Express Application), [`apps/api/src/modules/requirements/requirement.routes.ts`](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.routes.ts) (Requirement Routes), [`apps/api/src/modules/requirements/requirement.service.ts`](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.service.ts) (Requirement Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Organizer Web App"]
  node_new_page["New Requirement Page<br/>[page.tsx]"]
  node_wizard["Requirement Wizard"]
  node_event_step["Event Basics"]
  node_category_step["Category Details"]
  node_category_fields["Planner Performer Crew Fields<br/>[PlannerFields.tsx]"]
  node_additional_step["Additional Details"]
  node_review_step["Review And Edit<br/>[StepReview.tsx]"]
  node_draft_store["Persisted Draft Store"]
  node_api_client["API Client<br/>[api-client.ts]"]
  node_confirmation["Reference Confirmation<br/>[page.tsx]"]
end

subgraph group_contracts["Shared Contracts"]
  node_shared_schema["Requirement Schemas"]
  node_shared_constants["Domain Constants<br/>[index.ts]"]
end

subgraph group_api["Requirements API"]
  node_api_server["API Server Startup<br/>[server.ts]"]
  node_api_app["Express Application<br/>[app.ts]"]
  node_api_middleware["Request Middleware"]
  node_api_routes["Requirement Routes"]
  node_api_validation["API Validation Schemas"]
  node_api_controller["Requirement Controller"]
  node_api_service["Requirement Service"]
  node_api_types["Requirement DTOs"]
  node_api_repository["Requirement Repository"]
  node_api_model["Mongoose Models"]
  node_db_config["Database Connection<br/>[database.ts]"]
  node_env_config["Environment Config<br/>[env.ts]"]
  node_error_handler["Error Handling<br/>[error-handler.ts]"]
  node_api_response["API Response Format<br/>[ApiResponse.ts]"]
end

subgraph group_storage["Persistence"]
  node_requirements_db[("Requirements Collection")]
  node_idempotency_db[("Idempotency Records")]
end

node_organizer(("Organizer"))
node_mongo[("MongoDB")]
node_http_api["Requirements HTTP API"]

node_organizer -->|"starts request"| node_new_page
node_new_page -->|"renders"| node_wizard
node_wizard -->|"guides through"| node_event_step
node_wizard -->|"guides through"| node_category_step
node_category_step -->|"renders category fields"| node_category_fields
node_wizard -->|"guides through"| node_additional_step
node_wizard -->|"guides through"| node_review_step
node_wizard -->|"reads and updates"| node_draft_store
node_draft_store -->|"persists draft"| node_organizer
node_wizard -->|"submits"| node_api_client
node_api_client -->|"sends request"| node_http_api
node_http_api -->|"routes request"| node_api_app
node_api_server -->|"starts"| node_api_app
node_api_server -->|"connects database"| node_db_config
node_api_server -->|"reads config"| node_env_config
node_api_app -->|"mounts routes"| node_api_routes
node_api_app -->|"installs handler"| node_error_handler
node_api_app -->|"uses responses"| node_api_response
node_api_routes -->|"validates requests"| node_api_middleware
node_api_routes -->|"dispatches to"| node_api_controller
node_api_routes -->|"uses schemas"| node_api_validation
node_api_controller -->|"calls"| node_api_service
node_api_service -->|"uses repository"| node_api_repository
node_api_service -->|"uses DTOs"| node_api_types
node_api_validation -->|"uses shared contract"| node_shared_schema
node_api_model -->|"uses shared contract"| node_shared_schema
node_shared_schema -->|"uses enums"| node_shared_constants
node_api_repository -->|"persists through"| node_api_model
node_api_repository -->|"reads and writes"| node_requirements_db
node_api_repository -->|"reads and writes"| node_idempotency_db
node_db_config -->|"connects"| node_mongo
node_api_service -.->|"creates requirements"| node_requirements_db
node_confirmation -->|"shows reference"| node_organizer

click node_new_page "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/app/requirements/new/page.tsx"
click node_wizard "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/RequirementWizard.tsx"
click node_event_step "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepEventBasics.tsx"
click node_category_step "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepCategoryDetails.tsx"
click node_category_fields "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/PlannerFields.tsx"
click node_additional_step "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepAdditionalDetails.tsx"
click node_review_step "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepReview.tsx"
click node_draft_store "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/store/requirement-store.ts"
click node_api_client "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/lib/api-client.ts"
click node_confirmation "https://github.com/manishsuthar01/gopratle/blob/main/apps/web/app/requirements/success/%5Breference%5D/page.tsx"
click node_shared_schema "https://github.com/manishsuthar01/gopratle/blob/main/packages/shared/src/schemas/requirement.schema.ts"
click node_shared_constants "https://github.com/manishsuthar01/gopratle/blob/main/packages/shared/src/constants/index.ts"
click node_api_server "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/server.ts"
click node_api_app "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/app.ts"
click node_api_middleware "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/middleware/validate-request.ts"
click node_api_routes "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.routes.ts"
click node_api_validation "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.validation.ts"
click node_api_controller "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.controller.ts"
click node_api_service "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.service.ts"
click node_api_types "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.types.ts"
click node_api_repository "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.repository.ts"
click node_api_model "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts"
click node_db_config "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/config/database.ts"
click node_env_config "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/config/env.ts"
click node_error_handler "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/middleware/error-handler.ts"
click node_api_response "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/utils/ApiResponse.ts"
click node_requirements_db "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts"
click node_idempotency_db "https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_new_page,node_wizard,node_event_step,node_category_step,node_category_fields,node_additional_step,node_review_step,node_draft_store,node_api_client,node_confirmation toneBlue
class node_shared_schema,node_shared_constants,node_mongo toneAmber
class node_api_server,node_api_app,node_api_middleware,node_api_routes,node_api_validation,node_api_controller,node_api_service,node_api_types,node_api_repository,node_api_model,node_db_config,node_env_config,node_error_handler,node_api_response,node_http_api toneMint
class node_requirements_db,node_idempotency_db toneRose
class node_organizer toneIndigo
```

## Components

### Organizer Web App

- [New Requirement Page](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/app/requirements/new/page.tsx): `apps/web/app/requirements/new/page.tsx`
- [Requirement Wizard](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/RequirementWizard.tsx): `apps/web/components/requirements/RequirementWizard.tsx`
- [Event Basics](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepEventBasics.tsx): `apps/web/components/requirements/StepEventBasics.tsx`
- [Category Details](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepCategoryDetails.tsx): `apps/web/components/requirements/StepCategoryDetails.tsx`
- [Planner Performer Crew Fields](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/PlannerFields.tsx): `apps/web/components/requirements/PlannerFields.tsx`
- [Additional Details](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepAdditionalDetails.tsx): `apps/web/components/requirements/StepAdditionalDetails.tsx`
- [Review And Edit](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/components/requirements/StepReview.tsx): `apps/web/components/requirements/StepReview.tsx`
- [Persisted Draft Store](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/store/requirement-store.ts): `apps/web/store/requirement-store.ts`
- [API Client](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/lib/api-client.ts): `apps/web/lib/api-client.ts`
- [Reference Confirmation](https://github.com/manishsuthar01/gopratle/blob/main/apps/web/app/requirements/success/%5Breference%5D/page.tsx): `apps/web/app/requirements/success/[reference]/page.tsx`

### Shared Contracts

- [Requirement Schemas](https://github.com/manishsuthar01/gopratle/blob/main/packages/shared/src/schemas/requirement.schema.ts): `packages/shared/src/schemas/requirement.schema.ts`
- [Domain Constants](https://github.com/manishsuthar01/gopratle/blob/main/packages/shared/src/constants/index.ts): `packages/shared/src/constants/index.ts`

### Requirements API

- [API Server Startup](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/server.ts): `apps/api/src/server.ts`
- [Express Application](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/app.ts): `apps/api/src/app.ts`
- [Request Middleware](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/middleware/validate-request.ts): `apps/api/src/middleware/validate-request.ts`
- [Requirement Routes](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.routes.ts): `apps/api/src/modules/requirements/requirement.routes.ts`
- [API Validation Schemas](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.validation.ts): `apps/api/src/modules/requirements/requirement.validation.ts`
- [Requirement Controller](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.controller.ts): `apps/api/src/modules/requirements/requirement.controller.ts`
- [Requirement Service](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.service.ts): `apps/api/src/modules/requirements/requirement.service.ts`
- [Requirement DTOs](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.types.ts): `apps/api/src/modules/requirements/requirement.types.ts`
- [Requirement Repository](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.repository.ts): `apps/api/src/modules/requirements/requirement.repository.ts`
- [Mongoose Models](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts): `apps/api/src/modules/requirements/requirement.model.ts`
- [Database Connection](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/config/database.ts): `apps/api/src/config/database.ts`
- [Environment Config](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/config/env.ts): `apps/api/src/config/env.ts`
- [Error Handling](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/middleware/error-handler.ts): `apps/api/src/middleware/error-handler.ts`
- [API Response Format](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/utils/ApiResponse.ts): `apps/api/src/utils/ApiResponse.ts`

### Persistence

- [Requirements Collection](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts): `apps/api/src/modules/requirements/requirement.model.ts`
- [Idempotency Records](https://github.com/manishsuthar01/gopratle/blob/main/apps/api/src/modules/requirements/requirement.model.ts): `apps/api/src/modules/requirements/requirement.model.ts`

### Other components

- **Organizer**
- **MongoDB**
- **Requirements HTTP API**

## Connections

- Organizer → New Requirement Page: starts request
- New Requirement Page → Requirement Wizard: renders
- Requirement Wizard → Event Basics: guides through
- Requirement Wizard → Category Details: guides through
- Category Details → Planner Performer Crew Fields: renders category fields
- Requirement Wizard → Additional Details: guides through
- Requirement Wizard → Review And Edit: guides through
- Requirement Wizard → Persisted Draft Store: reads and updates
- Persisted Draft Store → Organizer: persists draft
- Requirement Wizard → API Client: submits
- API Client → Requirements HTTP API: sends request
- Requirements HTTP API → Express Application: routes request (evidence: `apps/api/src/app.ts`)
- API Server Startup → Express Application: starts (evidence: `apps/api/src/server.ts`)
- API Server Startup → Database Connection: connects database (evidence: `apps/api/src/server.ts`)
- API Server Startup → Environment Config: reads config (evidence: `apps/api/src/server.ts`)
- Express Application → Requirement Routes: mounts routes (evidence: `apps/api/src/app.ts`)
- Express Application → Error Handling: installs handler (evidence: `apps/api/src/app.ts`)
- Express Application → API Response Format: uses responses (evidence: `apps/api/src/app.ts`)
- Requirement Routes → Request Middleware: validates requests (evidence: `apps/api/src/modules/requirements/requirement.routes.ts`)
- Requirement Routes → Requirement Controller: dispatches to (evidence: `apps/api/src/modules/requirements/requirement.routes.ts`)
- Requirement Routes → API Validation Schemas: uses schemas (evidence: `apps/api/src/modules/requirements/requirement.routes.ts`)
- Requirement Controller → Requirement Service: calls (evidence: `apps/api/src/modules/requirements/requirement.controller.ts`)
- Requirement Service → Requirement Repository: uses repository (evidence: `apps/api/src/modules/requirements/requirement.service.ts`)
- Requirement Service → Requirement DTOs: uses DTOs (evidence: `apps/api/src/modules/requirements/requirement.service.ts`)
- API Validation Schemas → Requirement Schemas: uses shared contract (evidence: `apps/api/src/modules/requirements/requirement.validation.ts`)
- Mongoose Models → Requirement Schemas: uses shared contract (evidence: `apps/api/src/modules/requirements/requirement.model.ts`)
- Requirement Schemas → Domain Constants: uses enums (evidence: `packages/shared/src/schemas/requirement.schema.ts`)
- Requirement Repository → Mongoose Models: persists through (evidence: `apps/api/src/modules/requirements/requirement.repository.ts`)
- Requirement Repository → Requirements Collection: reads and writes (evidence: `apps/api/src/modules/requirements/requirement.repository.ts`)
- Requirement Repository → Idempotency Records: reads and writes (evidence: `apps/api/src/modules/requirements/requirement.repository.ts`)
- Database Connection → MongoDB: connects (evidence: `apps/api/src/config/database.ts`)
- Requirement Service → Requirements Collection: creates requirements
- Reference Confirmation → Organizer: shows reference
