# tunsopheak/team-management architecture

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

- Interactive diagram: https://gitdiagram.com/tunsopheak/team-management
- Repository: https://github.com/tunsopheak/team-management

## Overview

LeaderSync is a bilingual team and assignment tracker. Members join or are invited to groups, post daily standups, and update assigned work; team leads assign tasks and review submissions. The React app presents group, task, standup, member, dashboard, and report features through shared session state, while the Express API handles authentication and domain operations backed by PostgreSQL or local PGlite. The graph preserves documented capabilities, but the API client and several UI modules were not excerpted, so unshown HTTP and component-to-data links are omitted.

Main entry points: [`client/src/App.tsx`](https://github.com/tunsopheak/team-management/blob/main/client/src/App.tsx) (App shell), [`server/app.ts`](https://github.com/tunsopheak/team-management/blob/main/server/app.ts) (HTTP application), [`server/db/index.ts`](https://github.com/tunsopheak/team-management/blob/main/server/db/index.ts) (Database adapter), [`server/routes/groups.ts`](https://github.com/tunsopheak/team-management/blob/main/server/routes/groups.ts) (Group operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web app"]
  node_app["App shell<br/>[App.tsx]"]
  node_session["Session state<br/>[AppContext.tsx]"]
  node_group_ui["Group workspace<br/>[GroupBanner.tsx]"]
  node_tasks_ui["Task board<br/>[TaskBoard.tsx]"]
  node_daily_ui["Daily standups<br/>[DailyFeed.tsx]"]
  node_dashboard_ui["Dashboard"]
  node_members_ui["Members<br/>[MembersList.tsx]"]
  node_reports_ui["Assignment reports"]
  node_auth_ui["Sign in and register<br/>[AuthScreen.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_server["API"]
  node_http_app["HTTP application<br/>[app.ts]"]
  node_auth["Authentication<br/>[auth.ts]"]
  node_groups["Group operations<br/>[groups.ts]"]
  node_users["User operations<br/>[users.ts]"]
  node_tasks["Task operations<br/>[tasks.ts]"]
  node_daily_logs["Daily log operations<br/>[dailyLogs.ts]"]
  node_bootstrap["Workspace bootstrap<br/>[bootstrap.ts]"]
  node_auth_middleware["Auth middleware<br/>[auth.ts]"]
end

subgraph group_domain["Domain services"]
  node_access["Role access<br/>[access.ts]"]
  node_activity["Activity logging<br/>[activity.ts]"]
  node_mappers["API data mapping<br/>[mappers.ts]"]
end

subgraph group_storage["Persistence"]
  node_database[("Database adapter<br/>[index.ts]")]
end

node_user(("People"))

node_user -->|"uses"| node_app
node_app -->|"provides state"| node_session
node_app -->|"renders"| node_group_ui
node_app -->|"renders"| node_tasks_ui
node_app -->|"renders"| node_daily_ui
node_app -->|"renders"| node_dashboard_ui
node_app -->|"renders"| node_members_ui
node_app -->|"renders"| node_reports_ui
node_app -->|"renders"| node_auth_ui
node_session -->|"calls"| node_api_client
node_http_app -->|"mounts"| node_auth
node_http_app -->|"protects routes"| node_auth_middleware
node_http_app -->|"mounts"| node_groups
node_http_app -->|"mounts"| node_users
node_http_app -->|"mounts"| node_tasks
node_http_app -->|"mounts"| node_daily_logs
node_http_app -->|"mounts"| node_bootstrap
node_auth_middleware -->|"loads user"| node_database
node_auth_middleware -->|"maps user"| node_mappers
node_auth -->|"queries"| node_database
node_auth -->|"uses cookies"| node_auth_middleware
node_groups -->|"queries"| node_database
node_groups -->|"checks permissions"| node_access
node_groups -->|"records changes"| node_activity
node_groups -->|"maps records"| node_mappers
node_users -->|"queries"| node_database
node_users -->|"checks permissions"| node_access
node_users -->|"records changes"| node_activity
node_tasks -->|"queries"| node_database
node_tasks -->|"checks permissions"| node_access
node_tasks -->|"records changes"| node_activity
node_daily_logs -->|"queries"| node_database
node_daily_logs -->|"checks permissions"| node_access
node_daily_logs -->|"records changes"| node_activity
node_bootstrap -->|"loads workspace"| node_database
node_bootstrap -->|"checks access"| node_access
node_bootstrap -->|"maps records"| node_mappers

click node_app "https://github.com/tunsopheak/team-management/blob/main/client/src/App.tsx"
click node_session "https://github.com/tunsopheak/team-management/blob/main/client/src/context/AppContext.tsx"
click node_group_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/GroupBanner.tsx"
click node_tasks_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/TaskBoard.tsx"
click node_daily_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/DailyFeed.tsx"
click node_dashboard_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/OverviewDashboard.tsx"
click node_members_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/MembersList.tsx"
click node_reports_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/AssignmentReportModal.tsx"
click node_auth_ui "https://github.com/tunsopheak/team-management/blob/main/client/src/components/AuthScreen.tsx"
click node_api_client "https://github.com/tunsopheak/team-management/blob/main/client/src/lib/api.ts"
click node_http_app "https://github.com/tunsopheak/team-management/blob/main/server/app.ts"
click node_auth "https://github.com/tunsopheak/team-management/blob/main/server/routes/auth.ts"
click node_groups "https://github.com/tunsopheak/team-management/blob/main/server/routes/groups.ts"
click node_users "https://github.com/tunsopheak/team-management/blob/main/server/routes/users.ts"
click node_tasks "https://github.com/tunsopheak/team-management/blob/main/server/routes/tasks.ts"
click node_daily_logs "https://github.com/tunsopheak/team-management/blob/main/server/routes/dailyLogs.ts"
click node_bootstrap "https://github.com/tunsopheak/team-management/blob/main/server/routes/bootstrap.ts"
click node_access "https://github.com/tunsopheak/team-management/blob/main/server/services/access.ts"
click node_activity "https://github.com/tunsopheak/team-management/blob/main/server/services/activity.ts"
click node_mappers "https://github.com/tunsopheak/team-management/blob/main/server/services/mappers.ts"
click node_auth_middleware "https://github.com/tunsopheak/team-management/blob/main/server/middleware/auth.ts"
click node_database "https://github.com/tunsopheak/team-management/blob/main/server/db/index.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_app,node_session,node_group_ui,node_tasks_ui,node_daily_ui,node_dashboard_ui,node_members_ui,node_reports_ui,node_auth_ui,node_api_client toneBlue
class node_http_app,node_auth,node_groups,node_users,node_tasks,node_daily_logs,node_bootstrap,node_auth_middleware toneAmber
class node_access,node_activity,node_mappers toneMint
class node_database toneRose
class node_user toneIndigo
```

## Components

### Web app

- [App shell](https://github.com/tunsopheak/team-management/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Session state](https://github.com/tunsopheak/team-management/blob/main/client/src/context/AppContext.tsx): `client/src/context/AppContext.tsx`
- [Group workspace](https://github.com/tunsopheak/team-management/blob/main/client/src/components/GroupBanner.tsx): `client/src/components/GroupBanner.tsx`
- [Task board](https://github.com/tunsopheak/team-management/blob/main/client/src/components/TaskBoard.tsx): `client/src/components/TaskBoard.tsx`
- [Daily standups](https://github.com/tunsopheak/team-management/blob/main/client/src/components/DailyFeed.tsx): `client/src/components/DailyFeed.tsx`
- [Dashboard](https://github.com/tunsopheak/team-management/blob/main/client/src/components/OverviewDashboard.tsx): `client/src/components/OverviewDashboard.tsx`
- [Members](https://github.com/tunsopheak/team-management/blob/main/client/src/components/MembersList.tsx): `client/src/components/MembersList.tsx`
- [Assignment reports](https://github.com/tunsopheak/team-management/blob/main/client/src/components/AssignmentReportModal.tsx): `client/src/components/AssignmentReportModal.tsx`
- [Sign in and register](https://github.com/tunsopheak/team-management/blob/main/client/src/components/AuthScreen.tsx): `client/src/components/AuthScreen.tsx`
- [API client](https://github.com/tunsopheak/team-management/blob/main/client/src/lib/api.ts): `client/src/lib/api.ts`

### API

- [HTTP application](https://github.com/tunsopheak/team-management/blob/main/server/app.ts): `server/app.ts`
- [Authentication](https://github.com/tunsopheak/team-management/blob/main/server/routes/auth.ts): `server/routes/auth.ts`
- [Group operations](https://github.com/tunsopheak/team-management/blob/main/server/routes/groups.ts): `server/routes/groups.ts`
- [User operations](https://github.com/tunsopheak/team-management/blob/main/server/routes/users.ts): `server/routes/users.ts`
- [Task operations](https://github.com/tunsopheak/team-management/blob/main/server/routes/tasks.ts): `server/routes/tasks.ts`
- [Daily log operations](https://github.com/tunsopheak/team-management/blob/main/server/routes/dailyLogs.ts): `server/routes/dailyLogs.ts`
- [Workspace bootstrap](https://github.com/tunsopheak/team-management/blob/main/server/routes/bootstrap.ts): `server/routes/bootstrap.ts`
- [Auth middleware](https://github.com/tunsopheak/team-management/blob/main/server/middleware/auth.ts): `server/middleware/auth.ts`

### Domain services

- [Role access](https://github.com/tunsopheak/team-management/blob/main/server/services/access.ts): `server/services/access.ts`
- [Activity logging](https://github.com/tunsopheak/team-management/blob/main/server/services/activity.ts): `server/services/activity.ts`
- [API data mapping](https://github.com/tunsopheak/team-management/blob/main/server/services/mappers.ts): `server/services/mappers.ts`

### Persistence

- [Database adapter](https://github.com/tunsopheak/team-management/blob/main/server/db/index.ts): `server/db/index.ts`

### Other components

- **People**

## Connections

- People → App shell: uses (evidence: `client/src/App.tsx`)
- App shell → Session state: provides state (evidence: `client/src/App.tsx`)
- App shell → Group workspace: renders (evidence: `client/src/App.tsx`)
- App shell → Task board: renders (evidence: `client/src/App.tsx`)
- App shell → Daily standups: renders (evidence: `client/src/App.tsx`)
- App shell → Dashboard: renders (evidence: `client/src/App.tsx`)
- App shell → Members: renders (evidence: `client/src/App.tsx`)
- App shell → Assignment reports: renders (evidence: `client/src/App.tsx`)
- App shell → Sign in and register: renders (evidence: `client/src/App.tsx`)
- Session state → API client: calls (evidence: `client/src/context/AppContext.tsx`)
- HTTP application → Authentication: mounts (evidence: `server/app.ts`)
- HTTP application → Auth middleware: protects routes (evidence: `server/app.ts`)
- HTTP application → Group operations: mounts (evidence: `server/app.ts`)
- HTTP application → User operations: mounts (evidence: `server/app.ts`)
- HTTP application → Task operations: mounts (evidence: `server/app.ts`)
- HTTP application → Daily log operations: mounts (evidence: `server/app.ts`)
- HTTP application → Workspace bootstrap: mounts (evidence: `server/app.ts`)
- Auth middleware → Database adapter: loads user (evidence: `server/middleware/auth.ts`)
- Auth middleware → API data mapping: maps user (evidence: `server/middleware/auth.ts`)
- Authentication → Database adapter: queries (evidence: `server/routes/auth.ts`)
- Authentication → Auth middleware: uses cookies (evidence: `server/routes/auth.ts`)
- Group operations → Database adapter: queries (evidence: `server/routes/groups.ts`)
- Group operations → Role access: checks permissions (evidence: `server/routes/groups.ts`)
- Group operations → Activity logging: records changes (evidence: `server/routes/groups.ts`)
- Group operations → API data mapping: maps records (evidence: `server/routes/groups.ts`)
- User operations → Database adapter: queries (evidence: `server/routes/users.ts`)
- User operations → Role access: checks permissions (evidence: `server/routes/users.ts`)
- User operations → Activity logging: records changes (evidence: `server/routes/users.ts`)
- Task operations → Database adapter: queries (evidence: `server/routes/tasks.ts`)
- Task operations → Role access: checks permissions (evidence: `server/routes/tasks.ts`)
- Task operations → Activity logging: records changes (evidence: `server/routes/tasks.ts`)
- Daily log operations → Database adapter: queries (evidence: `server/routes/dailyLogs.ts`)
- Daily log operations → Role access: checks permissions (evidence: `server/routes/dailyLogs.ts`)
- Daily log operations → Activity logging: records changes (evidence: `server/routes/dailyLogs.ts`)
- Workspace bootstrap → Database adapter: loads workspace (evidence: `server/routes/bootstrap.ts`)
- Workspace bootstrap → Role access: checks access (evidence: `server/routes/bootstrap.ts`)
- Workspace bootstrap → API data mapping: maps records (evidence: `server/routes/bootstrap.ts`)
