diff --git a/config.example.yaml b/config.example.yaml index d9002f1..5e4bb55 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -12,9 +12,9 @@ site: wedding: date: "2026-11-07T16:00:00+02:00" # RFC3339, guest arrival time; drives countdown + photo upload gate ceremony_time: "16:00 for 16:30" # display text - rsvp_by: "2026-09-01T00:00:00+02:00" # RFC3339, RSVP deadline; drives the RSVP countdown - venue_name: "Rivier Plaas" - venue_address: "Langenhoven Rd, Sherman Park AH, Meyerton, 1961" + rsvp_by: "2026-10-17T00:00:00+02:00" # RFC3339, RSVP deadline; drives the RSVP countdown + venue_name: "Rivier Plaas Wedding Venue" + venue_address: "Langenhoven Street, Riversdale, Meyerton, 1961" rsvp_phone: "076 925 1718" storage: diff --git a/ui/src/lib/config.ts b/ui/src/lib/config.ts index 8ee2390..fe4e7ad 100644 --- a/ui/src/lib/config.ts +++ b/ui/src/lib/config.ts @@ -3,8 +3,8 @@ export const FALLBACK_SITE_URL = "https://zoeshaldon.warky.info"; export const FALLBACK_WEDDING_DATE = "2026-11-07T16:00:00+02:00"; export const FALLBACK_CEREMONY_TIME = "16:00 for 16:30"; -export const FALLBACK_RSVP_BY_DATE = "2026-09-01T00:00:00+02:00"; -export const FALLBACK_VENUE_NAME = "Rivier Plaas"; +export const FALLBACK_RSVP_BY_DATE = "2026-10-17T00:00:00+02:00"; +export const FALLBACK_VENUE_NAME = "Rivier Plaas Wedding Venue"; export const FALLBACK_VENUE_ADDRESS = - "Langenhoven Rd, Sherman Park AH, Meyerton, 1961"; + "Langenhoven Street, Riversdale, Meyerton, 1961"; export const FALLBACK_RSVP_PHONE = "076 925 1718"; diff --git a/ui/src/routes/+layout.svelte b/ui/src/routes/+layout.svelte index 162e57a..75334d6 100644 --- a/ui/src/routes/+layout.svelte +++ b/ui/src/routes/+layout.svelte @@ -3,16 +3,26 @@ import favicon from "$lib/assets/favicon.svg"; import { page } from "$app/state"; import Countdown from "$lib/components/Countdown.svelte"; - import { createWeddingInfo } from "$lib/wedding-info.svelte"; + import { createWeddingInfo, formatFullDate } from "$lib/wedding-info.svelte"; let { children } = $props(); const wedding = createWeddingInfo(); + const metaDescription = $derived( + `Zoé & Shaldon are getting married on ${formatFullDate(wedding.date)} at ${wedding.venueName}, ${wedding.venueAddress}. Find venue directions, dress code, the order of events, and RSVP here.`, + ); + const shareDescription = $derived( + `${formatFullDate(wedding.date)} at ${wedding.venueName}, ${wedding.venueAddress}. Directions, dress code, the schedule, and RSVP.`, + ); + const links = [ { href: "/", label: "Home" }, { href: "/rsvp", label: "RSVP" }, { href: "/photos", label: "Photos" }, + { href: "/venue", label: "Venue" }, + { href: "/details", label: "Details" }, + { href: "/wedding-party", label: "Wedding Party" }, ]; let menuOpen = $state(false); @@ -26,6 +36,19 @@ Zoé & Shaldon are getting married + + + + + + + + + + + + +
{/if}
-
+
{@render children()}
diff --git a/ui/src/routes/+page.svelte b/ui/src/routes/+page.svelte index 6ec9590..74c343d 100644 --- a/ui/src/routes/+page.svelte +++ b/ui/src/routes/+page.svelte @@ -13,8 +13,12 @@
+

+ "Every love story is beautiful, but ours is my favourite." +

+

Zoé & Shaldon

@@ -34,7 +38,22 @@

{wedding.venueAddress}

-
+
+

+ Welcome to our wedding website! We are so excited to celebrate our + love with our favourite people. As our forever begins, we want to + thank you for your love and support. +

+

+ Browse the menu above to find venue directions, dress code details, + and RSVP information. +

+

+ We can't wait to see you on {formatFullDate(wedding.date)}, {wedding.ceremonyTime}! +

+
+ +
{#if !rsvpStatus.submitted} RSVP @@ -44,6 +63,12 @@ Share photos + Details
+ +

+ With love,
Zoé & Shaldon +

diff --git a/ui/src/routes/details/+page.svelte b/ui/src/routes/details/+page.svelte new file mode 100644 index 0000000..1c47523 --- /dev/null +++ b/ui/src/routes/details/+page.svelte @@ -0,0 +1,74 @@ + + +
+
+

Important Information

+

+ Please RSVP by {formatFullDate(wedding.rsvpByDate)}. +

+ +
+

Dress Code: Formal

+

+ We ask that our guests dress in formal attire. Think elegant dresses + and sharp suits. +

+
+ +
+

Food & Drinks

+

+ A delicious dinner will be served. Please note that a cash bar is + available for the evening. Card facilities will be available, but we + suggest bringing cash just in case. +

+
+ +
+

Honeymoon Fund

+

+ Your presence on our special day is the greatest gift we could ask + for. However, if you would like to honour us with a gift, a + contribution toward our future home or honeymoon would be warmly + appreciated. +

+
+ +
+

Order of Events

+

+ Zoé & Shaldon — Saturday, 7 November 2026 +

+
    + {#each events as event (event.time)} +
  • + {event.time} + {event.label} +
  • + {/each} +
+
+
+
diff --git a/ui/src/routes/venue/+page.svelte b/ui/src/routes/venue/+page.svelte new file mode 100644 index 0000000..e38b79f --- /dev/null +++ b/ui/src/routes/venue/+page.svelte @@ -0,0 +1,57 @@ + + +
+
+

The Venue

+ +
+

{wedding.venueName}

+

{wedding.venueAddress}

+
+ + + Get directions + + +
+

Parking

+

+ Secure parking is available on-site at the venue. +

+
+ +
+

Accommodation

+

Plaaskombuis Meyerton

+ +
+
+
diff --git a/ui/src/routes/wedding-party/+page.svelte b/ui/src/routes/wedding-party/+page.svelte new file mode 100644 index 0000000..2e90a19 --- /dev/null +++ b/ui/src/routes/wedding-party/+page.svelte @@ -0,0 +1,127 @@ + + +
+
+

The I-Do Crew

+

+ Meet the legendary lineup helping us make it down the aisle at Rivier + Plaas! +

+ +
+

Behind the Bride

+
    + {#each bride as person (person.name)} +
  • +

    + {person.role}: + {person.name} +

    +

    {person.note}

    +
  • + {/each} +
+
+ +
+

Behind the Groom

+
    + {#each groom as person (person.name)} +
  • +

    + {person.role}: + {person.name} +

    +

    {person.note}

    +
  • + {/each} +
+
+ +
+

The Dog-bearers

+

Roxi & Chloe Muller

+
+ +
+

A Special Note of Thanks

+

+ To some very special people in our lives who have helped us make our + day magical: +

+
    + {#each thanks as person (person.name)} +
  • + {person.name} + {person.role} +
  • + {/each} +
+

+ If there is anyone we have forgotten about, please know that you are + all special to us! +

+
+
+