3.2 KiB
Zoé & Shaldon — Wedding Site
Save-the-date / RSVP / guest photo-upload site. Wedding: 7 November 2026. Accessed via QR code from the printed save-the-date. Hosted at https://zoeshaldon.warky.info.
See PLAN.md for full design.
Stack
ui/— SvelteKit (static adapter), Tailwind + Skeleton themingserver/— Go, single binary, embeds the built frontenddata/— runtime SQLite DB + guest-uploaded photos (gitignored, not yet created)
Status
Working prototype. ui/ builds and server/ serves it + the API, verified locally (RSVP, gated photo upload, countdown). Not yet run via Docker end-to-end; SMTP not yet configured. See PLAN.md "Prototype status" for the current gap list.
Develop locally
cd ui && npm install && npm run build # outputs ui/build
rm -rf server/web/dist && cp -r ui/build server/web/dist
cd ../server && go build -o wedding-server .
cp ../config.example.yaml ../config.yaml # edit the wedding date/SMTP/etc.
CONFIG_PATH=../config.yaml ./wedding-server # serves on :8080
Requirements
- Countdown to the wedding date, with day/date/time and venue, on the landing page.
- Landing page background: photos from
ui/assets/photosslide in/out continuously behind the hero content. - RSVP form: one or more guest names (add/remove rows, at least one required), message (optional) — no email/phone captured → saved + emailed to couple. Shows the RSVP deadline and its own countdown.
- Photo upload: name (required), message (optional), email/phone (optional) + photo files → saved to
data/photos/, links emailed to couple. - Photo upload only opens 7 November 2026 (same date drives the countdown) — enforced server-side, not just hidden in the UI.
- Venue, RSVP deadline, and RSVP phone number sourced from the formal invitation (
concept/IMG-20260811-WA0020.jpg).
Repo layout
ui/ SvelteKit frontend (assets/photos/ = curated background photos, checked in)
server/ Go backend (API + static file serving)
data/ runtime data (gitignored)
concept/ source assets (save-the-date image)
config.example.yaml config template (checked in)
config.yaml real config: date, SMTP, storage path (gitignored)
Dockerfile multi-stage: build ui -> build server -> runtime image
docker-compose.yml wedding app, published to 127.0.0.1:8080 only
Config
Copy config.example.yaml to config.yaml and fill in the wedding date, SMTP settings, storage path, and (if enabled) the Origin service key. Path is resolved from CONFIG_PATH (default ./config.yaml) — that's the only env var; everything else lives in the file.
When origin.service_key is configured, the server registers itself with Origin as the generic service type named ZoeShaldon immediately at startup and repeats the check-in every 24 hours. Registration failures are logged without taking down the wedding site. Leave the key empty to disable registration.
Run with Docker
Runs behind an existing Apache reverse proxy on the host (Apache owns TLS for zoeshaldon.warky.info) — see PLAN.md for the Apache vhost config. Not yet verified end-to-end.
cp config.example.yaml config.yaml # edit it first
docker compose up --build