Files

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 theming
  • server/ — Go, single binary, embeds the built frontend
  • data/ — 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/photos slide 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 CronoCraft App 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