Skip to content

Comments

feat: implement organizer override functionality for judging scores a…#385

Merged
0xdevcollins merged 7 commits intomainfrom
fix/updated-payload-for-resulrs-and-implement-org-override
Feb 17, 2026
Merged

feat: implement organizer override functionality for judging scores a…#385
0xdevcollins merged 7 commits intomainfrom
fix/updated-payload-for-resulrs-and-implement-org-override

Conversation

@0xdevcollins
Copy link
Collaborator

@0xdevcollins 0xdevcollins commented Feb 16, 2026

…nd enhance judging UI

Summary by CodeRabbit

  • New Features

    • Organizers can override submission scores via a dedicated override flow (select judge, override actions, distinct messages).
    • Added override action on participant cards and explicit override/grade controls in modals.
    • Prize labels now show in judging results.
  • Style

    • Submission cards compacted with inline metadata, rank badges, and refined hover/selection visuals.
  • Bug Fixes

    • Winners fetching now handles multiple backend response shapes for reliable results.

@vercel
Copy link

vercel bot commented Feb 16, 2026

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

Project Deployment Actions Updated (UTC)
boundless-kd16 Ready Ready Preview, Comment Feb 17, 2026 8:50pm

@coderabbitai
Copy link

coderabbitai bot commented Feb 16, 2026

No actionable comments were generated in the recent review. 🎉


📝 Walkthrough

Walkthrough

Adds an organizer "override" scoring flow: new UI to credit/select a judge and submit override scores, API support for override submissions and flexible winners responses, JudgingParticipant and GradeSubmissionModal updated to surface override controls, plus assorted UI and layout tweaks (prize badges, submissions grid, winners fetching).

Changes

Cohort / File(s) Summary
Grade Submission Modal & scoring
components/organization/cards/GradeSubmissionModal/index.tsx, components/organization/cards/GradeSubmissionModal/useScoreForm.ts, components/organization/cards/GradeSubmissionModal/ScoringSection.tsx, components/organization/cards/GradeSubmissionModal/ModalFooter.tsx
Adds mode (`'judge'
Judging participant & page
components/organization/cards/JudgingParticipant.tsx, app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx
Adds canOverrideScores prop and an "Override" action button; score modal is mode-aware. Removes winnersSummary state and simplifies winners fetch to store an array.
API & types
lib/api/hackathons/judging.ts
Adds prize?: string, new override request/response types, GetJudgingWinnersResponse, implements overrideSubmissionScore, and normalizes getJudgingWinners to accept both array and wrapped response shapes.
Results / Submissions UI
components/organization/hackathons/judging/JudgingResultsTable.tsx, components/organization/hackathons/submissions/SubmissionsList.tsx
Adds conditional "Prize" badge in results rows; refactors submissions grid/card layout, spacing, avatar sizing, inline rank badge, hover/selection styles, and compact metadata layout.
Tooling / Config
.husky/pre-push, package.json
Changes pre-push audit command to omit dev deps and tighten audit level; small devDependency version change for eslint-plugin-prettier.

Sequence Diagram

sequenceDiagram
    participant Organizer as Organizer
    participant Modal as GradeSubmissionModal
    participant Hook as useScoreForm
    participant API as Judging API
    participant Backend as Backend

    Organizer->>Modal: Open modal (mode='organizer-override')
    Modal->>Modal: Render credit-judge Switch + Select
    Organizer->>Modal: Enable credit & choose judge
    Organizer->>Modal: Enter scores & submit
    Modal->>Hook: submitScore({mode, overrideJudgeId, criteriaScores})
    Hook->>Hook: Build payload (exclude per-criterion comments if override)
    Hook->>API: overrideSubmissionScore(...)
    API->>Backend: POST override with judgeId
    Backend-->>API: Success response
    API-->>Hook: Return success
    Hook-->>Modal: onSuccess (toast, close)
    Modal-->>Organizer: Modal closes, UI updates
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • PR #384 — Overlaps with winners handling and getJudgingWinners normalization; strongly related to winners response shape changes.
  • PR #382 — Shares updates to judging flows and modal/score submission logic (useScoreForm / GradeSubmissionModal), closely related.

Poem

🐰 I hopped into the modal with a twitch and a cheer,
An organizer's override now makes judging more clear,
I credit a judge, pick scores with a thump,
Winners, prizes, and badges — all tidy in a jump! 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 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 (2 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 objective: implementing organizer override functionality for judging scores, which is the primary feature across multiple modified files.

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

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/updated-payload-for-resulrs-and-implement-org-override

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
components/organization/cards/GradeSubmissionModal/useScoreForm.ts (1)

161-206: ⚠️ Potential issue | 🟠 Major

Fragile success detection: (response as any)?.success !== false treats missing success as a pass.

This is a downstream consequence of the OverrideSubmissionScoreResponse type issue flagged in judging.ts. If overrideSubmissionScore returns the inner data payload (without a success field), this check evaluates undefined !== false → true, silently treating any non-throwing response as success.

Consider a more explicit check:

Suggested improvement
-      const isSuccess = (response as any)?.success !== false;
+      const isSuccess = 'success' in response ? (response as any).success === true : true;

Or better, align the return type of overrideSubmissionScore so that it returns an ApiResponse-shaped object consistently, making the type-safe response.success check viable.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/cards/GradeSubmissionModal/useScoreForm.ts` around
lines 161 - 206, The current success detection uses (response as any)?.success
!== false which treats a missing success field as success; update this to an
explicit check (e.g., const isSuccess = (response as any)?.success === true) or,
better, fix the return shape of overrideSubmissionScore in judging.ts so it
consistently returns an ApiResponse-like object with a boolean success field (or
document the exact payload and check that payload property instead); locate
references to overrideSubmissionScore, submitJudgingScore, and the isSuccess
variable in useScoreForm.ts and adjust either the type/implementation in
judging.ts (OverrideSubmissionScoreResponse) or the runtime check to rely on a
concrete, documented field.
components/organization/cards/GradeSubmissionModal/index.tsx (1)

275-308: ⚠️ Potential issue | 🟡 Minor

"Comments Added" count and help text are visible in override mode where comments are hidden.

In override mode (showComments={!isOverride}), the comment fields are hidden in ScoringSection, but the sidebar still displays the "Comments Added" count (Line 293) and help text mentioning "scores and comments" (Line 303). This is a minor visual inconsistency.

Suggested fix
-                        <div className='flex justify-between text-sm'>
-                          <span className='text-gray-400'>Comments Added</span>
-                          <span className='font-medium text-white'>
-                            {
-                              Object.values(comments).filter(
-                                c => c.trim().length > 0
-                              ).length
-                            }
-                          </span>
-                        </div>
+                        {!isOverride && (
+                          <div className='flex justify-between text-sm'>
+                            <span className='text-gray-400'>Comments Added</span>
+                            <span className='font-medium text-white'>
+                              {
+                                Object.values(comments).filter(
+                                  c => c.trim().length > 0
+                                ).length
+                              }
+                            </span>
+                          </div>
+                        )}

And for the help text:

                          <p className='text-[11px] leading-relaxed text-gray-500 italic'>
-                            Your scores and comments are saved automatically
-                            when you submit. You can return later to update
-                            them.
+                            Your scores{!isOverride ? ' and comments are' : ' are'} saved automatically
+                            when you submit.{!isOverride ? ' You can return later to update them.' : ''}
                          </p>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/cards/GradeSubmissionModal/index.tsx` around lines
275 - 308, The sidebar shows "Comments Added" and help text referencing comments
even when comments are hidden in override mode; update GradeSubmissionModal to
conditionally render the "Comments Added" block and adjust the help text based
on the same override flag. Specifically, use the existing
isOverride/showComments logic (showComments={!isOverride}) to: 1) only render
the Comments Added count that reads from comments when showComments is true; and
2) change the help paragraph in the border-t section to omit or alter the phrase
"scores and comments" when isOverride is true (e.g., say "scores" only). Ensure
you reference the comments, scores, criteria, isOverride, and showComments
symbols so the conditional behavior matches ScoringSection.
🤖 Fix all issues with AI agents
Verify each finding against the current code and only fix it if needed.


In `@components/organization/cards/GradeSubmissionModal/index.tsx`:
- Around line 275-308: The sidebar shows "Comments Added" and help text
referencing comments even when comments are hidden in override mode; update
GradeSubmissionModal to conditionally render the "Comments Added" block and
adjust the help text based on the same override flag. Specifically, use the
existing isOverride/showComments logic (showComments={!isOverride}) to: 1) only
render the Comments Added count that reads from comments when showComments is
true; and 2) change the help paragraph in the border-t section to omit or alter
the phrase "scores and comments" when isOverride is true (e.g., say "scores"
only). Ensure you reference the comments, scores, criteria, isOverride, and
showComments symbols so the conditional behavior matches ScoringSection.

In `@components/organization/cards/GradeSubmissionModal/useScoreForm.ts`:
- Around line 161-206: The current success detection uses (response as
any)?.success !== false which treats a missing success field as success; update
this to an explicit check (e.g., const isSuccess = (response as any)?.success
=== true) or, better, fix the return shape of overrideSubmissionScore in
judging.ts so it consistently returns an ApiResponse-like object with a boolean
success field (or document the exact payload and check that payload property
instead); locate references to overrideSubmissionScore, submitJudgingScore, and
the isSuccess variable in useScoreForm.ts and adjust either the
type/implementation in judging.ts (OverrideSubmissionScoreResponse) or the
runtime check to rely on a concrete, documented field.

In `@components/organization/hackathons/submissions/SubmissionsList.tsx`:
- Around line 229-256: The leading dot appears even when subData.category is
falsy because the separator <span className='text-gray-600'>•</span> is rendered
unconditionally; update the JSX so separators are only rendered when the
preceding item exists — e.g., move the first dot span inside the
subData.category conditional (or render separators conditionally based on
Boolean(subData.category)) so the block around subData.category, the first dot,
and the participationType/User icons renders as a unit and no orphan “•” appears
before Team/Individual and the date; reference the existing symbols
subData.category, subData.participationType, and the dot <span
className='text-gray-600'>•</span> to locate and fix the logic.
- Line 184: Replace the long template-literal className on the JSX element in
SubmissionsList.tsx with a clsx (or cn) composition: import clsx (or cn) and
call it with the static class strings as separate arguments and the conditional
part as an object keyed by the selected class (e.g., { 'border-primary/50
ring-primary/30 ring-1': selectedIds?.includes(subData.id) }). Keep all existing
static classes (group, hover:..., shadow-..., etc.) as plain strings in the clsx
call so the conditional selected state is expressed clearly and the resulting
className prop is simpler and consistent with project conventions.

In `@lib/api/hackathons/judging.ts`:
- Around line 234-242: The OverrideSubmissionScoreResponse currently mixes
wrapper fields (success, message) with inner payload fields but does not extend
the ApiResponse wrapper, causing casts to mask missing success flags (see
useScoreForm.ts check around line 178); fix by making
OverrideSubmissionScoreResponse extend ApiResponse<{ judgingScore?: unknown;
complianceChecks?: { rubricValid?: boolean; isOrganizerOverride?: boolean } }>
so it models the outer wrapper correctly (or alternatively remove top-level
success/message and leave only the inner payload), then update any usages/casts
(e.g., the response handling in useScoreForm.ts) to rely on the proper typed
wrapper instead of casting to any.
- Around line 553-569: The fallback currently returns (res.data || {}) as
GetJudgingWinnersResponse which yields an empty object lacking success and data;
update the fallback to return a well-formed GetJudgingWinnersResponse (e.g.,
success: false, data: [], and a descriptive message like "No winners found" or
the raw res.data when possible) so callers checking res.success && res.data
behave predictably; locate the block in lib/api/hackathons/judging.ts where
AggregatedJudgingResults and GetJudgingWinnersResponse are used and replace the
final return with a structured fallback containing success, data, and message.
🧹 Nitpick comments (1)
🤖 Fix all nitpicks with AI agents
Verify each finding against the current code and only fix it if needed.


In `@lib/api/hackathons/judging.ts`:
- Around line 553-569: The fallback currently returns (res.data || {}) as
GetJudgingWinnersResponse which yields an empty object lacking success and data;
update the fallback to return a well-formed GetJudgingWinnersResponse (e.g.,
success: false, data: [], and a descriptive message like "No winners found" or
the raw res.data when possible) so callers checking res.success && res.data
behave predictably; locate the block in lib/api/hackathons/judging.ts where
AggregatedJudgingResults and GetJudgingWinnersResponse are used and replace the
final return with a structured fallback containing success, data, and message.
lib/api/hackathons/judging.ts (1)

553-569: Fallback (res.data || {}) as GetJudgingWinnersResponse returns an empty object with no success or data.

Line 569: If neither the array nor the results branch matches, this returns {} cast as GetJudgingWinnersResponse. The caller in page.tsx Line 352 checks res.success && res.data, so it safely falls through, but this is fragile. A small improvement would be to return a well-formed fallback:

Suggested improvement
-  return (res.data || {}) as GetJudgingWinnersResponse;
+  return {
+    success: false,
+    message: 'Unexpected response format',
+    data: [],
+  } as GetJudgingWinnersResponse;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lib/api/hackathons/judging.ts` around lines 553 - 569, The fallback currently
returns (res.data || {}) as GetJudgingWinnersResponse which yields an empty
object lacking success and data; update the fallback to return a well-formed
GetJudgingWinnersResponse (e.g., success: false, data: [], and a descriptive
message like "No winners found" or the raw res.data when possible) so callers
checking res.success && res.data behave predictably; locate the block in
lib/api/hackathons/judging.ts where AggregatedJudgingResults and
GetJudgingWinnersResponse are used and replace the final return with a
structured fallback containing success, data, and message.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (4)
components/organization/hackathons/submissions/SubmissionsList.tsx (2)

268-269: Badge className could use cn() for consistency.

Minor: the Badge className still uses a template literal with getStatusColor(). Using cn() would be more consistent with the pattern established elsewhere in this file.

♻️ Suggested change
-                      <Badge
-                        className={`${getStatusColor(subData.status)} border text-[10px]`}
-                      >
+                      <Badge
+                        className={cn(getStatusColor(subData.status), 'border text-[10px]')}
+                      >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/hackathons/submissions/SubmissionsList.tsx` around
lines 268 - 269, Replace the template literal className on the Badge with the
project's cn() utility to match file conventions: call
cn(getStatusColor(subData.status), "border", "text-[10px]") (or equivalent) so
the status color and the static classes are merged via cn; update the Badge
usage in SubmissionsList.tsx where getStatusColor(subData.status) is currently
interpolated in a template string to use cn() instead.

510-513: Use cn() for conditional disabled styling instead of template literal ternary.

♻️ Suggested change
-                                  className={`cursor-pointer text-green-500 focus:bg-green-900/20 focus:text-green-400 ${isBeforeDeadline ? 'cursor-not-allowed opacity-50' : ''}`}
+                                  className={cn(
+                                    'cursor-pointer text-green-500 focus:bg-green-900/20 focus:text-green-400',
+                                    isBeforeDeadline && 'cursor-not-allowed opacity-50'
+                                  )}

As per coding guidelines, "For conditional classes, prefer clsx or similar helper functions over ternary operators in JSX".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/hackathons/submissions/SubmissionsList.tsx` around
lines 510 - 513, Replace the template literal ternary in the className prop that
uses isBeforeDeadline with the cn() helper to conditionally apply classes;
update the element (the one setting className={`cursor-pointer text-green-500
... ${isBeforeDeadline ? 'cursor-not-allowed opacity-50' : ''}`}) to call
cn('cursor-pointer text-green-500 focus:bg-green-900/20 focus:text-green-400', {
'cursor-not-allowed opacity-50': isBeforeDeadline }) so conditional styles are
handled by cn instead of a ternary.
components/organization/cards/GradeSubmissionModal/useScoreForm.ts (2)

203-206: Unnecessary as any cast — both response types include message via ApiResponse.

Since both OverrideSubmissionScoreResponse and ApiResponse<any> inherit message from ApiResponse, the cast is not needed.

♻️ Suggested fix
       const errorMessage =
-          (response as any)?.message ||
+          response?.message ||
           'Failed to submit grade. Please try again.';
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/cards/GradeSubmissionModal/useScoreForm.ts` around
lines 203 - 206, The error handling casts response to any unnecessarily; in
useScoreForm.ts update the errorMessage assignment to access response?.message
directly (remove the (response as any) cast) since both
OverrideSubmissionScoreResponse and ApiResponse include message; ensure the
response variable's type is the union of OverrideSubmissionScoreResponse |
ApiResponse<any> so response?.message is valid and then call
toast.error(errorMessage) as before.

220-224: Missing getCriterionKey in useEffect dependency array.

getCriterionKey is defined inside the hook body, meaning it's recreated on every render. While functionally it's stable (no closure over state), the ESLint react-hooks/exhaustive-deps rule will flag this. Consider memoizing it with useCallback or inlining the logic directly in the effect.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/organization/cards/GradeSubmissionModal/useScoreForm.ts` around
lines 220 - 224, The effect uses getCriterionKey (defined inside the hook) but
doesn't list it in the dependency array causing an ESLint warning; fix by making
getCriterionKey stable (wrap it with useCallback with its appropriate
deps—likely none—or move its logic inline) and then include getCriterionKey in
the useEffect deps (or simply inline the computation inside the effect and keep
[criteria] as the dependency); update references to the function accordingly so
setFocusedInput(getCriterionKey(criteria[0])) remains correct.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.husky/pre-push:
- Line 11: The pre-push hook currently runs "npm audit --omit=dev
--audit-level=high || true", which silences failures; remove the trailing "||
true" from the command so that "npm audit --omit=dev --audit-level=high" will
return a non-zero exit code on high/critical vulnerabilities and block the push;
update the line containing that exact command in the .husky/pre-push file to
remove "|| true".

In `@package.json`:
- Around line 148-149: The package.json change downgrades eslint-plugin-prettier
and eslint-config-prettier to versions incompatible with ESLint 9; revert/update
these entries so ESLint 9 and flat config are supported by setting
eslint-plugin-prettier to a 5.1.0+ release (prefer latest 5.x if possible) and
eslint-config-prettier to 10.1.8+ (or latest 10.x), update the package.json
entries for "eslint-plugin-prettier" and "eslint-config-prettier" accordingly,
then run the package manager install and verify peer-dependency warnings and
that the project’s ESLint flat config works with the updated packages.

---

Duplicate comments:
In `@lib/api/hackathons/judging.ts`:
- Around line 229-241: The response type previously exposed ad-hoc top-level
success/message fields; update the type to properly extend ApiResponse by using
OverrideSubmissionScoreResponse extends ApiResponse<...> (as you've done) and
then update any call sites that consumed the old top-level fields to read
success/message from the ApiResponse wrapper and to access the payload under the
ApiResponse data (ensure uses of OverrideSubmissionScoreRequest and accesses to
judgingScore/complianceChecks match the new shape).

---

Nitpick comments:
In `@components/organization/cards/GradeSubmissionModal/useScoreForm.ts`:
- Around line 203-206: The error handling casts response to any unnecessarily;
in useScoreForm.ts update the errorMessage assignment to access
response?.message directly (remove the (response as any) cast) since both
OverrideSubmissionScoreResponse and ApiResponse include message; ensure the
response variable's type is the union of OverrideSubmissionScoreResponse |
ApiResponse<any> so response?.message is valid and then call
toast.error(errorMessage) as before.
- Around line 220-224: The effect uses getCriterionKey (defined inside the hook)
but doesn't list it in the dependency array causing an ESLint warning; fix by
making getCriterionKey stable (wrap it with useCallback with its appropriate
deps—likely none—or move its logic inline) and then include getCriterionKey in
the useEffect deps (or simply inline the computation inside the effect and keep
[criteria] as the dependency); update references to the function accordingly so
setFocusedInput(getCriterionKey(criteria[0])) remains correct.

In `@components/organization/hackathons/submissions/SubmissionsList.tsx`:
- Around line 268-269: Replace the template literal className on the Badge with
the project's cn() utility to match file conventions: call
cn(getStatusColor(subData.status), "border", "text-[10px]") (or equivalent) so
the status color and the static classes are merged via cn; update the Badge
usage in SubmissionsList.tsx where getStatusColor(subData.status) is currently
interpolated in a template string to use cn() instead.
- Around line 510-513: Replace the template literal ternary in the className
prop that uses isBeforeDeadline with the cn() helper to conditionally apply
classes; update the element (the one setting className={`cursor-pointer
text-green-500 ... ${isBeforeDeadline ? 'cursor-not-allowed opacity-50' : ''}`})
to call cn('cursor-pointer text-green-500 focus:bg-green-900/20
focus:text-green-400', { 'cursor-not-allowed opacity-50': isBeforeDeadline }) so
conditional styles are handled by cn instead of a ternary.

@0xdevcollins 0xdevcollins merged commit 02b21ee into main Feb 17, 2026
6 of 9 checks passed
Benjtalkshow added a commit that referenced this pull request Feb 19, 2026
* Judging dashboard (#382)

* fix: modify api.ts

* fix: remove google auth buttom

* fix: fixes responsive fixes on organization

* fix: minor fixes

* fix: modify create organization

* fix: modify create organization

* fix: fix organization permission

* fix: merge into main

* feat: hackathon overview page

* feat: hackathon overview page

* feat: implement participant overview

* feat: implement participant overview

* feat: implement resources tab

* feat: implement the submission tab

* feat: implement comment tab

* fix: implement provider for hackathon

* fix: implement provider for hackathon

* fix: minor fixes

* fix: hackathon banner

* fix: hackathon banner

* fix: fix organization page

* fix: fix organization page

* fix: use transform

* fix: add tagline

* fix: add tagline

* fix: minor fixes

* fix: minor fixes

* fix: fix timeline and prizes

* fix: correct timeline events

* fix: implement registration deadline policy

* fix: implement registration deadline policy

* feat: implement leave hackathon

* feat: implement leave hackathon

* fix: delete hackathon

* fix: implement invite participants

* fix: implement participant profile viewing

* feat: fetch participants team

* fix: redesign hackathon banner

* fix: fix hackthon card

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix error in fetching team posts

* feat: implement create team, get my team

* feat: implement create team, get my team

* feat: implement hackathon project submission flow

* feat: implement voting for submission

* fix: team formation updates

* fix: implement team invitation

* feat: hackathon submissions bulk actions, ranking and ui refinements

* fix: implement empty state for hackathons page

* feat: Implement  submission visibility and explore submissions

* feat: Implement winners tab for hackathon winners display

* feat: implement hackathon analytics

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix organization settings data persistence, hackathondrafts and population

* feat: fix user profile

* feat: Implemented the participant-facing and hackathon organizers announcement features

* feat: Implement judging dashboard and detailed breakdowns

* feat: Implement judging dashboard and detailed breakdowns

* fix: fix coderabbit corrections

* Refactor/updated the timeline tab (#383)

* feat: enhance hackathon timeline management and publishing flow

- Updated HackathonPublishedModal to utilize new publish response structure.
- Refactored TimelineSection to display additional timeline details including judging start/end and winner announcement dates.
- Introduced DateTimeInput component for better date and time selection.
- Added FieldLabel component for improved form labeling with tooltips.
- Created timelineConstants for standardized tooltips and timezone options.
- Modified timelineSchema to include new fields for judging start, end, and winner announcement dates with validation.
- Enhanced TimelineSettingsTab to support new timeline fields and improved user experience with time inputs.
- Updated use-hackathon-publish hook to handle new publish response format and manage state accordingly.
- Adjusted use-hackathons hook to ensure proper handling of publish responses.
- Updated API interfaces and utility functions to accommodate new timeline structure.
- Improved validation logic for hackathon steps to ensure all necessary dates are set correctly.
- Enhanced timeline calculation logic to reflect new judging and announcement phases.

* chore: update markdown-it to version 14.1.1 and remove framer-motion dependency

* refactor: clean up ReviewTab and HackathonPublishedModal components, improve DateTimeInput logic, and update timeline constants

* refactor: update timeline calculation logic to ensure phases are only created with non-zero duration and add endDate to HackathonTimeline interface

* Judging dashboard (#384)

* fix: modify api.ts

* fix: remove google auth buttom

* fix: fixes responsive fixes on organization

* fix: minor fixes

* fix: modify create organization

* fix: modify create organization

* fix: fix organization permission

* fix: merge into main

* feat: hackathon overview page

* feat: hackathon overview page

* feat: implement participant overview

* feat: implement participant overview

* feat: implement resources tab

* feat: implement the submission tab

* feat: implement comment tab

* fix: implement provider for hackathon

* fix: implement provider for hackathon

* fix: minor fixes

* fix: hackathon banner

* fix: hackathon banner

* fix: fix organization page

* fix: fix organization page

* fix: use transform

* fix: add tagline

* fix: add tagline

* fix: minor fixes

* fix: minor fixes

* fix: fix timeline and prizes

* fix: correct timeline events

* fix: implement registration deadline policy

* fix: implement registration deadline policy

* feat: implement leave hackathon

* feat: implement leave hackathon

* fix: delete hackathon

* fix: implement invite participants

* fix: implement participant profile viewing

* feat: fetch participants team

* fix: redesign hackathon banner

* fix: fix hackthon card

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix error in fetching team posts

* feat: implement create team, get my team

* feat: implement create team, get my team

* feat: implement hackathon project submission flow

* feat: implement voting for submission

* fix: team formation updates

* fix: implement team invitation

* feat: hackathon submissions bulk actions, ranking and ui refinements

* fix: implement empty state for hackathons page

* feat: Implement  submission visibility and explore submissions

* feat: Implement winners tab for hackathon winners display

* feat: implement hackathon analytics

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix organization settings data persistence, hackathondrafts and population

* feat: fix user profile

* feat: Implemented the participant-facing and hackathon organizers announcement features

* feat: Implement judging dashboard and detailed breakdowns

* feat: Implement judging dashboard and detailed breakdowns

* fix: fix coderabbit corrections

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* feat: implement organizer override functionality for judging scores a… (#385)

* feat: implement organizer override functionality for judging scores and enhance judging UI

* fix: update response handling in score submission and enhance submissions list styling

* fix: update eslint dependencies to latest versions for improved linting

* fix: update ajv and json-schema-traverse dependencies in package-lock.json

* fix: update

* fix: update security audit level to high in pre-push checks

* fix: update eslint dependencies and ensure security audit fails on error

---------

Co-authored-by: Collins Ikechukwu <collinschristroa@gmail.com>
0xdevcollins added a commit that referenced this pull request Feb 21, 2026
* Judging dashboard (#382)

* fix: modify api.ts

* fix: remove google auth buttom

* fix: fixes responsive fixes on organization

* fix: minor fixes

* fix: modify create organization

* fix: modify create organization

* fix: fix organization permission

* fix: merge into main

* feat: hackathon overview page

* feat: hackathon overview page

* feat: implement participant overview

* feat: implement participant overview

* feat: implement resources tab

* feat: implement the submission tab

* feat: implement comment tab

* fix: implement provider for hackathon

* fix: implement provider for hackathon

* fix: minor fixes

* fix: hackathon banner

* fix: hackathon banner

* fix: fix organization page

* fix: fix organization page

* fix: use transform

* fix: add tagline

* fix: add tagline

* fix: minor fixes

* fix: minor fixes

* fix: fix timeline and prizes

* fix: correct timeline events

* fix: implement registration deadline policy

* fix: implement registration deadline policy

* feat: implement leave hackathon

* feat: implement leave hackathon

* fix: delete hackathon

* fix: implement invite participants

* fix: implement participant profile viewing

* feat: fetch participants team

* fix: redesign hackathon banner

* fix: fix hackthon card

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix error in fetching team posts

* feat: implement create team, get my team

* feat: implement create team, get my team

* feat: implement hackathon project submission flow

* feat: implement voting for submission

* fix: team formation updates

* fix: implement team invitation

* feat: hackathon submissions bulk actions, ranking and ui refinements

* fix: implement empty state for hackathons page

* feat: Implement  submission visibility and explore submissions

* feat: Implement winners tab for hackathon winners display

* feat: implement hackathon analytics

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix organization settings data persistence, hackathondrafts and population

* feat: fix user profile

* feat: Implemented the participant-facing and hackathon organizers announcement features

* feat: Implement judging dashboard and detailed breakdowns

* feat: Implement judging dashboard and detailed breakdowns

* fix: fix coderabbit corrections

* Refactor/updated the timeline tab (#383)

* feat: enhance hackathon timeline management and publishing flow

- Updated HackathonPublishedModal to utilize new publish response structure.
- Refactored TimelineSection to display additional timeline details including judging start/end and winner announcement dates.
- Introduced DateTimeInput component for better date and time selection.
- Added FieldLabel component for improved form labeling with tooltips.
- Created timelineConstants for standardized tooltips and timezone options.
- Modified timelineSchema to include new fields for judging start, end, and winner announcement dates with validation.
- Enhanced TimelineSettingsTab to support new timeline fields and improved user experience with time inputs.
- Updated use-hackathon-publish hook to handle new publish response format and manage state accordingly.
- Adjusted use-hackathons hook to ensure proper handling of publish responses.
- Updated API interfaces and utility functions to accommodate new timeline structure.
- Improved validation logic for hackathon steps to ensure all necessary dates are set correctly.
- Enhanced timeline calculation logic to reflect new judging and announcement phases.

* chore: update markdown-it to version 14.1.1 and remove framer-motion dependency

* refactor: clean up ReviewTab and HackathonPublishedModal components, improve DateTimeInput logic, and update timeline constants

* refactor: update timeline calculation logic to ensure phases are only created with non-zero duration and add endDate to HackathonTimeline interface

* Judging dashboard (#384)

* fix: modify api.ts

* fix: remove google auth buttom

* fix: fixes responsive fixes on organization

* fix: minor fixes

* fix: modify create organization

* fix: modify create organization

* fix: fix organization permission

* fix: merge into main

* feat: hackathon overview page

* feat: hackathon overview page

* feat: implement participant overview

* feat: implement participant overview

* feat: implement resources tab

* feat: implement the submission tab

* feat: implement comment tab

* fix: implement provider for hackathon

* fix: implement provider for hackathon

* fix: minor fixes

* fix: hackathon banner

* fix: hackathon banner

* fix: fix organization page

* fix: fix organization page

* fix: use transform

* fix: add tagline

* fix: add tagline

* fix: minor fixes

* fix: minor fixes

* fix: fix timeline and prizes

* fix: correct timeline events

* fix: implement registration deadline policy

* fix: implement registration deadline policy

* feat: implement leave hackathon

* feat: implement leave hackathon

* fix: delete hackathon

* fix: implement invite participants

* fix: implement participant profile viewing

* feat: fetch participants team

* fix: redesign hackathon banner

* fix: fix hackthon card

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix search bar in blog page

* fix: fix error in fetching team posts

* feat: implement create team, get my team

* feat: implement create team, get my team

* feat: implement hackathon project submission flow

* feat: implement voting for submission

* fix: team formation updates

* fix: implement team invitation

* feat: hackathon submissions bulk actions, ranking and ui refinements

* fix: implement empty state for hackathons page

* feat: Implement  submission visibility and explore submissions

* feat: Implement winners tab for hackathon winners display

* feat: implement hackathon analytics

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix coderabbit corrections

* fix: fix organization settings data persistence, hackathondrafts and population

* feat: fix user profile

* feat: Implemented the participant-facing and hackathon organizers announcement features

* feat: Implement judging dashboard and detailed breakdowns

* feat: Implement judging dashboard and detailed breakdowns

* fix: fix coderabbit corrections

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* fix: submission management ux refinements

* feat: implement organizer override functionality for judging scores a… (#385)

* feat: implement organizer override functionality for judging scores and enhance judging UI

* fix: update response handling in score submission and enhance submissions list styling

* fix: update eslint dependencies to latest versions for improved linting

* fix: update ajv and json-schema-traverse dependencies in package-lock.json

* fix: update

* fix: update security audit level to high in pre-push checks

* fix: update eslint dependencies and ensure security audit fails on error

* refactor: Dynamically determine Stellar network and centralize wallet utility functions, including explorer URLs and API key handling.

---------

Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.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