# cavlord/status-gizi-puga architecture

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

- Interactive diagram: https://gitdiagram.com/cavlord/status-gizi-puga
- Repository: https://github.com/cavlord/status-gizi-puga

## Overview

This is a web dashboard for monitoring and reporting UPT Puskesmas Pulau Gadang operational and child-nutrition data. Users authenticate, then access dashboard, records, and analytics views with filtering and visual summaries; administrators also have user-management and spreadsheet-import capabilities. The graph reflects documented routes and sampled data/auth/import behavior. Other page internals and the implementation of Google Sheets data fetching were not sampled, so their wiring is kept conservative.

Main entry points: [`src/App.tsx`](https://github.com/cavlord/status-gizi-puga/blob/main/src/App.tsx) (Routes and providers), [`src/contexts/AuthContext.tsx`](https://github.com/cavlord/status-gizi-puga/blob/main/src/contexts/AuthContext.tsx) (Auth state), [`src/pages/UserManagement.tsx`](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/UserManagement.tsx) (User management), [`supabase/functions/import-from-sheets/index.ts`](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/import-from-sheets/index.ts) (Spreadsheet import)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application shell"]
  node_main["React entry<br/>[main.tsx]"]
  node_appshell["Routes and providers<br/>[App.tsx]"]
  node_layout["Shared layout<br/>[AppLayout.tsx]"]
  node_settings["Application settings<br/>[Settings.tsx]"]
end

subgraph group_data["Health data views"]
  node_dashboard["Dashboard summaries<br/>[Dashboard.tsx]"]
  node_records["Record search<br/>[DataRecords.tsx]"]
  node_analytics["Health analytics<br/>[Analytics.tsx]"]
  node_datactx["Health data state<br/>[DataContext.tsx]"]
  node_sheetslib["Sheets data access<br/>[googleSheets.ts]"]
end

subgraph group_identity["Authentication"]
  node_authpage["Sign-in and registration<br/>[Auth.tsx]"]
  node_authcontext["Auth state<br/>[AuthContext.tsx]"]
  node_loginfn["Login endpoint<br/>[index.ts]"]
  node_registerfn["Registration endpoint<br/>[index.ts]"]
  node_otpfn["OTP verification<br/>[index.ts]"]
  node_resendfn["OTP resend<br/>[index.ts]"]
end

subgraph group_admin["Administration"]
  node_users["User management<br/>[UserManagement.tsx]"]
  node_adminget["List users<br/>[index.ts]"]
  node_adminupdate["Update user<br/>[index.ts]"]
  node_importfn["Spreadsheet import<br/>[index.ts]"]
end

subgraph group_backend["External systems"]
  node_sheets["Google Sheets"]
  node_database[("Supabase database")]
end

node_user(("Dashboard user"))

node_user -->|"opens"| node_main
node_main -->|"renders"| node_appshell
node_appshell -->|"provides auth"| node_authcontext
node_appshell -->|"provides data"| node_datactx
node_appshell -->|"routes auth"| node_authpage
node_appshell -->|"wraps protected views"| node_layout
node_appshell -->|"routes dashboard"| node_dashboard
node_appshell -->|"routes records"| node_records
node_appshell -->|"routes analytics"| node_analytics
node_appshell -->|"routes settings"| node_settings
node_appshell -->|"routes users"| node_users
node_authpage -->|"requests auth"| node_authcontext
node_authcontext -->|"calls login"| node_loginfn
node_authcontext -->|"calls registration"| node_registerfn
node_authcontext -->|"calls verification"| node_otpfn
node_authcontext -->|"calls resend"| node_resendfn
node_datactx -->|"fetches records"| node_sheetslib
node_users -->|"requests users"| node_adminget
node_users -->|"updates users"| node_adminupdate
node_importfn -->|"reads spreadsheet"| node_sheets
node_importfn -->|"replaces records"| node_database

click node_main "https://github.com/cavlord/status-gizi-puga/blob/main/src/main.tsx"
click node_appshell "https://github.com/cavlord/status-gizi-puga/blob/main/src/App.tsx"
click node_layout "https://github.com/cavlord/status-gizi-puga/blob/main/src/components/AppLayout.tsx"
click node_authpage "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Auth.tsx"
click node_authcontext "https://github.com/cavlord/status-gizi-puga/blob/main/src/contexts/AuthContext.tsx"
click node_loginfn "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-login/index.ts"
click node_registerfn "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-register/index.ts"
click node_otpfn "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-verify-otp/index.ts"
click node_resendfn "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-resend-otp/index.ts"
click node_dashboard "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Dashboard.tsx"
click node_records "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/DataRecords.tsx"
click node_analytics "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Analytics.tsx"
click node_datactx "https://github.com/cavlord/status-gizi-puga/blob/main/src/contexts/DataContext.tsx"
click node_sheetslib "https://github.com/cavlord/status-gizi-puga/blob/main/src/lib/googleSheets.ts"
click node_settings "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Settings.tsx"
click node_users "https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/UserManagement.tsx"
click node_adminget "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/admin-get-users/index.ts"
click node_adminupdate "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/admin-update-user/index.ts"
click node_importfn "https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/import-from-sheets/index.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_main,node_appshell,node_layout,node_settings,node_user toneBlue
class node_dashboard,node_records,node_analytics,node_datactx,node_sheetslib toneAmber
class node_authpage,node_authcontext,node_loginfn,node_registerfn,node_otpfn,node_resendfn toneMint
class node_users,node_adminget,node_adminupdate,node_importfn toneRose
class node_sheets,node_database toneIndigo
```

## Components

### Application shell

- [React entry](https://github.com/cavlord/status-gizi-puga/blob/main/src/main.tsx): `src/main.tsx`
- [Routes and providers](https://github.com/cavlord/status-gizi-puga/blob/main/src/App.tsx): `src/App.tsx`
- [Shared layout](https://github.com/cavlord/status-gizi-puga/blob/main/src/components/AppLayout.tsx): `src/components/AppLayout.tsx`
- [Application settings](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Settings.tsx): `src/pages/Settings.tsx`

### Health data views

- [Dashboard summaries](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Dashboard.tsx): `src/pages/Dashboard.tsx`
- [Record search](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/DataRecords.tsx): `src/pages/DataRecords.tsx`
- [Health analytics](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Analytics.tsx): `src/pages/Analytics.tsx`
- [Health data state](https://github.com/cavlord/status-gizi-puga/blob/main/src/contexts/DataContext.tsx): `src/contexts/DataContext.tsx`
- [Sheets data access](https://github.com/cavlord/status-gizi-puga/blob/main/src/lib/googleSheets.ts): `src/lib/googleSheets.ts`

### Authentication

- [Sign-in and registration](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/Auth.tsx): `src/pages/Auth.tsx`
- [Auth state](https://github.com/cavlord/status-gizi-puga/blob/main/src/contexts/AuthContext.tsx): `src/contexts/AuthContext.tsx`
- [Login endpoint](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-login/index.ts): `supabase/functions/auth-login/index.ts`
- [Registration endpoint](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-register/index.ts): `supabase/functions/auth-register/index.ts`
- [OTP verification](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-verify-otp/index.ts): `supabase/functions/auth-verify-otp/index.ts`
- [OTP resend](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/auth-resend-otp/index.ts): `supabase/functions/auth-resend-otp/index.ts`

### Administration

- [User management](https://github.com/cavlord/status-gizi-puga/blob/main/src/pages/UserManagement.tsx): `src/pages/UserManagement.tsx`
- [List users](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/admin-get-users/index.ts): `supabase/functions/admin-get-users/index.ts`
- [Update user](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/admin-update-user/index.ts): `supabase/functions/admin-update-user/index.ts`
- [Spreadsheet import](https://github.com/cavlord/status-gizi-puga/blob/main/supabase/functions/import-from-sheets/index.ts): `supabase/functions/import-from-sheets/index.ts`

### External systems

- **Google Sheets**
- **Supabase database**

### Other components

- **Dashboard user**

## Connections

- Dashboard user → React entry: opens
- React entry → Routes and providers: renders
- Routes and providers → Auth state: provides auth
- Routes and providers → Health data state: provides data
- Routes and providers → Sign-in and registration: routes auth
- Routes and providers → Shared layout: wraps protected views
- Routes and providers → Dashboard summaries: routes dashboard
- Routes and providers → Record search: routes records
- Routes and providers → Health analytics: routes analytics
- Routes and providers → Application settings: routes settings
- Routes and providers → User management: routes users
- Sign-in and registration → Auth state: requests auth
- Auth state → Login endpoint: calls login
- Auth state → Registration endpoint: calls registration
- Auth state → OTP verification: calls verification
- Auth state → OTP resend: calls resend
- Health data state → Sheets data access: fetches records
- User management → List users: requests users
- User management → Update user: updates users
- Spreadsheet import → Google Sheets: reads spreadsheet
- Spreadsheet import → Supabase database: replaces records
