# souhaib-askri/plan-ai architecture

> Architecture diagram of the GitHub repository souhaib-askri/plan-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/souhaib-askri/plan-ai
- Repository: https://github.com/souhaib-askri/plan-ai

## Overview

Plant-AI is a web application for creating and sharing PlantUML diagram projects. Its central workflow is diagram editing with AI assistance, followed by project persistence and image handling; users can also browse projects, copy them, and interact through likes and comments. The graph includes authentication, storage, and the application’s shared sidebar layer. Several routes and pages were not sampled, so their internal connections are omitted rather than inferred.

Main entry points: [`src/lib/prisma.ts`](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/prisma.ts) (Database client), [`src/lib/minIoControls.ts`](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/minIoControls.ts) (Diagram image controls), [`src/components/app-sidebar/index.tsx`](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/app-sidebar/index.tsx) (App sidebar), [`src/app/api/projects/[slug]/route.ts`](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/projects/%5Bslug%5D/route.ts) (Project API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and navigation"]
  node_signin["Sign in<br/>[page.tsx]"]
  node_auth["Authentication<br/>[nextAuth.ts]"]
  node_sidebar["App sidebar<br/>[index.tsx]"]
  node_navmain["Main navigation<br/>[nav-main.tsx]"]
  node_navpages["Page navigation<br/>[nav-pages.tsx]"]
  node_navuser["User navigation<br/>[nav-user.tsx]"]
end

subgraph group_authoring["Diagram authoring"]
  node_editor["Diagram editor<br/>[index.tsx]"]
  node_assistant["AI assistant<br/>[AiAssistant.tsx]"]
  node_aiapi["AI endpoint<br/>[route.ts]"]
end

subgraph group_projects["Projects and community"]
  node_projectapi["Project API<br/>[route.ts]"]
  node_projectpage["Project view<br/>[page.tsx]"]
  node_copyapi["Project copying<br/>[route.ts]"]
  node_comments["Project comments"]
  node_likes["Project likes<br/>[LikeProject.tsx]"]
end

subgraph group_platform["Data and storage"]
  node_getproject["Project lookup<br/>[getProjectById.ts]"]
  node_prisma[("Database client<br/>[prisma.ts]")]
  node_imagecontrols["Diagram image controls<br/>[minIoControls.ts]"]
  node_s3["S3 client<br/>[s3.ts]"]
end

node_user(("User"))
node_plantuml{{"PlantUML service"}}
node_objectstore[("S3 object storage")]
node_llm{{"AI model providers"}}

node_user -.->|"signs in"| node_signin
node_signin -.->|"authenticates with"| node_auth
node_auth -->|"configures adapter"| node_prisma
node_sidebar -->|"renders"| node_navmain
node_sidebar -->|"renders"| node_navpages
node_sidebar -->|"renders"| node_navuser
node_user -.->|"edits diagrams"| node_editor
node_assistant -.->|"requests assistance"| node_aiapi
node_aiapi -->|"invokes model"| node_llm
node_aiapi -->|"stores conversations"| node_prisma
node_user -.->|"views projects"| node_projectpage
node_projectapi -->|"loads project"| node_getproject
node_projectapi -->|"updates project"| node_prisma
node_projectapi -->|"deletes images"| node_imagecontrols
node_copyapi -->|"copies project data"| node_prisma
node_copyapi -->|"generates and uploads images"| node_imagecontrols
node_comments -.->|"supports discussion"| node_user
node_likes -.->|"supports liking"| node_user
node_getproject -->|"queries"| node_prisma
node_imagecontrols -->|"renders diagram images"| node_plantuml
node_imagecontrols -->|"uses client"| node_s3
node_s3 -.->|"accesses objects"| node_objectstore

click node_signin "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/(auth)/signin/page.tsx"
click node_auth "https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/nextAuth.ts"
click node_sidebar "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/app-sidebar/index.tsx"
click node_navmain "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-main.tsx"
click node_navpages "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-pages.tsx"
click node_navuser "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-user.tsx"
click node_editor "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/project/%5Bslug%5D/edit/components/DiagramEditor/index.tsx"
click node_assistant "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/project/%5Bslug%5D/edit/components/AiAssistant.tsx"
click node_aiapi "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/ai/route.ts"
click node_projectapi "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/projects/%5Bslug%5D/route.ts"
click node_projectpage "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/(ui)/project/%5Bslug%5D/page.tsx"
click node_copyapi "https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/projects/%5Bslug%5D/copy/route.ts"
click node_comments "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/ProjectComments/ProjectComments.tsx"
click node_likes "https://github.com/souhaib-askri/plan-ai/blob/main/src/components/LikeProject/LikeProject.tsx"
click node_getproject "https://github.com/souhaib-askri/plan-ai/blob/main/src/db/getProjectById.ts"
click node_prisma "https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/prisma.ts"
click node_imagecontrols "https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/minIoControls.ts"
click node_s3 "https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/s3.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_signin,node_auth,node_sidebar,node_navmain,node_navpages,node_navuser,node_user toneBlue
class node_editor,node_assistant,node_aiapi,node_objectstore toneAmber
class node_projectapi,node_projectpage,node_copyapi,node_comments,node_likes toneMint
class node_getproject,node_prisma,node_imagecontrols,node_s3 toneRose
class node_plantuml,node_llm toneIndigo
```

## Components

### Identity and navigation

- [Sign in](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/(auth)/signin/page.tsx): `src/app/(auth)/signin/page.tsx`
- [Authentication](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/nextAuth.ts): `src/lib/nextAuth.ts`
- [App sidebar](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/app-sidebar/index.tsx): `src/components/app-sidebar/index.tsx`
- [Main navigation](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-main.tsx): `src/components/nav-main.tsx`
- [Page navigation](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-pages.tsx): `src/components/nav-pages.tsx`
- [User navigation](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/nav-user.tsx): `src/components/nav-user.tsx`

### Diagram authoring

- [Diagram editor](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/project/%5Bslug%5D/edit/components/DiagramEditor/index.tsx): `src/app/project/[slug]/edit/components/DiagramEditor/index.tsx`
- [AI assistant](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/project/%5Bslug%5D/edit/components/AiAssistant.tsx): `src/app/project/[slug]/edit/components/AiAssistant.tsx`
- [AI endpoint](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/ai/route.ts): `src/app/api/ai/route.ts`

### Projects and community

- [Project API](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/projects/%5Bslug%5D/route.ts): `src/app/api/projects/[slug]/route.ts`
- [Project view](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/(ui)/project/%5Bslug%5D/page.tsx): `src/app/(ui)/project/[slug]/page.tsx`
- [Project copying](https://github.com/souhaib-askri/plan-ai/blob/main/src/app/api/projects/%5Bslug%5D/copy/route.ts): `src/app/api/projects/[slug]/copy/route.ts`
- [Project comments](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/ProjectComments/ProjectComments.tsx): `src/components/ProjectComments/ProjectComments.tsx`
- [Project likes](https://github.com/souhaib-askri/plan-ai/blob/main/src/components/LikeProject/LikeProject.tsx): `src/components/LikeProject/LikeProject.tsx`

### Data and storage

- [Project lookup](https://github.com/souhaib-askri/plan-ai/blob/main/src/db/getProjectById.ts): `src/db/getProjectById.ts`
- [Database client](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [Diagram image controls](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/minIoControls.ts): `src/lib/minIoControls.ts`
- [S3 client](https://github.com/souhaib-askri/plan-ai/blob/main/src/lib/s3.ts): `src/lib/s3.ts`

### Other components

- **User**
- **PlantUML service**
- **S3 object storage**
- **AI model providers**

## Connections

- User → Sign in: signs in
- Sign in → Authentication: authenticates with
- Authentication → Database client: configures adapter (evidence: `src/lib/nextAuth.ts`)
- App sidebar → Main navigation: renders (evidence: `src/components/app-sidebar/index.tsx`)
- App sidebar → Page navigation: renders (evidence: `src/components/app-sidebar/index.tsx`)
- App sidebar → User navigation: renders (evidence: `src/components/app-sidebar/index.tsx`)
- User → Diagram editor: edits diagrams
- AI assistant → AI endpoint: requests assistance
- AI endpoint → AI model providers: invokes model (evidence: `src/app/api/ai/route.ts`)
- AI endpoint → Database client: stores conversations (evidence: `src/app/api/ai/route.ts`)
- User → Project view: views projects
- Project API → Project lookup: loads project (evidence: `src/app/api/projects/[slug]/route.ts`)
- Project API → Database client: updates project (evidence: `src/app/api/projects/[slug]/route.ts`)
- Project API → Diagram image controls: deletes images (evidence: `src/app/api/projects/[slug]/route.ts`)
- Project copying → Database client: copies project data (evidence: `src/app/api/projects/[slug]/copy/route.ts`)
- Project copying → Diagram image controls: generates and uploads images (evidence: `src/app/api/projects/[slug]/copy/route.ts`)
- Project comments → User: supports discussion
- Project likes → User: supports liking
- Project lookup → Database client: queries (evidence: `src/db/getProjectById.ts`)
- Diagram image controls → PlantUML service: renders diagram images (evidence: `src/lib/minIoControls.ts`)
- Diagram image controls → S3 client: uses client (evidence: `src/lib/minIoControls.ts`)
- S3 client → S3 object storage: accesses objects
