Repository navigation
Conversation
…cks, admin progress + submission tie-break
Judge side
- judgeApi now throws JudgeApiError (it faked {success:true} on failed score
submits/drafts/team loads — scores were silently lost).
- /judge, /judge/[event], /judge/[event]/team/[id] rebuilt on the refined design.
- Dashboard: explicit 'Adjust scores' inline editor per scored team — segmented
1–5 controls, nothing persists until 'Save changes', diff summary, Cancel/Esc
discards; locked rounds hide scoring and explain.
- Scoring page: small uncolored total (shoulder-surfing), dirty-gated draft
autosave only before first submit, explicit 'Update score' after, read-only
when locked, failed submits stay on the page with the error.
- Local MUI snackbars: the app has no notistack provider, so the old toasts
never rendered.
Admin side
- judging/JudgeProgressPanel on Round 1 + Round 2: who submitted / drafts /
missing per judge and per team, CSV, lock toggle with confirm; polls 30s.
- Round 1/2 saves use POST /api/judge/admin/assignments/bulk (one request per
panel instead of one per judge×team), falling back on 404.
- JudgingResults rewritten on one bulk-scores call; ties broken by earliest
project_submitted_at with a visible column + Tie chip (resultsRanking.js).
- Admin tabs mirror toasts through the host page's onSnack.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…y-precision ties, Round 2 wipe guard, lock state, unsaved-changes guard Judge side - Inline adjuster: Close and every other card's Adjust are disabled while a save is in flight; a result always lands on its own card (no silent 500). - "Adjust scores" is offered only when a complete stored score exists; Save requires every criterion set (backend would 400 otherwise). - Rows wrap on phones; Esc inside the feedback box no longer discards; focus returns to the Adjust button on close; ARIA radio arrow directions. - Toast no longer prints the score; "Not scored yet" uses the quiet tag. - Scoring page: total pinned at the top of a scrollable sticky aside; dirty- gated beforeunload + routeChangeStart guard; judge_score_submitted GA event; W3C reference link restored on the accessibility prize. Admin side - Results: ties compared at the displayed two decimals (never an epsilon — not transitive, reordered 14- vs 15-judge averages); only currently assigned judges' scores count (parity with the old page), unassigned shown as "not counted"; WinnerPodium at module scope; assignments no longer cached so Refresh refetches. - Round 2 save refuses an empty judge list and records a new panel before assigning (no duplicate panels on a failed call); Round 1 save skips panels with no judges or no teams instead of sending an empty replace. - JudgeProgressPanel: lock state independent of the progress load (public locks fallback, toggle disabled while unknown), array guards, refreshSignal prop instead of a key remount, orphan copy corrected. Tests: scoring-page autosave contract (never on load / submitted / locked, once after a change, draft restore), progress panel (render, lock flow, 404, unknown-lock fallback), dashboard save race + incomplete-score gate, display-precision ranking. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…es + RefinedPage shell Adds src/components/design/RefinedPage.js (RefinedPage, PageMasthead, BackLink, Prose, LinkRow, CtaBand) and an .ohx-prose class in refined.js so simple content pages share one calm shell instead of per-page MUI sx. Migrated: /404, /contact (form logic, reCAPTCHA, ?type= prefill and the mentor/judge read-first dialog unchanged), /feedback, /about/why and /about/why/[title], /about/privacy-policy (fixed LAST_UPDATED instead of today's date), /hack/liability-waiver, /hack/photo-release, /praise/[id], /hack/[event_id]/results, /hack/results, and the four /about/success-stories/<slug> case studies — now data objects rendered by SuccessStoryLayout, which also fixes their og:url (pointed at a non-existent /success-stories/… path), adds canonical + Article/Breadcrumb JSON-LD, and drops the duplicate manual pageview() call. Head/SEO meta, getStaticProps/Paths and GA events are preserved on every page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-oct-2026 feat(judging): refined judge pages, inline score adjustment, round locks, admin progress + project-submission tie-break
…aining-pages feat(design): refined civic-editorial pass on 15 remaining public pages + RefinedPage shell
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Everything on
developsince the Oct 21 release (#406): PRs #407 and #408, 5 commits. Pairs with the backend release opportunity-hack/backend-ohack.dev#308 — deploy the backend first. Older backends make the new judging controls hide themselves (404 ⇒ feature off), but locks and the progress panel only work once it is live. No new env vars, nopackage.jsonchanges.Release notes
Judging — built for ~15 judges on
/judgeat once (#407)/judge,/judge/<event>and/judge/<event>/team/<id>rebuilt on the refined design.?section=judging: a scoring progress & lock panel on Round 1 and Round 2 (who has submitted, drafts in progress, what's missing, by judge or by team, CSV, lock toggle with confirm, refreshes every 30 s); Round 1/2 saves go through one bulk request per panel; Results rewritten on one call with ties broken by the earliest project submission (new "Project submitted" column and Tie chip; only currently assigned judges count).Refined design on 15 more pages (#408)
/404,/contact,/feedback,/about/whyand its articles, privacy policy, liability waiver, photo release,/praise/<id>,/hack/<event>/results,/hack/results, and the four success-story case studies (now data on one shared layout). NewRefinedPageshell and.ohx-prosefor future content pages.og:urlpointed at a non-existent path and two social images 404'd; the privacy policy's "Last updated" printed today's date; the contact page's quick-pick pills skipped the mentor/judge read-first dialog; the success-stories index clipped cards at phone width.Prod checklist (after Vercel deploys
main)/judge/fall-2026lists your teams; on a scored team Adjust scores → change one value → Save changes → "Saved your changes for …" and the card's score line updates./admin/hackathons/fall-2026?section=judging&subtab=round2shows the progress panel (requires the backend release); Lock Round 2 scoring → a judge reloading sees "Scoring closed"; unlock restores it./contactsubmits;/about/success-stories/matthews-crossing-data-automationview-source has the/about/success-stories/…canonical;/nopeshows the refined 404.🤖 Generated with Claude Code