Skip to content

feat(voting): integrate ballots into project discovery - #146

Merged
HazAT merged 7 commits into
masterfrom
feat/project-awards-section
Aug 18, 2026
Merged

feat(voting): integrate ballots into project discovery#146
HazAT merged 7 commits into
masterfrom
feat/project-awards-section

Conversation

@HazAT

@HazAT HazAT commented Aug 17, 2026

Copy link
Copy Markdown
Member

Voting now happens where people discover projects instead of on a separate page that repeats the catalogue. The year overview shows when voting is open, ballot completion, selected projects, and personal pick counts in both grid and list views; each project detail exposes every award category with clear selected, unavailable, and confirmed-move states. Project nomination administration and the standalone ballot route are removed because every active project is eligible for every category.

The voting read contract is intentionally narrowed to the signed-in user's categories and selections rather than returning every project. Withdrawn selections remain visible and movable, while existing database rules still enforce one vote per category, active same-year targets, and no self-voting. The historical nomination table and import data remain inert; reviewers may want to start with the ballot status query and then follow its shared state into the overview and project-detail surfaces.

image

HazAT added 6 commits August 17, 2026 15:04
Remove nomination configuration from the admin API, response contract, query mutations, and year-management UI so projects are no longer presented as category-restricted.

Keep the legacy ballot nomination read and historical schema intact for the transitional voting flow, while updating worker and app coverage to prove the administration path is inert.
Return only effective voting state, award categories, and the signed-in user's selections with current project names from the yearly vote read. Expose project-level voting eligibility while preserving existing vote write invariants.

Retire the standalone ballot route, header action, repeated-project UI, and obsolete styles. Add focused Worker and app coverage for the compact response, nomination-independent voting, viewer permissions, and removed route.
Show open-voting progress, remaining category votes, and linked project selections above the existing project discovery controls. Provide distinct empty, partial, complete, zero-category, loading, and localized error states with responsive Hackweek styling.

Cover progress semantics, selection links, closed-year query suppression, completion messaging, and resilient project browsing in app route tests.
Place the shared yearly ballot directly on eligible project details with clear uncast, selected, moved, and own-project states. Require an inline confirmation before replacing a vote, keep mutation feedback local and accessible, and await ballot refreshes after successful writes.

Add responsive Hackweek-styled category rows plus focused app coverage for first-vote POSTs, confirmed PUTs, cancellation, pending and error feedback, project/idea visibility, and media ordering.
Keep votes on withdrawn projects visible and movable while clearly marking their inactive selections. Query ballots using the loaded project year, refresh ballot state after failed writes, and expose localized loading and retry states on project details.\n\nCorrect the mobile overview grid and add regression coverage for withdrawal, stale conflicts, mismatched routes, and ballot request failures.
Mark projects in both grid and list views with the signed-in user's pick count and award categories, making an in-progress ballot visible while browsing.\n\nShow voting-open state on the year overview and simplify vote and move controls with distinct neutral and confirm styling. Add focused route and interaction coverage for the updated labels and indicators.
@HazAT
HazAT marked this pull request as ready for review August 18, 2026 11:03

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 9e9a028. Configure here.

Comment thread src/app/routes/ProjectsPage.tsx
Comment thread src/app/routes/ProjectDetailsPage.tsx Outdated
Comment thread src/app/routes/ProjectsPage.tsx Outdated
Count only active-project selections toward ballot completion and call out withdrawn picks that still need replacement. Prevent stale voting controls from rendering alongside a failed ballot refresh.\n\nAdd route coverage for inactive progress and post-vote refresh failures.
@HazAT
HazAT merged commit c037d0d into master Aug 18, 2026
13 checks passed
@HazAT
HazAT deleted the feat/project-awards-section branch August 18, 2026 11:29
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