# padmakruthi/vidyasetu architecture

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

- Interactive diagram: https://gitdiagram.com/padmakruthi/vidyasetu
- Repository: https://github.com/padmakruthi/vidyasetu

## Overview

VidyaSetu is a scholarship and fellowship lifecycle portal for Scheduled Tribe applicants and MoTA officers. Applicants sign in, submit scheme applications and documents, then track status and resolve deficiencies; officers review submissions, while the selection committee records decisions and administrators manage rules and analytics. The README documents identity verification, document validation, data cross-checking, fund tracking and renewal monitoring, but sampled implementation does not establish those later integrations. The graph shows documented product areas and sampled API ownership; unsampled page wiring and storage internals are not inferred.

Main entry points: [`src/app/api/applications/route.ts`](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/route.ts) (Application intake), [`src/app/api/applications/[id]/action/route.ts`](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/%5Bid%5D/action/route.ts) (Review actions), [`src/lib/store.ts`](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/store.ts) (Application store), [`src/lib/mailer.ts`](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/mailer.ts) (Email notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_applicant["Applicant experience"]
  node_login_page["Login<br/>[page.tsx]"]
  node_signup_page["Signup<br/>[page.tsx]"]
  node_apply_page["Application wizard<br/>[page.tsx]"]
  node_track_page["Lifecycle tracking<br/>[page.tsx]"]
  node_portal_page["Student portal<br/>[page.tsx]"]
end

subgraph group_review["Review and selection"]
  node_action_api["Review actions<br/>[route.ts]"]
  node_scrutiny_queue["Scrutiny queue<br/>[page.tsx]"]
  node_review_page["Document review<br/>[page.tsx]"]
  node_selection_page["Merit selection<br/>[page.tsx]"]
end

subgraph group_admin["Administration"]
  node_rules_page["Scheme rules<br/>[page.tsx]"]
  node_analytics_page["Impact analytics<br/>[page.tsx]"]
end

subgraph group_services["Platform services"]
  node_applications_api["Application intake<br/>[route.ts]"]
  node_application_api["Application details<br/>[route.ts]"]
  node_ocr_engine["Document analysis<br/>[ocrEngine.ts]"]
  node_store["Application store<br/>[store.ts]"]
  node_mailer["Email notifications<br/>[mailer.ts]"]
  node_schemes_api["Scheme rules API<br/>[route.ts]"]
  node_analytics_api["Analytics API<br/>[route.ts]"]
  node_auth_login["Login API<br/>[route.ts]"]
  node_auth_signup["Signup API<br/>[route.ts]"]
  node_auth_me["Session lookup<br/>[route.ts]"]
  node_otp_api["OTP email API<br/>[route.ts]"]
  node_sessions["Session service<br/>[redisSession.ts]"]
  node_offices_api["Office lookup<br/>[route.ts]"]
end

node_applicant_actor(("Applicant"))
node_officer_actor(("MoTA officers"))
node_redis[("Redis")]
node_email_service["Email service"]

node_applicant_actor -->|"signs in"| node_login_page
node_applicant_actor -->|"creates account"| node_signup_page
node_applicant_actor -->|"submits application"| node_apply_page
node_applicant_actor -->|"tracks status"| node_track_page
node_applicant_actor -->|"resolves deficiencies"| node_portal_page
node_login_page -->|"authenticates"| node_auth_login
node_signup_page -->|"registers"| node_auth_signup
node_auth_login -->|"creates session"| node_sessions
node_auth_signup -->|"creates session"| node_sessions
node_auth_me -->|"reads session"| node_sessions
node_sessions -->|"reads and writes"| node_redis
node_otp_api -->|"sends OTP"| node_mailer
node_mailer -.->|"sends email"| node_email_service
node_apply_page -->|"submits form"| node_applications_api
node_applications_api -->|"computes metrics"| node_ocr_engine
node_applications_api -->|"creates application"| node_store
node_applications_api -->|"sends confirmation"| node_mailer
node_track_page -->|"loads application"| node_application_api
node_portal_page -->|"resubmits document"| node_action_api
node_scrutiny_queue -->|"lists applications"| node_applications_api
node_review_page -->|"loads application"| node_application_api
node_review_page -->|"records review"| node_action_api
node_officer_actor -->|"reviews queue"| node_scrutiny_queue
node_officer_actor -->|"inspects documents"| node_review_page
node_officer_actor -->|"evaluates merit"| node_selection_page
node_action_api -->|"updates case"| node_store
node_action_api -->|"sends status notices"| node_mailer
node_selection_page -->|"records decision"| node_action_api
node_rules_page -->|"updates rules"| node_schemes_api
node_schemes_api -->|"reads and updates schemes"| node_store
node_analytics_page -->|"loads metrics"| node_analytics_api
node_analytics_api -->|"reads applications"| node_store
node_offices_api -->|"reads office data"| node_store

click node_login_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/login/page.tsx"
click node_signup_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/signup/page.tsx"
click node_apply_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/apply/page.tsx"
click node_track_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/track/page.tsx"
click node_portal_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/portal/page.tsx"
click node_applications_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/route.ts"
click node_application_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/%5Bid%5D/route.ts"
click node_action_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/%5Bid%5D/action/route.ts"
click node_ocr_engine "https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/ocrEngine.ts"
click node_store "https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/store.ts"
click node_mailer "https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/mailer.ts"
click node_scrutiny_queue "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/page.tsx"
click node_review_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/review/%5Bid%5D/page.tsx"
click node_selection_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/selection/page.tsx"
click node_rules_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/rules/page.tsx"
click node_schemes_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/schemes/route.ts"
click node_analytics_page "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/analytics/page.tsx"
click node_analytics_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/analytics/route.ts"
click node_auth_login "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/login/route.ts"
click node_auth_signup "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/signup/route.ts"
click node_auth_me "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/me/route.ts"
click node_otp_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/send-otp/route.ts"
click node_sessions "https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/redisSession.ts"
click node_offices_api "https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/offices/route.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_login_page,node_signup_page,node_apply_page,node_track_page,node_portal_page toneBlue
class node_action_api,node_scrutiny_queue,node_review_page,node_selection_page,node_redis toneAmber
class node_rules_page,node_analytics_page toneMint
class node_applications_api,node_application_api,node_ocr_engine,node_store,node_mailer,node_schemes_api,node_analytics_api,node_auth_login,node_auth_signup,node_auth_me,node_otp_api,node_sessions,node_offices_api toneRose
class node_applicant_actor,node_officer_actor,node_email_service toneIndigo
```

## Components

### Applicant experience

- [Login](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`
- [Signup](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/signup/page.tsx): `src/app/signup/page.tsx`
- [Application wizard](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/apply/page.tsx): `src/app/apply/page.tsx`
- [Lifecycle tracking](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/track/page.tsx): `src/app/track/page.tsx`
- [Student portal](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/portal/page.tsx): `src/app/portal/page.tsx`

### Review and selection

- [Review actions](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/%5Bid%5D/action/route.ts): `src/app/api/applications/[id]/action/route.ts`
- [Scrutiny queue](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/page.tsx): `src/app/admin/page.tsx`
- [Document review](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/review/%5Bid%5D/page.tsx): `src/app/admin/review/[id]/page.tsx`
- [Merit selection](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/selection/page.tsx): `src/app/admin/selection/page.tsx`

### Administration

- [Scheme rules](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/rules/page.tsx): `src/app/admin/rules/page.tsx`
- [Impact analytics](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/admin/analytics/page.tsx): `src/app/admin/analytics/page.tsx`

### Platform services

- [Application intake](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/route.ts): `src/app/api/applications/route.ts`
- [Application details](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/applications/%5Bid%5D/route.ts): `src/app/api/applications/[id]/route.ts`
- [Document analysis](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/ocrEngine.ts): `src/lib/ocrEngine.ts`
- [Application store](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/store.ts): `src/lib/store.ts`
- [Email notifications](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/mailer.ts): `src/lib/mailer.ts`
- [Scheme rules API](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/schemes/route.ts): `src/app/api/schemes/route.ts`
- [Analytics API](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/analytics/route.ts): `src/app/api/analytics/route.ts`
- [Login API](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/login/route.ts): `src/app/api/auth/login/route.ts`
- [Signup API](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/signup/route.ts): `src/app/api/auth/signup/route.ts`
- [Session lookup](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/me/route.ts): `src/app/api/auth/me/route.ts`
- [OTP email API](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/auth/send-otp/route.ts): `src/app/api/auth/send-otp/route.ts`
- [Session service](https://github.com/padmakruthi/vidyasetu/blob/main/src/lib/redisSession.ts): `src/lib/redisSession.ts`
- [Office lookup](https://github.com/padmakruthi/vidyasetu/blob/main/src/app/api/offices/route.ts): `src/app/api/offices/route.ts`

### Other components

- **Applicant**
- **MoTA officers**
- **Redis**
- **Email service**

## Connections

- Applicant → Login: signs in
- Applicant → Signup: creates account
- Applicant → Application wizard: submits application
- Applicant → Lifecycle tracking: tracks status
- Applicant → Student portal: resolves deficiencies
- Login → Login API: authenticates
- Signup → Signup API: registers
- Login API → Session service: creates session
- Signup API → Session service: creates session
- Session lookup → Session service: reads session
- Session service → Redis: reads and writes
- OTP email API → Email notifications: sends OTP
- Email notifications → Email service: sends email
- Application wizard → Application intake: submits form
- Application intake → Document analysis: computes metrics
- Application intake → Application store: creates application
- Application intake → Email notifications: sends confirmation
- Lifecycle tracking → Application details: loads application
- Student portal → Review actions: resubmits document
- Scrutiny queue → Application intake: lists applications
- Document review → Application details: loads application
- Document review → Review actions: records review
- MoTA officers → Scrutiny queue: reviews queue
- MoTA officers → Document review: inspects documents
- MoTA officers → Merit selection: evaluates merit
- Review actions → Application store: updates case
- Review actions → Email notifications: sends status notices
- Merit selection → Review actions: records decision
- Scheme rules → Scheme rules API: updates rules
- Scheme rules API → Application store: reads and updates schemes
- Impact analytics → Analytics API: loads metrics
- Analytics API → Application store: reads applications
- Office lookup → Application store: reads office data
