Skip to content

feat(hackathons): add "hidden until results" submission visibility mode#555

Merged
0xdevcollins merged 1 commit into
mainfrom
feat/submission-visibility-hidden-until-results
May 15, 2026
Merged

feat(hackathons): add "hidden until results" submission visibility mode#555
0xdevcollins merged 1 commit into
mainfrom
feat/submission-visibility-hidden-until-results

Conversation

@0xdevcollins
Copy link
Copy Markdown
Collaborator

@0xdevcollins 0xdevcollins commented May 15, 2026

Summary

  • Adds the new HIDDEN_UNTIL_RESULTS option (introduced server-side in boundless-nestjs#106) to the organizer's submission visibility settings tab so organizers can keep submissions hidden from the public until results are published, after which only shortlisted projects appear.
  • Fixes misleading copy on the "All submissions" option that claimed disqualified projects would be shown — they never were, and the nestjs PR makes that explicit.
  • Aligns the form's initial value and API fallback with the backend default (ACCEPTED_SHORTLISTED, not ALL) so organizers don't see a misleading selection while the real value loads.

What changed

  • lib/api/hackathons.ts: extended SubmissionStatusVisibility enum with HIDDEN_UNTIL_RESULTS.
  • components/organization/hackathons/settings/SubmissionVisibilitySettingsTab.tsx:
    • Added the new radio option, ordered: Shortlisted only (recommended) → Hidden until results are announced → All submissions.
    • Rewrote the descriptions to accurately describe what each mode does for public viewers.
    • Aligned default values with the backend.

Test plan

  • Open Organization → Hackathon → Settings → Submission Visibility on a hackathon you organize. Three options visible, "Shortlisted only" selected by default for a fresh hackathon.
  • Pick "Hidden until results are announced", save. As an anonymous browser, visit /hackathons/<slug> — submissions list should be empty until you publish results.
  • As the submitter, visit the same page — your own submission should remain visible regardless of mode.
  • Switch back to "All submissions". Submitted projects appear immediately to the public; disqualified projects do not appear.
  • npx tsc --noEmit passes.

Notes

  • Pairs with boundless-nestjs#106. Backend must ship first (or together) for the new enum value to be accepted by the API.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added "Hidden until results are announced" option for submission visibility settings, allowing hackathon organizers to control when submissions become visible to participants.
    • Updated submission visibility defaults to "Shortlisted only (recommended)" for improved experience.
    • Enhanced UI labels for submission visibility options with clearer, more descriptive text.

Review Change Stack

Surfaces the new HIDDEN_UNTIL_RESULTS option (added in the nestjs PR) in
the organizer settings tab. Reorders the three visibility options so the
recommended "Shortlisted only" leads, the new "Hidden until results are
announced" sits in the middle, and "All submissions" comes last. Rewrites
the copy on the "All submissions" choice that incorrectly claimed
disqualified projects would be shown -- they never were on the backend,
and Phase 2 makes that an explicit guarantee. Aligns the form's default
and API-fallback value with the backend default (ACCEPTED_SHORTLISTED,
not ALL) so organizers don't see a misleading initial selection.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 15, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
boundless-kd16 Ready Ready Preview, Comment May 15, 2026 8:00am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1b295bbc-84e3-4f52-953f-49565e628683

📥 Commits

Reviewing files that changed from the base of the PR and between b34926a and 80a8270.

📒 Files selected for processing (2)
  • components/organization/hackathons/settings/SubmissionVisibilitySettingsTab.tsx
  • lib/api/hackathons.ts

📝 Walkthrough

Walkthrough

The PR adds a new HIDDEN_UNTIL_RESULTS visibility option to the submission status enum and updates the hackathon settings form to default to shortlisted submissions instead of all submissions. The form's radio group UI is revised to display three visibility options with clearer labels describing submission access behavior.

Changes

Submission Visibility Settings

Layer / File(s) Summary
Submission status visibility enum
lib/api/hackathons.ts
SubmissionStatusVisibility enum gains the HIDDEN_UNTIL_RESULTS member to support a new visibility mode.
Settings form defaults and radio options
components/organization/hackathons/settings/SubmissionVisibilitySettingsTab.tsx
Form defaults shift from ALL to ACCEPTED_SHORTLISTED in both initial setup and fallback reset. Radio button options are expanded to display "Shortlisted only (recommended)", "Hidden until results are announced", and "All submissions (disqualified projects still hidden)" with updated labels.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 A hackathon's secrets, now tucked away neat,
Shortlisted shines bright—the new default treat!
With three visibility modes to pick and explore,
Settings are clearer than ever before! 🎩✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding a new 'hidden until results' submission visibility mode for hackathons, which is the core feature introduced across both modified files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/submission-visibility-hidden-until-results

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@0xdevcollins 0xdevcollins merged commit 8f1c753 into main May 15, 2026
7 of 9 checks passed
0xdevcollins added a commit that referenced this pull request May 15, 2026
)

* fix(submissions): improve link validation UX, banner display, and error toasts (#547)

- Reconcile frontend link types with backend enum (github, demo, video, document, presentation, other)
- Allow up to 5 "other" links per submission with smart type-picking on Add Link and duplicate guards on type change
- Add 500-character cap and live counter on the optional Introduction field
- Pass banner through initialData on submission edit so the saved banner displays
- Add banner field to ParticipantSubmission so the type compiles
- Set mock-fill participation type from myTeam to avoid INDIVIDUAL submissions while on a team
- Switch submission error toasts to title + description with 8s duration so backend messages are readable
- Update SubmissionLinksTab icon mapping for the new link types

* fix(submissions): correct logo cropping and remove duplicate category badge on submission card (#549)

- Logo overlay on banner uses object-contain so wordmark logos are not cropped
- Render the category badge once instead of twice on the explore submissions card

* feat(blog): add Boundless x Trustless Work hackathon post and fit cover images (#551)

- Add content/blog/boundless-launches-first-hackathon-campaign.mdx for the May 13 hackathon launch announcement.
- BlogCard and BlogPostDetails cover images use object-contain so the full banner is visible (previously object-cover cropped wider banners).
- Update SHARE icons on the blog details page from the old brand color #99FF2D to the current brand primary #2eedaa.

* feat(judge): dedicated judge portal, organizer invitations, completeness gate UX (#550)

* feat: implement judge portal with submission evaluation, invitations, and score calculation workflows

* feat: add countdown banner, support read-only score sliders, and integrate submission disqualification into grading modal

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hackathons): add "hidden until results" submission visibility mode (#555)

Surfaces the new HIDDEN_UNTIL_RESULTS option (added in the nestjs PR) in
the organizer settings tab. Reorders the three visibility options so the
recommended "Shortlisted only" leads, the new "Hidden until results are
announced" sits in the middle, and "All submissions" comes last. Rewrites
the copy on the "All submissions" choice that incorrectly claimed
disqualified projects would be shown -- they never were on the backend,
and Phase 2 makes that an explicit guarantee. Aligns the form's default
and API-fallback value with the backend default (ACCEPTED_SHORTLISTED,
not ALL) so organizers don't see a misleading initial selection.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Benjtalkshow added a commit that referenced this pull request May 15, 2026
* fix(submissions): improve link validation UX, banner display, and error toasts (#547)

- Reconcile frontend link types with backend enum (github, demo, video, document, presentation, other)
- Allow up to 5 "other" links per submission with smart type-picking on Add Link and duplicate guards on type change
- Add 500-character cap and live counter on the optional Introduction field
- Pass banner through initialData on submission edit so the saved banner displays
- Add banner field to ParticipantSubmission so the type compiles
- Set mock-fill participation type from myTeam to avoid INDIVIDUAL submissions while on a team
- Switch submission error toasts to title + description with 8s duration so backend messages are readable
- Update SubmissionLinksTab icon mapping for the new link types

* fix(submissions): correct logo cropping and remove duplicate category badge on submission card (#549)

- Logo overlay on banner uses object-contain so wordmark logos are not cropped
- Render the category badge once instead of twice on the explore submissions card

* feat(blog): add Boundless x Trustless Work hackathon post and fit cover images (#551)

- Add content/blog/boundless-launches-first-hackathon-campaign.mdx for the May 13 hackathon launch announcement.
- BlogCard and BlogPostDetails cover images use object-contain so the full banner is visible (previously object-cover cropped wider banners).
- Update SHARE icons on the blog details page from the old brand color #99FF2D to the current brand primary #2eedaa.

* feat(judge): dedicated judge portal, organizer invitations, completeness gate UX (#550)

* feat: implement judge portal with submission evaluation, invitations, and score calculation workflows

* feat: add countdown banner, support read-only score sliders, and integrate submission disqualification into grading modal

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hackathons): add "hidden until results" submission visibility mode (#555)

Surfaces the new HIDDEN_UNTIL_RESULTS option (added in the nestjs PR) in
the organizer settings tab. Reorders the three visibility options so the
recommended "Shortlisted only" leads, the new "Hidden until results are
announced" sits in the middle, and "All submissions" comes last. Rewrites
the copy on the "All submissions" choice that incorrectly claimed
disqualified projects would be shown -- they never were on the backend,
and Phase 2 makes that an explicit guarantee. Aligns the form's default
and API-fallback value with the backend default (ACCEPTED_SHORTLISTED,
not ALL) so organizers don't see a misleading initial selection.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hackathons): owner submission visibility, team UX, organizer teams page (#552)

Submission visibility on the public submissions tab
- Surface the user's own submission first on the hackathon submissions tab, regardless of submissionStatusVisibility setting. Team members (non-leader) see their team's submission too.

Find Team tab UX
- Stop replacing the whole tab with MyTeamView when the user has a team. Render MyTeamView at the top and the open-teams list below.
- Filter the user's own team out of the "Other Teams" list to avoid duplication.
- Wire the team count badge on the team-formation tab.

Team details
- New /hackathons/[slug]/teams/[teamId] page with team header, members list (clickable links to profiles), roles needed, leader card, and contact card.
- TeamCard click opens the team details page in a new tab.
- MyTeamView team name is now a clickable link to the same page.
- Add useTeam hook + query key.

Organizer submissions page
- Replace raw Buttons on review actions with BoundlessButton (default / outline / destructive) so colors come from the design system.
- Remove the "Before Deadline" gating on the Approve action; backend organizer override now allows it.

Organizer participants page
- Add Solo Participants and Teams metric cards next to the existing Total Participants and Total Submissions cards.

Organizer submissions page
- Add a metric strip with Total / Solo / Team Submissions sourced from the statistics endpoint.

Organizer Teams page (new)
- New route /organizations/[id]/hackathons/[hackathonId]/teams.
- Stats (Total / Open / Submitted / Not submitted), search by team or leader (server-side), status and submission filters (client-side), server-side pagination matching the participants page pattern, click to view team details in a new tab.
- Add "Teams" entry to the existing organizer hackathon sidebar (HackathonSidebar.tsx).

Image fit fixes for cropped logos/banners
- SubmissionCard banner and logo overlay use object-contain (banner was object-cover, cropping wordmarks and tall banners).
- /me/hackathons/submissions: banner, logo overlay, and small table thumbnail all use object-contain.
- ProjectSidebarHeader logo uses object-contain.

Type changes
- lib/api/hackathons/teams.ts Team interface gains optional hasSubmission flag.

---------

Co-authored-by: Collins Ikechukwu <collinschristroa@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Benjtalkshow added a commit that referenced this pull request May 15, 2026
* fix(submissions): improve link validation UX, banner display, and error toasts (#547)

- Reconcile frontend link types with backend enum (github, demo, video, document, presentation, other)
- Allow up to 5 "other" links per submission with smart type-picking on Add Link and duplicate guards on type change
- Add 500-character cap and live counter on the optional Introduction field
- Pass banner through initialData on submission edit so the saved banner displays
- Add banner field to ParticipantSubmission so the type compiles
- Set mock-fill participation type from myTeam to avoid INDIVIDUAL submissions while on a team
- Switch submission error toasts to title + description with 8s duration so backend messages are readable
- Update SubmissionLinksTab icon mapping for the new link types

* fix(submissions): correct logo cropping and remove duplicate category badge on submission card (#549)

- Logo overlay on banner uses object-contain so wordmark logos are not cropped
- Render the category badge once instead of twice on the explore submissions card

* feat(blog): add Boundless x Trustless Work hackathon post and fit cover images (#551)

- Add content/blog/boundless-launches-first-hackathon-campaign.mdx for the May 13 hackathon launch announcement.
- BlogCard and BlogPostDetails cover images use object-contain so the full banner is visible (previously object-cover cropped wider banners).
- Update SHARE icons on the blog details page from the old brand color #99FF2D to the current brand primary #2eedaa.

* feat(judge): dedicated judge portal, organizer invitations, completeness gate UX (#550)

* feat: implement judge portal with submission evaluation, invitations, and score calculation workflows

* feat: add countdown banner, support read-only score sliders, and integrate submission disqualification into grading modal

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hackathons): add "hidden until results" submission visibility mode (#555)

Surfaces the new HIDDEN_UNTIL_RESULTS option (added in the nestjs PR) in
the organizer settings tab. Reorders the three visibility options so the
recommended "Shortlisted only" leads, the new "Hidden until results are
announced" sits in the middle, and "All submissions" comes last. Rewrites
the copy on the "All submissions" choice that incorrectly claimed
disqualified projects would be shown -- they never were on the backend,
and Phase 2 makes that an explicit guarantee. Aligns the form's default
and API-fallback value with the backend default (ACCEPTED_SHORTLISTED,
not ALL) so organizers don't see a misleading initial selection.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hackathons): owner submission visibility, team UX, organizer teams page (#552)

Submission visibility on the public submissions tab
- Surface the user's own submission first on the hackathon submissions tab, regardless of submissionStatusVisibility setting. Team members (non-leader) see their team's submission too.

Find Team tab UX
- Stop replacing the whole tab with MyTeamView when the user has a team. Render MyTeamView at the top and the open-teams list below.
- Filter the user's own team out of the "Other Teams" list to avoid duplication.
- Wire the team count badge on the team-formation tab.

Team details
- New /hackathons/[slug]/teams/[teamId] page with team header, members list (clickable links to profiles), roles needed, leader card, and contact card.
- TeamCard click opens the team details page in a new tab.
- MyTeamView team name is now a clickable link to the same page.
- Add useTeam hook + query key.

Organizer submissions page
- Replace raw Buttons on review actions with BoundlessButton (default / outline / destructive) so colors come from the design system.
- Remove the "Before Deadline" gating on the Approve action; backend organizer override now allows it.

Organizer participants page
- Add Solo Participants and Teams metric cards next to the existing Total Participants and Total Submissions cards.

Organizer submissions page
- Add a metric strip with Total / Solo / Team Submissions sourced from the statistics endpoint.

Organizer Teams page (new)
- New route /organizations/[id]/hackathons/[hackathonId]/teams.
- Stats (Total / Open / Submitted / Not submitted), search by team or leader (server-side), status and submission filters (client-side), server-side pagination matching the participants page pattern, click to view team details in a new tab.
- Add "Teams" entry to the existing organizer hackathon sidebar (HackathonSidebar.tsx).

Image fit fixes for cropped logos/banners
- SubmissionCard banner and logo overlay use object-contain (banner was object-cover, cropping wordmarks and tall banners).
- /me/hackathons/submissions: banner, logo overlay, and small table thumbnail all use object-contain.
- ProjectSidebarHeader logo uses object-contain.

Type changes
- lib/api/hackathons/teams.ts Team interface gains optional hasSubmission flag.

* fix(blog): use object-cover so card and detail covers fill the frame (#558)

The earlier switch to object-contain was meant to preserve the full image, but it left dark letterbox bands around banners on both the BlogCard grid and the post-details hero. With properly-sized cover banners, object-cover fills the frame without visible cropping. Authors should size cover images for a 2:1 ratio on the card and the responsive heights on the details page.

---------

Co-authored-by: Collins Ikechukwu <collinschristroa@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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