Skip to content

feat: Hackathon Hub — discovery, team formation, bookmark (closes #139)#153

Open
arcgod-design wants to merge 1 commit into
ARUNNG2004:mainfrom
arcgod-design:feat/issue-139-hackathon-hub
Open

feat: Hackathon Hub — discovery, team formation, bookmark (closes #139)#153
arcgod-design wants to merge 1 commit into
ARUNNG2004:mainfrom
arcgod-design:feat/issue-139-hackathon-hub

Conversation

@arcgod-design

Copy link
Copy Markdown

Hackathon Hub (closes #139)

Centralized hub for hackathon discovery, team formation, and bookmarking — backed by a new Firestore events collection (kind: "hackathon").

What ships

Route Description
/hackathons Hub with real-time onSnapshot feed, search, mode/organizer/topic filters, sort by newest/deadline/start, inline bookmark, "Your Saved" shelf
/hackathons/post Authenticated form (title, description, dates, city, website, tags, maxTeamSize, banner color)
/hackathons/[id] Detail page with real-time subscription, banner hero, mode/organizer-type badges, registration-closed indicator, external "Register on Organizer Site" redirect, delete (author-only), bookmark

Features

  • Discovery — filter by mode (online/offline), organizer type (student/company/community), topic tag, free-text search, sort by newest / registration deadline / start date
  • Team formation — opt-in "Looking for Team" list per event with note (max 280 chars), self-remove button, avatar fallback initial
  • Bookmark — toggle saved state per user (stored as bookmarks array of UID); "Your Saved" shelf on hub only shows when signed in
  • External redirect — "Register on Organizer Site" opens the organizer's URL in a new tab (rel="noopener noreferrer")
  • Real-time — hub & detail page both subscribe via onSnapshot; new posts, bookmarks, and team seekers reflect instantly
  • Author-only delete — only the user who created an event can delete it
  • PostHog eventshackathon_viewed, hackathon_bookmarked, hackathon_posted, hackathon_team_seeker_added

Files

app/hackathons/page.js                # Hub
app/hackathons/post/page.js           # Post form (auth-gated)
app/hackathons/[id]/page.js           # Detail + TeamFinder
components/hackathons/HackathonCard.js
components/hackathons/HackathonFilters.js
components/hackathons/TeamFinder.js
lib/hackathons.js                     # CRUD + bookmarks + team seekers + onSnapshot
components/Navbar.js                   # New hackathons icon link
lib/posthog/events.js                 # 4 new event names

Data model (Firestore events collection)

{
  kind: "hackathon",
  title, description, organizer, organizerType ("student"|"company"|"community"),
  mode ("online"|"offline"), location, city,
  startDate, endDate, registrationDeadline (ISO strings / serverTimestamp),
  websiteUrl, tags[], bannerColor, maxTeamSize,
  lookingForTeam: [{ uid, name, photoURL, note, addedAt }],
  bookmarks: [uid],
  createdBy, createdAt, updatedAt
}

Validation

  • npm run check:structure
  • npm run build ✓ (all 3 routes compiled: /hackathons, /hackathons/post, /hackathons/[id])
  • All client components have "use client" directive
  • ESM compatible (Tailwind v4, no new config files)
  • Theme-aware (uses var(--accent-*), var(--bg-*), var(--text-*) tokens)

Notes

  • Post form prefills organizer from user.displayName
  • Empty states: "No hackathons match your filters" with CTA to post the first one
  • ProtectedRoute wraps all three pages, redirecting unauthenticated users to /login
  • localStorage-free — bookmarks persisted to Firestore so they sync across devices

…NNG2004#139)

- New events Firestore collection (kind: 'hackathon')
- /hackathons — hub with real-time onSnapshot feed, search/mode/organizer/topic filters, sort by newest/deadline/start, inline bookmark toggle, 'Your Saved' shelf for signed-in users
- /hackathons/post — authenticated form with title/description/dates/city/website/tags/maxTeamSize/banner color
- /hackathons/[id] — detail page with real-time subscription, banner hero, mode/organizer-type badges, registration-closed indicator, external 'Register on Organizer Site' redirect, delete (author-only), bookmark
- components/hackathons/HackathonCard — gradient banner, mode/organizer badges, tags, team-seeker count, bookmark button (aria-pressed)
- components/hackathons/HackathonFilters — search + 4 selects (mode/organizer/topic/sort) using theme tokens
- components/hackathons/TeamFinder — opt-in 'Looking for Team' list with note (max 280 chars), self-remove button, avatar fallback initial
- lib/hackathons.js — CRUD, bookmark toggle, team-seeker add/remove, real-time subscribe helpers, normalizeEvent mapping Firestore timestamps → ISO
- Navbar — new Hackathon Hub icon link
- PostHog events — HACKATHON_VIEWED/BOOKMARKED/POSTED/TEAM_SEEKER_ADDED
@netlify

netlify Bot commented Jul 19, 2026

Copy link
Copy Markdown

👷 Deploy request for devconnectai pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit 8a4f86a

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.

Hackathon Hub

1 participant