47 Commits

Author SHA1 Message Date
d3a4554b0d fix: links 2026-04-06 18:05:29 +02:00
71b85d6874 chore: fmt 2026-04-01 14:42:24 +02:00
7b3d5461ef feat: kamp page 2026-04-01 14:18:07 +02:00
56942275b8 feat: add homepage selector 2026-03-29 16:28:12 +02:00
ee0e9e68a9 feat(admin): add birthdate & postcode 2026-03-19 10:28:07 +01:00
f113770348 feat(registration): add birthdate & postcode 2026-03-19 10:15:45 +01:00
19d784b2e5 feat(drinkkaart): implement QR scan and balance deduction interface
Convert /drinkkaart route from a redirect to a full admin scanning interface.
Add flow: scan QR → resolve user → select amount → confirm deduction → success.
Refactor QrScanner to use Html5Qrcode API for better control and cleanup.
Update event date/time to April 24, 2026 at 19:30.

BREAKING CHANGE: /drinkkaart now requires admin role and provides scanner UI
instead of redirecting to /account.
2026-03-15 14:47:36 +01:00
0d99f7c5f5 feat(registration): add watcher capacity limits and update pricing
Add 70-person capacity limit for watchers with real-time availability checks.
Update drink card pricing to €5 per person (was €5 base + €2 per guest).
Add feature flag to bypass registration countdown.
Show under-review notice for performer registrations.
Update FAQ performance duration from 5-7 to 5 minutes.
2026-03-14 19:37:52 +01:00
3a2e403ee9 Update event date to 24 april, add venue, add Ichtus Antwerpen as co-sponsor
- Change event date from 18 to 24 april across all pages, hero, meta and constants
- Add venue (Lange Winkelstraat 5, 2000 Antwerpen) to contact page, Q&A, and transactional emails
- Add LOCATION constant to packages/api/src/constants.ts
- Add Ichtus Antwerpen (ichtusantwerpen.com) as co-sponsor in footer and contact page
- Add location info card to confirmation, update, payment reminder and payment confirmation emails
2026-03-11 18:17:40 +01:00
e5d2b13b21 feat(email): route all email sends through Cloudflare Queue
Introduces a CF Queue binding (kk-email-queue) to decouple email
delivery from request handlers, preventing slow responses and
providing automatic retries. All send*Email calls now go through
the queue when the binding is available, with direct-send fallbacks
for local dev. Reminder fan-outs mark DB rows optimistically before
enqueueing to prevent re-enqueue on subsequent cron ticks.
2026-03-11 17:13:35 +01:00
0c8e827cda feat: set opening date! 2026-03-11 12:37:01 +01:00
42156209d8 fix(signup): when signing up for the event and already logged in, set the email of the account 2026-03-11 12:29:37 +01:00
569ee4ec40 fix(admin): fix search (or vs and), remove sticky header 2026-03-11 12:03:08 +01:00
29250f8694 fix: resolve biome lint warnings in admin page (useless fragment, non-null assertion) 2026-03-11 11:55:00 +01:00
f214660ab2 feat: redesign admin page with dense ops-tool aesthetic and expandable rows
- Replace generic card layout with near-black background and monospace data display
- Add expandable rows for guest details, notes/questions, and performer details
- Fix duplicate stat cards (artiesten/bezoekers were shown twice)
- Fix gift revenue card showing wrong value (stats.today → totalGiftRevenue)
- Fix mobile card view to use accessible <button> for expandable rows
- Remove unused Users and Card component imports
2026-03-11 11:52:26 +01:00
ba0804db30 fix: performers shouldnt see payment badge 2026-03-11 11:47:54 +01:00
d25f4aa813 feat: show real attendee count with guests in admin, expandable guest details, fix CSV export 2026-03-11 11:37:51 +01:00
8a6d3035cb fix: small issues 2026-03-11 11:29:11 +01:00
0a849bd9c5 fix: Hide payment badge for performers with no payment obligation
Performers have nothing to pay unless they added a voluntary gift.
Only show PaymentBadge when registrationType is 'watcher' or giftAmount
> 0.
2026-03-11 11:27:19 +01:00
17c6315dad Simplify registration flow: mandatory signup redirect, payment emails, payment reminder cron
- EventRegistrationForm/WatcherForm/PerformerForm: remove session/login nudge/SuccessScreen;
  both roles redirect to /login?signup=1&email=<email>&next=/account after submit
- SuccessScreen.tsx deleted (no longer used)
- account.tsx: add 'Betaal nu' CTA via checkoutMutation (shown when watcher + paymentStatus pending)
- DB schema: add paymentReminderSentAt column to registration table
- Migration: 0008_payment_reminder_sent_at.sql
- email.ts: update registrationConfirmationHtml / sendConfirmationEmail with signupUrl param;
  add sendPaymentReminderEmail and sendPaymentConfirmationEmail functions
- routers/index.ts: wire payment reminder into runSendReminders() — queries watchers
  with paymentStatus pending, paymentReminderSentAt IS NULL, createdAt <= now-3days
- mollie.ts webhook: call sendPaymentConfirmationEmail after marking registration paid
2026-03-11 11:17:24 +01:00
e59a588a9d feat: confetti
Closes #5
2026-03-11 10:45:40 +01:00
dfc8ace186 feat: add password reset flow
- Add /forgot-password and /reset-password routes (Dutch UI)
- Wire sendResetPassword into emailAndPassword config (not a plugin)
- Send styled HTML email via nodemailer with 1-hour expiry
- Add 'Wachtwoord vergeten?' link on login page
- Update routeTree.gen.ts with new routes
2026-03-11 09:43:32 +01:00
439bbc5545 feat(web): set test open date 2026-03-11 09:22:01 +01:00
89043c60a3 feat(web): add Cloudflare Worker server entry with scheduled reminders
Sets up the server handler using TanStack React Start and implements
a scheduled event handler to run reminder tasks via Cloudflare cron triggers.
2026-03-10 16:29:56 +01:00
7eabe88d30 feat: reminder email opt-in 1 hour before registration opens 2026-03-10 15:48:41 +01:00
d180a33d6e feat: hoe inschrijven 2026-03-10 14:31:36 +01:00
cf47f25a4d feat: gate registration behind 16 March 2026 19:00 opening date
- Add REGISTRATION_OPENS_AT const in lib/opening.ts as single source of truth
- Add useRegistrationOpen hook with live 1s countdown ticker
- Add CountdownBanner component (DD/HH/MM/SS) with canvas-confetti on open
- EventRegistrationForm shows countdown instead of form while closed
- Login page hides/disables signup while closed; login always available
- WatcherForm AccountModal guards signUp call as defence-in-depth

Closes #2
2026-03-10 13:18:30 +01:00
2f0dc46469 fix:small ux&content fixes 2026-03-05 16:28:22 +01:00
3f5bb61e35 feat:mollie and footer 2026-03-05 16:08:33 +01:00
835f0941dc fix:improved admin dashboard on mobile 2026-03-04 16:25:46 +01:00
f9d79c3879 feat:UX and fix drinkkaart payment logic 2026-03-04 14:22:42 +01:00
79869a9a21 feat:drinkkaart 2026-03-03 23:52:49 +01:00
b8cefd373d feat:gifts 2026-03-03 16:34:13 +01:00
e6f52e6a73 fix:manage edit for extra bezoekers payments 2026-03-03 14:32:07 +01:00
0a1d1db9ec feat:simplify dx and improve payment functions 2026-03-03 14:02:29 +01:00
b9e5c44588 feat:payments 2026-03-03 12:33:44 +01:00
f6c2bad9df feat:multiple bezoekers 2026-03-03 11:06:24 +01:00
1210b2e13e feat:favicon and age info 2026-03-03 08:54:50 +01:00
3c439649f9 feat:add registration management with token-based access
Add management tokens to registrations allowing users to view, edit, and
cancel their registration via a unique URL. Implement email
notifications
for confirmations, updates, and cancellations using nodemailer. Simplify
art forms grid from 6 to 4 items and remove trajectory links. Translate
footer links to Dutch and fix matzah spelling in info section.
2026-03-03 08:54:33 +01:00
37d9a415eb feat:accessibility, new routes, cookie consent, and UI improvements
- Add contact, privacy, and terms pages
- Add CookieConsent component with accept/decline and localStorage
- Add self-hosted DM Sans font with @font-face definitions
- Improve registration form with field validation, blur handlers, and
performer toggle
- Redesign Info section with 'Ongedesemd Brood' hero and FAQ layout
- Remove scroll-snap behavior from all sections
- Add reduced motion support and selection color theming
- Add SVG favicon and SEO meta tags in root layout
- Improve accessibility: aria attributes, semantic HTML, focus styles
- Add link-hover underline animation utility
2026-03-02 20:45:48 +01:00
b343314931 feat:admin 2026-03-02 16:42:15 +01:00
7b5aa7af4f feat:analytics 2026-03-02 15:31:24 +01:00
5d8c3b3e77 fix:mobile hero view 2026-03-02 15:13:19 +01:00
973b07e177 fix:fonts 2026-03-02 15:13:09 +01:00
65d5ab71d7 webpage start 2026-03-02 14:47:14 +01:00
0856e154b9 blank slate 2026-02-24 11:47:34 +01:00
47f9a25834 initial commit 2026-02-24 11:35:17 +01:00