# asgar90/selise-event architecture

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

- Interactive diagram: https://gitdiagram.com/asgar90/selise-event
- Repository: https://github.com/asgar90/selise-event

## Overview

SELISE Events combines an anonymous event-discovery and registration site with a staff-only Host Studio CMS. Visitors browse localized events, register, and receive ticket-related email; staff authenticate through Blocks to create and publish events and manage registrations and event operations. The graph includes major documented capabilities such as scheduling, media, check-in, and email. Source excerpts are selective, so some documented subsystem links use the README as evidence; unsampled implementation details are not asserted.

Main entry points: [`src/app/[lang]`](https://github.com/asgar90/selise-event/tree/dev/src/app/%5Blang%5D) (Public pages), [`src/app/studio/(staff)`](https://github.com/asgar90/selise-event/tree/dev/src/app/studio/(staff)) (Studio interface), [`functions/register/handler.ts`](https://github.com/asgar90/selise-event/blob/dev/functions/register/handler.ts) (Registration function), [`functions/scheduler/handler.ts`](https://github.com/asgar90/selise-event/blob/dev/functions/scheduler/handler.ts) (Scheduler function)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public experience"]
  node_public_site["Public pages"]
  node_event_view["Event experience"]
  node_registration_ui["Registration form"]
  node_ticket_pages["Tickets and confirmation<br/>[page.tsx]"]
end

subgraph group_studio["Host Studio"]
  node_studio_ui["Studio interface"]
  node_event_editor["Event editor<br/>[EventEditor.tsx]"]
  node_studio_ops["Studio operations"]
  node_studio_auth["Staff authentication<br/>[session.ts]"]
end

subgraph group_domain["Event services"]
  node_event_content["Event content<br/>[event.ts]"]
  node_event_resolution["Event resolution<br/>[resolve.ts]"]
  node_registration["Registration workflow<br/>[core.ts]"]
  node_ticket_service["Ticket service<br/>[core.ts]"]
  node_email_service["Email rendering<br/>[emails.ts]"]
  node_media_service["Media delivery<br/>[serve.ts]"]
  node_scheduler["Scheduled actions<br/>[event-actions.ts]"]
end

subgraph group_backend["Blocks platform"]
  node_blocks[("SELISE Blocks")]
end

subgraph group_functions["Background functions"]
  node_register_fn["Registration function<br/>[handler.ts]"]
  node_tickets_fn["Tickets function<br/>[handler.ts]"]
  node_scheduler_fn["Scheduler function<br/>[handler.ts]"]
end

node_attendee(("Event visitor"))
node_studio_staff(("Studio staff"))
node_workflow(("Blocks workflow"))

node_attendee -->|"browses"| node_public_site
node_public_site -->|"opens events"| node_event_view
node_event_view -->|"resolves event"| node_event_resolution
node_event_view -->|"offers registration"| node_registration_ui
node_registration_ui -->|"submits registration"| node_register_fn
node_register_fn -->|"invokes"| node_registration
node_registration -->|"checks event state"| node_event_resolution
node_register_fn -->|"stores registrations"| node_blocks
node_register_fn -->|"renders notices"| node_email_service
node_registration -->|"confirms registration"| node_ticket_pages
node_attendee -->|"views tickets"| node_ticket_pages
node_ticket_pages -->|"requests ticket access"| node_tickets_fn
node_tickets_fn -->|"invokes"| node_ticket_service
node_tickets_fn -->|"reads ticket records"| node_blocks
node_studio_staff -->|"signs in"| node_studio_auth
node_studio_auth -->|"authenticates via OIDC"| node_blocks
node_studio_staff -->|"manages events"| node_studio_ui
node_studio_ui -->|"edits content"| node_event_editor
node_event_editor -->|"uses editing services"| node_studio_ops
node_studio_ops -->|"persists CMS data"| node_blocks
node_studio_ui -->|"manages media"| node_media_service
node_studio_ui -->|"manages registrations"| node_registration
node_public_site -->|"presents event content"| node_event_content
node_event_resolution -->|"interprets content"| node_event_content
node_public_site -->|"serves media"| node_media_service
node_workflow -->|"triggers schedule"| node_scheduler_fn
node_scheduler_fn -->|"runs scheduled actions"| node_scheduler
node_scheduler_fn -->|"reads and updates records"| node_blocks
node_scheduler_fn -->|"renders scheduled mail"| node_email_service

click node_public_site "https://github.com/asgar90/selise-event/tree/dev/src/app/%5Blang%5D"
click node_event_view "https://github.com/asgar90/selise-event/tree/dev/src/components/event"
click node_registration_ui "https://github.com/asgar90/selise-event/blob/dev/src/components/event/RegistrationForm.tsx"
click node_ticket_pages "https://github.com/asgar90/selise-event/blob/dev/src/app/%5Blang%5D/tickets/page.tsx"
click node_studio_ui "https://github.com/asgar90/selise-event/tree/dev/src/app/studio/(staff)"
click node_event_editor "https://github.com/asgar90/selise-event/blob/dev/src/components/studio/editor/EventEditor.tsx"
click node_studio_ops "https://github.com/asgar90/selise-event/tree/dev/src/lib/studio"
click node_studio_auth "https://github.com/asgar90/selise-event/blob/dev/src/lib/blocks/session.ts"
click node_event_content "https://github.com/asgar90/selise-event/blob/dev/src/content/event.ts"
click node_event_resolution "https://github.com/asgar90/selise-event/blob/dev/src/lib/event-page/resolve.ts"
click node_registration "https://github.com/asgar90/selise-event/blob/dev/src/lib/register/core.ts"
click node_ticket_service "https://github.com/asgar90/selise-event/blob/dev/src/lib/tickets/core.ts"
click node_email_service "https://github.com/asgar90/selise-event/blob/dev/src/lib/register/emails.ts"
click node_media_service "https://github.com/asgar90/selise-event/blob/dev/src/lib/media/serve.ts"
click node_scheduler "https://github.com/asgar90/selise-event/blob/dev/src/lib/studio/event-actions.ts"
click node_register_fn "https://github.com/asgar90/selise-event/blob/dev/functions/register/handler.ts"
click node_tickets_fn "https://github.com/asgar90/selise-event/blob/dev/functions/tickets/handler.ts"
click node_scheduler_fn "https://github.com/asgar90/selise-event/blob/dev/functions/scheduler/handler.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_public_site,node_event_view,node_registration_ui,node_ticket_pages toneBlue
class node_studio_ui,node_event_editor,node_studio_ops,node_studio_auth toneAmber
class node_event_content,node_event_resolution,node_registration,node_ticket_service,node_email_service,node_media_service,node_scheduler toneMint
class node_blocks toneRose
class node_register_fn,node_tickets_fn,node_scheduler_fn,node_attendee,node_studio_staff,node_workflow toneIndigo
```

## Components

### Public experience

- [Public pages](https://github.com/asgar90/selise-event/tree/dev/src/app/%5Blang%5D): `src/app/[lang]`
- [Event experience](https://github.com/asgar90/selise-event/tree/dev/src/components/event): `src/components/event`
- [Registration form](https://github.com/asgar90/selise-event/blob/dev/src/components/event/RegistrationForm.tsx): `src/components/event/RegistrationForm.tsx`
- [Tickets and confirmation](https://github.com/asgar90/selise-event/blob/dev/src/app/%5Blang%5D/tickets/page.tsx): `src/app/[lang]/tickets/page.tsx`

### Host Studio

- [Studio interface](https://github.com/asgar90/selise-event/tree/dev/src/app/studio/(staff)): `src/app/studio/(staff)`
- [Event editor](https://github.com/asgar90/selise-event/blob/dev/src/components/studio/editor/EventEditor.tsx): `src/components/studio/editor/EventEditor.tsx`
- [Studio operations](https://github.com/asgar90/selise-event/tree/dev/src/lib/studio): `src/lib/studio`
- [Staff authentication](https://github.com/asgar90/selise-event/blob/dev/src/lib/blocks/session.ts): `src/lib/blocks/session.ts`

### Event services

- [Event content](https://github.com/asgar90/selise-event/blob/dev/src/content/event.ts): `src/content/event.ts`
- [Event resolution](https://github.com/asgar90/selise-event/blob/dev/src/lib/event-page/resolve.ts): `src/lib/event-page/resolve.ts`
- [Registration workflow](https://github.com/asgar90/selise-event/blob/dev/src/lib/register/core.ts): `src/lib/register/core.ts`
- [Ticket service](https://github.com/asgar90/selise-event/blob/dev/src/lib/tickets/core.ts): `src/lib/tickets/core.ts`
- [Email rendering](https://github.com/asgar90/selise-event/blob/dev/src/lib/register/emails.ts): `src/lib/register/emails.ts`
- [Media delivery](https://github.com/asgar90/selise-event/blob/dev/src/lib/media/serve.ts): `src/lib/media/serve.ts`
- [Scheduled actions](https://github.com/asgar90/selise-event/blob/dev/src/lib/studio/event-actions.ts): `src/lib/studio/event-actions.ts`

### Blocks platform

- **SELISE Blocks**

### Background functions

- [Registration function](https://github.com/asgar90/selise-event/blob/dev/functions/register/handler.ts): `functions/register/handler.ts`
- [Tickets function](https://github.com/asgar90/selise-event/blob/dev/functions/tickets/handler.ts): `functions/tickets/handler.ts`
- [Scheduler function](https://github.com/asgar90/selise-event/blob/dev/functions/scheduler/handler.ts): `functions/scheduler/handler.ts`

### Other components

- **Event visitor**
- **Studio staff**
- **Blocks workflow**

## Connections

- Event visitor → Public pages: browses
- Public pages → Event experience: opens events
- Event experience → Event resolution: resolves event
- Event experience → Registration form: offers registration
- Registration form → Registration function: submits registration
- Registration function → Registration workflow: invokes (evidence: `functions/register/handler.ts`)
- Registration workflow → Event resolution: checks event state (evidence: `src/lib/register/core.ts`)
- Registration function → SELISE Blocks: stores registrations (evidence: `functions/register/handler.ts`)
- Registration function → Email rendering: renders notices (evidence: `functions/register/handler.ts`)
- Registration workflow → Tickets and confirmation: confirms registration
- Event visitor → Tickets and confirmation: views tickets
- Tickets and confirmation → Tickets function: requests ticket access
- Tickets function → Ticket service: invokes (evidence: `functions/tickets/handler.ts`)
- Tickets function → SELISE Blocks: reads ticket records (evidence: `functions/tickets/handler.ts`)
- Studio staff → Staff authentication: signs in
- Staff authentication → SELISE Blocks: authenticates via OIDC
- Studio staff → Studio interface: manages events
- Studio interface → Event editor: edits content
- Event editor → Studio operations: uses editing services
- Studio operations → SELISE Blocks: persists CMS data
- Studio interface → Media delivery: manages media
- Studio interface → Registration workflow: manages registrations
- Public pages → Event content: presents event content
- Event resolution → Event content: interprets content (evidence: `src/lib/register/core.ts`)
- Public pages → Media delivery: serves media (evidence: `src/app/[lang]/events/[slug]/share-image/route.ts`)
- Blocks workflow → Scheduler function: triggers schedule (evidence: `functions/scheduler/handler.ts`)
- Scheduler function → Scheduled actions: runs scheduled actions (evidence: `functions/scheduler/handler.ts`)
- Scheduler function → SELISE Blocks: reads and updates records (evidence: `functions/scheduler/handler.ts`)
- Scheduler function → Email rendering: renders scheduled mail (evidence: `functions/scheduler/handler.ts`)
