Use when updating hackathon learning activity content, naming, ordering, metadata, assessments, production Supabase rows, or the matching mobile frontend and preview fallback for hackathon programs, phases, playlists, modules, and phase activities.
Repo-local skill for managing hackathon learning activities across both data and UI.
This skill exists because the hackathon stack has multiple overlapping layers:
Core principle: do not treat a copy change as "just content" until you know which layer owns it at runtime.
For non-hackathon PathLab content, prefer expert-pathlab-manager.
hackathon_programshackathon_program_phaseshackathon_phase_playlistshackathon_phase_modulesUse this layer for names, slugs, descriptions, ordering, module scope, gate rules, review mode, and phase/module navigation.
hackathon_phase_activitieshackathon_phase_activity_contenthackathon_phase_activity_assessmentsUse this layer for activity cards and activity detail content rendered under /(hackathon)/phase/[phaseId] and /(hackathon)/activity/[nodeId].
The repo currently shows two overlapping models:
hackathon_activity_individual_submissions and hackathon_activity_team_submissionshackathon_phase_activity_submissions via lib/hackathon-submit.ts and /api/hackathon/submitNever assume which one is live. Inspect current code and database before changing submission behavior.
Decide whether the user is asking for:
Default to cross-layer sync if the request changes user-facing naming or activity content.
Inspect these before editing:
lib/hackathonProgram.tslib/hackathonPhaseActivity.tsapp/(hackathon)/phase/[phaseId].tsxapp/(hackathon)/activity/[nodeId].tsxlib/hackathonProgramPreview.tsQuestions to answer:
If the request targets production:
Do not assume the IDs in seeds are the IDs in production.
Use this rule:
hackathon_programs for program identityhackathon_program_phases for phase identityhackathon_phase_playlists / hackathon_phase_modules for journey/program screenshackathon_phase_activities / content / assessments for activity list and detail screensIf the request says "activity", "instructions", "minutes", "content", or "assessment", it usually belongs in the direct activity layer.
After a production patch, update the matching repo files so the next seed run does not undo it:
supabase/seed/hackathon_customer_discovery_phase1.sqlsupabase/seed/hackathon_phase1_activities_complete.sqllib/hackathonProgramPreview.tsAlways read back the updated rows and confirm:
If frontend behavior changed, also verify the route-level screen that consumes that data.
lib/hackathonProgram.ts expects:
super-seed-hackathon
If production uses a different slug, the mobile program layer can silently drift or fail.
The current intended names live in:
supabase/seed/hackathon_customer_discovery_phase1.sqlThis file defines:
Super Seed HackathonPhase 1: Customer DiscoveryCustomer Discovery Core PlaylistInterview MindsetReal Customer EvidencePain Point DefinitionPersona + JTBD WorkspaceResearch + Reflectionsupabase/seed/hackathon_phase1_activities_complete.sql deletes and recreates all direct phase activities for one phase before inserting replacements.
Use extra care with it:
app/(hackathon)/activity/[nodeId].tsx reads directly from hackathon_phase_activities and nested content/assessment rows.
Important current limitation:
ai_chat and npc_chat are rendered as a generic "Coming soon" block in the hackathon activity screenSo:
content_title, content_body, and metadata affects copy and future compatibilityapp/(hackathon)/phase/[phaseId].tsx reads a phase plus direct activities from lib/hackathonPhaseActivity.ts.
If the user wants the phase screen card list to change, edit the activity layer.
app/hackathon-program/phase/[phaseId].tsx renders playlists/modules, not direct phase activities.
If the user wants module cards, module scope, gate badges, or playlist naming to change, edit the orchestration layer instead.
lib/hackathonProgramPreview.ts is a separate fallback/demo source and can drift from live data.
Whenever you rename programs, phases, playlists, modules, or top-of-funnel activities, sync this file too.
Production may have old names even if seeds are correct. Query prod before assuming anything.
The preview fallback may still show stale labels such as older hackathon branding or ideation-era module names.
ai_chat and npc_chat in hackathon activity rows currently describe content type, but the hackathon activity screen still shows placeholders for them.
The codebase contains both:
hackathon_phase_activity_submissions flow via web APIInspect lib/hackathon-submit.ts and current backend implementation before changing submission storage.
Changing a phase title will not update an activity title. Changing a playlist/module will not update the activity list screen. Changing the seed only will not fix production immediately.
references/data-model.md
Use for tables, seed files, live update rules, and cross-layer ownership.references/frontend-runtime.md
Use for screens, helper files, current runtime behavior, and known frontend gaps.For data-only tasks:
For frontend tasks:
Do not claim completion until you have evidence for the exact layer the user asked to change.