# bayside-hub/bayside-hub-demo architecture

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

- Interactive diagram: https://gitdiagram.com/bayside-hub/bayside-hub-demo
- Repository: https://github.com/bayside-hub/bayside-hub-demo

## Overview

Bayside Hub is a school community portal for students and staff. Students sign in, browse announcements, clubs, events, calendars and opportunities, then use club membership, event RSVP and support workflows; staff and admins review submissions and manage content and roles. Next.js route components expose these workflows, domain libraries load and normalize content, and Supabase provides authentication and persistent data. The README documents additional capabilities such as club chat, attendance, finance and governance; these are represented at their exact route-directory level because their implementations were not sampled. Connections are limited to README statements and indexed imports.

Main entry points: [`src/lib/supabase/server.ts`](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/supabase/server.ts) (Supabase server client), [`src/app/page.tsx`](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/page.tsx) (Home dashboard), [`src/lib/search.ts`](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/search.ts) (Search aggregation), [`src/lib/events.ts`](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/events.ts) (Events and calendar data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Student experience"]
  node_home["Home dashboard<br/>[page.tsx]"]
  node_announcements["Announcements<br/>[announcements.ts]"]
  node_announcement_routes["Announcement pages"]
  node_opportunities["Opportunities<br/>[opportunities.ts]"]
  node_search_api["Search endpoint<br/>[route.ts]"]
  node_search_logic["Search aggregation<br/>[search.ts]"]
end

subgraph group_clubs["Clubs and events"]
  node_clubs_lib["Club directory data<br/>[clubs.ts]"]
  node_club_routes["Club workflows"]
  node_events_lib["Events and calendar data<br/>[events.ts]"]
  node_calendar_routes["Calendar views"]
  node_event_routes["Event workflows"]
end

subgraph group_operations["Staff operations"]
  node_admin_routes["Administration"]
  node_support_routes["Support requests"]
  node_notifications["Notifications"]
end

subgraph group_platform["Platform services"]
  node_auth["Identity and roles<br/>[auth.ts]"]
  node_auth_callback["Sign-in callback<br/>[route.ts]"]
  node_hub_shell["Hub application shell<br/>[hub-shell.tsx]"]
  node_seed_data["Seed content and shared models<br/>[data.ts]"]
  node_supabase_server["Supabase server client<br/>[server.ts]"]
  node_supabase_auth["Auth session settings<br/>[auth-session.ts]"]
  node_analytics["Analytics endpoint<br/>[route.ts]"]
end

node_student(("Student or staff"))
node_database[("Supabase database and auth")]

node_student -->|"signs in"| node_auth_callback
node_auth_callback -->|"creates session"| node_supabase_server
node_auth_callback -->|"checks email"| node_auth
node_auth -->|"loads identity"| node_supabase_server
node_supabase_server -->|"configures cookies"| node_supabase_auth
node_supabase_server -->|"connects to"| node_database
node_student -->|"opens portal"| node_home
node_home -->|"loads feed"| node_announcements
node_home -->|"loads clubs"| node_clubs_lib
node_home -->|"loads events"| node_events_lib
node_home -->|"loads listings"| node_opportunities
node_home -->|"renders within"| node_hub_shell
node_hub_shell -->|"loads user"| node_auth
node_student -->|"browses announcements"| node_announcement_routes
node_announcement_routes -->|"loads content"| node_announcements
node_student -->|"browses and joins"| node_club_routes
node_club_routes -->|"loads directory data"| node_clubs_lib
node_student -->|"views calendar"| node_calendar_routes
node_student -->|"views and RSVPs"| node_event_routes
node_event_routes -->|"loads event data"| node_events_lib
node_calendar_routes -.->|"uses calendar data"| node_events_lib
node_student -->|"browses listings"| node_opportunities
node_student -->|"searches portal"| node_search_api
node_search_api -->|"gets results"| node_search_logic
node_search_logic -->|"queries clubs"| node_clubs_lib
node_search_logic -->|"queries announcements"| node_announcements
node_search_logic -->|"queries events"| node_events_lib
node_search_logic -->|"queries listings"| node_opportunities
node_student -->|"requests help"| node_support_routes
node_student -->|"staff manages portal"| node_admin_routes
node_admin_routes -.->|"guards access"| node_auth
node_student -.->|"views updates"| node_notifications
node_home -->|"uses shared models"| node_seed_data
node_announcements -->|"reads published content"| node_supabase_server
node_clubs_lib -->|"reads club data"| node_supabase_server
node_events_lib -->|"reads event data"| node_supabase_server
node_opportunities -->|"reads listings"| node_supabase_server
node_student -.->|"sends usage events"| node_analytics
node_analytics -->|"records events"| node_supabase_server
node_admin_routes -.->|"manages domain records"| node_database
node_club_routes -.->|"membership and governance"| node_database

click node_home "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/page.tsx"
click node_announcements "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/announcements.ts"
click node_announcement_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/announcements"
click node_opportunities "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/opportunities.ts"
click node_search_api "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/api/search/route.ts"
click node_search_logic "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/search.ts"
click node_clubs_lib "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/clubs.ts"
click node_club_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/clubs"
click node_events_lib "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/events.ts"
click node_calendar_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/calendar"
click node_event_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/events"
click node_admin_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/admin"
click node_support_routes "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/support"
click node_notifications "https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/notifications"
click node_auth "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/auth.ts"
click node_auth_callback "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/auth/callback/route.ts"
click node_hub_shell "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/components/hub-shell.tsx"
click node_seed_data "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/data.ts"
click node_supabase_server "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/supabase/server.ts"
click node_supabase_auth "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/supabase/auth-session.ts"
click node_analytics "https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/api/analytics/route.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_home,node_announcements,node_announcement_routes,node_opportunities,node_search_api,node_search_logic toneBlue
class node_clubs_lib,node_club_routes,node_events_lib,node_calendar_routes,node_event_routes,node_database toneAmber
class node_admin_routes,node_support_routes,node_notifications toneMint
class node_auth,node_auth_callback,node_hub_shell,node_seed_data,node_supabase_server,node_supabase_auth,node_analytics toneRose
class node_student toneIndigo
```

## Components

### Student experience

- [Home dashboard](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Announcements](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/announcements.ts): `src/lib/announcements.ts`
- [Announcement pages](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/announcements): `src/app/(hub)/announcements`
- [Opportunities](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/opportunities.ts): `src/lib/opportunities.ts`
- [Search endpoint](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/api/search/route.ts): `src/app/api/search/route.ts`
- [Search aggregation](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/search.ts): `src/lib/search.ts`

### Clubs and events

- [Club directory data](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/clubs.ts): `src/lib/clubs.ts`
- [Club workflows](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/clubs): `src/app/(hub)/clubs`
- [Events and calendar data](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/events.ts): `src/lib/events.ts`
- [Calendar views](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/calendar): `src/app/(hub)/calendar`
- [Event workflows](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/events): `src/app/(hub)/events`

### Staff operations

- [Administration](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/admin): `src/app/(hub)/admin`
- [Support requests](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/support): `src/app/(hub)/support`
- [Notifications](https://github.com/bayside-hub/bayside-hub-demo/tree/main/src/app/(hub)/notifications): `src/app/(hub)/notifications`

### Platform services

- [Identity and roles](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Sign-in callback](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/auth/callback/route.ts): `src/app/auth/callback/route.ts`
- [Hub application shell](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/components/hub-shell.tsx): `src/components/hub-shell.tsx`
- [Seed content and shared models](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/data.ts): `src/lib/data.ts`
- [Supabase server client](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/supabase/server.ts): `src/lib/supabase/server.ts`
- [Auth session settings](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/lib/supabase/auth-session.ts): `src/lib/supabase/auth-session.ts`
- [Analytics endpoint](https://github.com/bayside-hub/bayside-hub-demo/blob/main/src/app/api/analytics/route.ts): `src/app/api/analytics/route.ts`

### Other components

- **Student or staff**
- **Supabase database and auth**

## Connections

- Student or staff → Sign-in callback: signs in (evidence: `README.md`)
- Sign-in callback → Supabase server client: creates session (evidence: `src/app/auth/callback/route.ts`)
- Sign-in callback → Identity and roles: checks email (evidence: `src/app/auth/callback/route.ts`)
- Identity and roles → Supabase server client: loads identity (evidence: `src/lib/auth.ts`)
- Supabase server client → Auth session settings: configures cookies (evidence: `src/lib/supabase/server.ts`)
- Supabase server client → Supabase database and auth: connects to (evidence: `src/lib/supabase/server.ts`)
- Student or staff → Home dashboard: opens portal (evidence: `README.md`)
- Home dashboard → Announcements: loads feed (evidence: `src/app/page.tsx`)
- Home dashboard → Club directory data: loads clubs (evidence: `src/app/page.tsx`)
- Home dashboard → Events and calendar data: loads events (evidence: `src/app/page.tsx`)
- Home dashboard → Opportunities: loads listings (evidence: `src/app/page.tsx`)
- Home dashboard → Hub application shell: renders within (evidence: `src/app/page.tsx`)
- Hub application shell → Identity and roles: loads user (evidence: `src/components/hub-shell.tsx`)
- Student or staff → Announcement pages: browses announcements (evidence: `README.md`)
- Announcement pages → Announcements: loads content (evidence: `src/app/(hub)/announcements/feed.xml/route.ts`)
- Student or staff → Club workflows: browses and joins (evidence: `README.md`)
- Club workflows → Club directory data: loads directory data (evidence: `src/lib/clubs.ts`)
- Student or staff → Calendar views: views calendar (evidence: `README.md`)
- Student or staff → Event workflows: views and RSVPs (evidence: `README.md`)
- Event workflows → Events and calendar data: loads event data
- Calendar views → Events and calendar data: uses calendar data
- Student or staff → Opportunities: browses listings (evidence: `README.md`)
- Student or staff → Search endpoint: searches portal
- Search endpoint → Search aggregation: gets results (evidence: `src/app/api/search/route.ts`)
- Search aggregation → Club directory data: queries clubs (evidence: `src/lib/search.ts`)
- Search aggregation → Announcements: queries announcements (evidence: `src/lib/search.ts`)
- Search aggregation → Events and calendar data: queries events (evidence: `src/lib/search.ts`)
- Search aggregation → Opportunities: queries listings (evidence: `src/lib/search.ts`)
- Student or staff → Support requests: requests help (evidence: `README.md`)
- Student or staff → Administration: staff manages portal (evidence: `README.md`)
- Administration → Identity and roles: guards access (evidence: `src/app/(hub)/admin/audit/export/route.ts`)
- Student or staff → Notifications: views updates
- Home dashboard → Seed content and shared models: uses shared models (evidence: `src/app/page.tsx`)
- Announcements → Supabase server client: reads published content (evidence: `src/lib/announcements.ts`)
- Club directory data → Supabase server client: reads club data (evidence: `src/lib/clubs.ts`)
- Events and calendar data → Supabase server client: reads event data (evidence: `src/lib/events.ts`)
- Opportunities → Supabase server client: reads listings (evidence: `src/lib/opportunities.ts`)
- Student or staff → Analytics endpoint: sends usage events
- Analytics endpoint → Supabase server client: records events (evidence: `src/app/api/analytics/route.ts`)
- Administration → Supabase database and auth: manages domain records (evidence: `README.md`)
- Club workflows → Supabase database and auth: membership and governance (evidence: `README.md`)
