# hmaldonadovilla/community-kitchen architecture

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

- Interactive diagram: https://gitdiagram.com/hmaldonadovilla/community-kitchen
- Repository: https://github.com/hmaldonadovilla/community-kitchen

## Overview

community-kitchen is a configurable process digitization platform: administrators configure forms and dashboards, and users complete multilingual web forms, manage records, and submit responses. The runtime also supports uploads, line items, QR-assisted workflows, follow-up documents, scheduled actions, data sources, and analytics. The tree and README establish these major capabilities; sampled excerpts confirm selected analytics, upload, and server behavior, but do not expose enough wiring to assert every cross-module call.

Main entry points: [`src/web/react/App.tsx`](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/App.tsx) (Web app shell), [`src/web/react/components/FormView.tsx`](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/components/FormView.tsx) (Form and line items), [`src/services/webform/submissions.ts`](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/submissions.ts) (Submission handling), [`src/services/webform/driveApi.ts`](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/driveApi.ts) (Google Drive files)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Form experience"]
  node_dashboard["Forms dashboard<br/>[Dashboard.ts]"]
  node_config["Form configuration<br/>[ConfigSheet.ts]"]
  node_webapp["Web app shell<br/>[App.tsx]"]
  node_form["Form and line items<br/>[FormView.tsx]"]
  node_records["Record list and summary<br/>[ListView.tsx]"]
  node_qr["QR scanner<br/>[service.ts]"]
end

subgraph group_submission["Form processing"]
  node_submit["Submission handling<br/>[submissions.ts]"]
  node_validation["Validation and rules"]
  node_upload["File uploads<br/>[uploads.ts]"]
  node_datasources["Data sources<br/>[dataSources.ts]"]
end

subgraph group_integrations["Google integrations"]
  node_sheets[("Google Sheets<br/>[driveApi.ts]")]
  node_drive[("Google Drive files<br/>[driveApi.ts]")]
  node_google_services["Google APIs<br/>[googleApiClient.js]"]
end

subgraph group_followup["Follow-up and analytics"]
  node_followup["Follow-up documents<br/>[followup.ts]"]
  node_analytics["Analytics reports<br/>[service.ts]"]
  node_pipeline["Report pipelines<br/>[pipelineService.ts]"]
end

subgraph group_runtime["Runtime services"]
  node_apps_script["Apps Script runtime<br/>[Code.ts]"]
  node_api["Cloud Run API<br/>[server.js]"]
  node_rpc["RPC handlers<br/>[rpcHandlers.js]"]
  node_firestore[("Firestore<br/>[firestoreClient.js]")]
end

node_user(("Form user"))
node_admin(("Form administrator"))

node_admin -->|"manages forms"| node_dashboard
node_dashboard -->|"configures"| node_config
node_user -->|"opens form"| node_webapp
node_webapp -->|"renders"| node_form
node_webapp -->|"navigates"| node_records
node_form -->|"submits responses"| node_submit
node_submit -->|"validates"| node_validation
node_submit -->|"writes responses"| node_sheets
node_form -->|"uploads files"| node_upload
node_upload -->|"stores files"| node_drive
node_form -->|"loads options"| node_datasources
node_user -.->|"scans codes"| node_qr
node_apps_script -->|"reads and writes"| node_sheets
node_apps_script -->|"manages files"| node_drive
node_webapp -.->|"requests RPC"| node_api
node_api -->|"dispatches"| node_rpc
node_rpc -->|"reads and writes"| node_firestore
node_rpc -.->|"calls APIs"| node_google_services
node_submit -->|"triggers follow-up"| node_followup
node_followup -->|"creates documents"| node_drive
node_analytics -->|"builds reports"| node_pipeline
node_pipeline -->|"saves report files"| node_drive
node_pipeline -->|"resolves recipients"| node_datasources

click node_dashboard "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/config/Dashboard.ts"
click node_config "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/config/ConfigSheet.ts"
click node_webapp "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/App.tsx"
click node_form "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/components/FormView.tsx"
click node_records "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/components/ListView.tsx"
click node_qr "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/qrScannerAppsScript/service.ts"
click node_submit "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/submissions.ts"
click node_upload "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/uploads.ts"
click node_datasources "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/dataSources.ts"
click node_sheets "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/driveApi.ts"
click node_drive "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/driveApi.ts"
click node_followup "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/followup.ts"
click node_analytics "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/analytics/service.ts"
click node_pipeline "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/analytics/pipelineService.ts"
click node_apps_script "https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/Code.ts"
click node_api "https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/server.js"
click node_rpc "https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/rpcHandlers.js"
click node_firestore "https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/firestoreClient.js"
click node_google_services "https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/googleApiClient.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_dashboard,node_config,node_webapp,node_form,node_records,node_qr,node_user toneBlue
class node_submit,node_validation,node_upload,node_datasources toneAmber
class node_sheets,node_drive,node_google_services toneMint
class node_followup,node_analytics,node_pipeline toneRose
class node_apps_script,node_api,node_rpc,node_firestore,node_admin toneIndigo
```

## Components

### Form experience

- [Forms dashboard](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/config/Dashboard.ts): `src/config/Dashboard.ts`
- [Form configuration](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/config/ConfigSheet.ts): `src/config/ConfigSheet.ts`
- [Web app shell](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/App.tsx): `src/web/react/App.tsx`
- [Form and line items](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/components/FormView.tsx): `src/web/react/components/FormView.tsx`
- [Record list and summary](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/web/react/components/ListView.tsx): `src/web/react/components/ListView.tsx`
- [QR scanner](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/qrScannerAppsScript/service.ts): `src/services/webform/qrScannerAppsScript/service.ts`

### Form processing

- [Submission handling](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/submissions.ts): `src/services/webform/submissions.ts`
- **Validation and rules**
- [File uploads](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/uploads.ts): `src/services/webform/uploads.ts`
- [Data sources](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/dataSources.ts): `src/services/webform/dataSources.ts`

### Google integrations

- [Google Sheets](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/driveApi.ts): `src/services/webform/driveApi.ts`
- [Google Drive files](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/driveApi.ts): `src/services/webform/driveApi.ts`
- [Google APIs](https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/googleApiClient.js): `cloud-run/api/googleApiClient.js`

### Follow-up and analytics

- [Follow-up documents](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/followup.ts): `src/services/webform/followup.ts`
- [Analytics reports](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/analytics/service.ts): `src/services/webform/analytics/service.ts`
- [Report pipelines](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/services/webform/analytics/pipelineService.ts): `src/services/webform/analytics/pipelineService.ts`

### Runtime services

- [Apps Script runtime](https://github.com/hmaldonadovilla/community-kitchen/blob/main/src/Code.ts): `src/Code.ts`
- [Cloud Run API](https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/server.js): `cloud-run/api/server.js`
- [RPC handlers](https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/rpcHandlers.js): `cloud-run/api/rpcHandlers.js`
- [Firestore](https://github.com/hmaldonadovilla/community-kitchen/blob/main/cloud-run/api/firestoreClient.js): `cloud-run/api/firestoreClient.js`

### Other components

- **Form user**
- **Form administrator**

## Connections

- Form administrator → Forms dashboard: manages forms
- Forms dashboard → Form configuration: configures
- Form user → Web app shell: opens form
- Web app shell → Form and line items: renders
- Web app shell → Record list and summary: navigates
- Form and line items → Submission handling: submits responses
- Submission handling → Validation and rules: validates
- Submission handling → Google Sheets: writes responses
- Form and line items → File uploads: uploads files
- File uploads → Google Drive files: stores files
- Form and line items → Data sources: loads options
- Form user → QR scanner: scans codes
- Apps Script runtime → Google Sheets: reads and writes
- Apps Script runtime → Google Drive files: manages files
- Web app shell → Cloud Run API: requests RPC
- Cloud Run API → RPC handlers: dispatches
- RPC handlers → Firestore: reads and writes
- RPC handlers → Google APIs: calls APIs
- Submission handling → Follow-up documents: triggers follow-up
- Follow-up documents → Google Drive files: creates documents
- Analytics reports → Report pipelines: builds reports
- Report pipelines → Google Drive files: saves report files
- Report pipelines → Data sources: resolves recipients
