Convert single-step registration into a two-step flow:
- Step 1: Registration info → saves to JSON + Google Sheet with awaiting_payment status
- Step 2: Accommodation selection + price summary → creates Mollie checkout → redirects
On payment completion, Mollie webhook updates status, assigns bed on booking sheet,
sends confirmation email, and adds to Listmonk.
New files: api/booking-sheet.js, payment-success.html
New routes: /api/create-checkout-session, /api/mollie/webhook, /api/payment-status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update default SMTP_USER and EMAIL_FROM to use the domain-specific
newsletter mailbox instead of the shared noreply@jeffemmett.com address.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Switch from GOOGLE_CREDENTIALS env var (JSON string) to file-based
service account loading via GOOGLE_SERVICE_ACCOUNT_FILE, with fallback
to the env var for backwards compatibility. Mount the service account
JSON as a read-only volume. Add tls.rejectUnauthorized=false for
Mailcow self-signed cert.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All email sending now uses mail.rmail.online as the SMTP host,
replacing the legacy mx.jeffemmett.com hostname.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replaced HTTP API calls with direct database insertions
- More reliable than API auth which requires session tokens in Listmonk v5+
- Added pg package for PostgreSQL connectivity
- Handles both new subscribers and existing ones (updates attributes)
- Merges WORLDPLAY attributes with any existing subscriber data
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New registrations with newsletter=yes are automatically added to WORLDPLAY list
- Stores registration metadata (role, interests, location) as subscriber attributes
- Handles existing subscribers by adding them to the list
- Connected to Listmonk via internal Docker network
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Registration data sent to Google Sheet (all fields)
- Confirmation email sent via Resend
- Beautiful HTML email template matching site design
- Both integrations are optional (gracefully disabled if not configured)
Environment variables needed:
- RESEND_API_KEY: Resend API key for emails
- GOOGLE_SHEET_ID: Google Sheet ID for registrations
- GOOGLE_CREDENTIALS: Service account JSON credentials
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Health check was using localhost which resolved to IPv6 [::1],
but the server binds to 0.0.0.0. Changed to 127.0.0.1.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added worldplay.art and www.worldplay.art to Traefik router
- Updated www redirect to point to worldplay.art
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Express server with health check
- Single-page HTML site
- Docker + docker-compose setup
- Traefik integration for worldplay.jeffemmett.com
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>