Implementation of "Participating" Page (app/me/hackathons)
Objective
Provide users with a centralized, visually rich view of all their active engagements across hackathons and projects. This page draws exclusively from the GetMeResponse dataset already available in the session — no additional API calls should be made. The goal is a fast, seamless experience that feels instant because it operates entirely on cached session data. There is an existing UI on the page. Kindly reuse them.
UI Description
Aesthetics
This page should feel like a personal mission control — at a glance, users should be able to see exactly where they stand across every active commitment. The design should be bold, structured, and immediately informative without feeling cluttered.
Dashboard Layout
- Implement a tabbed interface with the following tabs:
All | Hackathons | Projects
- Tabs must use vibrant active-state indicators — clearly distinguishing the selected tab from inactive ones (e.g., animated underline, accent color fill, or glow effect consistent with the Boundless design language)
- The
All tab should serve as the default view, aggregating content from both sub-categories into a unified, chronologically or relevance-sorted feed
Cards
- Reuse the existing
HackathonCard component as the base
- Extend each card with a Progress Indicator overlay that reflects the user's current submission stage status (e.g.,
Not Started, In Progress, Submitted, Under Review, Results Pending)
- The overlay should be visually distinct but non-intrusive — a badge, status bar, or subtle tag that enhances the card without obscuring its core content
- Cards should be responsive and maintain visual consistency across breakpoints
Spacing & Polish
- Apply generous whitespace between cards and sections to avoid a cramped or overwhelming layout
- Use consistent
rounded-4xl corner radius on all cards to maintain a modern, premium feel
- Ensure the page feels cohesive with the rest of the
app/me/* dashboard family
Technical Details
Hooks & Data Path
Hook
- Use
useAuthStatus() to access the current session and authenticated user data
Session Mapping
- Pull engagement data from two fields on the session user object:
user.profile.hackathonsAsParticipant — hackathons the user has explicitly joined as a participant
user.profile.userHackathons — hackathons associated with the user's submitted projects
Merging Logic
- Use
useMemo to combine both data sources into a single, deduplicated "Active Engagements" list
- The merge should handle overlapping entries gracefully (e.g., a hackathon appearing in both fields should only render once)
- Sorting should prioritize active or in-progress engagements above completed or upcoming ones
- The unified list should be the single source of truth driving all three tab views, with each tab simply filtering from it
⚠️ Caution
This is a production environment — not a sandbox.
- Code must be performant, accessible, and clean
- No dummy data — all data must be sourced strictly from the
GetMeResponse session dataset; no additional API calls should be introduced
- AI-generated code will be scrutinized; poorly structured or "hallucinated" code will result in immediate issue closure
- Follow the existing design system: shadcn/ui, Tailwind, Framer Motion
Testing & Verification
Automated Tests
npm run lint # Ensure code quality
npm run build # Verify no breaking changes in routing or types
Manual Verification
Implementation of "Participating" Page (
app/me/hackathons)Objective
Provide users with a centralized, visually rich view of all their active engagements across hackathons and projects. This page draws exclusively from the
GetMeResponsedataset already available in the session — no additional API calls should be made. The goal is a fast, seamless experience that feels instant because it operates entirely on cached session data. There is an existing UI on the page. Kindly reuse them.UI Description
Aesthetics
This page should feel like a personal mission control — at a glance, users should be able to see exactly where they stand across every active commitment. The design should be bold, structured, and immediately informative without feeling cluttered.
Dashboard Layout
All|Hackathons|ProjectsAlltab should serve as the default view, aggregating content from both sub-categories into a unified, chronologically or relevance-sorted feedCards
HackathonCardcomponent as the baseNot Started,In Progress,Submitted,Under Review,Results Pending)Spacing & Polish
rounded-4xlcorner radius on all cards to maintain a modern, premium feelapp/me/*dashboard familyTechnical Details
Hooks & Data Path
Hook
useAuthStatus()to access the current session and authenticated user dataSession Mapping
user.profile.hackathonsAsParticipant— hackathons the user has explicitly joined as a participantuser.profile.userHackathons— hackathons associated with the user's submitted projectsMerging Logic
useMemoto combine both data sources into a single, deduplicated "Active Engagements" listGetMeResponsesession dataset; no additional API calls should be introducedTesting & Verification
Automated Tests
Manual Verification
useAuthStatus()hackathonsAsParticipantanduserHackathonsare correctly merged and deduplicated viauseMemoAll,Hackathons,Projects) — confirm each filters the unified list correctlyrounded-4xlcorner radius and generous spacing are consistently applied across all cards