# eswereddy/am-i-elegible-welfareschemes-openai architecture

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

- Interactive diagram: https://gitdiagram.com/eswereddy/am-i-elegible-welfareschemes-openai
- Repository: https://github.com/eswereddy/am-i-elegible-welfareschemes-openai

## Overview

The product is a multilingual Indian welfare-scheme discovery app: citizens provide a profile, receive deterministic eligibility results, then get explanations and practical follow-up tools. The API server owns request routing and delegates to the rule/catalog, persistence, and feature modules. README and sampled source support the main workflow and AI responsibilities; some feature wiring and frontend internals are not shown, so uncertain links are omitted.

Main entry points: [`server.js`](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/server.js) (API server), [`ai-provider.js`](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-provider.js) (AI provider client), [`public/index.html`](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/public/index.html) (Web app), [`schemes.js`](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/schemes.js) (Scheme catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Citizen experience"]
  node_web["Web app<br/>[index.html]"]
  node_offline["Offline shell<br/>[service-worker.js]"]
  node_pdf["PDF report<br/>[pdf-report.js]"]
  node_qr["QR report<br/>[qrcode-report.js]"]
  node_reminder["Follow-up reminder<br/>[reminder.js]"]
end

subgraph group_eligibility["Eligibility core"]
  node_validate["Input validation<br/>[validate.js]"]
  node_schemes["Scheme catalog<br/>[schemes.js]"]
  node_rules["Rule interpreter<br/>[rule-engine.js]"]
end

subgraph group_assistance["Guidance features"]
  node_parser["Profile parser<br/>[profile-parser.js]"]
  node_summary["Result summary<br/>[ai-summary.js]"]
  node_action["Action plan<br/>[action-plan.js]"]
  node_chat["Scheme chat<br/>[chat-assistant.js]"]
  node_agent["Match investigator"]
  node_booster["Profile booster<br/>[profile-booster.js]"]
  node_checklist["Document checklist"]
end

subgraph group_platform["API and records"]
  node_server["API server<br/>[server.js]"]
  node_db[("SQLite records<br/>[index.js]")]
  node_provider["AI provider client<br/>[ai-provider.js]"]
  node_cache[("AI cache<br/>[ai-cache.js]")]
end

node_citizen(("Citizen"))
node_ai_services{{"AI providers"}}

node_citizen -->|"uses"| node_web
node_web -->|"requests checks"| node_server
node_web -.->|"loads cached shell"| node_offline
node_web -.->|"checks offline"| node_schemes
node_server -->|"sanitizes input"| node_validate
node_server -->|"requests verdicts"| node_schemes
node_schemes -->|"evaluates rules"| node_rules
node_server -->|"reads and logs"| node_db
node_db -->|"seeds metadata"| node_schemes
node_server -->|"parses profile"| node_parser
node_parser -->|"generates fields"| node_provider
node_server -->|"requests explanation"| node_summary
node_summary -->|"generates text"| node_provider
node_server -->|"requests next steps"| node_action
node_action -->|"generates plan"| node_provider
node_server -->|"routes questions"| node_chat
node_chat -->|"generates answer"| node_provider
node_server -->|"routes investigation"| node_agent
node_agent -->|"runs tool loop"| node_provider
node_server -->|"requests missing fields"| node_booster
node_booster -->|"generates guidance"| node_provider
node_server -->|"builds checklist"| node_checklist
node_checklist -->|"generates document tips"| node_provider
node_server -->|"builds report"| node_pdf
node_server -->|"creates QR report"| node_qr
node_server -->|"creates reminder"| node_reminder
node_provider -->|"calls with failover"| node_ai_services
node_summary -->|"reads and writes"| node_cache
node_agent -->|"reads and writes"| node_cache
node_booster -->|"reads and writes"| node_cache
node_checklist -->|"reads and writes"| node_cache

click node_web "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/public/index.html"
click node_offline "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/service-worker.js"
click node_server "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/server.js"
click node_validate "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/validate.js"
click node_schemes "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/schemes.js"
click node_rules "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/rule-engine.js"
click node_db "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/db/index.js"
click node_parser "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/profile-parser.js"
click node_summary "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-summary.js"
click node_action "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/action-plan.js"
click node_chat "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/chat-assistant.js"
click node_agent "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/eligibility-agent.js"
click node_booster "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/profile-booster.js"
click node_checklist "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/document-checklist.js"
click node_pdf "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/pdf-report.js"
click node_qr "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/qrcode-report.js"
click node_reminder "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/reminder.js"
click node_provider "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-provider.js"
click node_cache "https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-cache.js"

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_web,node_offline,node_pdf,node_qr,node_reminder toneBlue
class node_validate,node_schemes,node_rules toneAmber
class node_parser,node_summary,node_action,node_chat,node_agent,node_booster,node_checklist toneMint
class node_server,node_db,node_provider,node_cache toneRose
class node_citizen,node_ai_services toneIndigo
```

## Components

### Citizen experience

- [Web app](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/public/index.html): `public/index.html`
- [Offline shell](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/service-worker.js): `service-worker.js`
- [PDF report](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/pdf-report.js): `pdf-report.js`
- [QR report](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/qrcode-report.js): `qrcode-report.js`
- [Follow-up reminder](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/reminder.js): `reminder.js`

### Eligibility core

- [Input validation](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/validate.js): `validate.js`
- [Scheme catalog](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/schemes.js): `schemes.js`
- [Rule interpreter](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/rule-engine.js): `rule-engine.js`

### Guidance features

- [Profile parser](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/profile-parser.js): `profile-parser.js`
- [Result summary](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-summary.js): `ai-summary.js`
- [Action plan](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/action-plan.js): `action-plan.js`
- [Scheme chat](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/chat-assistant.js): `chat-assistant.js`
- [Match investigator](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/eligibility-agent.js): `eligibility-agent.js`
- [Profile booster](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/profile-booster.js): `profile-booster.js`
- [Document checklist](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/document-checklist.js): `document-checklist.js`

### API and records

- [API server](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/server.js): `server.js`
- [SQLite records](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/db/index.js): `db/index.js`
- [AI provider client](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-provider.js): `ai-provider.js`
- [AI cache](https://github.com/eswereddy/am-i-elegible-welfareschemes-openai/blob/main/ai-cache.js): `ai-cache.js`

### Other components

- **Citizen**
- **AI providers**

## Connections

- Citizen → Web app: uses
- Web app → API server: requests checks
- Web app → Offline shell: loads cached shell
- Web app → Scheme catalog: checks offline
- API server → Input validation: sanitizes input
- API server → Scheme catalog: requests verdicts
- Scheme catalog → Rule interpreter: evaluates rules
- API server → SQLite records: reads and logs
- SQLite records → Scheme catalog: seeds metadata
- API server → Profile parser: parses profile
- Profile parser → AI provider client: generates fields
- API server → Result summary: requests explanation
- Result summary → AI provider client: generates text
- API server → Action plan: requests next steps
- Action plan → AI provider client: generates plan
- API server → Scheme chat: routes questions
- Scheme chat → AI provider client: generates answer
- API server → Match investigator: routes investigation
- Match investigator → AI provider client: runs tool loop
- API server → Profile booster: requests missing fields
- Profile booster → AI provider client: generates guidance
- API server → Document checklist: builds checklist
- Document checklist → AI provider client: generates document tips
- API server → PDF report: builds report
- API server → QR report: creates QR report
- API server → Follow-up reminder: creates reminder
- AI provider client → AI providers: calls with failover
- Result summary → AI cache: reads and writes
- Match investigator → AI cache: reads and writes
- Profile booster → AI cache: reads and writes
- Document checklist → AI cache: reads and writes
