# hasnain833/ai4home-portal architecture

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

- Interactive diagram: https://gitdiagram.com/hasnain833/ai4home-portal
- Repository: https://github.com/hasnain833/ai4home-portal

## Overview

AI4Home is a multi-tenant warranty-care and sales portal. Users enter either workspace through the Next.js portal, which calls the Express API; the backend handles domain requests and persists data in Postgres. Warranty support spans chat intake and claim/ticket handling, knowledge-base retrieval, scheduling, and ticket reporting. Sales spans lead management, AI-assisted outreach and nurture, CRM sync, and appointments. Inngest runs background work such as KB ingestion and automation. The README documents major capabilities not fully represented in the sampled source; those are shown at subsystem level, with uncertain internal wiring omitted.

Main entry points: [`src/app`](https://github.com/hasnain833/ai4home-portal/tree/main/src/app) (Workspace UI), [`api/index.js`](https://github.com/hasnain833/ai4home-portal/blob/main/api/index.js) (Serverless API entry), [`server/src/inngest/functions`](https://github.com/hasnain833/ai4home-portal/tree/main/server/src/inngest/functions) (Inngest functions), [`server/src/lib/prisma.js`](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/lib/prisma.js) (Prisma data access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Web portal"]
  node_portal_ui["Workspace UI"]
  node_widget["Embedded widget<br/>[route.ts]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_warranty["Warranty workspace"]
  node_warranty_chat["Warranty chat"]
  node_warranty_tickets["Tickets and claims"]
  node_warranty_kb["Warranty knowledge base"]
  node_warranty_schedule["Warranty scheduling"]
end

subgraph group_sales["Sales workspace"]
  node_sales_leads["Lead management"]
  node_sales_campaigns["Campaigns and nurture"]
  node_sales_automation["Automation jobs<br/>[automation.js]"]
  node_sales_kb["Sales knowledge base"]
  node_appointments["Appointments"]
  node_crm_sync["Salesforce sync<br/>[salesforce-sync.js]"]
end

subgraph group_backend["Backend platform"]
  node_api_entry["Serverless API entry<br/>[index.js]"]
  node_express["Express application<br/>[index.js]"]
  node_routes["Route groups"]
  node_controllers["Request handlers"]
  node_jobs["Inngest functions"]
  node_db_access["Prisma data access<br/>[prisma.js]"]
end

subgraph group_integrations["External services"]
  node_postgres[("Postgres database")]
  node_supabase_auth[("Supabase Auth")]
  node_salesforce["Salesforce"]
  node_inngest_service["Inngest service"]
end

node_user(("Portal user"))

node_user -->|"uses"| node_portal_ui
node_portal_ui -->|"requests data"| node_api_client
node_api_client -->|"calls API"| node_api_entry
node_widget -->|"loads branding"| node_api_entry
node_api_entry -->|"exports app"| node_express
node_express -->|"mounts routes"| node_routes
node_routes -->|"dispatches"| node_controllers
node_controllers -->|"reads and writes"| node_db_access
node_db_access -->|"queries"| node_postgres
node_portal_ui -->|"authenticates"| node_supabase_auth
node_warranty_chat -->|"files or escalates"| node_warranty_tickets
node_warranty_tickets -->|"coordinates visits"| node_warranty_schedule
node_warranty_kb -->|"loads document records"| node_db_access
node_warranty_kb -->|"runs as job"| node_jobs
node_sales_campaigns -->|"retrieves context"| node_sales_kb
node_sales_campaigns -.->|"starts nurture"| node_sales_automation
node_sales_leads -.->|"syncs leads"| node_crm_sync
node_crm_sync -.->|"syncs records"| node_salesforce
node_appointments -->|"schedules work"| node_jobs
node_jobs -->|"registers functions"| node_inngest_service

click node_portal_ui "https://github.com/hasnain833/ai4home-portal/tree/main/src/app"
click node_widget "https://github.com/hasnain833/ai4home-portal/blob/main/src/app/widget.js/route.ts"
click node_api_client "https://github.com/hasnain833/ai4home-portal/blob/main/src/lib/api.ts"
click node_warranty_chat "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/lib/warranty-orchestrator.js"
click node_warranty_tickets "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/tickets.controller.js"
click node_warranty_kb "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/inngest/functions/warranty-kb-ingest.js"
click node_warranty_schedule "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/warranty-scheduling.service.js"
click node_sales_leads "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/leads.controller.js"
click node_sales_campaigns "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/campaigns.controller.js"
click node_sales_automation "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/inngest/functions/automation.js"
click node_sales_kb "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/vector-store.service.js"
click node_appointments "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/appointments.controller.js"
click node_crm_sync "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/salesforce-sync.js"
click node_api_entry "https://github.com/hasnain833/ai4home-portal/blob/main/api/index.js"
click node_express "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/index.js"
click node_routes "https://github.com/hasnain833/ai4home-portal/tree/main/server/src/routes"
click node_controllers "https://github.com/hasnain833/ai4home-portal/tree/main/server/src/controllers"
click node_jobs "https://github.com/hasnain833/ai4home-portal/tree/main/server/src/inngest/functions"
click node_db_access "https://github.com/hasnain833/ai4home-portal/blob/main/server/src/lib/prisma.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_portal_ui,node_widget,node_api_client,node_user toneBlue
class node_warranty_chat,node_warranty_tickets,node_warranty_kb,node_warranty_schedule toneAmber
class node_sales_leads,node_sales_campaigns,node_sales_automation,node_sales_kb,node_appointments,node_crm_sync toneMint
class node_api_entry,node_express,node_routes,node_controllers,node_jobs,node_db_access toneRose
class node_postgres,node_supabase_auth,node_salesforce,node_inngest_service toneIndigo
```

## Components

### Web portal

- [Workspace UI](https://github.com/hasnain833/ai4home-portal/tree/main/src/app): `src/app`
- [Embedded widget](https://github.com/hasnain833/ai4home-portal/blob/main/src/app/widget.js/route.ts): `src/app/widget.js/route.ts`
- [API client](https://github.com/hasnain833/ai4home-portal/blob/main/src/lib/api.ts): `src/lib/api.ts`

### Warranty workspace

- [Warranty chat](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/lib/warranty-orchestrator.js): `server/src/lib/warranty-orchestrator.js`
- [Tickets and claims](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/tickets.controller.js): `server/src/controllers/tickets.controller.js`
- [Warranty knowledge base](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/inngest/functions/warranty-kb-ingest.js): `server/src/inngest/functions/warranty-kb-ingest.js`
- [Warranty scheduling](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/warranty-scheduling.service.js): `server/src/services/warranty-scheduling.service.js`

### Sales workspace

- [Lead management](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/leads.controller.js): `server/src/controllers/leads.controller.js`
- [Campaigns and nurture](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/campaigns.controller.js): `server/src/controllers/campaigns.controller.js`
- [Automation jobs](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/inngest/functions/automation.js): `server/src/inngest/functions/automation.js`
- [Sales knowledge base](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/vector-store.service.js): `server/src/services/vector-store.service.js`
- [Appointments](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/controllers/appointments.controller.js): `server/src/controllers/appointments.controller.js`
- [Salesforce sync](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/services/salesforce-sync.js): `server/src/services/salesforce-sync.js`

### Backend platform

- [Serverless API entry](https://github.com/hasnain833/ai4home-portal/blob/main/api/index.js): `api/index.js`
- [Express application](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/index.js): `server/src/index.js`
- [Route groups](https://github.com/hasnain833/ai4home-portal/tree/main/server/src/routes): `server/src/routes`
- [Request handlers](https://github.com/hasnain833/ai4home-portal/tree/main/server/src/controllers): `server/src/controllers`
- [Inngest functions](https://github.com/hasnain833/ai4home-portal/tree/main/server/src/inngest/functions): `server/src/inngest/functions`
- [Prisma data access](https://github.com/hasnain833/ai4home-portal/blob/main/server/src/lib/prisma.js): `server/src/lib/prisma.js`

### External services

- **Postgres database**
- **Supabase Auth**
- **Salesforce**
- **Inngest service**

### Other components

- **Portal user**

## Connections

- Portal user → Workspace UI: uses
- Workspace UI → API client: requests data
- API client → Serverless API entry: calls API
- Embedded widget → Serverless API entry: loads branding
- Serverless API entry → Express application: exports app
- Express application → Route groups: mounts routes
- Route groups → Request handlers: dispatches
- Request handlers → Prisma data access: reads and writes
- Prisma data access → Postgres database: queries
- Workspace UI → Supabase Auth: authenticates
- Warranty chat → Tickets and claims: files or escalates
- Tickets and claims → Warranty scheduling: coordinates visits
- Warranty knowledge base → Prisma data access: loads document records
- Warranty knowledge base → Inngest functions: runs as job
- Campaigns and nurture → Sales knowledge base: retrieves context
- Campaigns and nurture → Automation jobs: starts nurture
- Lead management → Salesforce sync: syncs leads
- Salesforce sync → Salesforce: syncs records
- Appointments → Inngest functions: schedules work
- Inngest functions → Inngest service: registers functions
