-
2945a92193
feat(finale): per-project presentation/Q&A durations in m:ss + config-save merge fix
main
Matt
2026-06-10 20:14:49 +02:00
-
9b56eb27fb
fix(finale): live-verification fixes — session sync on start, honest vote form, reveal panel polish
Matt
2026-06-10 19:24:45 +02:00
-
160333c2f9
fix(finale): ceremony-day rate-limit bucket — venue NAT would 429 audience polling
Matt
2026-06-10 18:45:15 +02:00
-
f7fdfdec9b
test(finale): tally audit — weighted criteria math, ordering, ties, favorites separation
Matt
2026-06-10 18:35:44 +02:00
-
a2c6baf718
feat(finale): full ceremony UI — admin console, jury phases+notes, deliberation flow, audience voting, big-screen view
Matt
2026-06-10 18:34:50 +02:00
-
c9dc1bfabd
feat(finale): deliberation jury identity resolution, rankable projects, score-revision path, session sync
Matt
2026-06-10 18:15:45 +02:00
-
4e6904fa12
feat(finale): reveal controller + public ceremony-state endpoint (no-leak guaranteed)
Matt
2026-06-10 18:12:00 +02:00
-
45b007334e
feat(finale): vote comments, by-round session lookup, my-finale-inputs query
Matt
2026-06-10 18:10:32 +02:00
-
6d2fa3369f
feat(finale): audience favorite-vote windows with category gating + IP cap
Matt
2026-06-10 18:09:02 +02:00
-
6eccfc694e
feat(finale): per-project phase machine, server timers, overtime log, juror notes
Matt
2026-06-10 18:07:02 +02:00
-
97ef3e59ac
feat(finale): server-stamped phase timer helper
Matt
2026-06-10 18:04:51 +02:00
-
a66bd728cd
feat(finale): schema for phases, audience windows, favorite votes, notes, reveal
Matt
2026-06-10 18:04:25 +02:00
-
64f88890f5
fix(auth): make audience vote, live-scores and ceremony routes public
Matt
2026-06-10 18:02:08 +02:00
-
dcd85c9b13
docs(finale): implementation plan for grand-finale ceremony system
Matt
2026-06-10 18:01:12 +02:00
-
3be1fcd24a
docs(finale): approved design spec for grand-finale ceremony system (option C)
Matt
2026-06-10 17:54:31 +02:00
-
d38fe7887a
feat(final-docs): optional-mode banner/panel + admin 'Documents shown to judges' picker
Matt
2026-06-10 15:02:19 +02:00
-
28ca7bb0a6
feat(final-docs): judge-doc curation — reviewVisibleRequirementIds filter, picker helper, admin procedures
Matt
2026-06-10 15:00:49 +02:00
-
d89f67ba57
feat(final-docs): hasRequired/allUploaded on FinalDocumentStatus for optional-uploads mode
Matt
2026-06-10 14:58:39 +02:00
-
2c311bc65a
feat(finals): prominent finalist-docs banner on jury dashboard + gate nav to finals jury
Matt
2026-06-10 14:56:02 +02:00
-
85937ec942
docs(final-docs): implementation plan for judge-doc curation + optional uploads
Matt
2026-06-09 22:06:20 +02:00
-
81352d7bd2
docs(final-docs): spec for judge-doc curation + optional revised uploads
Matt
2026-06-09 21:59:48 +02:00
-
8a4184d20f
feat(final-docs): judges see all teams' prior-round files; revised uploads behind admin toggle
Matt
2026-06-09 17:19:09 +02:00
-
f8f2d77e3b
feat(final-docs): decouple grand-final docs from LIVE_FINAL being ROUND_ACTIVE
Matt
2026-06-09 16:57:24 +02:00
-
696d7e9041
fix(final-docs): exclude dropped mentors from doc access; relative in-app reminder link
Matt
2026-06-09 16:19:16 +02:00
-
f61dcfa89a
feat(final-docs): notify mentor when a finalist uploads a Grand Final document
Matt
2026-06-09 16:07:28 +02:00
-
146691be00
fix(auth): allow /api/cron paths past middleware (self-guarded by CRON_SECRET)
Matt
2026-06-09 16:03:55 +02:00
-
e4f13aaed4
feat(final-docs): auto pre-deadline reminder cron
Matt
2026-06-09 16:00:42 +02:00
-
6e1dcc8cbf
feat(final-docs): add FinalistConfirmation.finalDocsReminderSentAt
Matt
2026-06-09 15:56:46 +02:00
-
24c7c4bc6c
feat(final-docs): Final Documents panel on team + mentor views
Matt
2026-06-09 15:53:39 +02:00
-
8c6a59bad9
feat(final-docs): mentor.getProjectFinalDocuments procedure
Matt
2026-06-09 15:50:42 +02:00
-
b66e2071f9
refactor(final-docs): shared review component reachable by jury + admin routes
Matt
2026-06-09 15:47:56 +02:00
-
df0be6bb48
feat(final-docs): judge review page + entry points
Matt
2026-06-09 15:44:37 +02:00
-
e9e072dda7
feat(final-docs): finalist document review service + procedure with finale-access gate
Matt
2026-06-09 15:36:59 +02:00
-
b0a0a71cfe
chore(final-docs): script to configure the 4 grand-final file requirements
Matt
2026-06-09 15:33:25 +02:00
-
61bf5a4032
feat(final-docs): admin manual reminder button
Matt
2026-06-09 15:31:18 +02:00
-
26709e2c9b
feat(final-docs): manual admin document-reminder blast
Matt
2026-06-09 15:26:50 +02:00
-
f3d3a21156
feat(final-docs): GRAND_FINAL_DOCS_REMINDER/SUBMITTED notification types + email template
Matt
2026-06-09 15:23:44 +02:00
-
9e058e6ad7
feat(final-docs): finalist upload banner on applicant dashboard
Matt
2026-06-09 15:21:08 +02:00
-
16e0a08f16
feat(final-docs): applicant.getFinalDocumentStatus procedure
Matt
2026-06-09 15:17:47 +02:00
-
c53ec23109
fix(final-docs): round-scope file query + guard empty-required edge case
Matt
2026-06-09 15:15:22 +02:00
-
b1923cf0e1
feat(final-docs): grand-final document status service
Matt
2026-06-09 15:09:50 +02:00
-
b757aae551
docs(grand-final): implementation plan (4 phases, TDD)
Matt
2026-06-09 14:57:19 +02:00
-
c2afa58606
docs(grand-final): 4-doc set (PDF-only), thin dedicated judge page rationale
Matt
2026-06-09 14:49:26 +02:00
-
537de07245
docs(grand-final): spec for final-document upload, mentor surfacing, judge review, notifications
Matt
2026-06-09 14:31:49 +02:00
-
a6fc697e4d
fix(auth): allow /lunch/pick public access for accountless external attendees
Matt
2026-06-05 12:18:10 +02:00
-
8d4f0bac1e
feat(logistics): external attendees self-select lunch dish via tokenized page
Matt
2026-06-05 12:04:13 +02:00
-
f2c8cc1e80
fix(logistics): Hotels tab crash — Radix SelectItem cannot have empty value
Matt
2026-06-04 19:50:18 +02:00
-
89ab5cc8e6
test(logistics): remove obsolete single-hotel test (superseded by logistics-hotels)
Matt
2026-06-04 19:25:41 +02:00
-
3bbc80332c
feat(logistics): Hotels tab — multi-hotel management + rooming assignment
Matt
2026-06-04 19:24:06 +02:00
-
9313eb96f0
feat(applicant): My Logistics shows assigned hotel + room
Matt
2026-06-04 19:21:29 +02:00
-
4cd2651f9c
feat(logistics): hotels CRUD + rooming + assignment procedures + travel email
Matt
2026-06-04 19:19:18 +02:00
-
75e63eb47f
feat(hotel): many hotels per edition + HotelStay (room assignment)
Matt
2026-06-04 19:13:52 +02:00
-
200b5e0cb9
docs(logistics): multi-hotel + rooming implementation plan
Matt
2026-06-04 19:09:49 +02:00
-
42e6b5f8c0
docs(logistics): multi-hotel + room-assignment design spec
Matt
2026-06-04 19:08:51 +02:00
-
97951deb68
feat(logistics): departure-after-arrival validation + travel/visa CSV export
Matt
2026-06-04 16:56:22 +02:00
-
53b623fb20
feat(applicant): My Logistics card (hotel/flights/visa+nationality) + confirm-page dashboard link
Matt
2026-06-04 16:53:21 +02:00
-
74cd111e3a
feat(applicant): self-service visa nationality entry
Matt
2026-06-04 16:51:01 +02:00
-
d03c705642
feat(applicant): getMyLogistics (hotel+flight+visa) + submitter-match fix
Matt
2026-06-04 16:50:14 +02:00
-
ed426a6fb4
docs(logistics): Wave 4 plan — team-facing My Logistics + travel/visa UX
Matt
2026-06-04 16:46:12 +02:00
-
ee8d65a300
feat(logistics): enable Email Templates tab
Matt
2026-06-04 16:41:39 +02:00
-
0058b2b73b
feat(logistics): Email Templates tab (toggle/subject/preview/test) + logistics in global settings
Matt
2026-06-04 16:41:33 +02:00
-
e5788b3e9d
feat(notifications): renderNotificationEmail + previewEmailTemplate + logistics sample data
Matt
2026-06-04 16:39:29 +02:00
-
27bdf8cdef
docs(logistics): Wave 3 plan — enable Email Templates tab
Matt
2026-06-04 16:36:05 +02:00
-
3f25ba112b
fix(lunch): reminder filter, recap failure surfacing, manual send-reminders
Matt
2026-06-04 16:24:01 +02:00
-
884c96c710
feat(logistics): travel-confirmed + visa-status emails to attendees
Matt
2026-06-04 16:20:21 +02:00
-
1b4ab6be18
feat(finalist): deadline reminder emails via cron
Matt
2026-06-04 16:17:19 +02:00
-
d501624c56
feat(finalist): withdrawal notification to team on decline/unconfirm/unenroll
Matt
2026-06-04 16:14:26 +02:00
-
b2826d595f
feat(finalist): admin alerts on confirm/decline/expire/promote
Matt
2026-06-04 16:11:17 +02:00
-
f529e79cd7
feat(comms): logistics notification types, templates, and email settings
Matt
2026-06-04 16:06:10 +02:00
-
0ea949309a
feat(finalist): add reminderSentAt for confirmation reminders
Matt
2026-06-04 16:02:57 +02:00
-
8afef1ecba
docs(logistics): Wave 2 plan — close the email/notification void
Matt
2026-06-04 16:02:12 +02:00
-
34bb2bad57
fix(finalist): program-scope guards on enroll/unenroll (code review)
Matt
2026-06-04 15:49:13 +02:00
-
8ee517f6ca
feat(logistics): waitlist populate UI + confirmations-tab un-confirm/re-invite actions
Matt
2026-06-04 15:36:15 +02:00
-
2a98f0cacf
feat(grand-finale): finalist enrollment card on LIVE_FINAL round page
Matt
2026-06-04 15:32:40 +02:00
-
e80710487c
feat(finalist): listEnrollmentCandidates query for enrollment UI
Matt
2026-06-04 15:29:26 +02:00
-
375aeb08af
feat(finalist): unenroll reverses round membership + confirmation
Matt
2026-06-04 15:23:50 +02:00
-
f1e62fdd3b
feat(finalist): unified enrollFinalists (round membership + confirmation + email/admin-confirm)
Matt
2026-06-04 15:20:51 +02:00
-
dde8ea9345
feat(finalist): re-invite-safe confirmation reset helper
Matt
2026-06-04 15:16:52 +02:00
-
ca9edcd038
fix(lunch): allow non-admins to read dish list (unblocks applicant picker)
Matt
2026-06-04 15:15:14 +02:00
-
647e7f09a7
docs(logistics): Wave 1 plan — finalist enrollment + BLOCKER fixes
Matt
2026-06-04 15:13:01 +02:00
-
6b37e9bb9e
fix(email): correct member-row spacing in mentor welcome emails
Matt
2026-06-02 09:11:01 +02:00
-
eb891403f1
Merge: populate roles[] on user creation (role in roles invariant)
Matt
2026-06-01 20:06:52 +02:00
-
-
60f1a53d70
fix(users): populate roles[] with primary role on user creation
Matt
2026-06-01 20:06:52 +02:00
-
-
501b4ffdb5
Merge: primary-role mentors assignable on mentor config page
Matt
2026-06-01 19:34:40 +02:00
-
-
828c09df6d
fix(mentor): primary-role mentors are selectable/assignable
Matt
2026-06-01 19:34:40 +02:00
-
-
fe7f133879
Merge: members role tabs include secondary roles
Matt
2026-06-01 18:51:11 +02:00
-
-
d4a77f63d3
fix(members): role tabs/filter include users with secondary roles
Matt
2026-06-01 18:51:11 +02:00
-
-
040e5ff9a9
Merge: brand-align mentorship welcome emails
Matt
2026-06-01 18:21:49 +02:00
-
-
652c3ed4f2
fix(email): use shared branded wrapper (logo/footer) for mentorship emails
Matt
2026-06-01 18:21:49 +02:00
-
-
ed4948cc3d
Merge: mentorship comms + welcome/reminder email
Matt
2026-06-01 17:04:36 +02:00
-
-
bd05aaa87d
feat(mentor): email all team members button on project detail
Matt
2026-06-01 16:50:00 +02:00
-
0d6f71b9e1
feat(admin): send mentorship welcome/reminder button on mentoring rounds
Matt
2026-06-01 16:46:58 +02:00
-
829b082912
feat(mentor): admin preview + send mentorship welcome/reminder email
Matt
2026-06-01 16:40:38 +02:00
-
32116dac75
feat(mentor): round-open emails now carry team-member contacts
Matt
2026-06-01 16:33:27 +02:00
-
0e221c3916
feat(email): mentorship senders forward contacts/note, return success
Matt
2026-06-01 16:29:47 +02:00
-
9d3ed1cc64
test(email): cover customNote escaping + text-path for mentorship templates
Matt
2026-06-01 16:28:32 +02:00
-
a973b1316c
feat(email): instructions + contact emails + optional note in mentorship templates
Matt
2026-06-01 16:24:31 +02:00
-
5a9821807a
docs(mentor): implementation plan for mentorship comms + welcome email
Matt
2026-06-01 16:20:05 +02:00
-
d57495be15
docs(mentor): design spec for mentorship comms + welcome/reminder email
Matt
2026-06-01 16:08:46 +02:00
-
-
03526fca97
fix(mentor): defer in-app-notification emails when mentoring round is draft
Matt
2026-05-27 13:12:41 +02:00