feat: implement organizer override functionality for judging scores a…#385
Conversation
…nd enhance judging UI
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 📝 WalkthroughWalkthroughAdds 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
Sequence DiagramsequenceDiagram
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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 | 🟠 MajorFragile success detection:
(response as any)?.success !== falsetreats missingsuccessas a pass.This is a downstream consequence of the
OverrideSubmissionScoreResponsetype issue flagged injudging.ts. IfoverrideSubmissionScorereturns the inner data payload (without asuccessfield), this check evaluatesundefined !== 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
overrideSubmissionScoreso that it returns anApiResponse-shaped object consistently, making the type-saferesponse.successcheck 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 inScoringSection, 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 GetJudgingWinnersResponsereturns an empty object with nosuccessordata.Line 569: If neither the array nor the
resultsbranch matches, this returns{}cast asGetJudgingWinnersResponse. The caller inpage.tsxLine 352 checksres.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.
components/organization/hackathons/submissions/SubmissionsList.tsx
Outdated
Show resolved
Hide resolved
…ions list styling
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (4)
components/organization/hackathons/submissions/SubmissionsList.tsx (2)
268-269: Badge className could usecn()for consistency.Minor: the Badge className still uses a template literal with
getStatusColor(). Usingcn()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: Usecn()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: Unnecessaryas anycast — both response types includemessageviaApiResponse.Since both
OverrideSubmissionScoreResponseandApiResponse<any>inheritmessagefromApiResponse, 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: MissinggetCriterionKeyinuseEffectdependency array.
getCriterionKeyis defined inside the hook body, meaning it's recreated on every render. While functionally it's stable (no closure over state), the ESLintreact-hooks/exhaustive-depsrule will flag this. Consider memoizing it withuseCallbackor 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.
* 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>
* 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>
…nd enhance judging UI
Summary by CodeRabbit
New Features
Style
Bug Fixes