# rishat8903/health-triage-ai architecture

> Architecture diagram of the GitHub repository rishat8903/health-triage-ai, 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/rishat8903/health-triage-ai
- Repository: https://github.com/rishat8903/health-triage-ai

## Overview

This is a bilingual health-guidance web app for symptom triage, lab-report interpretation, and conversational mental support, with local and account-backed health records. The main workflow is a user entering symptoms or uploading a report, receiving structured guidance, then optionally saving it or creating a doctor-facing summary. The map also includes authentication, voice, and language support. The README is empty; frontend-to-API links not shown in excerpts are dashed and unverified.

Main entry points: [`app/api/triage/assess/route.ts`](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/triage/assess/route.ts) (Triage assessment), [`app/triage/page.tsx`](https://github.com/rishat8903/health-triage-ai/blob/main/app/triage/page.tsx) (Symptom triage), [`app/lab/page.tsx`](https://github.com/rishat8903/health-triage-ai/blob/main/app/lab/page.tsx) (Lab report decoder), [`lib/records.ts`](https://github.com/rishat8903/health-triage-ai/blob/main/lib/records.ts) (Local record store)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_home["Home and navigation<br/>[page.tsx]"]
  node_triage_ui["Symptom triage<br/>[page.tsx]"]
  node_lab_ui["Lab report decoder<br/>[page.tsx]"]
  node_companion_ui["Voice companion<br/>[page.tsx]"]
  node_doctor_sheet["Doctor summary<br/>[page.tsx]"]
  node_vault_ui["Health vault<br/>[page.tsx]"]
  node_auth_ui["Sign-in and registration<br/>[page.tsx]"]
  node_register_ui["Registration page<br/>[page.tsx]"]
end

subgraph group_guidance["Health guidance"]
  node_triage_questions["Follow-up questions<br/>[route.ts]"]
  node_triage_assess["Triage assessment<br/>[route.ts]"]
  node_lab_analyze["Report analysis<br/>[route.ts]"]
  node_companion_api["Companion responses<br/>[route.ts]"]
  node_safety["Safety rules<br/>[safety.ts]"]
  node_fallbacks["Guidance fallbacks<br/>[fallbacks.ts]"]
  node_intake["Intake formatting<br/>[intake.ts]"]
end

subgraph group_services["AI and voice services"]
  node_gemini["Gemini client<br/>[gemini.ts]"]
  node_prompts["Clinical prompts<br/>[prompts.ts]"]
  node_tts["Speech synthesis<br/>[tts.ts]"]
  node_voice_agent["Voice agent<br/>[voiceAgent.ts]"]
  node_language["Bilingual interface<br/>[i18n.tsx]"]
end

subgraph group_identity["Identity and records"]
  node_local_records[("Local record store<br/>[records.ts]")]
  node_records_api["Cloud records API<br/>[route.ts]"]
  node_health_record["Health record model<br/>[HealthRecord.ts]"]
  node_auth_api["Authentication API<br/>[route.ts]"]
  node_auth_config["Auth configuration<br/>[auth.ts]"]
  node_user_model["User model<br/>[User.ts]"]
end

node_visitor(("Health app user"))
node_database[("MongoDB")]

node_visitor -->|"opens"| node_home
node_visitor -->|"enters symptoms"| node_triage_ui
node_visitor -->|"uploads report"| node_lab_ui
node_visitor -->|"starts conversation"| node_companion_ui
node_visitor -->|"signs in"| node_auth_ui
node_home -->|"uses translations"| node_language
node_triage_ui -.->|"requests questions"| node_triage_questions
node_triage_ui -.->|"requests assessment"| node_triage_assess
node_triage_ui -->|"saves result"| node_local_records
node_triage_ui -->|"reads result aloud"| node_tts
node_lab_ui -.->|"requests analysis"| node_lab_analyze
node_lab_ui -.->|"saves result"| node_local_records
node_lab_ui -->|"reads result aloud"| node_tts
node_lab_ui -.->|"uses translations"| node_language
node_companion_ui -.->|"sends conversation"| node_companion_api
node_companion_ui -->|"uses voice agent"| node_voice_agent
node_companion_ui -->|"uses speech"| node_tts
node_triage_assess -->|"checks safety"| node_safety
node_triage_assess -->|"formats intake"| node_intake
node_triage_assess -->|"uses fallback"| node_fallbacks
node_triage_assess -->|"requests assessment"| node_gemini
node_triage_assess -->|"uses assessment prompt"| node_prompts
node_triage_questions -->|"requests questions"| node_gemini
node_triage_questions -->|"uses fallback"| node_fallbacks
node_triage_questions -->|"formats intake"| node_intake
node_lab_analyze -->|"requests analysis"| node_gemini
node_lab_analyze -->|"uses lab prompt"| node_prompts
node_companion_api -->|"requests reply"| node_gemini
node_companion_api -->|"uses companion prompt"| node_prompts
node_companion_api -->|"checks safety"| node_safety
node_doctor_sheet -->|"reads saved results"| node_local_records
node_vault_ui -->|"reads local records"| node_local_records
node_local_records -->|"sends cloud record"| node_records_api
node_records_api -->|"checks session"| node_auth_config
node_records_api -->|"reads and writes"| node_health_record
node_records_api -->|"persists records"| node_database
node_register_ui -.->|"registers account"| node_auth_api
node_auth_api -->|"connects to"| node_database
node_auth_api -->|"creates user"| node_user_model
node_auth_config -->|"connects to"| node_database
node_auth_config -->|"uses user model"| node_user_model

click node_home "https://github.com/rishat8903/health-triage-ai/blob/main/app/page.tsx"
click node_triage_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/triage/page.tsx"
click node_lab_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/lab/page.tsx"
click node_companion_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/companion/page.tsx"
click node_doctor_sheet "https://github.com/rishat8903/health-triage-ai/blob/main/app/summary/page.tsx"
click node_vault_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/vault/page.tsx"
click node_auth_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/(auth)/login/page.tsx"
click node_triage_questions "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/triage/questions/route.ts"
click node_triage_assess "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/triage/assess/route.ts"
click node_lab_analyze "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/lab/analyze/route.ts"
click node_companion_api "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/companion/route.ts"
click node_safety "https://github.com/rishat8903/health-triage-ai/blob/main/lib/safety.ts"
click node_fallbacks "https://github.com/rishat8903/health-triage-ai/blob/main/lib/fallbacks.ts"
click node_intake "https://github.com/rishat8903/health-triage-ai/blob/main/lib/intake.ts"
click node_gemini "https://github.com/rishat8903/health-triage-ai/blob/main/lib/gemini.ts"
click node_prompts "https://github.com/rishat8903/health-triage-ai/blob/main/lib/prompts.ts"
click node_tts "https://github.com/rishat8903/health-triage-ai/blob/main/lib/tts.ts"
click node_voice_agent "https://github.com/rishat8903/health-triage-ai/blob/main/lib/voiceAgent.ts"
click node_language "https://github.com/rishat8903/health-triage-ai/blob/main/lib/i18n.tsx"
click node_local_records "https://github.com/rishat8903/health-triage-ai/blob/main/lib/records.ts"
click node_records_api "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/records/route.ts"
click node_health_record "https://github.com/rishat8903/health-triage-ai/blob/main/models/HealthRecord.ts"
click node_auth_api "https://github.com/rishat8903/health-triage-ai/blob/main/app/api/auth/register/route.ts"
click node_auth_config "https://github.com/rishat8903/health-triage-ai/blob/main/auth.ts"
click node_user_model "https://github.com/rishat8903/health-triage-ai/blob/main/models/User.ts"
click node_register_ui "https://github.com/rishat8903/health-triage-ai/blob/main/app/(auth)/register/page.tsx"

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_home,node_triage_ui,node_lab_ui,node_companion_ui,node_doctor_sheet,node_vault_ui,node_auth_ui,node_register_ui,node_visitor toneBlue
class node_triage_questions,node_triage_assess,node_lab_analyze,node_companion_api,node_safety,node_fallbacks,node_intake,node_database toneAmber
class node_gemini,node_prompts,node_tts,node_voice_agent,node_language toneMint
class node_local_records,node_records_api,node_health_record,node_auth_api,node_auth_config,node_user_model toneRose
```

## Components

### User experience

- [Home and navigation](https://github.com/rishat8903/health-triage-ai/blob/main/app/page.tsx): `app/page.tsx`
- [Symptom triage](https://github.com/rishat8903/health-triage-ai/blob/main/app/triage/page.tsx): `app/triage/page.tsx`
- [Lab report decoder](https://github.com/rishat8903/health-triage-ai/blob/main/app/lab/page.tsx): `app/lab/page.tsx`
- [Voice companion](https://github.com/rishat8903/health-triage-ai/blob/main/app/companion/page.tsx): `app/companion/page.tsx`
- [Doctor summary](https://github.com/rishat8903/health-triage-ai/blob/main/app/summary/page.tsx): `app/summary/page.tsx`
- [Health vault](https://github.com/rishat8903/health-triage-ai/blob/main/app/vault/page.tsx): `app/vault/page.tsx`
- [Sign-in and registration](https://github.com/rishat8903/health-triage-ai/blob/main/app/(auth)/login/page.tsx): `app/(auth)/login/page.tsx`
- [Registration page](https://github.com/rishat8903/health-triage-ai/blob/main/app/(auth)/register/page.tsx): `app/(auth)/register/page.tsx`

### Health guidance

- [Follow-up questions](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/triage/questions/route.ts): `app/api/triage/questions/route.ts`
- [Triage assessment](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/triage/assess/route.ts): `app/api/triage/assess/route.ts`
- [Report analysis](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/lab/analyze/route.ts): `app/api/lab/analyze/route.ts`
- [Companion responses](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/companion/route.ts): `app/api/companion/route.ts`
- [Safety rules](https://github.com/rishat8903/health-triage-ai/blob/main/lib/safety.ts): `lib/safety.ts`
- [Guidance fallbacks](https://github.com/rishat8903/health-triage-ai/blob/main/lib/fallbacks.ts): `lib/fallbacks.ts`
- [Intake formatting](https://github.com/rishat8903/health-triage-ai/blob/main/lib/intake.ts): `lib/intake.ts`

### AI and voice services

- [Gemini client](https://github.com/rishat8903/health-triage-ai/blob/main/lib/gemini.ts): `lib/gemini.ts`
- [Clinical prompts](https://github.com/rishat8903/health-triage-ai/blob/main/lib/prompts.ts): `lib/prompts.ts`
- [Speech synthesis](https://github.com/rishat8903/health-triage-ai/blob/main/lib/tts.ts): `lib/tts.ts`
- [Voice agent](https://github.com/rishat8903/health-triage-ai/blob/main/lib/voiceAgent.ts): `lib/voiceAgent.ts`
- [Bilingual interface](https://github.com/rishat8903/health-triage-ai/blob/main/lib/i18n.tsx): `lib/i18n.tsx`

### Identity and records

- [Local record store](https://github.com/rishat8903/health-triage-ai/blob/main/lib/records.ts): `lib/records.ts`
- [Cloud records API](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/records/route.ts): `app/api/records/route.ts`
- [Health record model](https://github.com/rishat8903/health-triage-ai/blob/main/models/HealthRecord.ts): `models/HealthRecord.ts`
- [Authentication API](https://github.com/rishat8903/health-triage-ai/blob/main/app/api/auth/register/route.ts): `app/api/auth/register/route.ts`
- [Auth configuration](https://github.com/rishat8903/health-triage-ai/blob/main/auth.ts): `auth.ts`
- [User model](https://github.com/rishat8903/health-triage-ai/blob/main/models/User.ts): `models/User.ts`

### Other components

- **Health app user**
- **MongoDB**

## Connections

- Health app user → Home and navigation: opens (evidence: `app/page.tsx`)
- Health app user → Symptom triage: enters symptoms (evidence: `app/triage/page.tsx`)
- Health app user → Lab report decoder: uploads report (evidence: `app/lab/page.tsx`)
- Health app user → Voice companion: starts conversation (evidence: `app/companion/page.tsx`)
- Health app user → Sign-in and registration: signs in (evidence: `app/(auth)/login/page.tsx`)
- Home and navigation → Bilingual interface: uses translations (evidence: `app/page.tsx`)
- Symptom triage → Follow-up questions: requests questions
- Symptom triage → Triage assessment: requests assessment
- Symptom triage → Local record store: saves result (evidence: `app/triage/page.tsx`)
- Symptom triage → Speech synthesis: reads result aloud (evidence: `app/triage/page.tsx`)
- Lab report decoder → Report analysis: requests analysis
- Lab report decoder → Local record store: saves result (evidence: `app/lab/page.tsx`)
- Lab report decoder → Speech synthesis: reads result aloud (evidence: `app/lab/page.tsx`)
- Lab report decoder → Bilingual interface: uses translations (evidence: `app/lab/page.tsx`)
- Voice companion → Companion responses: sends conversation
- Voice companion → Voice agent: uses voice agent (evidence: `app/companion/page.tsx`)
- Voice companion → Speech synthesis: uses speech (evidence: `app/companion/page.tsx`)
- Triage assessment → Safety rules: checks safety (evidence: `app/api/triage/assess/route.ts`)
- Triage assessment → Intake formatting: formats intake (evidence: `app/api/triage/assess/route.ts`)
- Triage assessment → Guidance fallbacks: uses fallback (evidence: `app/api/triage/assess/route.ts`)
- Triage assessment → Gemini client: requests assessment (evidence: `app/api/triage/assess/route.ts`)
- Triage assessment → Clinical prompts: uses assessment prompt (evidence: `app/api/triage/assess/route.ts`)
- Follow-up questions → Gemini client: requests questions (evidence: `app/api/triage/questions/route.ts`)
- Follow-up questions → Guidance fallbacks: uses fallback (evidence: `app/api/triage/questions/route.ts`)
- Follow-up questions → Intake formatting: formats intake (evidence: `app/api/triage/questions/route.ts`)
- Report analysis → Gemini client: requests analysis (evidence: `app/api/lab/analyze/route.ts`)
- Report analysis → Clinical prompts: uses lab prompt (evidence: `app/api/lab/analyze/route.ts`)
- Companion responses → Gemini client: requests reply (evidence: `app/api/companion/route.ts`)
- Companion responses → Clinical prompts: uses companion prompt (evidence: `app/api/companion/route.ts`)
- Companion responses → Safety rules: checks safety (evidence: `app/api/companion/route.ts`)
- Doctor summary → Local record store: reads saved results (evidence: `app/summary/page.tsx`)
- Health vault → Local record store: reads local records (evidence: `app/vault/page.tsx`)
- Local record store → Cloud records API: sends cloud record (evidence: `lib/records.ts`)
- Cloud records API → Auth configuration: checks session (evidence: `app/api/records/route.ts`)
- Cloud records API → Health record model: reads and writes (evidence: `app/api/records/route.ts`)
- Cloud records API → MongoDB: persists records (evidence: `app/api/records/route.ts`)
- Registration page → Authentication API: registers account
- Authentication API → MongoDB: connects to (evidence: `app/api/auth/register/route.ts`)
- Authentication API → User model: creates user (evidence: `app/api/auth/register/route.ts`)
- Auth configuration → MongoDB: connects to (evidence: `auth.ts`)
- Auth configuration → User model: uses user model (evidence: `auth.ts`)
