# akshatthakur22/priya-sarv-utthan-ngo-webapp architecture

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

- Interactive diagram: https://gitdiagram.com/akshatthakur22/priya-sarv-utthan-ngo-webapp
- Repository: https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp

## Overview

Priya Sarv Utthan Seva Sansthan is an NGO outreach and operations platform. Community members browse organizational content, donate, apply for jobs, or submit contact and support requests; staff review submissions in a protected admin portal. Donation flows create and verify Razorpay payments, then record donations and issue receipts. Job and intake flows validate submissions, persist records, and send notifications. The graph preserves documented events, SEO/content, and admin capabilities. Some links rely on README architecture or source-index references; unsampled implementations are not assumed to have been inspected.

Main entry points: [`src/lib/email.ts`](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/email.ts) (Email delivery), [`src/app/api/jobs/route.ts`](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/jobs/route.ts) (Jobs API), [`src/lib/database.ts`](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/database.ts) (PostgreSQL access), [`src/app/api/support/route.ts`](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/support/route.ts) (Support API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_outreach["Public outreach"]
  node_site["Public site"]
  node_events["Events gallery<br/>[EventGallery.tsx]"]
  node_events_api["Events API<br/>[route.ts]"]
  node_event_service["Event service<br/>[event.service.ts]"]
  node_seo["SEO metadata<br/>[sitemap.ts]"]
end

subgraph group_intake["Community intake"]
  node_contact_form["Contact form<br/>[ContactForm.tsx]"]
  node_contact_api["Contact API<br/>[route.ts]"]
  node_contact_service["Contact service<br/>[contact.service.ts]"]
  node_support_form["Support intake"]
  node_support_api["Support API<br/>[route.ts]"]
  node_careers["Careers portal<br/>[CareersClient.tsx]"]
  node_jobs_api["Jobs API<br/>[route.ts]"]
  node_job_service["Job service<br/>[job.service.ts]"]
  node_resume_storage["Resume handling<br/>[resume-storage.ts]"]
end

subgraph group_giving["Donations"]
  node_donate["Donation checkout<br/>[DonateClient.tsx]"]
  node_payment_api["Payment routes<br/>[route.ts]"]
  node_payment_service["Payment service<br/>[payment.service.ts]"]
  node_razorpay["Razorpay"]
  node_receipt_api["Receipt viewer<br/>[route.ts]"]
  node_receipt_generator["Receipt generation"]
  node_receipt_storage["Receipt records<br/>[receipt-storage.ts]"]
end

subgraph group_operations["Staff operations"]
  node_admin_ui["Admin dashboard<br/>[page.tsx]"]
  node_admin_api["Admin APIs"]
  node_admin_auth["Admin authentication<br/>[admin-auth.ts]"]
end

subgraph group_shared["Shared services"]
  node_database[("PostgreSQL access<br/>[database.ts]")]
  node_email["Email delivery<br/>[email.ts]"]
  node_validation["Input validation<br/>[validation.ts]"]
  node_rate_limit["Rate limiting<br/>[rate-limit.ts]"]
end

node_visitors(("Community members"))

node_visitors -->|"browse"| node_site
node_visitors -->|"send inquiry"| node_contact_form
node_visitors -->|"request support"| node_support_form
node_visitors -->|"explore jobs"| node_careers
node_visitors -->|"contribute"| node_donate
node_site -->|"show events"| node_events
node_site -->|"publish metadata"| node_seo
node_events -.->|"fetch events"| node_events_api
node_events_api -->|"delegates"| node_event_service
node_contact_form -.->|"submit"| node_contact_api
node_contact_api -->|"delegates"| node_contact_service
node_contact_service -->|"stores inquiry"| node_database
node_contact_service -->|"sends notice"| node_email
node_support_form -.->|"submit case"| node_support_api
node_support_api -->|"stores case"| node_database
node_support_api -->|"alerts staff"| node_email
node_careers -.->|"browse and apply"| node_jobs_api
node_jobs_api -->|"delegates"| node_job_service
node_jobs_api -->|"parses upload"| node_resume_storage
node_jobs_api -->|"notifies staff"| node_email
node_job_service -->|"reads and writes"| node_database
node_job_service -->|"confirms application"| node_email
node_job_service -->|"uses resume data"| node_resume_storage
node_donate -.->|"start and verify"| node_payment_api
node_payment_api -->|"delegates"| node_payment_service
node_payment_service -->|"creates and verifies"| node_razorpay
node_payment_service -->|"records donation"| node_database
node_payment_service -.->|"issues receipt"| node_email
node_receipt_api -->|"renders receipt"| node_receipt_generator
node_receipt_api -->|"retrieves receipt"| node_receipt_storage
node_email -->|"builds receipt HTML"| node_receipt_generator
node_email -->|"stores receipt"| node_receipt_storage
node_admin_ui -->|"manages records"| node_admin_api
node_admin_api -.->|"checks credentials"| node_admin_auth
node_admin_api -->|"reads submissions"| node_database
node_admin_api -->|"manages applications"| node_job_service
node_contact_api -->|"validates input"| node_validation
node_support_api -->|"validates input"| node_validation
node_jobs_api -->|"validates input"| node_validation
node_payment_api -->|"validates input"| node_validation
node_contact_api -->|"limits requests"| node_rate_limit
node_support_api -->|"limits requests"| node_rate_limit
node_jobs_api -->|"limits requests"| node_rate_limit
node_payment_api -->|"limits requests"| node_rate_limit
node_event_service -->|"reads events"| node_database

click node_site "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/tree/main/src/app"
click node_events "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/events/EventGallery.tsx"
click node_events_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/events/route.ts"
click node_event_service "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/event.service.ts"
click node_seo "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/sitemap.ts"
click node_contact_form "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/forms/ContactForm.tsx"
click node_contact_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/contact/route.ts"
click node_contact_service "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/contact.service.ts"
click node_support_form "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/forms/LegalIntakeForm.tsx"
click node_support_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/support/route.ts"
click node_careers "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/careers/CareersClient.tsx"
click node_jobs_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/jobs/route.ts"
click node_job_service "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/job.service.ts"
click node_resume_storage "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/resume-storage.ts"
click node_donate "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/donate/DonateClient.tsx"
click node_payment_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/razorpay/order/route.ts"
click node_payment_service "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/payment.service.ts"
click node_receipt_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/donation/receipt/%5Bid%5D/route.ts"
click node_receipt_generator "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/receipt-generator.ts"
click node_receipt_storage "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/receipt-storage.ts"
click node_admin_ui "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/admin/page.tsx"
click node_admin_api "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/tree/main/src/app/api/admin"
click node_admin_auth "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/admin-auth.ts"
click node_database "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/database.ts"
click node_email "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/email.ts"
click node_validation "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/validation.ts"
click node_rate_limit "https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/rate-limit.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_site,node_events,node_events_api,node_event_service,node_seo toneBlue
class node_contact_form,node_contact_api,node_contact_service,node_support_form,node_support_api,node_careers,node_jobs_api,node_job_service,node_resume_storage toneAmber
class node_donate,node_payment_api,node_payment_service,node_razorpay,node_receipt_api,node_receipt_generator,node_receipt_storage toneMint
class node_admin_ui,node_admin_api,node_admin_auth toneRose
class node_database,node_email,node_validation,node_rate_limit,node_visitors toneIndigo
```

## Components

### Public outreach

- [Public site](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/tree/main/src/app): `src/app`
- [Events gallery](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/events/EventGallery.tsx): `src/components/events/EventGallery.tsx`
- [Events API](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/events/route.ts): `src/app/api/events/route.ts`
- [Event service](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/event.service.ts): `src/services/event.service.ts`
- [SEO metadata](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/sitemap.ts): `src/app/sitemap.ts`

### Community intake

- [Contact form](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/forms/ContactForm.tsx): `src/components/forms/ContactForm.tsx`
- [Contact API](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/contact/route.ts): `src/app/api/contact/route.ts`
- [Contact service](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/contact.service.ts): `src/services/contact.service.ts`
- [Support intake](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/components/forms/LegalIntakeForm.tsx): `src/components/forms/LegalIntakeForm.tsx`
- [Support API](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/support/route.ts): `src/app/api/support/route.ts`
- [Careers portal](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/careers/CareersClient.tsx): `src/app/careers/CareersClient.tsx`
- [Jobs API](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/jobs/route.ts): `src/app/api/jobs/route.ts`
- [Job service](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/job.service.ts): `src/services/job.service.ts`
- [Resume handling](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/resume-storage.ts): `src/lib/resume-storage.ts`

### Donations

- [Donation checkout](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/donate/DonateClient.tsx): `src/app/donate/DonateClient.tsx`
- [Payment routes](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/razorpay/order/route.ts): `src/app/api/razorpay/order/route.ts`
- [Payment service](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/services/payment.service.ts): `src/services/payment.service.ts`
- **Razorpay**
- [Receipt viewer](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/api/donation/receipt/%5Bid%5D/route.ts): `src/app/api/donation/receipt/[id]/route.ts`
- [Receipt generation](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/receipt-generator.ts): `src/lib/receipt-generator.ts`
- [Receipt records](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/receipt-storage.ts): `src/lib/receipt-storage.ts`

### Staff operations

- [Admin dashboard](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/app/admin/page.tsx): `src/app/admin/page.tsx`
- [Admin APIs](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/tree/main/src/app/api/admin): `src/app/api/admin`
- [Admin authentication](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/admin-auth.ts): `src/lib/admin-auth.ts`

### Shared services

- [PostgreSQL access](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/database.ts): `src/lib/database.ts`
- [Email delivery](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/email.ts): `src/lib/email.ts`
- [Input validation](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/validation.ts): `src/lib/validation.ts`
- [Rate limiting](https://github.com/akshatthakur22/priya-sarv-utthan-ngo-webapp/blob/main/src/lib/rate-limit.ts): `src/lib/rate-limit.ts`

### Other components

- **Community members**

## Connections

- Community members → Public site: browse (evidence: `README.md`)
- Community members → Contact form: send inquiry (evidence: `README.md`)
- Community members → Support intake: request support (evidence: `README.md`)
- Community members → Careers portal: explore jobs (evidence: `README.md`)
- Community members → Donation checkout: contribute (evidence: `README.md`)
- Public site → Events gallery: show events (evidence: `README.md`)
- Public site → SEO metadata: publish metadata (evidence: `README.md`)
- Events gallery → Events API: fetch events
- Events API → Event service: delegates (evidence: `src/app/api/events/route.ts`)
- Contact form → Contact API: submit
- Contact API → Contact service: delegates (evidence: `src/app/api/contact/route.ts`)
- Contact service → PostgreSQL access: stores inquiry (evidence: `src/services/contact.service.ts`)
- Contact service → Email delivery: sends notice (evidence: `src/services/contact.service.ts`)
- Support intake → Support API: submit case
- Support API → PostgreSQL access: stores case (evidence: `src/app/api/support/route.ts`)
- Support API → Email delivery: alerts staff (evidence: `src/app/api/support/route.ts`)
- Careers portal → Jobs API: browse and apply
- Jobs API → Job service: delegates (evidence: `src/app/api/jobs/route.ts`)
- Jobs API → Resume handling: parses upload (evidence: `src/app/api/jobs/route.ts`)
- Jobs API → Email delivery: notifies staff (evidence: `src/app/api/jobs/route.ts`)
- Job service → PostgreSQL access: reads and writes (evidence: `src/services/job.service.ts`)
- Job service → Email delivery: confirms application (evidence: `src/services/job.service.ts`)
- Job service → Resume handling: uses resume data (evidence: `src/services/job.service.ts`)
- Donation checkout → Payment routes: start and verify
- Payment routes → Payment service: delegates (evidence: `src/app/api/razorpay/order/route.ts`)
- Payment service → Razorpay: creates and verifies (evidence: `src/services/payment.service.ts`)
- Payment service → PostgreSQL access: records donation (evidence: `src/services/payment.service.ts`)
- Payment service → Email delivery: issues receipt (evidence: `README.md`)
- Receipt viewer → Receipt generation: renders receipt (evidence: `src/app/api/donation/receipt/[id]/route.ts`)
- Receipt viewer → Receipt records: retrieves receipt (evidence: `src/app/api/donation/receipt/[id]/route.ts`)
- Email delivery → Receipt generation: builds receipt HTML (evidence: `src/lib/email.ts`)
- Email delivery → Receipt records: stores receipt (evidence: `src/lib/email.ts`)
- Admin dashboard → Admin APIs: manages records (evidence: `README.md`)
- Admin APIs → Admin authentication: checks credentials (evidence: `src/app/api/admin/support-cases/route.ts`)
- Admin APIs → PostgreSQL access: reads submissions (evidence: `README.md`)
- Admin APIs → Job service: manages applications (evidence: `README.md`)
- Contact API → Input validation: validates input (evidence: `src/app/api/contact/route.ts`)
- Support API → Input validation: validates input (evidence: `src/app/api/support/route.ts`)
- Jobs API → Input validation: validates input (evidence: `src/app/api/jobs/route.ts`)
- Payment routes → Input validation: validates input (evidence: `src/app/api/razorpay/order/route.ts`)
- Contact API → Rate limiting: limits requests (evidence: `src/app/api/contact/route.ts`)
- Support API → Rate limiting: limits requests (evidence: `src/app/api/support/route.ts`)
- Jobs API → Rate limiting: limits requests (evidence: `src/app/api/jobs/route.ts`)
- Payment routes → Rate limiting: limits requests (evidence: `src/app/api/razorpay/order/route.ts`)
- Event service → PostgreSQL access: reads events (evidence: `src/services/event.service.ts`)
