Commit Graph

18 Commits

Author SHA1 Message Date
Ryan Chen fe5cdd92a1 Dedupe RSVPs and add tests for auto-RSVP on claim
Add migration to clean up duplicate RSVPs (keep earliest per event+name).
Add GetRsvpByName and DeleteDuplicateRsvps queries. Tests cover auto-RSVP
creation, duplicate prevention, and case-insensitive matching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 22:55:21 -04:00
Ryan Chen 087becdf58 Auto-RSVP when claiming a slot
Claiming a slot now also adds the person to the going list if they
aren't already there (case-insensitive name match).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 22:53:17 -04:00
Ryan Chen 78ac8f3677 Add /healthz endpoint
Returns 200 ok if the DB is reachable, 503 if not.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 22:51:00 -04:00
Ryan Chen 3a6a4b6e9c Fix schema init crash on existing DBs with old verification_codes table
Move auth-related indexes into migrations so they run after column
additions. Previously CREATE INDEX on verification_codes(identifier)
would fail because the old table still had the email column.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 09:26:26 -04:00
Ryan Chen 997bc8c1c6 Allow token-only admin access for events with no owner
Skip the user ownership check when event.user_id is NULL so
existing events created before auth still work with their
admin links.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 09:07:26 -04:00
Ryan Chen d68a6629ac Gate admin routes behind auth and add copy guest link button
When auth is enabled, admin pages require the logged-in user to be
the event owner — unauthorized visitors get redirected to the guest
view, and admin actions return 403. Also adds a copy-to-clipboard
button in the admin bar and a Makefile for common commands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 09:06:16 -04:00
Ryan Chen a0c4b28d1e Support both email and phone login
Auto-detect whether the user entered an email or phone number.
Email sends via Resend, phone sends via Twilio SMS. Users table
has nullable phone and email columns; verification_codes uses a
generic identifier field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 08:53:29 -04:00
Ryan Chen 471cc3ad8c Switch to phone auth via Twilio SMS and add feature flag system
Replace email-based auth (Resend) with phone-based auth (Twilio SMS).
Add BBQ_FEATURES env var for toggling features at deploy time — when
auth is disabled, no login routes are registered and the app works
as before.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 08:45:15 -04:00
Ryan Chen b3203a7506 Include slot claimers in the Going list
The Going section now shows both RSVPs and people who claimed slots,
deduplicated by name (case-insensitive). Claim-only people don't get a
remove button—they unclaim from the slot card instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-17 08:12:09 -04:00
Ryan Chen 7b0efb3c45 Add markdown event descriptions for hosts to provide context
Hosts can now add a free-form description (with markdown rendering via
goldmark) when creating or editing events. Descriptions render safely
with no raw HTML passthrough. Includes ALTER TABLE migration for
existing databases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-17 08:02:24 -04:00
Ryan Chen 4fc79d4491 Rename PORT to HOST_PORT in compose to avoid conflict with Go server
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 15:58:44 -04:00
Ryan Chen 26d1622f83 Support custom PORT in compose.yaml via .env
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 15:55:30 -04:00
Ryan Chen 53baf3a9c4 Add .env file support to compose.yaml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 15:53:01 -04:00
Ryan Chen 6a70135a5d Add dynamic OG image generation for rich iMessage/social previews
Generates a branded 1200x630 PNG per event with title, date/time/location
using Go's image package and a custom bitmap font. Supports BBQ_BASE_URL
env var for absolute URLs required by link preview crawlers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 15:50:24 -04:00
Ryan Chen ef3aa3e9c3 Harden inputs: sanitize lengths, request size limits, caps on slots/rsvps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 10:28:06 -04:00
Ryan Chen d51e7fe867 Add RSVP support and Open Graph meta tags
People can now RSVP without claiming a slot. OG tags show
event title, date/time/location, and headcount in link previews.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 10:18:36 -04:00
Ryan Chen 2b08f81c8d Add README with build and deploy instructions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 22:57:24 -04:00
Ryan Chen 8b32d98267 Initial commit: potluck signup app
Go + chi + SQLite + HTMX with SSE live updates.
Soft Brutalism design, emoji picker, Docker deploy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 22:55:54 -04:00