# bbctanza/qr-attendance architecture

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

- Interactive diagram: https://gitdiagram.com/bbctanza/qr-attendance
- Repository: https://github.com/bbctanza/qr-attendance

## Overview

BBCTanza is a QR attendance and event-management web application. Staff manage events and members, scan QR codes or enter attendance manually, then review attendance history and analytics. Public-facing event check-in and display pages complement the protected staff workflow. The README documents recurring events, groups, exports, audit history with rollback, role-based access, and live updates. The graph reflects documented capabilities and the supplied source excerpts; several route-to-service details are not shown, so uncertain wiring is omitted.

Main entry points: [`src/lib/api/attendance.ts`](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/attendance.ts) (Attendance records), [`src/lib/supabase.ts`](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/supabase.ts) (Supabase client), [`src/routes/(protected)/scan/+page.svelte`](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/scan/%2Bpage.svelte) (QR scanner), [`src/lib/api/events.ts`](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/events.ts) (Event services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Application experience"]
  node_protected["Protected workspace<br/>[+layout.svelte]"]
  node_selfcheck["Event check-in<br/>[+page.svelte]"]
  node_display["Event display<br/>[+page.svelte]"]
end

subgraph group_operations["Attendance operations"]
  node_scan["QR scanner<br/>[+page.svelte]"]
  node_attendance["Attendance records<br/>[attendance.ts]"]
  node_attendanceviews["Attendance views<br/>[+page.svelte]"]
  node_history["Attendance history<br/>[+page.svelte]"]
end

subgraph group_management["Event and member management"]
  node_events["Event management<br/>[+page.svelte]"]
  node_eventapi["Event services<br/>[events.ts]"]
  node_eventtypes["Recurring templates<br/>[event_types.ts]"]
  node_automation["Event automation<br/>[automation.ts]"]
  node_members["Member management<br/>[+page.svelte]"]
  node_memberapi["Member services<br/>[members.ts]"]
  node_exports["Data exports<br/>[membersExport.ts]"]
  node_analytics["Attendance analytics<br/>[+page.svelte]"]
end

subgraph group_platform["Services and governance"]
  node_audit["Audit history and rollback<br/>[+page.svelte]"]
  node_auditedapi["Audited API<br/>[auditedApi.ts]"]
  node_invitation["Invitation service<br/>[index.ts]"]
  node_supabaseclient["Supabase client<br/>[supabase.ts]"]
  node_supabase[("Supabase")]
end

node_staff(("Staff user"))
node_attendee(("Attendee"))

node_staff -->|"uses"| node_protected
node_attendee -->|"checks in"| node_selfcheck
node_attendee -->|"views event"| node_display
node_protected -->|"opens"| node_scan
node_staff -->|"scans code"| node_scan
node_scan -->|"records check-in"| node_attendance
node_selfcheck -->|"records presence"| node_attendance
node_attendanceviews -->|"loads scans"| node_attendance
node_history -->|"loads history"| node_attendance
node_events -->|"manages events"| node_eventapi
node_events -->|"manages templates"| node_eventtypes
node_automation -->|"updates event state"| node_eventapi
node_members -->|"manages members"| node_memberapi
node_members -->|"exports records"| node_exports
node_analytics -->|"summarizes attendance"| node_attendance
node_audit -->|"reviews and restores"| node_auditedapi
node_attendance -->|"reads and writes"| node_supabaseclient
node_eventapi -->|"reads and writes"| node_supabaseclient
node_eventtypes -->|"reads and writes"| node_supabaseclient
node_memberapi -->|"reads and writes"| node_supabaseclient
node_auditedapi -->|"audits operations"| node_supabaseclient
node_supabaseclient -->|"uses"| node_supabase
node_invitation -->|"authenticates and manages users"| node_supabase

click node_protected "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/%2Blayout.svelte"
click node_selfcheck "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/check-in/%5BeventId%5D/%2Bpage.svelte"
click node_display "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/display/%5BeventId%5D/%2Bpage.svelte"
click node_scan "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/scan/%2Bpage.svelte"
click node_attendance "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/attendance.ts"
click node_attendanceviews "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/attendance/%2Bpage.svelte"
click node_history "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/history/%2Bpage.svelte"
click node_events "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/events/%2Bpage.svelte"
click node_eventapi "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/events.ts"
click node_eventtypes "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/event_types.ts"
click node_automation "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/logic/automation.ts"
click node_members "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/members/%2Bpage.svelte"
click node_memberapi "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/members.ts"
click node_exports "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/utils/membersExport.ts"
click node_analytics "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/analytics/%2Bpage.svelte"
click node_audit "https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/analytics/audit-logs/%2Bpage.svelte"
click node_auditedapi "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/auditedApi.ts"
click node_invitation "https://github.com/bbctanza/qr-attendance/blob/main/supabase/functions/invitation-service/index.ts"
click node_supabaseclient "https://github.com/bbctanza/qr-attendance/blob/main/src/lib/supabase.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_protected,node_selfcheck,node_display,node_staff toneBlue
class node_scan,node_attendance,node_attendanceviews,node_history toneAmber
class node_events,node_eventapi,node_eventtypes,node_automation,node_members,node_memberapi,node_exports,node_analytics toneMint
class node_audit,node_auditedapi,node_invitation,node_supabaseclient,node_supabase toneRose
class node_attendee toneIndigo
```

## Components

### Application experience

- [Protected workspace](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/%2Blayout.svelte): `src/routes/(protected)/+layout.svelte`
- [Event check-in](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/check-in/%5BeventId%5D/%2Bpage.svelte): `src/routes/check-in/[eventId]/+page.svelte`
- [Event display](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/display/%5BeventId%5D/%2Bpage.svelte): `src/routes/display/[eventId]/+page.svelte`

### Attendance operations

- [QR scanner](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/scan/%2Bpage.svelte): `src/routes/(protected)/scan/+page.svelte`
- [Attendance records](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/attendance.ts): `src/lib/api/attendance.ts`
- [Attendance views](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/attendance/%2Bpage.svelte): `src/routes/(protected)/attendance/+page.svelte`
- [Attendance history](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/history/%2Bpage.svelte): `src/routes/(protected)/history/+page.svelte`

### Event and member management

- [Event management](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/events/%2Bpage.svelte): `src/routes/(protected)/events/+page.svelte`
- [Event services](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/events.ts): `src/lib/api/events.ts`
- [Recurring templates](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/event_types.ts): `src/lib/api/event_types.ts`
- [Event automation](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/logic/automation.ts): `src/lib/logic/automation.ts`
- [Member management](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/members/%2Bpage.svelte): `src/routes/(protected)/members/+page.svelte`
- [Member services](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/members.ts): `src/lib/api/members.ts`
- [Data exports](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/utils/membersExport.ts): `src/lib/utils/membersExport.ts`
- [Attendance analytics](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/analytics/%2Bpage.svelte): `src/routes/(protected)/analytics/+page.svelte`

### Services and governance

- [Audit history and rollback](https://github.com/bbctanza/qr-attendance/blob/main/src/routes/(protected)/analytics/audit-logs/%2Bpage.svelte): `src/routes/(protected)/analytics/audit-logs/+page.svelte`
- [Audited API](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/api/auditedApi.ts): `src/lib/api/auditedApi.ts`
- [Invitation service](https://github.com/bbctanza/qr-attendance/blob/main/supabase/functions/invitation-service/index.ts): `supabase/functions/invitation-service/index.ts`
- [Supabase client](https://github.com/bbctanza/qr-attendance/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`
- **Supabase**

### Other components

- **Staff user**
- **Attendee**

## Connections

- Staff user → Protected workspace: uses
- Attendee → Event check-in: checks in
- Attendee → Event display: views event
- Protected workspace → QR scanner: opens
- Staff user → QR scanner: scans code
- QR scanner → Attendance records: records check-in
- Event check-in → Attendance records: records presence
- Attendance views → Attendance records: loads scans
- Attendance history → Attendance records: loads history
- Event management → Event services: manages events
- Event management → Recurring templates: manages templates
- Event automation → Event services: updates event state
- Member management → Member services: manages members
- Member management → Data exports: exports records
- Attendance analytics → Attendance records: summarizes attendance
- Audit history and rollback → Audited API: reviews and restores
- Attendance records → Supabase client: reads and writes
- Event services → Supabase client: reads and writes
- Recurring templates → Supabase client: reads and writes
- Member services → Supabase client: reads and writes
- Audited API → Supabase client: audits operations
- Supabase client → Supabase: uses
- Invitation service → Supabase: authenticates and manages users
