Commit Graph

84 Commits

Author SHA1 Message Date
Jeff Emmett 24ffd8bd60 fix: use correct booking sheet tab name 'Occupancy' instead of 'Sheet1'
CI/CD / deploy (push) Failing after 1m59s Details
The CCG booking spreadsheet tab is named 'Occupancy', not 'Sheet1'.
Updated defaults in docker-compose, route, booking-sheet lib, and env example.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:02:15 -04:00
Jeff Emmett 9da7883c14 Merge remote-tracking branch 'gitea/main' into dev
CI/CD / deploy (push) Failing after 2m36s Details
2026-04-15 11:49:13 -04:00
Jeff Emmett ebd22ccb91 feat: dynamic accommodation availability + sold-out UI
- Add /api/accommodation-availability endpoint with 2-min cache + room filtering
- Fetch availability on mount, disable sold-out radio options
- Redirect booking notifications to jeff@jeffemmett.com for testing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 11:48:43 -04:00
Jeff Emmett d6e33f12e3 fix: remove Herrnhof Villa from accommodation options
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 11:34:25 -04:00
Jeff Emmett 7275b5db58 Merge branch 'dev'
CI/CD / deploy (push) Failing after 1m57s Details
2026-04-02 16:26:33 -07:00
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 5dc3b08509 ci: retrigger pipeline 2026-04-02 15:01:10 -07:00
Jeff Emmett 708f50691f fix(ci): use SSH-based container status check for smoke test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 15:04:15 -07:00
Jeff Emmett 40c3946479 ci: use internal registry (bypass Cloudflare upload limit)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:43:34 -07:00
Jeff Emmett 476e634f1e ci: add Gitea Actions CI/CD pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:25:48 -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 cdaf09e14d fix: correct Telegram group links across registration and homepage
- Fix success page and register page Telegram links to use CCG26 group
- Fix CCA Telegram link typo on homepage (extra 'N' in invite code)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 13:47:11 -07:00
Jeff Emmett b8567b0f54 feat: add food interest tracking to registration flow
Add "I would like to include food for the week" checkbox to the payment
step with co-producing meals messaging. Track food interest in Google
Sheets as column Q ("Want Food").

- Add wantFood field to RegistrationData interface
- Add interactive food checkbox replacing static note in payment step
- Pass wantFood through register API to Google Sheets
- Expand sheet ranges from A:P to A:Q, add "Want Food" header
- Preserve food column on payment status updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:42:23 -07:00
Jeff Emmett c64c4fb554 merge: reconcile gitea/main with local main
Resolve trivial BCC conflict - both sides added the same BCC to
contact@cryptocommonsgather.ing, keeping the constant reference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:19:21 -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 7ee34a167d chore: add backlog-notify onStatusChange hook
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 15:30:48 -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 45b94e4ed2 feat: auto-assign room bookings on payment and notify contact@
- Add booking-sheet.ts: parses booking spreadsheet, finds first available
  bed matching accommodation type, writes guest name across date columns
- Expand registration sheet to columns O-P (Accommodation Venue/Type)
- Webhook now assigns room booking (best-effort) on successful payment
- Send internal notification to contact@ with assignment details and flags
- Confirmation email shows assigned room; updated food/accommodation copy
- Add test script for end-to-end verification
- Add BOOKING_SHEET_ID/NAME to env and docker-compose configs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 14:04:23 -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 bd92cd184a BCC registration confirmations to contact@cryptocommonsgather.ing
Organizers now receive a copy of every successful payment confirmation
email so they're notified of new registrations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:49:56 +00:00
Jeff Emmett 28f1c6bb81 update: improve SEO - absolute OG image URLs, add sitemap and robots.txt
- Use absolute URLs for OG/Twitter images (required by LinkedIn, WhatsApp)
- Add image type and descriptive alt text for OG image
- Add robots.txt allowing all crawlers
- Add dynamic sitemap.xml with all public pages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:49:59 -08:00
Jeff Emmett e1673e9205 update: replace OG thumbnail with Commons Hub tulip photo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:28:02 -08:00
Jeff Emmett ddbdd95191 update: reorder accommodation/food notices, remove referral reward text
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:24:07 -08: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 e007df4959 update: improve registration confirmation email
Add food & accommodation reminder (Hub + Herrnhof), remove
contributions section, note upcoming follow-up emails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 17:06:09 -08:00
Jeff Emmett 40aa97c933 update: sponsorship deck artifacts, README, tsconfig, blog draft, backlog task
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:41:42 -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 3b63d62b95 feat: add page-flip animation, click and swipe navigation to deck viewer
Click left/right halves to navigate. Swipe on touch devices. 3D
perspective page-flip animation on transitions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:11:06 -08:00
Jeff Emmett 811190abd8 fix: replace react-pageflip with simple single-slide viewer
Drop the flipbook library — it couldn't reliably force single-page
mode. Replace with a CSS translateX carousel that shows exactly one
slide at a time with smooth transitions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:07:01 -08:00
Jeff Emmett 13719826ba feat: add "Register to Attend" link to footer across all pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:02:39 -08:00
Jeff Emmett 5c04c7c254 fix: force single-page flipbook mode on sponsorship page
Set width to 3000 so portrait mode always triggers, showing one slide
at a time instead of two-page spread.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:57:58 -08:00
Jeff Emmett 5d07257b6e feat: embed flipbook deck on sponsorship page, add photo strip
Replace external iframe with react-pageflip flipbook component using
pre-rendered slide images (1.3MB total vs 17MB PDF). Add 3-photo strip
between stats and tiers sections. Swap CTA background image. Update
generate_sponsor_docs.py to export slide JPGs and copy PDF to public/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:38:22 -08:00
Jeff Emmett 55b9b2d125 update: deck stats (60+ participants, 15+ countries), remove duplicate stats, add Valley of the Commons
- Changed 100+ participants to 60+, 25+ countries to 15+ throughout both decks
- Removed "44,850 Friendships Made" and "2 Movements Spawned" stat cards
- Restructured impact slide to 2-column layout with movements text
- Added Valley of the Commons bonus callout to CTA slide
- Added "Sponsor the continuation of a legacy" heading on sponsorships page
- Updated sponsorships page countries to 15+
- Fixed duplicate cover page (stale page-000 removed from flipbook)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:59:51 -08:00
Jeff Emmett b8ad5dc8f5 fix: change early bird deadline from April 30 to March 31
Updated all references to early bird registration closing date
across registration page, transparency page, twitter thread,
sponsorship package docs, and sponsor doc generator.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:42:34 -08:00
Jeff Emmett 4123a576b5 update: swap hero/CTA images, bigger infinity, reorder teams
- Move community group photo to hero banner, Commons Hub house to CTA
- Remove "44,850 Friendships Made" stat
- Make infinity symbol much larger (text-7xl/8xl)
- Put Commons Stack and BlockScience first in team lists
- Cache-bust embedded flipbook iframe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:35:36 -08:00
Jeff Emmett b778a9fe22 update: sponsorship stats, budget, and terminology
- Total attendees 400+ → 300+
- Replace "Projects Incubated" with "44,850 Friendships Made"
- Replace "Return Rate" with "∞ Real Value Produced"
- Add Commons Stack, BlockScience, zkNetwork to attendee teams
- "pass" → "event ticket", "full access pass" → "event ticket, lodging and food"
- Budget: food €8,500, venue €5,000, accessibility €3,500, add design & marketing €2,000
- Reorder budget items highest to lowest, new total €25,000
- Revenue: ticket sales ~€7k, food contributions ~€8.5k, sponsorship gap ~€10-15k

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:19:59 -08:00
Jeff Emmett 44f09908f5 feat: add staging docker-compose for staging-ccg.jeffemmett.com
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:43:42 -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 c22655e345 fix: remove @vercel/analytics import (not on Vercel)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:29:43 -08:00
Jeff Emmett 1a54a11089 fix: remove --frozen-lockfile to allow lockfile update during build
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:25:45 -08:00
Jeff Emmett 823102b908 feat: add confirmation emails and Listmonk newsletter sync
- Add nodemailer SMTP integration for payment confirmation emails
  via newsletter@cryptocommonsgather.ing
- Add Listmonk PostgreSQL integration for newsletter subscriber sync
- Update webhook to send confirmation email after Stripe payment
- Add SMTP and Listmonk env vars to docker-compose

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:23:21 -08:00
Jeff Emmett 7a16b4c884 Add .dockerignore for optimized Docker builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:48:29 -07:00
Jeff Emmett f82cd57aa9 feat: add email subscribe CTAs, Valley of the Commons section, update button text
- Add Ghost blog newsletter subscribe form (blog.crypto-commons.org) in hero and bottom CTA sections
- Update register buttons to "Register Now to Save Your Seat!"
- Add Valley of the Commons section with weekly themes and overlap info

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 11:30:09 +00:00
Jeff Emmett 42a406f46c Add missing project files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:20:02 +01:00
Jeff Emmett 7154a3a70c docs: add CCG26 sponsorship package with multiple formats
- Full sponsorship package (MD, HTML, PDF, PPTX)
- One-pager for quick outreach
- Email templates for sponsor outreach
- Python script to regenerate PDF/PPTX from content

Sponsorship tiers: Mycelium (€10k), Spore (€5k), Symbiont (€2.5k), Friend (€1k)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 02:21:27 +00:00
Jeff Emmett 7d3321cae2 chore: initialize backlog and add CCG26 twitter thread task
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:21:41 +00:00
Jeff Emmett ed2a83331e docs: add Twitter thread for CCG26 promotion
10-tweet thread covering event details, themes, format, and registration info.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:20:50 +00:00
Jeff Emmett 0a79a12f2f chore: update pnpm-lock.yaml for googleapis
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 09:44:45 +01: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