# palcchi/passflow architecture

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

- Interactive diagram: https://gitdiagram.com/palcchi/passflow
- Repository: https://github.com/palcchi/passflow

## Overview

PassFlow is a multi-event platform for organizers to configure events and attendees to register, claim a shared wristband/digital-pass credential, and use it at scanner stations. Its operational path runs from public event registration through credential claim to server-side scan validation and logging. Organizer tools cover event management, attendee exports, wristband printing, and Figma-based design exports; authentication and event-scoped data underpin these workflows. The README documents additional operational areas such as activity monitoring and access rules, but their implementation wiring is not shown in the sampled source.

Main entry points: [`lib/auth/session.ts`](https://github.com/palcchi/passflow/blob/main/lib/auth/session.ts) (Session And Membership), [`app/admin/page.tsx`](https://github.com/palcchi/passflow/blob/main/app/admin/page.tsx) (Organizer Dashboard), [`app/admin/events/[eventId]/export/figma/route.ts`](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/export/figma/route.ts) (Figma Design Export), [`app/api/scan/route.ts`](https://github.com/palcchi/passflow/blob/main/app/api/scan/route.ts) (Scan Validation API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity"]
  node_auth_pages["Sign In And Account<br/>[page.tsx]"]
  node_auth_actions["Auth Actions<br/>[actions.ts]"]
  node_auth_callbacks["Auth Callbacks<br/>[route.ts]"]
  node_auth_session["Session And Membership<br/>[session.ts]"]
end

subgraph group_organizer["Organizer Tools"]
  node_organizer_dashboard["Organizer Dashboard<br/>[page.tsx]"]
  node_event_admin["Event Management<br/>[page.tsx]"]
  node_event_settings["Event Settings<br/>[page.tsx]"]
  node_appearance["Event Appearance<br/>[page.tsx]"]
  node_design["Pass Design<br/>[page.tsx]"]
  node_people["Attendee Management<br/>[page.tsx]"]
  node_attendee_export["Attendee Export<br/>[route.ts]"]
  node_figma_export["Figma Design Export<br/>[route.ts]"]
  node_wristband_print["Wristband Printing<br/>[page.tsx]"]
  node_activity_monitoring["Activity And Logs"]
end

subgraph group_attendee["Attendee Access"]
  node_public_event["Public Event Page<br/>[page.tsx]"]
  node_event_actions["Event Registration<br/>[event-actions.ts]"]
  node_claim_pass["Pass Claim<br/>[page.tsx]"]
  node_scanner_ui["Scanner Station<br/>[page.tsx]"]
  node_scan_api["Scan Validation API<br/>[route.ts]"]
end

subgraph group_platform["Data And Integrations"]
  node_supabase[("Supabase")]
  node_figma_service["Figma"]
  node_event_data["Event Data Access<br/>[events.ts]"]
  node_figma_oauth["Figma Connection<br/>[route.ts]"]
  node_figma_callback["Figma Callback<br/>[route.ts]"]
end

node_organizer_actor(("Organizer"))
node_attendee_actor(("Attendee"))
node_crew_actor(("Scanner Staff"))

node_attendee_actor -->|"signs in"| node_auth_pages
node_auth_pages -->|"submits credentials"| node_auth_actions
node_auth_actions -->|"authenticates"| node_supabase
node_auth_callbacks -->|"verifies session"| node_supabase
node_auth_session -->|"checks session"| node_supabase
node_organizer_actor -->|"opens dashboard"| node_organizer_dashboard
node_organizer_dashboard -->|"requires membership"| node_auth_session
node_organizer_dashboard -->|"loads events"| node_event_data
node_event_data -->|"reads events"| node_supabase
node_organizer_actor -->|"manages event"| node_event_admin
node_event_admin -->|"requires membership"| node_auth_session
node_organizer_actor -->|"edits branding"| node_appearance
node_organizer_actor -->|"edits pass design"| node_design
node_organizer_actor -->|"manages attendees"| node_people
node_people -->|"exports attendees"| node_attendee_export
node_attendee_export -->|"reads attendee data"| node_supabase
node_design -->|"exports pass design"| node_figma_export
node_figma_export -->|"reads design and credentials"| node_supabase
node_figma_export -->|"fetches design assets"| node_figma_service
node_organizer_actor -->|"prints wristbands"| node_wristband_print
node_attendee_actor -->|"views event"| node_public_event
node_public_event -->|"loads event"| node_event_data
node_attendee_actor -->|"registers"| node_event_actions
node_event_actions -->|"creates attendee"| node_supabase
node_attendee_actor -->|"claims credential"| node_claim_pass
node_claim_pass -->|"claims pass"| node_supabase
node_crew_actor -->|"scans credential"| node_scanner_ui
node_scanner_ui -->|"submits scan"| node_scan_api
node_scan_api -->|"checks session"| node_auth_session
node_scan_api -->|"validates and logs"| node_supabase

click node_auth_pages "https://github.com/palcchi/passflow/blob/main/app/login/page.tsx"
click node_auth_actions "https://github.com/palcchi/passflow/blob/main/app/auth/actions.ts"
click node_auth_callbacks "https://github.com/palcchi/passflow/blob/main/app/auth/callback/route.ts"
click node_auth_session "https://github.com/palcchi/passflow/blob/main/lib/auth/session.ts"
click node_organizer_dashboard "https://github.com/palcchi/passflow/blob/main/app/admin/page.tsx"
click node_event_admin "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/page.tsx"
click node_event_settings "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/settings/page.tsx"
click node_appearance "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/appearance/page.tsx"
click node_design "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/design/page.tsx"
click node_people "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/people/page.tsx"
click node_attendee_export "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/export/attendees/route.ts"
click node_figma_export "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/export/figma/route.ts"
click node_public_event "https://github.com/palcchi/passflow/blob/main/app/e/%5Bslug%5D/page.tsx"
click node_event_actions "https://github.com/palcchi/passflow/blob/main/app/event-actions.ts"
click node_claim_pass "https://github.com/palcchi/passflow/blob/main/app/e/%5Bslug%5D/claim/page.tsx"
click node_wristband_print "https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/wristbands/print/page.tsx"
click node_scanner_ui "https://github.com/palcchi/passflow/blob/main/app/scan/%5BstationId%5D/page.tsx"
click node_scan_api "https://github.com/palcchi/passflow/blob/main/app/api/scan/route.ts"
click node_event_data "https://github.com/palcchi/passflow/blob/main/lib/events.ts"
click node_figma_oauth "https://github.com/palcchi/passflow/blob/main/app/api/figma/connect/route.ts"
click node_figma_callback "https://github.com/palcchi/passflow/blob/main/app/api/figma/callback/route.ts"
click node_activity_monitoring "https://github.com/palcchi/passflow/tree/main/app/admin/events/%5BeventId%5D"

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_actions,node_auth_callbacks,node_auth_session toneBlue
class node_organizer_dashboard,node_event_admin,node_event_settings,node_appearance,node_design,node_people,node_attendee_export,node_figma_export,node_wristband_print,node_activity_monitoring toneAmber
class node_public_event,node_event_actions,node_claim_pass,node_scanner_ui,node_scan_api toneMint
class node_supabase,node_figma_service,node_event_data,node_figma_oauth,node_figma_callback toneRose
class node_organizer_actor,node_attendee_actor,node_crew_actor toneIndigo
```

## Components

### Identity

- [Sign In And Account](https://github.com/palcchi/passflow/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Auth Actions](https://github.com/palcchi/passflow/blob/main/app/auth/actions.ts): `app/auth/actions.ts`
- [Auth Callbacks](https://github.com/palcchi/passflow/blob/main/app/auth/callback/route.ts): `app/auth/callback/route.ts`
- [Session And Membership](https://github.com/palcchi/passflow/blob/main/lib/auth/session.ts): `lib/auth/session.ts`

### Organizer Tools

- [Organizer Dashboard](https://github.com/palcchi/passflow/blob/main/app/admin/page.tsx): `app/admin/page.tsx`
- [Event Management](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/page.tsx): `app/admin/events/[eventId]/page.tsx`
- [Event Settings](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/settings/page.tsx): `app/admin/events/[eventId]/settings/page.tsx`
- [Event Appearance](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/appearance/page.tsx): `app/admin/events/[eventId]/appearance/page.tsx`
- [Pass Design](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/design/page.tsx): `app/admin/events/[eventId]/design/page.tsx`
- [Attendee Management](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/people/page.tsx): `app/admin/events/[eventId]/people/page.tsx`
- [Attendee Export](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/export/attendees/route.ts): `app/admin/events/[eventId]/export/attendees/route.ts`
- [Figma Design Export](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/export/figma/route.ts): `app/admin/events/[eventId]/export/figma/route.ts`
- [Wristband Printing](https://github.com/palcchi/passflow/blob/main/app/admin/events/%5BeventId%5D/wristbands/print/page.tsx): `app/admin/events/[eventId]/wristbands/print/page.tsx`
- [Activity And Logs](https://github.com/palcchi/passflow/tree/main/app/admin/events/%5BeventId%5D): `app/admin/events/[eventId]`

### Attendee Access

- [Public Event Page](https://github.com/palcchi/passflow/blob/main/app/e/%5Bslug%5D/page.tsx): `app/e/[slug]/page.tsx`
- [Event Registration](https://github.com/palcchi/passflow/blob/main/app/event-actions.ts): `app/event-actions.ts`
- [Pass Claim](https://github.com/palcchi/passflow/blob/main/app/e/%5Bslug%5D/claim/page.tsx): `app/e/[slug]/claim/page.tsx`
- [Scanner Station](https://github.com/palcchi/passflow/blob/main/app/scan/%5BstationId%5D/page.tsx): `app/scan/[stationId]/page.tsx`
- [Scan Validation API](https://github.com/palcchi/passflow/blob/main/app/api/scan/route.ts): `app/api/scan/route.ts`

### Data And Integrations

- **Supabase**
- **Figma**
- [Event Data Access](https://github.com/palcchi/passflow/blob/main/lib/events.ts): `lib/events.ts`
- [Figma Connection](https://github.com/palcchi/passflow/blob/main/app/api/figma/connect/route.ts): `app/api/figma/connect/route.ts`
- [Figma Callback](https://github.com/palcchi/passflow/blob/main/app/api/figma/callback/route.ts): `app/api/figma/callback/route.ts`

### Other components

- **Organizer**
- **Attendee**
- **Scanner Staff**

## Connections

- Attendee → Sign In And Account: signs in
- Sign In And Account → Auth Actions: submits credentials
- Auth Actions → Supabase: authenticates
- Auth Callbacks → Supabase: verifies session
- Session And Membership → Supabase: checks session
- Organizer → Organizer Dashboard: opens dashboard
- Organizer Dashboard → Session And Membership: requires membership
- Organizer Dashboard → Event Data Access: loads events
- Event Data Access → Supabase: reads events
- Organizer → Event Management: manages event
- Event Management → Session And Membership: requires membership
- Organizer → Event Appearance: edits branding
- Organizer → Pass Design: edits pass design
- Organizer → Attendee Management: manages attendees
- Attendee Management → Attendee Export: exports attendees
- Attendee Export → Supabase: reads attendee data
- Pass Design → Figma Design Export: exports pass design
- Figma Design Export → Supabase: reads design and credentials
- Figma Design Export → Figma: fetches design assets
- Organizer → Wristband Printing: prints wristbands
- Attendee → Public Event Page: views event
- Public Event Page → Event Data Access: loads event
- Attendee → Event Registration: registers
- Event Registration → Supabase: creates attendee
- Attendee → Pass Claim: claims credential
- Pass Claim → Supabase: claims pass
- Scanner Staff → Scanner Station: scans credential
- Scanner Station → Scan Validation API: submits scan
- Scan Validation API → Session And Membership: checks session
- Scan Validation API → Supabase: validates and logs
