# wooseokj/wedding_invitation architecture

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

- Interactive diagram: https://gitdiagram.com/wooseokj/wedding_invitation
- Repository: https://github.com/wooseokj/wedding_invitation

## Overview

This is a TanStack Start wedding-invitation site. Guests open the invitation page to view the couple’s introduction, ceremony date, venue, photos, meal and account details, then can submit or browse guestbook messages and save the date. The page composes these sections from shared wedding content; the calendar helper supplies countdown and calendar-export behavior. Guestbook persistence uses Supabase. The graph follows documented imports and sampled calls; unsampled sections and server wiring are included only where the index supports them, so uncertain connections are omitted.

Main entry points: [`src/routes/index.tsx`](https://github.com/wooseokj/wedding_invitation/blob/main/src/routes/index.tsx) (Invitation page), [`src/lib/wedding.ts`](https://github.com/wooseokj/wedding_invitation/blob/main/src/lib/wedding.ts) (Wedding content), [`src/components/Venue.tsx`](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Venue.tsx) (Venue and transit), [`src/components/WeddingCalendar.tsx`](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/WeddingCalendar.tsx) (Wedding calendar)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_invitation["Invitation experience"]
  node_introduction["Couple introduction"]
  node_hero["Hero section<br/>[Hero.tsx]"]
  node_venue["Venue and transit<br/>[Venue.tsx]"]
  node_gallery["Photo gallery<br/>[Gallery.tsx]"]
  node_meal["Meal guide<br/>[MealGuide.tsx]"]
  node_accounts["Gift accounts<br/>[Accounts.tsx]"]
  node_calendar["Wedding calendar"]
  node_header_footer["Invitation framing<br/>[InviteHeader.tsx]"]
end

subgraph group_guestbook["Guestbook service"]
  node_guestbook_ui["Guestbook and RSVP<br/>[Guestbook.tsx]"]
  node_supabase_client["Supabase client<br/>[client.ts]"]
  node_preview_storage["Preview auth storage"]
  node_guestbook_store[("Supabase guestbook")]
end

subgraph group_shared["Shared content and behavior"]
  node_wedding_content["Wedding content<br/>[wedding.ts]"]
  node_calendar_helpers["Calendar utilities<br/>[ics.ts]"]
  node_reveal["Scroll reveal<br/>[Reveal.tsx]"]
end

subgraph group_platform["App and UI platform"]
  node_invitation_page["Invitation page<br/>[index.tsx]"]
  node_ui_primitives["UI primitives<br/>[button.tsx]"]
  node_calendar_ui["Calendar control<br/>[calendar.tsx]"]
  node_carousel_ui["Carousel control<br/>[carousel.tsx]"]
  node_dialog_ui["Dialog control<br/>[dialog.tsx]"]
  node_sheet_ui["Sheet control<br/>[sheet.tsx]"]
  node_root_route["App root<br/>[__root.tsx]"]
  node_router["Router setup<br/>[router.tsx]"]
  node_route_tree["Route tree<br/>[routeTree.gen.ts]"]
end

node_guest(("Wedding guest"))

node_guest -.->|"opens"| node_invitation_page
node_invitation_page -->|"renders"| node_introduction
node_invitation_page -->|"renders"| node_hero
node_invitation_page -->|"renders"| node_venue
node_invitation_page -->|"renders"| node_gallery
node_invitation_page -->|"renders"| node_meal
node_invitation_page -->|"renders"| node_accounts
node_invitation_page -->|"renders"| node_calendar
node_invitation_page -->|"renders"| node_guestbook_ui
node_invitation_page -->|"renders"| node_header_footer
node_invitation_page -->|"reads"| node_wedding_content
node_introduction -->|"reads"| node_wedding_content
node_hero -->|"reads"| node_wedding_content
node_venue -->|"reads"| node_wedding_content
node_venue -->|"uses"| node_carousel_ui
node_venue -->|"uses"| node_dialog_ui
node_gallery -->|"uses"| node_dialog_ui
node_meal -->|"reads"| node_wedding_content
node_accounts -->|"reads"| node_wedding_content
node_calendar -->|"reads"| node_wedding_content
node_calendar -->|"uses"| node_calendar_helpers
node_header_footer -->|"reads"| node_wedding_content
node_header_footer -->|"uses"| node_calendar_helpers
node_calendar_helpers -->|"reads"| node_wedding_content
node_guestbook_ui -->|"queries"| node_supabase_client
node_supabase_client -.->|"reads and writes"| node_guestbook_store
node_supabase_client -->|"configures"| node_preview_storage
node_accounts -->|"uses"| node_reveal
node_gallery -->|"uses"| node_reveal
node_guestbook_ui -->|"uses"| node_reveal
node_venue -->|"uses"| node_reveal
node_calendar -->|"uses"| node_calendar_ui
node_router -->|"registers"| node_route_tree
node_route_tree -->|"routes to"| node_invitation_page
node_route_tree -->|"uses"| node_root_route

click node_invitation_page "https://github.com/wooseokj/wedding_invitation/blob/main/src/routes/index.tsx"
click node_introduction "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/CoupleIntroduction.tsx"
click node_hero "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Hero.tsx"
click node_venue "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Venue.tsx"
click node_gallery "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Gallery.tsx"
click node_meal "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/MealGuide.tsx"
click node_accounts "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Accounts.tsx"
click node_calendar "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/WeddingCalendar.tsx"
click node_header_footer "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/InviteHeader.tsx"
click node_guestbook_ui "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Guestbook.tsx"
click node_supabase_client "https://github.com/wooseokj/wedding_invitation/blob/main/src/integrations/supabase/client.ts"
click node_preview_storage "https://github.com/wooseokj/wedding_invitation/blob/main/src/integrations/supabase/previewAuthStorage.ts"
click node_wedding_content "https://github.com/wooseokj/wedding_invitation/blob/main/src/lib/wedding.ts"
click node_calendar_helpers "https://github.com/wooseokj/wedding_invitation/blob/main/src/lib/ics.ts"
click node_reveal "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Reveal.tsx"
click node_ui_primitives "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/button.tsx"
click node_calendar_ui "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/calendar.tsx"
click node_carousel_ui "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/carousel.tsx"
click node_dialog_ui "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/dialog.tsx"
click node_sheet_ui "https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/sheet.tsx"
click node_root_route "https://github.com/wooseokj/wedding_invitation/blob/main/src/routes/__root.tsx"
click node_router "https://github.com/wooseokj/wedding_invitation/blob/main/src/router.tsx"
click node_route_tree "https://github.com/wooseokj/wedding_invitation/blob/main/src/routeTree.gen.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_introduction,node_hero,node_venue,node_gallery,node_meal,node_accounts,node_calendar,node_header_footer toneBlue
class node_guestbook_ui,node_supabase_client,node_preview_storage,node_guestbook_store toneAmber
class node_wedding_content,node_calendar_helpers,node_reveal toneMint
class node_invitation_page,node_ui_primitives,node_calendar_ui,node_carousel_ui,node_dialog_ui,node_sheet_ui,node_root_route,node_router,node_route_tree toneRose
class node_guest toneIndigo
```

## Components

### Invitation experience

- [Couple introduction](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/CoupleIntroduction.tsx): `src/components/CoupleIntroduction.tsx`
- [Hero section](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Hero.tsx): `src/components/Hero.tsx`
- [Venue and transit](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Venue.tsx): `src/components/Venue.tsx`
- [Photo gallery](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Gallery.tsx): `src/components/Gallery.tsx`
- [Meal guide](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/MealGuide.tsx): `src/components/MealGuide.tsx`
- [Gift accounts](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Accounts.tsx): `src/components/Accounts.tsx`
- [Wedding calendar](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/WeddingCalendar.tsx): `src/components/WeddingCalendar.tsx`
- [Invitation framing](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/InviteHeader.tsx): `src/components/InviteHeader.tsx`

### Guestbook service

- [Guestbook and RSVP](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Guestbook.tsx): `src/components/Guestbook.tsx`
- [Supabase client](https://github.com/wooseokj/wedding_invitation/blob/main/src/integrations/supabase/client.ts): `src/integrations/supabase/client.ts`
- [Preview auth storage](https://github.com/wooseokj/wedding_invitation/blob/main/src/integrations/supabase/previewAuthStorage.ts): `src/integrations/supabase/previewAuthStorage.ts`
- **Supabase guestbook**

### Shared content and behavior

- [Wedding content](https://github.com/wooseokj/wedding_invitation/blob/main/src/lib/wedding.ts): `src/lib/wedding.ts`
- [Calendar utilities](https://github.com/wooseokj/wedding_invitation/blob/main/src/lib/ics.ts): `src/lib/ics.ts`
- [Scroll reveal](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/Reveal.tsx): `src/components/Reveal.tsx`

### App and UI platform

- [Invitation page](https://github.com/wooseokj/wedding_invitation/blob/main/src/routes/index.tsx): `src/routes/index.tsx`
- [UI primitives](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/button.tsx): `src/components/ui/button.tsx`
- [Calendar control](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/calendar.tsx): `src/components/ui/calendar.tsx`
- [Carousel control](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/carousel.tsx): `src/components/ui/carousel.tsx`
- [Dialog control](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/dialog.tsx): `src/components/ui/dialog.tsx`
- [Sheet control](https://github.com/wooseokj/wedding_invitation/blob/main/src/components/ui/sheet.tsx): `src/components/ui/sheet.tsx`
- [App root](https://github.com/wooseokj/wedding_invitation/blob/main/src/routes/__root.tsx): `src/routes/__root.tsx`
- [Router setup](https://github.com/wooseokj/wedding_invitation/blob/main/src/router.tsx): `src/router.tsx`
- [Route tree](https://github.com/wooseokj/wedding_invitation/blob/main/src/routeTree.gen.ts): `src/routeTree.gen.ts`

### Other components

- **Wedding guest**

## Connections

- Wedding guest → Invitation page: opens
- Invitation page → Couple introduction: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Hero section: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Venue and transit: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Photo gallery: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Meal guide: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Gift accounts: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Wedding calendar: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Guestbook and RSVP: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Invitation framing: renders (evidence: `src/routes/index.tsx`)
- Invitation page → Wedding content: reads (evidence: `src/routes/index.tsx`)
- Couple introduction → Wedding content: reads (evidence: `src/components/CoupleIntroduction.tsx`)
- Hero section → Wedding content: reads (evidence: `src/components/Hero.tsx`)
- Venue and transit → Wedding content: reads (evidence: `src/components/Venue.tsx`)
- Venue and transit → Carousel control: uses (evidence: `src/components/Venue.tsx`)
- Venue and transit → Dialog control: uses (evidence: `src/components/Venue.tsx`)
- Photo gallery → Dialog control: uses (evidence: `src/components/Gallery.tsx`)
- Meal guide → Wedding content: reads (evidence: `src/components/MealGuide.tsx`)
- Gift accounts → Wedding content: reads (evidence: `src/components/Accounts.tsx`)
- Wedding calendar → Wedding content: reads (evidence: `src/components/WeddingCalendar.tsx`)
- Wedding calendar → Calendar utilities: uses (evidence: `src/components/WeddingCalendar.tsx`)
- Invitation framing → Wedding content: reads (evidence: `src/components/InviteHeader.tsx`)
- Invitation framing → Calendar utilities: uses
- Calendar utilities → Wedding content: reads (evidence: `src/lib/ics.ts`)
- Guestbook and RSVP → Supabase client: queries (evidence: `src/components/Guestbook.tsx`)
- Supabase client → Supabase guestbook: reads and writes
- Supabase client → Preview auth storage: configures (evidence: `src/integrations/supabase/client.ts`)
- Gift accounts → Scroll reveal: uses (evidence: `src/components/Accounts.tsx`)
- Photo gallery → Scroll reveal: uses (evidence: `src/components/Gallery.tsx`)
- Guestbook and RSVP → Scroll reveal: uses (evidence: `src/components/Guestbook.tsx`)
- Venue and transit → Scroll reveal: uses (evidence: `src/components/Venue.tsx`)
- Wedding calendar → Calendar control: uses (evidence: `src/components/WeddingCalendar.tsx`)
- Router setup → Route tree: registers (evidence: `src/router.tsx`)
- Route tree → Invitation page: routes to (evidence: `src/routeTree.gen.ts`)
- Route tree → App root: uses (evidence: `src/routeTree.gen.ts`)
