# paakowtronics/geofence-attendance architecture

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

- Interactive diagram: https://gitdiagram.com/paakowtronics/geofence-attendance
- Repository: https://github.com/paakowtronics/geofence-attendance

## Overview

Geofence Attendance lets employees authenticate in a browser and submit GPS-backed clock-in/out actions; the API validates location and attendance rules, records sessions and technical evidence, and returns status. HR and administrators can retrieve audit evidence and export filtered attendance CSVs. The graph preserves the documented browser/API capabilities; unsampled frontend and backend links are shown only where README statements or excerpts support them.

Main entry points: [`apps/web/src/App.tsx`](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx) (Attendance UI), [`apps/api/src/prisma.service.ts`](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/prisma.service.ts) (Database Client), [`apps/api/src/auth/auth.service.ts`](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.service.ts) (Authentication), [`apps/api/src/auth/auth.controller.ts`](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.controller.ts) (Auth Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Employee Web App"]
  node_webapp["Attendance UI<br/>[App.tsx]"]
  node_authui["Login and Session UI<br/>[App.tsx]"]
  node_gps["Browser GPS<br/>[App.tsx]"]
end

subgraph group_api["Attendance API"]
  node_authctrl["Auth Routes<br/>[auth.controller.ts]"]
  node_authsvc["Authentication<br/>[auth.service.ts]"]
  node_attctrl["Attendance Routes"]
  node_attsvc["Attendance Rules"]
end

subgraph group_data["State and Rate Limits"]
  node_prisma["Database Client<br/>[prisma.service.ts]"]
  node_redis["Login Rate Limit<br/>[redis.service.ts]"]
  node_postgres[("PostgreSQL / PostGIS<br/>[schema.prisma]")]
  node_redisstore[("Redis")]
end

subgraph group_management["Management Reporting"]
  node_auditctrl["Audit Query"]
  node_reportctrl["Report Routes"]
  node_reportsvc["CSV Reporting<br/>[reports.service.ts]"]
end

node_employee(("Employee"))
node_manager(("HR / Admin"))

node_employee -->|"uses"| node_webapp
node_manager -->|"uses"| node_webapp
node_webapp -->|"requests location"| node_gps
node_webapp -.->|"calls API"| node_authctrl
node_authui -->|"calls API"| node_authctrl
node_authctrl -->|"delegates to"| node_authsvc
node_authsvc -->|"reads / writes"| node_prisma
node_authsvc -->|"rate limits"| node_redis
node_redis -->|"increments"| node_redisstore
node_attctrl -->|"delegates to"| node_attsvc
node_webapp -.->|"submits GPS"| node_attctrl
node_attsvc -->|"records / reads"| node_prisma
node_reportctrl -->|"delegates to"| node_reportsvc
node_reportsvc -->|"reads records"| node_prisma
node_webapp -.->|"requests CSV"| node_reportctrl
node_auditctrl -->|"reads evidence"| node_prisma
node_webapp -.->|"requests audit"| node_auditctrl
node_prisma -.->|"queries"| node_postgres

click node_webapp "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx"
click node_authui "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx"
click node_gps "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx"
click node_authctrl "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.controller.ts"
click node_authsvc "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.service.ts"
click node_attctrl "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/attendance/attendance.controller.ts"
click node_attsvc "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/attendance/attendance.service.ts"
click node_auditctrl "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/audit/audit.controller.ts"
click node_reportctrl "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/reports/reports.controller.ts"
click node_reportsvc "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/reports/reports.service.ts"
click node_prisma "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/prisma.service.ts"
click node_redis "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/redis.service.ts"
click node_postgres "https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/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_webapp,node_authui,node_gps toneBlue
class node_authctrl,node_authsvc,node_attctrl,node_attsvc toneAmber
class node_prisma,node_redis,node_postgres,node_redisstore toneMint
class node_auditctrl,node_reportctrl,node_reportsvc toneRose
class node_employee,node_manager toneIndigo
```

## Components

### Employee Web App

- [Attendance UI](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx): `apps/web/src/App.tsx`
- [Login and Session UI](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx): `apps/web/src/App.tsx`
- [Browser GPS](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/web/src/App.tsx): `apps/web/src/App.tsx`

### Attendance API

- [Auth Routes](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.controller.ts): `apps/api/src/auth/auth.controller.ts`
- [Authentication](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/auth/auth.service.ts): `apps/api/src/auth/auth.service.ts`
- [Attendance Routes](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/attendance/attendance.controller.ts): `apps/api/src/attendance/attendance.controller.ts`
- [Attendance Rules](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/attendance/attendance.service.ts): `apps/api/src/attendance/attendance.service.ts`

### State and Rate Limits

- [Database Client](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/prisma.service.ts): `apps/api/src/prisma.service.ts`
- [Login Rate Limit](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/redis.service.ts): `apps/api/src/redis.service.ts`
- [PostgreSQL / PostGIS](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/prisma/schema.prisma): `apps/api/prisma/schema.prisma`
- **Redis**

### Management Reporting

- [Audit Query](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/audit/audit.controller.ts): `apps/api/src/audit/audit.controller.ts`
- [Report Routes](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/reports/reports.controller.ts): `apps/api/src/reports/reports.controller.ts`
- [CSV Reporting](https://github.com/paakowtronics/geofence-attendance/blob/main/apps/api/src/reports/reports.service.ts): `apps/api/src/reports/reports.service.ts`

### Other components

- **Employee**
- **HR / Admin**

## Connections

- Employee → Attendance UI: uses (evidence: `README.md`)
- HR / Admin → Attendance UI: uses (evidence: `README.md`)
- Attendance UI → Browser GPS: requests location (evidence: `apps/web/src/App.tsx`)
- Attendance UI → Auth Routes: calls API
- Login and Session UI → Auth Routes: calls API (evidence: `apps/web/src/App.tsx`)
- Auth Routes → Authentication: delegates to (evidence: `apps/api/src/auth/auth.controller.ts`)
- Authentication → Database Client: reads / writes (evidence: `apps/api/src/auth/auth.service.ts`)
- Authentication → Login Rate Limit: rate limits (evidence: `apps/api/src/auth/auth.service.ts`)
- Login Rate Limit → Redis: increments (evidence: `apps/api/src/redis.service.ts`)
- Attendance Routes → Attendance Rules: delegates to (evidence: `apps/api/src/attendance/attendance.controller.ts`)
- Attendance UI → Attendance Routes: submits GPS
- Attendance Rules → Database Client: records / reads (evidence: `apps/api/src/attendance/attendance.service.ts`)
- Report Routes → CSV Reporting: delegates to (evidence: `apps/api/src/reports/reports.controller.ts`)
- CSV Reporting → Database Client: reads records (evidence: `apps/api/src/reports/reports.service.ts`)
- Attendance UI → Report Routes: requests CSV
- Audit Query → Database Client: reads evidence (evidence: `apps/api/src/audit/audit.controller.ts`)
- Attendance UI → Audit Query: requests audit
- Database Client → PostgreSQL / PostGIS: queries
