Skip to content

hotfix: Digital Bloom dashboard 404 and portal/hackathon split - #366

Merged
aamoghS merged 7 commits into
mainfrom
hotfix
Aug 28, 2026
Merged

hotfix: Digital Bloom dashboard 404 and portal/hackathon split#366
aamoghS merged 7 commits into
mainfrom
hotfix

Conversation

@aamoghS

@aamoghS aamoghS commented Aug 27, 2026

Copy link
Copy Markdown
Member

Problem

Opening Hacklytics: Digital Bloom from the admin Hackathons card showed Hackathon unavailable / Hackathon not found. Dashboard links used encodeURIComponent(name), so the path was Hacklytics%3A%20Digital%20Bloom — that matches neither the stored name nor the slug hacklytics-digital-bloom.

Judging Setup also let staff create a second event even when the edition already existed on the hackathon side of the portal.

The sidebar mixed club and hackathon links in one list, so membership vs guest was not obvious.

Club meetings were still nested in the hackathon: Attendees (club check-ins) lived under the Hackathon sidebar, and the check-in desk at /scan had a Club Event toggle on the same page as badge scanning.

The interest form wrote rows on Digital Bloom's id, but staff looking at that edition saw 0 registered and an empty Applications table.

Redirecting /admin/setup to /admin/judging also dropped the only control that sent assignJudgesToProjects with force: true after a CONFLICT, so a completed queue slot could refuse a rebuild with no way to confirm.

Changes

  • Admin Dashboard links now use the name slug (/admin/hackathons/hacklytics-digital-bloom), with a UUID fallback if the name has nothing sluggable.
  • hackathon.getById decodes percent-encoded names (including a double-encode from Link) so old bookmarks still resolve.
  • Removed the Judging Setup create-hackathon wizard. /admin/setup redirects to /admin/judging, where Prepare judging syncs submissions and assigns queues. After a CONFLICT (live judging or completed slots), Rebuild anyway sends force: true for the edition that refused — not whichever edition is selected if the organiser switched while the request was in flight.
  • Sidebar is two sections: Hackathon and Portal. Members get Club Portal + Dashboard under Portal; guests get Dashboard under Hackathon. Staff see the same split on admin tools. Judging Setup is gone from the nav.
  • Club tools stay on Portal: Club Hub, Club Attendees, Club Check-In (/scan/club). /scan is the hackathon badge desk only.
  • Public /events lists club meetings only and points Hacklytics at /hacklytics. The edition itinerary tab is labeled as weekend sessions, not club meetings.
  • Interest joins this edition's id. The admin card shows the interest count while announced. Applications shows this edition's interest roster instead of an empty registration table, using the parent edition status on first paint so the empty queue does not flash. The announced count shows a loading line instead of “nobody has joined” while the query is in flight.

Verification

  • pnpm test — 706 passed.
  • pnpm exec tsc --noEmit in sites/mainweb.
  • Live DB: Digital Bloom is announced, current_participants = 0, hackathon_interest = 34.
  • Browser: public /events is club-only; /hacklytics loads Digital Bloom. Admin Applications / Prepare judging need a staff session to click through.
Open in Web Open in Cursor 

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Visit the preview URL for this PR (updated for commit 2c36973):

https://hacklytics2027--pr-366-cw7dnz0z.web.app

(expires Fri, 04 Sep 2026 22:08:21 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: c48ba34db61581e25fe2978355160b5eefe0e83f

aamoghS and others added 6 commits August 27, 2026 19:06
Club meetings were showing up as a mode of the hackathon check-in desk
and as Attendees under the Hackathon sidebar. Move club attendees and
pass scanning onto Portal, leave /scan as the edition badge desk, and
stop describing the public events page as if it listed Hacklytics.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
The form already stored rows on Digital Bloom's id, but staff saw
0 registered and the edition page bounced to a singleton /hacklytics
funnel. Join against this hackathon id from Info, and show the
interest count on the admin card while the event is announced.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Digital Bloom opens on Applications, which listed zero registrations
while 34 people were already on the interest list. While the event is
announced, that tab is the interest roster for this hackathon.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Prepare judging now offers Rebuild anyway after assign CONFLICT
(force: true), matching the old /admin/setup control. Applications
uses the parent edition status so the interest roster does not wait
on a UUID getById cache miss, and the announced count no longer
reads as nobody while the query is in flight.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
A CONFLICT from edition A that resolved after the selector moved to B
used to paint A's refusal on B, and Rebuild anyway sent force: true
for B. Prep results now apply only to the run and edition that started
them, and force rebuilds that refused id.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
@aamoghS
aamoghS merged commit bdd4ec6 into main Aug 28, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant