# lifeinaide/prakalp architecture

> Architecture diagram of the GitHub repository lifeinaide/prakalp, 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/lifeinaide/prakalp
- Repository: https://github.com/lifeinaide/prakalp

## Overview

PRAKALP is a role-based prototype portal for reconciling CPSE material records into centrally governed CNMC codes. The main workflow runs from steward data onboarding and duplicate screening, through reviewer match decisions, to approved CNMC/passport records that stewards and administrators can search or govern. Administrative analytics, audit, disputes, quality alerts, clarifications, and policy pages are distinct product branches. The README describes static CSV/JSON data and mock access; unsampled implementation details are not inferred, and edges are limited to documented or excerpt-supported relationships.

Main entry points: [`src/App.tsx`](https://github.com/lifeinaide/prakalp/blob/main/src/App.tsx) (Role Router), [`src/api/mockApi.ts`](https://github.com/lifeinaide/prakalp/blob/main/src/api/mockApi.ts) (Mock Data API), [`src/pages/reviewer/MatchDetailPage.tsx`](https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/MatchDetailPage.tsx) (Match Decision), [`src/pages/steward/DataOnboardingPage.tsx`](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/DataOnboardingPage.tsx) (Data Onboarding)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Portal and Access"]
  node_router["Role Router<br/>[App.tsx]"]
  node_login["Role Login<br/>[LoginPage.tsx]"]
  node_session["Session Context<br/>[AuthContext.tsx]"]
  node_guard["Role Guard<br/>[RequireAuth.tsx]"]
  node_shell["Portal Shell<br/>[AppShell.tsx]"]
  node_shared["Shared UI<br/>[SharedUI.tsx]"]
end

subgraph group_steward["Steward Operations"]
  node_onboard["Data Onboarding"]
  node_mapping["Field Mapping"]
  node_quality["Quality Alerts"]
  node_clarify_steward["Clarification Inbox"]
  node_newcode["New Code Request"]
  node_registry["CNMC Registry<br/>[CnmcSearchPage.tsx]"]
  node_passport["Material Passport"]
end

subgraph group_review["Review and Approval"]
  node_review_queue["Match Queue"]
  node_match["Match Decision"]
  node_clarify_review["Clarification Request"]
end

subgraph group_governance["National Governance"]
  node_admin["Admin Dashboard"]
  node_admin_config["Registry Configuration"]
  node_categories["Category Management<br/>[CategoriesPage.tsx]"]
  node_thresholds["Trust Thresholds"]
  node_analytics["National Analytics"]
  node_audit["Audit Trail<br/>[AuditLogPage.tsx]"]
  node_disputes["Dispute Resolution"]
  node_policies["Policy Pages<br/>[PolicyPages.tsx]"]
end

node_user(("Portal User"))
node_api["Mock Data API<br/>[mockApi.ts]"]
node_csv["CSV Parser<br/>[csvParser.ts]"]

node_user -->|"opens portal"| node_router
node_router -->|"routes to"| node_login
node_router -->|"routes to"| node_onboard
node_router -->|"routes to"| node_mapping
node_router -->|"routes to"| node_review_queue
node_router -->|"routes to"| node_match
node_router -->|"routes to"| node_policies
node_router -->|"provides session"| node_session
node_guard -->|"checks role"| node_session
node_onboard -->|"reads data"| node_api
node_newcode -->|"checks duplicates"| node_api
node_registry -->|"searches registry"| node_api
node_review_queue -->|"loads statistics"| node_api
node_match -->|"approves or rejects"| node_api
node_admin -->|"loads statistics"| node_api
node_admin_config -->|"loads CPSE data"| node_api
node_login -->|"sets user"| node_session
node_user -.->|"submits material data"| node_onboard
node_user -.->|"reviews matches"| node_review_queue
node_match -.->|"creates on approval"| node_passport
node_user -.->|"reviews alerts"| node_quality
node_user -.->|"responds to requests"| node_clarify_steward
node_user -.->|"governs registry"| node_admin
node_user -.->|"views analytics"| node_analytics
node_user -.->|"reviews actions"| node_audit
node_user -.->|"resolves disputes"| node_disputes
node_shared -->|"uses domain types"| node_api

click node_router "https://github.com/lifeinaide/prakalp/blob/main/src/App.tsx"
click node_login "https://github.com/lifeinaide/prakalp/blob/main/src/pages/LoginPage.tsx"
click node_session "https://github.com/lifeinaide/prakalp/blob/main/src/context/AuthContext.tsx"
click node_guard "https://github.com/lifeinaide/prakalp/blob/main/src/components/RequireAuth.tsx"
click node_shell "https://github.com/lifeinaide/prakalp/blob/main/src/components/AppShell.tsx"
click node_shared "https://github.com/lifeinaide/prakalp/blob/main/src/components/SharedUI.tsx"
click node_onboard "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/DataOnboardingPage.tsx"
click node_mapping "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/FieldMappingPage.tsx"
click node_quality "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/QualityAlertsPage.tsx"
click node_clarify_steward "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/ClarificationsInboxPage.tsx"
click node_newcode "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/NewCodeRequestPage.tsx"
click node_registry "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/CnmcSearchPage.tsx"
click node_passport "https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/NationalMaterialPassportPage.tsx"
click node_review_queue "https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/PendingMatchQueuePage.tsx"
click node_match "https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/MatchDetailPage.tsx"
click node_clarify_review "https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/ClarificationRequestFormPage.tsx"
click node_admin "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/AdminDashboardPage.tsx"
click node_admin_config "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/CpseManagementPage.tsx"
click node_categories "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/CategoriesPage.tsx"
click node_thresholds "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/TrustScoreThresholdsPage.tsx"
click node_analytics "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/NationalAnalyticsPage.tsx"
click node_audit "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/AuditLogPage.tsx"
click node_disputes "https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/DisputeResolutionPage.tsx"
click node_policies "https://github.com/lifeinaide/prakalp/blob/main/src/pages/policy/PolicyPages.tsx"
click node_api "https://github.com/lifeinaide/prakalp/blob/main/src/api/mockApi.ts"
click node_csv "https://github.com/lifeinaide/prakalp/blob/main/src/api/csvParser.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_router,node_login,node_session,node_guard,node_shell,node_shared,node_user toneBlue
class node_onboard,node_mapping,node_quality,node_clarify_steward,node_newcode,node_registry,node_passport toneAmber
class node_review_queue,node_match,node_clarify_review,node_api toneMint
class node_admin,node_admin_config,node_categories,node_thresholds,node_analytics,node_audit,node_disputes,node_policies toneRose
class node_csv toneTeal
```

## Components

### Portal and Access

- [Role Router](https://github.com/lifeinaide/prakalp/blob/main/src/App.tsx): `src/App.tsx`
- [Role Login](https://github.com/lifeinaide/prakalp/blob/main/src/pages/LoginPage.tsx): `src/pages/LoginPage.tsx`
- [Session Context](https://github.com/lifeinaide/prakalp/blob/main/src/context/AuthContext.tsx): `src/context/AuthContext.tsx`
- [Role Guard](https://github.com/lifeinaide/prakalp/blob/main/src/components/RequireAuth.tsx): `src/components/RequireAuth.tsx`
- [Portal Shell](https://github.com/lifeinaide/prakalp/blob/main/src/components/AppShell.tsx): `src/components/AppShell.tsx`
- [Shared UI](https://github.com/lifeinaide/prakalp/blob/main/src/components/SharedUI.tsx): `src/components/SharedUI.tsx`

### Steward Operations

- [Data Onboarding](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/DataOnboardingPage.tsx): `src/pages/steward/DataOnboardingPage.tsx`
- [Field Mapping](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/FieldMappingPage.tsx): `src/pages/steward/FieldMappingPage.tsx`
- [Quality Alerts](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/QualityAlertsPage.tsx): `src/pages/steward/QualityAlertsPage.tsx`
- [Clarification Inbox](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/ClarificationsInboxPage.tsx): `src/pages/steward/ClarificationsInboxPage.tsx`
- [New Code Request](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/NewCodeRequestPage.tsx): `src/pages/steward/NewCodeRequestPage.tsx`
- [CNMC Registry](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/CnmcSearchPage.tsx): `src/pages/steward/CnmcSearchPage.tsx`
- [Material Passport](https://github.com/lifeinaide/prakalp/blob/main/src/pages/steward/NationalMaterialPassportPage.tsx): `src/pages/steward/NationalMaterialPassportPage.tsx`

### Review and Approval

- [Match Queue](https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/PendingMatchQueuePage.tsx): `src/pages/reviewer/PendingMatchQueuePage.tsx`
- [Match Decision](https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/MatchDetailPage.tsx): `src/pages/reviewer/MatchDetailPage.tsx`
- [Clarification Request](https://github.com/lifeinaide/prakalp/blob/main/src/pages/reviewer/ClarificationRequestFormPage.tsx): `src/pages/reviewer/ClarificationRequestFormPage.tsx`

### National Governance

- [Admin Dashboard](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/AdminDashboardPage.tsx): `src/pages/admin/AdminDashboardPage.tsx`
- [Registry Configuration](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/CpseManagementPage.tsx): `src/pages/admin/CpseManagementPage.tsx`
- [Category Management](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/CategoriesPage.tsx): `src/pages/admin/CategoriesPage.tsx`
- [Trust Thresholds](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/TrustScoreThresholdsPage.tsx): `src/pages/admin/TrustScoreThresholdsPage.tsx`
- [National Analytics](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/NationalAnalyticsPage.tsx): `src/pages/admin/NationalAnalyticsPage.tsx`
- [Audit Trail](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/AuditLogPage.tsx): `src/pages/admin/AuditLogPage.tsx`
- [Dispute Resolution](https://github.com/lifeinaide/prakalp/blob/main/src/pages/admin/DisputeResolutionPage.tsx): `src/pages/admin/DisputeResolutionPage.tsx`
- [Policy Pages](https://github.com/lifeinaide/prakalp/blob/main/src/pages/policy/PolicyPages.tsx): `src/pages/policy/PolicyPages.tsx`

### Other components

- **Portal User**
- [Mock Data API](https://github.com/lifeinaide/prakalp/blob/main/src/api/mockApi.ts): `src/api/mockApi.ts`
- [CSV Parser](https://github.com/lifeinaide/prakalp/blob/main/src/api/csvParser.ts): `src/api/csvParser.ts`

## Connections

- Portal User → Role Router: opens portal (evidence: `src/App.tsx`)
- Role Router → Role Login: routes to (evidence: `src/App.tsx`)
- Role Router → Data Onboarding: routes to (evidence: `src/App.tsx`)
- Role Router → Field Mapping: routes to (evidence: `src/App.tsx`)
- Role Router → Match Queue: routes to (evidence: `src/App.tsx`)
- Role Router → Match Decision: routes to (evidence: `src/App.tsx`)
- Role Router → Policy Pages: routes to (evidence: `src/App.tsx`)
- Role Router → Session Context: provides session (evidence: `src/App.tsx`)
- Role Guard → Session Context: checks role (evidence: `src/components/RequireAuth.tsx`)
- Data Onboarding → Mock Data API: reads data (evidence: `src/pages/steward/DataOnboardingPage.tsx`)
- New Code Request → Mock Data API: checks duplicates (evidence: `src/pages/steward/NewCodeRequestPage.tsx`)
- CNMC Registry → Mock Data API: searches registry (evidence: `src/pages/steward/CnmcSearchPage.tsx`)
- Match Queue → Mock Data API: loads statistics
- Match Decision → Mock Data API: approves or rejects (evidence: `src/pages/reviewer/MatchDetailPage.tsx`)
- Admin Dashboard → Mock Data API: loads statistics (evidence: `src/pages/admin/AdminDashboardPage.tsx`)
- Registry Configuration → Mock Data API: loads CPSE data (evidence: `src/pages/admin/CpseManagementPage.tsx`)
- Role Login → Session Context: sets user (evidence: `src/context/AuthContext.tsx`)
- Portal User → Data Onboarding: submits material data (evidence: `README.md`)
- Portal User → Match Queue: reviews matches (evidence: `README.md`)
- Match Decision → Material Passport: creates on approval (evidence: `README.md`)
- Portal User → Quality Alerts: reviews alerts (evidence: `README.md`)
- Portal User → Clarification Inbox: responds to requests (evidence: `README.md`)
- Portal User → Admin Dashboard: governs registry (evidence: `README.md`)
- Portal User → National Analytics: views analytics (evidence: `README.md`)
- Portal User → Audit Trail: reviews actions (evidence: `README.md`)
- Portal User → Dispute Resolution: resolves disputes (evidence: `README.md`)
- Shared UI → Mock Data API: uses domain types (evidence: `src/components/SharedUI.tsx`)
