Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/(landing)/hackathons/[slug]/HackathonPageClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,7 @@ export default function HackathonPageClient() {
// Shared props for banner and sticky card
const sharedActionProps = {
deadline: currentHackathon.submissionDeadline,
submissionDeadlineExtendedAt: currentHackathon.submissionDeadlineExtendedAt,
startDate: currentHackathon.startDate,
totalPrizePool: currentHackathon.prizeTiers
.reduce((acc, prize) => acc + Number(prize.prizeAmount || 0), 0)
Expand Down
2 changes: 2 additions & 0 deletions app/(landing)/hackathons/[slug]/hackathon-detail-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ https://www.figma.com/design/EMNGAQl1SGObXcsoa24krt/Boundless_Project-Details?no
This design proposes a cleaner and more professional UI/UX for the hackathon detail page.

Included in the Figma file:

- Desktop layout
- Mobile layout
- Banner / hero placement proposal
Expand All @@ -23,6 +24,7 @@ The hackathon banner is placed as a full-width hero image at the top of the page
The sidebar becomes a compact summary card with key information and actions.

Design Goals

- Simpler UI and improved visual hierarchy
- Clear primary actions (Join, Submit, View Submission)
- Consistent spacing and typography
Expand Down
225 changes: 0 additions & 225 deletions app/dashboard/page copy.tsx

This file was deleted.

6 changes: 0 additions & 6 deletions app/dashboard/page.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion components/dashboard-content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { SectionCards } from '@/components/section-cards';
import { SiteHeader } from '@/components/site-header';
import { SidebarInset, SidebarProvider } from '@/components/ui/sidebar';
import { useAuthStatus } from '@/hooks/use-auth';
import data from '../app/dashboard/data.json';
import data from '../data/data.json';
import React, { useState } from 'react';
import { FamilyWalletButton } from '@/components/wallet/FamilyWalletButton';
import {
Expand Down
7 changes: 7 additions & 0 deletions components/hackathons/hackathonBanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ interface HackathonBannerProps {
onLeaveClick?: () => void;
isLeaving?: boolean;
participantType?: 'INDIVIDUAL' | 'TEAM' | 'TEAM_OR_INDIVIDUAL';
submissionDeadlineExtendedAt?: string | null;
}

export function HackathonBanner({
Expand All @@ -46,6 +47,7 @@ export function HackathonBanner({
registrationDeadline,
isLeaving,
participantType,
submissionDeadlineExtendedAt,
onJoinClick,
onSubmitClick,
onViewSubmissionClick,
Expand Down Expand Up @@ -252,6 +254,11 @@ export function HackathonBanner({
<span className='text-xs tracking-wide text-gray-400 uppercase'>
{status === 'ongoing' ? 'Ends In' : 'Starts In'}
</span>
{status === 'ongoing' && submissionDeadlineExtendedAt && (
<span className='ml-1.5 rounded-full bg-[#a7f950]/20 px-1.5 py-0.5 text-[10px] font-bold text-[#a7f950] uppercase'>
Extended
</span>
)}
</div>
<CountdownTimer
targetDate={status === 'ongoing' ? deadline : startDate}
Expand Down
7 changes: 7 additions & 0 deletions components/hackathons/hackathonStickyCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ interface HackathonStickyCardProps {
onFindTeamClick?: () => void;
onLeaveClick?: () => void;
participantType?: 'INDIVIDUAL' | 'TEAM' | 'TEAM_OR_INDIVIDUAL';
submissionDeadlineExtendedAt?: string | null;
}

export function HackathonStickyCard(props: HackathonStickyCardProps) {
Expand All @@ -54,6 +55,7 @@ export function HackathonStickyCard(props: HackathonStickyCardProps) {
onLeaveClick,
isLeaving,
participantType,
submissionDeadlineExtendedAt,
} = props;

const { status } = useHackathonStatus(startDate, deadline);
Expand Down Expand Up @@ -162,6 +164,11 @@ export function HackathonStickyCard(props: HackathonStickyCardProps) {
<span className='text-xs text-gray-400'>Deadline</span>
<span className='text-xs text-white'>
{formatDateWithFallback(deadline)}
{submissionDeadlineExtendedAt && (
<span className='ml-1.5 rounded-full bg-[#a7f950]/20 px-1.5 py-0.5 text-[10px] font-bold text-[#a7f950] uppercase'>
Extended
</span>
)}
</span>
</div>
)}
Expand Down
File renamed without changes.
1 change: 0 additions & 1 deletion lib/api/hackathon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ export const getHackathon = async (
slug: string
): Promise<GetHackathonResponse> => {
const res = await api.get(`/hackathons/s/${slug}`);

return res.data as GetHackathonResponse;
};

Expand Down
1 change: 1 addition & 0 deletions lib/api/hackathons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,7 @@ export type Hackathon = {

startDate: string; // ISO date
submissionDeadline: string; // ISO date
submissionDeadlineExtendedAt?: string | null;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if types/hackathon/core.ts also needs to be updated with submissionDeadlineExtendedAt
echo "=== Checking types/hackathon/core.ts for Hackathon type ==="
rg -n "submissionDeadlineExtendedAt" --type=ts

echo ""
echo "=== Checking which Hackathon type is imported in HackathonPageClient ==="
rg -n "import.*Hackathon" app/\(landing\)/hackathons/\[slug\]/HackathonPageClient.tsx

echo ""
echo "=== Checking useHackathonData return type definition ==="
ast-grep --pattern 'export function useHackathonData($$$) {
  $$$
}'

Repository: boundlessfi/boundless

Length of output: 1988


🏁 Script executed:

#!/bin/bash
# Find all files related to hackathon types
echo "=== Finding hackathon-related type files ==="
fd -t f -e ts -e tsx "hackathon" types/ 2>/dev/null | head -20

echo ""
echo "=== Check if types/hackathon/core.ts exists ==="
ls -la types/hackathon/ 2>/dev/null || echo "Directory not found"

echo ""
echo "=== Get the Hackathon type definition from lib/api/hackathons.ts (context around line 350) ==="
sed -n '330,370p' lib/api/hackathons.ts

Repository: boundlessfi/boundless

Length of output: 1676


🏁 Script executed:

#!/bin/bash
# Read the entire types/hackathon/core.ts file
echo "=== Content of types/hackathon/core.ts ==="
cat -n types/hackathon/core.ts

Repository: boundlessfi/boundless

Length of output: 9142


🏁 Script executed:

#!/bin/bash
# Check the complete hackathons.ts file structure and imports
echo "=== First 100 lines of lib/api/hackathons.ts ==="
head -n 100 lib/api/hackathons.ts

echo ""
echo "=== Check what Hackathon type is exported from lib/api/hackathons.ts ==="
rg -n "export.*Hackathon\|import.*Hackathon.*from" lib/api/hackathons.ts | head -20

Repository: boundlessfi/boundless

Length of output: 2628


🏁 Script executed:

#!/bin/bash
# Get lines around the Hackathon type definition
echo "=== Lines 320-400 of lib/api/hackathons.ts ==="
sed -n '320,400p' lib/api/hackathons.ts

echo ""
echo "=== Check if types/hackathon/core.ts Hackathon is imported anywhere ==="
rg -n "from.*types/hackathon" lib/api/hackathons.ts

echo ""
echo "=== Check where submissionDeadlineExtendedAt is used in components ==="
rg -B2 -A2 "submissionDeadlineExtendedAt" components/ --type=ts --type=tsx | head -40

Repository: boundlessfi/boundless

Length of output: 1820


🏁 Script executed:

#!/bin/bash
# Check where submissionDeadlineExtendedAt is used in components without tsx flag
echo "=== Where submissionDeadlineExtendedAt is used ==="
rg -B1 -A1 "submissionDeadlineExtendedAt" --type=ts

echo ""
echo "=== Check which Hackathon type is imported in HackathonPageClient ==="
head -n 30 app/\(landing\)/hackathons/\[slug\]/HackathonPageClient.tsx

echo ""
echo "=== Check useHackathonData function in hackathonProvider ==="
rg -B3 -A15 "export.*function.*useHackathonData" lib/

Repository: boundlessfi/boundless

Length of output: 4375


🏁 Script executed:

#!/bin/bash
# Check if types/hackathon/core.ts Hackathon is imported in the codebase
echo "=== Imports of types/hackathon/core.ts Hackathon ==="
rg "from.*types/hackathon" --type=ts | head -20

echo ""
echo "=== Check hackathonProvider implementation ==="
cat -n lib/providers/hackathonProvider.tsx | head -100

Repository: boundlessfi/boundless

Length of output: 4054


Update types/hackathon/core.ts to include the new submissionDeadlineExtendedAt field for type consistency.

The submissionDeadlineExtendedAt?: string | null; field has been added to the Hackathon type in lib/api/hackathons.ts, but the equivalent Hackathon type in types/hackathon/core.ts (lines 171–301) is missing this field. While the current code works because hackathonProvider imports from lib/api/hackathons, the inconsistency between the two type definitions can cause confusion and should be resolved. Update types/hackathon/core.ts line 215 to include:

submissionDeadlineExtendedAt?: string | null;

after the submissionDeadline field.

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

In `@lib/api/hackathons.ts` at line 350, Add the missing optional field to the
Hackathon type definition: in types/hackathon/core.ts update the Hackathon (or
related) interface where submissionDeadline is declared (around the field list
near line 215) to include submissionDeadlineExtendedAt?: string | null; placed
immediately after submissionDeadline so the type matches lib/api/hackathons.ts
and preserves cross-file consistency.

registrationDeadline: string; // ISO date
judgingDeadline?: string; // ISO date

Expand Down
Loading