# axeldelc/timeflow architecture

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

- Interactive diagram: https://gitdiagram.com/axeldelc/timeflow
- Repository: https://github.com/axeldelc/timeflow

## Overview

TimeFlow is a small-business timekeeping and workforce-planning web app. Employees sign in to clock in or out, review their sessions and schedule, and submit overtime or schedule-change requests; administrators manage accounts, review attendance, and maintain schedules and restrictions. Express routes handle these workflows, with Prisma-backed PostgreSQL state and Svelte calendar views for scheduling. The graph reflects the README and sampled source; unsampled views and modules are included only where documented capabilities or the source index support them.

Main entry points: [`src/db/prisma.js`](https://github.com/axeldelc/timeflow/blob/main/src/db/prisma.js) (Prisma client), [`src/app.js`](https://github.com/axeldelc/timeflow/blob/main/src/app.js) (Express app), [`src/routes/employee.routes.js`](https://github.com/axeldelc/timeflow/blob/main/src/routes/employee.routes.js) (Employee actions), [`src/routes/admin.routes.js`](https://github.com/axeldelc/timeflow/blob/main/src/routes/admin.routes.js) (Admin operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Web application"]
  node_express["Express app<br/>[app.js]"]
end

subgraph group_identity["Identity and access"]
  node_login["Login and logout<br/>[auth.routes.js]"]
  node_setup["Initial admin setup<br/>[setup.routes.js]"]
  node_access["Access middleware<br/>[auth.middleware.js]"]
end

subgraph group_attendance["Timekeeping"]
  node_admin["Admin operations<br/>[admin.routes.js]"]
  node_employee["Employee actions<br/>[employee.routes.js]"]
  node_sessions["Work session model"]
end

subgraph group_planning["Scheduling"]
  node_admin_schedule["Admin schedule routes<br/>[schedule.routes.js]"]
  node_schedule_rules["Schedule validation"]
  node_admin_calendar["Admin calendar"]
  node_employee_calendar["Employee calendar"]
  node_calendar_mount["Calendar mounting<br/>[main.js]"]
  node_admin_schedule_page["Admin schedule page<br/>[schedule.ejs]"]
  node_employee_schedule_page["Employee schedule page<br/>[schedule.ejs]"]
end

subgraph group_persistence["Persistence"]
  node_database_client["Prisma client<br/>[prisma.js]"]
  node_postgres[("PostgreSQL data<br/>[schema.prisma]")]
end

node_people(("Employees and admins"))

node_people -->|"use web app"| node_express
node_express -->|"mounts routes"| node_setup
node_express -->|"mounts routes"| node_login
node_express -->|"mounts routes"| node_admin
node_express -->|"mounts routes"| node_employee
node_express -->|"mounts routes"| node_admin_schedule
node_express -->|"checks setup"| node_access
node_login -->|"looks up users"| node_database_client
node_setup -->|"creates admin"| node_database_client
node_admin -->|"requires admin"| node_access
node_employee -->|"requires auth"| node_access
node_admin -->|"queries attendance"| node_database_client
node_employee -->|"starts and ends"| node_sessions
node_sessions -->|"reads and writes"| node_database_client
node_employee -->|"reads schedule"| node_database_client
node_employee -->|"records requests"| node_database_client
node_admin_schedule -->|"requires admin"| node_access
node_admin_schedule -->|"validates slots"| node_schedule_rules
node_admin_schedule -->|"manages schedules"| node_database_client
node_schedule_rules -->|"checks weekly hours"| node_database_client
node_admin -->|"loads schedule"| node_database_client
node_employee -->|"renders schedule"| node_employee_schedule_page
node_admin -->|"renders schedule"| node_admin_schedule_page
node_calendar_mount -->|"mounts calendar"| node_admin_calendar
node_calendar_mount -->|"mounts calendar"| node_employee_calendar
node_postgres -->|"stores application data"| node_database_client

click node_express "https://github.com/axeldelc/timeflow/blob/main/src/app.js"
click node_login "https://github.com/axeldelc/timeflow/blob/main/src/routes/auth.routes.js"
click node_setup "https://github.com/axeldelc/timeflow/blob/main/src/routes/setup.routes.js"
click node_access "https://github.com/axeldelc/timeflow/blob/main/src/middlewares/auth.middleware.js"
click node_admin "https://github.com/axeldelc/timeflow/blob/main/src/routes/admin.routes.js"
click node_employee "https://github.com/axeldelc/timeflow/blob/main/src/routes/employee.routes.js"
click node_sessions "https://github.com/axeldelc/timeflow/blob/main/src/models/workSession.model.js"
click node_admin_schedule "https://github.com/axeldelc/timeflow/blob/main/src/routes/schedule.routes.js"
click node_schedule_rules "https://github.com/axeldelc/timeflow/blob/main/src/services/schedule.service.js"
click node_admin_calendar "https://github.com/axeldelc/timeflow/blob/main/src/frontend/components/CalendarAdmin.svelte"
click node_employee_calendar "https://github.com/axeldelc/timeflow/blob/main/src/frontend/components/CalendarEmployee.svelte"
click node_calendar_mount "https://github.com/axeldelc/timeflow/blob/main/src/frontend/main.js"
click node_admin_schedule_page "https://github.com/axeldelc/timeflow/blob/main/src/views/admin/schedule.ejs"
click node_employee_schedule_page "https://github.com/axeldelc/timeflow/blob/main/src/views/employee/schedule.ejs"
click node_database_client "https://github.com/axeldelc/timeflow/blob/main/src/db/prisma.js"
click node_postgres "https://github.com/axeldelc/timeflow/blob/main/prisma/schema.prisma"

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_express toneBlue
class node_login,node_setup,node_access toneAmber
class node_admin,node_employee,node_sessions toneMint
class node_admin_schedule,node_schedule_rules,node_admin_calendar,node_employee_calendar,node_calendar_mount,node_admin_schedule_page,node_employee_schedule_page toneRose
class node_database_client,node_postgres,node_people toneIndigo
```

## Components

### Web application

- [Express app](https://github.com/axeldelc/timeflow/blob/main/src/app.js): `src/app.js`

### Identity and access

- [Login and logout](https://github.com/axeldelc/timeflow/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Initial admin setup](https://github.com/axeldelc/timeflow/blob/main/src/routes/setup.routes.js): `src/routes/setup.routes.js`
- [Access middleware](https://github.com/axeldelc/timeflow/blob/main/src/middlewares/auth.middleware.js): `src/middlewares/auth.middleware.js`

### Timekeeping

- [Admin operations](https://github.com/axeldelc/timeflow/blob/main/src/routes/admin.routes.js): `src/routes/admin.routes.js`
- [Employee actions](https://github.com/axeldelc/timeflow/blob/main/src/routes/employee.routes.js): `src/routes/employee.routes.js`
- [Work session model](https://github.com/axeldelc/timeflow/blob/main/src/models/workSession.model.js): `src/models/workSession.model.js`

### Scheduling

- [Admin schedule routes](https://github.com/axeldelc/timeflow/blob/main/src/routes/schedule.routes.js): `src/routes/schedule.routes.js`
- [Schedule validation](https://github.com/axeldelc/timeflow/blob/main/src/services/schedule.service.js): `src/services/schedule.service.js`
- [Admin calendar](https://github.com/axeldelc/timeflow/blob/main/src/frontend/components/CalendarAdmin.svelte): `src/frontend/components/CalendarAdmin.svelte`
- [Employee calendar](https://github.com/axeldelc/timeflow/blob/main/src/frontend/components/CalendarEmployee.svelte): `src/frontend/components/CalendarEmployee.svelte`
- [Calendar mounting](https://github.com/axeldelc/timeflow/blob/main/src/frontend/main.js): `src/frontend/main.js`
- [Admin schedule page](https://github.com/axeldelc/timeflow/blob/main/src/views/admin/schedule.ejs): `src/views/admin/schedule.ejs`
- [Employee schedule page](https://github.com/axeldelc/timeflow/blob/main/src/views/employee/schedule.ejs): `src/views/employee/schedule.ejs`

### Persistence

- [Prisma client](https://github.com/axeldelc/timeflow/blob/main/src/db/prisma.js): `src/db/prisma.js`
- [PostgreSQL data](https://github.com/axeldelc/timeflow/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

### Other components

- **Employees and admins**

## Connections

- Employees and admins → Express app: use web app (evidence: `README.md`)
- Express app → Initial admin setup: mounts routes (evidence: `src/app.js`)
- Express app → Login and logout: mounts routes (evidence: `src/app.js`)
- Express app → Admin operations: mounts routes (evidence: `src/app.js`)
- Express app → Employee actions: mounts routes (evidence: `src/app.js`)
- Express app → Admin schedule routes: mounts routes (evidence: `src/app.js`)
- Express app → Access middleware: checks setup (evidence: `src/app.js`)
- Login and logout → Prisma client: looks up users (evidence: `src/routes/auth.routes.js`)
- Initial admin setup → Prisma client: creates admin (evidence: `src/routes/setup.routes.js`)
- Admin operations → Access middleware: requires admin (evidence: `src/routes/admin.routes.js`)
- Employee actions → Access middleware: requires auth (evidence: `src/routes/employee.routes.js`)
- Admin operations → Prisma client: queries attendance (evidence: `src/routes/admin.routes.js`)
- Employee actions → Work session model: starts and ends (evidence: `src/routes/employee.routes.js`)
- Work session model → Prisma client: reads and writes (evidence: `src/models/workSession.model.js`)
- Employee actions → Prisma client: reads schedule (evidence: `src/routes/employee.routes.js`)
- Employee actions → Prisma client: records requests (evidence: `src/routes/employee.routes.js`)
- Admin schedule routes → Access middleware: requires admin (evidence: `src/routes/schedule.routes.js`)
- Admin schedule routes → Schedule validation: validates slots (evidence: `src/routes/schedule.routes.js`)
- Admin schedule routes → Prisma client: manages schedules (evidence: `src/routes/schedule.routes.js`)
- Schedule validation → Prisma client: checks weekly hours (evidence: `src/services/schedule.service.js`)
- Admin operations → Prisma client: loads schedule (evidence: `src/routes/admin.routes.js`)
- Employee actions → Employee schedule page: renders schedule (evidence: `src/routes/employee.routes.js`)
- Admin operations → Admin schedule page: renders schedule (evidence: `src/routes/admin.routes.js`)
- Calendar mounting → Admin calendar: mounts calendar (evidence: `src/frontend/main.js`)
- Calendar mounting → Employee calendar: mounts calendar (evidence: `src/frontend/main.js`)
- PostgreSQL data → Prisma client: stores application data (evidence: `README.md`)
