Commit Graph

20 Commits

Author SHA1 Message Date
Jeff Emmett b02ebcacae feat: add secret early bird pricing link at /register/friends
Extracts registration form into shared component and adds promo code
support so late registrants can be offered early bird pricing (€80)
via a private URL, using the same Mollie/Sheet/booking pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 16:20:45 -07:00
Jeff Emmett a6c8f0a477 feat: add dynamic pricing tiers to CCG registration
Replace hardcoded €80 ticket price with date-based tiers:
- Early bird €80 (until Mar 31)
- Regular €120 (Apr 1 – Jun 30)
- Late €150 (Jul 1+)

Both the register page and checkout API now compute the current
tier at request time, so prices update automatically on cutoff dates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 12:45:39 -07:00
Jeff Emmett ef72526e1d feat: add 2% Mollie processing fee surcharge on top of payments
Adds a visible processing fee line item so customers cover payment
processing costs instead of having them deducted from the received amount.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:30:38 -07:00
Jeff Emmett eaf2c0ac31 fix: require email on registration, BCC contact@ on confirmations, update OG image
- Add required email field to registration form (was missing entirely,
  causing "N/A" emails in booking notifications)
- Pass email through full chain: form → API → Google Sheet → Mollie
  metadata → webhook (with Mollie billingAddress as fallback)
- BCC contact@cryptocommonsgather.ing on all payment confirmation
  emails so team is notified of every successful registration
- Replace OG image with alpine mountain card including event name,
  dates, and URL for better Twitter/social sharing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 10:58:46 -07:00
Jeff Emmett 4b78d357c0 update: accommodation pricing and confirmation email
- Commons Hub nightly rates: shared €39.20→€39.90, double €50.20→€50.90
- Herrnhof prices now stored as 7-night totals (×7) for correct checkout
- Confirmation email: food text updated, Herrnhof link removed, added office@commons-hub.at for accommodation questions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 10:41:14 -07:00
Jeff Emmett 9ae7909275 update: revise Herrnhof Villa room option wording
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:13:23 -08:00
Jeff Emmett b209f2f14b update: registration - remove food payment, add Herrnhof Villa, extend to 7 nights
- Remove food as a payment option; add note about follow-up email for food
- Restructure accommodation into two venues: Commons Hub and Herrnhof Villa
- Herrnhof Villa options: single, double (3 configs), and triple rooms
- Update event dates from Aug 16-22 to Aug 16-23 (7 nights) across all pages
- Update pricing: Commons Hub €274.40/€351.40, Herrnhof €40-€95 per person
- Update transparency page with new accommodation breakdown and food TBA
- Update API route and confirmation email to match

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:37:43 -08:00
Jeff Emmett 8f59233918 feat: swap Stripe for Mollie payment integration
Replace Stripe checkout with Mollie payments API. Mollie handles
payment method selection on their hosted checkout (card, SEPA, iDEAL,
PayPal, etc). Simpler auth model — single API key, no webhook secrets.

- Rewrite /api/create-checkout-session for Mollie payment creation
- Rewrite /api/webhook for Mollie status verification flow
- Update google-sheets.ts: stripeSessionId → paymentSessionId
- Remove payment method radio buttons (Mollie shows all methods)
- Update docker-compose env vars
- Swap stripe npm package for @mollie/api-client

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 14:30:55 -08:00
Jeff Emmett 80ab20001b feat: add sponsorships page, sponsorship deck, and registration add-ons
- Add /sponsorships page with tier overview, embedded flipbook deck, and contact CTA
- Create HTML sponsorship slide deck (12 slides) and print-optimized version for PDF/flipbook
- Create sponsor outreach email template
- Update existing outreach templates to reflect new €1k-€5k tier range
- Add opt-in checkboxes for accommodation (dorm/double) and food package on registration payment step
- Pass accommodation and food selections as separate Stripe line items for single checkout
- Store add-on selections in Stripe session metadata

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:37:58 -08:00
Jeff Emmett 3091c01819 feat: add Google Sheets registration pipeline
- Add googleapis for Google Sheets integration
- Create /api/register endpoint to record registrations with "Pending" status
- Update webhook to mark registrations as "Paid" when payment completes
- Add lib/google-sheets.ts with addRegistration and updatePaymentStatus functions
- Update docker-compose.yml with Google Sheets env vars
- Add .env.example documenting required environment variables

Flow: Form submit → Sheet (Pending) → Payment → Webhook → Sheet (Paid)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 09:43:18 +01:00
Jeff Emmett f2736fc3d3 fix: use hardcoded base URL for Stripe redirect URLs
The request.nextUrl.origin returns internal Docker address (0.0.0.0:3000)
when behind reverse proxy, causing invalid redirect after payment.
2026-01-18 19:23:28 +01:00
Jeff Emmett 13bddc06ef fix: use dynamic Stripe pricing instead of pre-created price IDs 2026-01-18 19:14:39 +01:00
Jeff Emmett 25d77b6d7f fix: use 303 redirect for checkout POST to prevent header errors
- Changed NextResponse.redirect() to Response with 303 status
- Added .gitignore file
2026-01-18 18:07:11 +01:00
v0 0a07ece5ff feat: update community photo with new discussion circle image
Improve visual appeal for homepage with new group photo.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-10 22:20:30 +00:00
v0 a1e4cf1098 feat: update footer text to reflect Creative Commons license
Align footer with commons-oriented ethos and clarify licensing.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-10 18:39:44 +00:00
Jeff Emmett 60921db465 fix: use lazy initialization for Stripe client
Prevents build-time errors when STRIPE_SECRET_KEY isn't available.
The client is now initialized on first use instead of module load.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-07 19:54:53 -08:00
v0 c17694b9b0 feat: add optional packages to registration flow
Update registration to include dynamic package selection and total.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-07 20:47:36 +00:00
v0 747204b27d feat: update color scheme to crypto Commons palette
Switch to white and red theme with proper contrast for both modes.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-07 19:54:53 +00:00
Jeff Emmett 30185941bc feat: add Docker deployment for self-hosted infrastructure
- Add Dockerfile for standalone Next.js deployment
- Add docker-compose.yml with Traefik labels for cryptocommonsgather.ing
- Fix Stripe initialization to happen at runtime (not build time)
- Update Next.js to 16.0.7 (security fix)
- Add output: 'standalone' to next.config.mjs
- Add .gitignore and .dockerignore

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 15:57:46 +01:00
v0 a3cf6995b2 feat: update color scheme to crypto-themed palette
Switch to white, red, and neutral gray for consistent contrast.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-12-06 14:22:52 +00:00