# adityag025/flowboard architecture

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

- Interactive diagram: https://gitdiagram.com/adityag025/flowboard
- Repository: https://github.com/adityag025/flowboard

## Overview

FlowBoard is a small-team issue tracker whose main workflow is to create a workspace and project, manage issues through lists or a Kanban board, and review team activity. The dashboard also provides search, analytics, comments, and settings. AI can summarize an issue or draft one for review; optional SSE updates keep boards in sync. The graph reflects the documented capabilities and sampled handlers; several feature routes and actions were not sampled, so their internal call wiring is not expanded.

Main entry points: [`src/app/(dashboard)`](https://github.com/adityag025/flowboard/tree/main/src/app/(dashboard)) (Dashboard pages), [`src/app/api/ai/summarize/route.ts`](https://github.com/adityag025/flowboard/blob/main/src/app/api/ai/summarize/route.ts) (Summary stream), [`src/lib/authz.ts`](https://github.com/adityag025/flowboard/blob/main/src/lib/authz.ts) (Access control), [`src/lib/actions/issues.ts`](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/issues.ts) (Issue actions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_product["Product UI"]
  node_auth_pages["Sign in and signup"]
  node_auth_forms["Auth forms"]
  node_dashboard["Dashboard pages"]
  node_issue_ui["Issue views"]
  node_project_ui["Project views"]
  node_board_ui["Kanban board<br/>[board.tsx]"]
  node_search_ui["Global search<br/>[global-search.tsx]"]
  node_analytics_ui["Analytics views"]
  node_settings_ui["Settings form<br/>[settings-form.tsx]"]
  node_analytics_page["Analytics page<br/>[page.tsx]"]
end

subgraph group_work["Issue Workflow"]
  node_issue_actions["Issue actions<br/>[issues.ts]"]
  node_project_actions["Project actions<br/>[projects.ts]"]
  node_board_actions["Board actions<br/>[board.ts]"]
  node_issue_queries["Issue queries<br/>[issues.ts]"]
  node_board_queries["Board queries<br/>[board.ts]"]
  node_analytics_queries["Analytics queries<br/>[analytics.ts]"]
  node_search_action["Search action<br/>[search.ts]"]
  node_realtime_client["Realtime sync<br/>[realtime-sync.tsx]"]
  node_realtime_route["Board event stream<br/>[route.ts]"]
end

subgraph group_intelligence["AI Features"]
  node_ai_ui["AI draft and summary"]
  node_ai_route["Summary stream<br/>[route.ts]"]
  node_ai_actions["AI actions<br/>[ai.ts]"]
  node_ai_provider["Provider adapters"]
end

subgraph group_platform["Identity and Services"]
  node_auth_actions["Account actions<br/>[auth.ts]"]
  node_auth_service["Auth service"]
  node_authorization["Access control<br/>[authz.ts]"]
  node_database[("PostgreSQL")]
  node_realtime_service["Realtime pub/sub<br/>[realtime.ts]"]
  node_redis[("Redis")]
  node_settings_action["Settings actions<br/>[settings.ts]"]
end

node_team(("Team member"))
node_model{{"AI model service"}}

node_team -->|"opens"| node_auth_pages
node_auth_pages -->|"renders"| node_auth_forms
node_auth_forms -->|"submits"| node_auth_actions
node_auth_actions -->|"creates account"| node_database
node_auth_actions -->|"signs in"| node_auth_service
node_team -->|"uses"| node_dashboard
node_dashboard -->|"opens projects"| node_project_ui
node_project_ui -->|"creates project"| node_project_actions
node_project_actions -->|"writes project"| node_database
node_dashboard -->|"opens issues"| node_issue_ui
node_issue_ui -->|"creates and updates"| node_issue_actions
node_issue_actions -->|"checks access"| node_authorization
node_issue_actions -->|"writes issues"| node_database
node_dashboard -->|"opens board"| node_board_ui
node_board_ui -->|"moves cards"| node_board_actions
node_board_actions -->|"checks access"| node_authorization
node_board_actions -->|"updates status"| node_database
node_dashboard -->|"loads issue lists"| node_issue_queries
node_issue_queries -->|"reads issues"| node_database
node_dashboard -->|"loads board"| node_board_queries
node_board_queries -->|"reads board data"| node_database
node_search_ui -->|"searches"| node_search_action
node_search_action -->|"requires user"| node_authorization
node_search_action -->|"queries issues"| node_database
node_dashboard -->|"opens analytics"| node_analytics_page
node_analytics_page -->|"loads metrics"| node_analytics_queries
node_analytics_queries -->|"reads activity"| node_database
node_team -->|"requests AI help"| node_ai_ui
node_ai_ui -->|"drafts issue"| node_ai_actions
node_ai_actions -->|"generates draft"| node_ai_provider
node_ai_ui -->|"requests summary"| node_ai_route
node_ai_route -->|"checks membership"| node_authorization
node_ai_route -->|"reads and caches"| node_database
node_ai_route -->|"streams summary"| node_ai_provider
node_ai_provider -.->|"calls model"| node_model
node_team -->|"views board"| node_realtime_client
node_realtime_client -->|"subscribes"| node_realtime_route
node_realtime_route -->|"subscribes to events"| node_realtime_service
node_realtime_service -.->|"publishes events"| node_redis
node_realtime_client -->|"refreshes board"| node_board_queries
node_dashboard -->|"opens settings"| node_settings_ui
node_settings_ui -->|"saves settings"| node_settings_action
node_settings_action -->|"writes settings"| node_database

click node_auth_pages "https://github.com/adityag025/flowboard/tree/main/src/app/(auth)"
click node_auth_forms "https://github.com/adityag025/flowboard/tree/main/src/components/auth"
click node_dashboard "https://github.com/adityag025/flowboard/tree/main/src/app/(dashboard)"
click node_issue_ui "https://github.com/adityag025/flowboard/tree/main/src/components/issues"
click node_project_ui "https://github.com/adityag025/flowboard/tree/main/src/components/projects"
click node_board_ui "https://github.com/adityag025/flowboard/blob/main/src/components/board/board.tsx"
click node_search_ui "https://github.com/adityag025/flowboard/blob/main/src/components/layout/global-search.tsx"
click node_analytics_ui "https://github.com/adityag025/flowboard/tree/main/src/components/analytics"
click node_settings_ui "https://github.com/adityag025/flowboard/blob/main/src/components/settings/settings-form.tsx"
click node_auth_actions "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/auth.ts"
click node_auth_service "https://github.com/adityag025/flowboard/tree/main/src/lib/auth"
click node_issue_actions "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/issues.ts"
click node_project_actions "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/projects.ts"
click node_board_actions "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/board.ts"
click node_issue_queries "https://github.com/adityag025/flowboard/blob/main/src/lib/queries/issues.ts"
click node_board_queries "https://github.com/adityag025/flowboard/blob/main/src/lib/queries/board.ts"
click node_analytics_queries "https://github.com/adityag025/flowboard/blob/main/src/lib/queries/analytics.ts"
click node_search_action "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/search.ts"
click node_authorization "https://github.com/adityag025/flowboard/blob/main/src/lib/authz.ts"
click node_ai_ui "https://github.com/adityag025/flowboard/tree/main/src/components/ai"
click node_ai_route "https://github.com/adityag025/flowboard/blob/main/src/app/api/ai/summarize/route.ts"
click node_ai_actions "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/ai.ts"
click node_ai_provider "https://github.com/adityag025/flowboard/tree/main/src/lib/ai/providers"
click node_realtime_client "https://github.com/adityag025/flowboard/blob/main/src/components/board/realtime-sync.tsx"
click node_realtime_route "https://github.com/adityag025/flowboard/blob/main/src/app/api/realtime/board/%5BprojectId%5D/route.ts"
click node_realtime_service "https://github.com/adityag025/flowboard/blob/main/src/lib/realtime.ts"
click node_settings_action "https://github.com/adityag025/flowboard/blob/main/src/lib/actions/settings.ts"
click node_analytics_page "https://github.com/adityag025/flowboard/blob/main/src/app/(dashboard)/analytics/page.tsx"

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_auth_pages,node_auth_forms,node_dashboard,node_issue_ui,node_project_ui,node_board_ui,node_search_ui,node_analytics_ui,node_settings_ui,node_analytics_page toneBlue
class node_issue_actions,node_project_actions,node_board_actions,node_issue_queries,node_board_queries,node_analytics_queries,node_search_action,node_realtime_client,node_realtime_route toneAmber
class node_ai_ui,node_ai_route,node_ai_actions,node_ai_provider toneMint
class node_auth_actions,node_auth_service,node_authorization,node_database,node_realtime_service,node_redis,node_settings_action toneRose
class node_team,node_model toneIndigo
```

## Components

### Product UI

- [Sign in and signup](https://github.com/adityag025/flowboard/tree/main/src/app/(auth)): `src/app/(auth)`
- [Auth forms](https://github.com/adityag025/flowboard/tree/main/src/components/auth): `src/components/auth`
- [Dashboard pages](https://github.com/adityag025/flowboard/tree/main/src/app/(dashboard)): `src/app/(dashboard)`
- [Issue views](https://github.com/adityag025/flowboard/tree/main/src/components/issues): `src/components/issues`
- [Project views](https://github.com/adityag025/flowboard/tree/main/src/components/projects): `src/components/projects`
- [Kanban board](https://github.com/adityag025/flowboard/blob/main/src/components/board/board.tsx): `src/components/board/board.tsx`
- [Global search](https://github.com/adityag025/flowboard/blob/main/src/components/layout/global-search.tsx): `src/components/layout/global-search.tsx`
- [Analytics views](https://github.com/adityag025/flowboard/tree/main/src/components/analytics): `src/components/analytics`
- [Settings form](https://github.com/adityag025/flowboard/blob/main/src/components/settings/settings-form.tsx): `src/components/settings/settings-form.tsx`
- [Analytics page](https://github.com/adityag025/flowboard/blob/main/src/app/(dashboard)/analytics/page.tsx): `src/app/(dashboard)/analytics/page.tsx`

### Issue Workflow

- [Issue actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/issues.ts): `src/lib/actions/issues.ts`
- [Project actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/projects.ts): `src/lib/actions/projects.ts`
- [Board actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/board.ts): `src/lib/actions/board.ts`
- [Issue queries](https://github.com/adityag025/flowboard/blob/main/src/lib/queries/issues.ts): `src/lib/queries/issues.ts`
- [Board queries](https://github.com/adityag025/flowboard/blob/main/src/lib/queries/board.ts): `src/lib/queries/board.ts`
- [Analytics queries](https://github.com/adityag025/flowboard/blob/main/src/lib/queries/analytics.ts): `src/lib/queries/analytics.ts`
- [Search action](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/search.ts): `src/lib/actions/search.ts`
- [Realtime sync](https://github.com/adityag025/flowboard/blob/main/src/components/board/realtime-sync.tsx): `src/components/board/realtime-sync.tsx`
- [Board event stream](https://github.com/adityag025/flowboard/blob/main/src/app/api/realtime/board/%5BprojectId%5D/route.ts): `src/app/api/realtime/board/[projectId]/route.ts`

### AI Features

- [AI draft and summary](https://github.com/adityag025/flowboard/tree/main/src/components/ai): `src/components/ai`
- [Summary stream](https://github.com/adityag025/flowboard/blob/main/src/app/api/ai/summarize/route.ts): `src/app/api/ai/summarize/route.ts`
- [AI actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/ai.ts): `src/lib/actions/ai.ts`
- [Provider adapters](https://github.com/adityag025/flowboard/tree/main/src/lib/ai/providers): `src/lib/ai/providers`

### Identity and Services

- [Account actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/auth.ts): `src/lib/actions/auth.ts`
- [Auth service](https://github.com/adityag025/flowboard/tree/main/src/lib/auth): `src/lib/auth`
- [Access control](https://github.com/adityag025/flowboard/blob/main/src/lib/authz.ts): `src/lib/authz.ts`
- **PostgreSQL**
- [Realtime pub/sub](https://github.com/adityag025/flowboard/blob/main/src/lib/realtime.ts): `src/lib/realtime.ts`
- **Redis**
- [Settings actions](https://github.com/adityag025/flowboard/blob/main/src/lib/actions/settings.ts): `src/lib/actions/settings.ts`

### Other components

- **Team member**
- **AI model service**

## Connections

- Team member → Sign in and signup: opens
- Sign in and signup → Auth forms: renders
- Auth forms → Account actions: submits
- Account actions → PostgreSQL: creates account
- Account actions → Auth service: signs in
- Team member → Dashboard pages: uses
- Dashboard pages → Project views: opens projects
- Project views → Project actions: creates project
- Project actions → PostgreSQL: writes project
- Dashboard pages → Issue views: opens issues
- Issue views → Issue actions: creates and updates
- Issue actions → Access control: checks access
- Issue actions → PostgreSQL: writes issues
- Dashboard pages → Kanban board: opens board
- Kanban board → Board actions: moves cards
- Board actions → Access control: checks access
- Board actions → PostgreSQL: updates status
- Dashboard pages → Issue queries: loads issue lists
- Issue queries → PostgreSQL: reads issues
- Dashboard pages → Board queries: loads board
- Board queries → PostgreSQL: reads board data
- Global search → Search action: searches
- Search action → Access control: requires user
- Search action → PostgreSQL: queries issues
- Dashboard pages → Analytics page: opens analytics
- Analytics page → Analytics queries: loads metrics
- Analytics queries → PostgreSQL: reads activity
- Team member → AI draft and summary: requests AI help
- AI draft and summary → AI actions: drafts issue
- AI actions → Provider adapters: generates draft
- AI draft and summary → Summary stream: requests summary
- Summary stream → Access control: checks membership
- Summary stream → PostgreSQL: reads and caches
- Summary stream → Provider adapters: streams summary
- Provider adapters → AI model service: calls model
- Team member → Realtime sync: views board
- Realtime sync → Board event stream: subscribes
- Board event stream → Realtime pub/sub: subscribes to events
- Realtime pub/sub → Redis: publishes events
- Realtime sync → Board queries: refreshes board
- Dashboard pages → Settings form: opens settings
- Settings form → Settings actions: saves settings
- Settings actions → PostgreSQL: writes settings
