# barisavcimail-afk/ciltgpt architecture

> Architecture diagram of the GitHub repository barisavcimail-afk/ciltgpt, 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/barisavcimail-afk/ciltgpt
- Repository: https://github.com/barisavcimail-afk/ciltgpt

## Overview

CiltGPT is a salon-focused skin-analysis SaaS: staff manage customers, start an analysis, and use its scores and recommendations in a saved report. The browser application also exposes product, team, billing, salon-settings, and admin workflows; README documentation identifies which are database-connected and which still use mock data. The server handles API requests and analysis/report creation, with repository modules forming the persistence layer. Wiring for unsampled routes is represented only where documented; the supplied excerpts do not expose every handler or integration.

Main entry points: [`server.js`](https://github.com/barisavcimail-afk/ciltgpt/blob/main/server.js) (HTTP API and workflows), [`src/lib/prisma.ts`](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/prisma.ts) (Prisma client), [`src/app.js`](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/app.js) (Browser application), [`src/components/pages.browser.js`](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/pages.browser.js) (Salon dashboard UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_browser_app["Browser application<br/>[app.js]"]
  node_dashboard_ui["Salon dashboard UI<br/>[pages.browser.js]"]
  node_admin_ui["Admin UI"]
  node_customer_ui["Customer screens<br/>[customersPage.js]"]
  node_report_ui["Report screens<br/>[reportPage.js]"]
  node_mock_data["Mock screen data"]
end

subgraph group_analysis["Skin analysis"]
  node_analysis_wizard["Analysis wizard"]
  node_api_server["HTTP API and workflows<br/>[server.js]"]
  node_analysis_service["Analysis service"]
  node_vision_adapter["OpenAI Vision adapter"]
  node_pdf_reports["PDF report output<br/>[server.js]"]
end

subgraph group_operations["Salon operations"]
end

subgraph group_persistence["Data access"]
  node_customers_repo["Customer repository"]
  node_analysis_repo["Analysis repository"]
  node_report_repo["Report repository"]
  node_product_repo["Product repository"]
  node_salon_repo["Salon repository"]
  node_subscription_repo["Subscription repository"]
  node_team_repo["Team repository"]
  node_admin_repo["Admin repository"]
  node_settings_repo["System settings"]
  node_prisma_client["Prisma client<br/>[prisma.ts]"]
end

node_salon_staff(("Salon staff"))
node_admin_user(("Admin user"))
node_openai_service{{"OpenAI API"}}
node_database[("PostgreSQL")]

node_salon_staff -->|"uses"| node_browser_app
node_admin_user -->|"uses"| node_browser_app
node_browser_app -->|"renders"| node_dashboard_ui
node_browser_app -->|"renders"| node_admin_ui
node_browser_app -->|"renders"| node_analysis_wizard
node_browser_app -->|"renders"| node_customer_ui
node_browser_app -->|"renders"| node_report_ui
node_dashboard_ui -.->|"reads"| node_mock_data
node_admin_ui -.->|"reads"| node_mock_data
node_analysis_wizard -->|"submits analysis"| node_api_server
node_customer_ui -->|"requests customers"| node_api_server
node_report_ui -->|"requests reports"| node_api_server
node_api_server -->|"runs analysis"| node_analysis_service
node_analysis_service -->|"dispatches"| node_vision_adapter
node_vision_adapter -.->|"requests vision analysis"| node_openai_service
node_api_server -->|"reads and writes"| node_customers_repo
node_api_server -->|"records analysis"| node_analysis_repo
node_api_server -->|"stores reports"| node_report_repo
node_api_server -->|"loads product catalog"| node_product_repo
node_api_server -->|"reads and updates salons"| node_salon_repo
node_api_server -->|"updates usage"| node_subscription_repo
node_api_server -->|"manages team"| node_team_repo
node_api_server -->|"loads admin data"| node_admin_repo
node_api_server -->|"loads AI settings"| node_settings_repo
node_api_server -->|"generates PDF"| node_pdf_reports
node_customers_repo -->|"queries"| node_prisma_client
node_analysis_repo -->|"queries"| node_prisma_client
node_report_repo -->|"queries"| node_prisma_client
node_product_repo -->|"queries"| node_prisma_client
node_salon_repo -->|"queries"| node_prisma_client
node_subscription_repo -->|"queries"| node_prisma_client
node_team_repo -->|"queries"| node_prisma_client
node_admin_repo -->|"queries"| node_prisma_client
node_settings_repo -->|"reads and writes"| node_prisma_client
node_prisma_client -->|"queries"| node_database

click node_browser_app "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/app.js"
click node_dashboard_ui "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/pages.browser.js"
click node_admin_ui "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/adminPages.browser.js"
click node_analysis_wizard "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/analysisWizard.browser.js"
click node_customer_ui "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/customersPage.js"
click node_report_ui "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/reportPage.js"
click node_mock_data "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/data/mockData.browser.js"
click node_api_server "https://github.com/barisavcimail-afk/ciltgpt/blob/main/server.js"
click node_analysis_service "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/analysis/analysisService.server.js"
click node_vision_adapter "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/openai/openaiAnalysis.server.js"
click node_pdf_reports "https://github.com/barisavcimail-afk/ciltgpt/blob/main/server.js"
click node_customers_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/customerRepository.server.js"
click node_analysis_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/analysisRepository.server.js"
click node_report_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/reportRepository.server.js"
click node_product_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/productRepository.server.js"
click node_salon_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/salonRepository.server.js"
click node_subscription_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/subscriptionRepository.server.js"
click node_team_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/teamRepository.server.js"
click node_admin_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/adminRepository.server.js"
click node_settings_repo "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/systemSettingsRepository.server.js"
click node_prisma_client "https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/prisma.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_browser_app,node_dashboard_ui,node_admin_ui,node_customer_ui,node_report_ui,node_mock_data,node_admin_user toneBlue
class node_analysis_wizard,node_api_server,node_analysis_service,node_vision_adapter,node_pdf_reports,node_database toneAmber
class node_customers_repo,node_analysis_repo,node_report_repo,node_product_repo,node_salon_repo,node_subscription_repo,node_team_repo,node_admin_repo,node_settings_repo,node_prisma_client toneRose
class node_salon_staff toneIndigo
class node_openai_service toneMint
```

## Components

### User experience

- [Browser application](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/app.js): `src/app.js`
- [Salon dashboard UI](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/pages.browser.js): `src/components/pages.browser.js`
- [Admin UI](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/adminPages.browser.js): `src/components/adminPages.browser.js`
- [Customer screens](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/customersPage.js): `src/components/customersPage.js`
- [Report screens](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/reportPage.js): `src/components/reportPage.js`
- [Mock screen data](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/data/mockData.browser.js): `src/data/mockData.browser.js`

### Skin analysis

- [Analysis wizard](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/components/analysisWizard.browser.js): `src/components/analysisWizard.browser.js`
- [HTTP API and workflows](https://github.com/barisavcimail-afk/ciltgpt/blob/main/server.js): `server.js`
- [Analysis service](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/analysis/analysisService.server.js): `src/lib/analysis/analysisService.server.js`
- [OpenAI Vision adapter](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/openai/openaiAnalysis.server.js): `src/lib/openai/openaiAnalysis.server.js`
- [PDF report output](https://github.com/barisavcimail-afk/ciltgpt/blob/main/server.js): `server.js`

### Data access

- [Customer repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/customerRepository.server.js): `src/lib/repositories/customerRepository.server.js`
- [Analysis repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/analysisRepository.server.js): `src/lib/repositories/analysisRepository.server.js`
- [Report repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/reportRepository.server.js): `src/lib/repositories/reportRepository.server.js`
- [Product repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/productRepository.server.js): `src/lib/repositories/productRepository.server.js`
- [Salon repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/salonRepository.server.js): `src/lib/repositories/salonRepository.server.js`
- [Subscription repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/subscriptionRepository.server.js): `src/lib/repositories/subscriptionRepository.server.js`
- [Team repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/teamRepository.server.js): `src/lib/repositories/teamRepository.server.js`
- [Admin repository](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/adminRepository.server.js): `src/lib/repositories/adminRepository.server.js`
- [System settings](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/repositories/systemSettingsRepository.server.js): `src/lib/repositories/systemSettingsRepository.server.js`
- [Prisma client](https://github.com/barisavcimail-afk/ciltgpt/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`

### Other components

- **Salon staff**
- **Admin user**
- **OpenAI API**
- **PostgreSQL**

## Connections

- Salon staff → Browser application: uses
- Admin user → Browser application: uses
- Browser application → Salon dashboard UI: renders
- Browser application → Admin UI: renders
- Browser application → Analysis wizard: renders
- Browser application → Customer screens: renders
- Browser application → Report screens: renders
- Salon dashboard UI → Mock screen data: reads
- Admin UI → Mock screen data: reads
- Analysis wizard → HTTP API and workflows: submits analysis
- Customer screens → HTTP API and workflows: requests customers
- Report screens → HTTP API and workflows: requests reports
- HTTP API and workflows → Analysis service: runs analysis
- Analysis service → OpenAI Vision adapter: dispatches
- OpenAI Vision adapter → OpenAI API: requests vision analysis
- HTTP API and workflows → Customer repository: reads and writes
- HTTP API and workflows → Analysis repository: records analysis
- HTTP API and workflows → Report repository: stores reports
- HTTP API and workflows → Product repository: loads product catalog
- HTTP API and workflows → Salon repository: reads and updates salons
- HTTP API and workflows → Subscription repository: updates usage
- HTTP API and workflows → Team repository: manages team
- HTTP API and workflows → Admin repository: loads admin data
- HTTP API and workflows → System settings: loads AI settings
- HTTP API and workflows → PDF report output: generates PDF
- Customer repository → Prisma client: queries
- Analysis repository → Prisma client: queries
- Report repository → Prisma client: queries
- Product repository → Prisma client: queries
- Salon repository → Prisma client: queries
- Subscription repository → Prisma client: queries
- Team repository → Prisma client: queries
- Admin repository → Prisma client: queries
- System settings → Prisma client: reads and writes
- Prisma client → PostgreSQL: queries
