Goal
Add the first Forge project/judging slice: officer-managed Devpost project
imports and a permission-gated project directory for judges.
Product scope
Officer project management
- Add an officer-only
/admin/projects surface.
- Let an officer select an existing hackathon and upload a Devpost project CSV.
- Treat each import as an authoritative full replacement of that hackathon's
imported project inventory.
- Import submitted projects only; skip drafts and incomplete projects.
- Derive hackathon challenges from Devpost opt-in prize values and apply a
General challenge to every project.
- Let officers edit approved imported project/team fields.
- Let officers soft-delete one project at a time after confirmation.
- Let officers restore individually soft-deleted projects.
Judge project directory
- Add
/judge/projects for authenticated users with IS_JUDGE; preserve the
existing IS_OFFICER bypass.
- Automatically show the currently active hackathon.
- Let officers preview the judge experience outside the active window using the
hackathon with the nearest upcoming start date.
- Show title, Devpost link, prize categories, and challenges in the table.
- Support title search, sorting, established Forge pagination, and filters for
challenge, prize/category, and participant count.
- Open a responsive project-detail modal with Markdown description, approved
links and technologies, challenge/category data, team names, emails, schools,
and submission time.
Import constraints
Devpost exports are variable-width and may repeat submission URLs while
expanding team-member data. The importer must produce one project per submission
URL without losing the associated team members. Event-specific questionnaire
answers are not imported for judge display.
An active hackathon satisfies start <= now <= end. Imported opt-in labels are
kept as supplied rather than merged by capitalization, whitespace, or
punctuation equivalence. A replacement import also replaces the selected
hackathon's imported challenge list, while every imported project receives the
General challenge.
The import result reports imported projects, excluded drafts, collapsed
duplicate URLs, and malformed or rejected records. Officers may edit title,
URLs, description, categories, challenge assignments, technologies,
universities, team roster/contact fields, and participant count after import.
Discord handles and all other event-specific questionnaire fields are ignored.
Accepted technical direction
- Replace the unused legacy project/challenge/submission/judge/judgment model;
there is no production data requiring compatibility.
- Introduce durable project, project-member, challenge, and project/challenge
join records scoped to a hackathon.
- Use a protected multipart upload route backed by an API-owned import service
and an established CSV parser.
- Validate the complete file and replace the selected hackathon's inventory in
one transaction; do not introduce a separate pool, queue, or staging system.
- Enforce judge/officer access on every project read and officer access on every
mutation.
- Audit import, edit, delete, and restore without copying raw CSV or contact PII
into audit metadata.
- Remove the unused legacy judging tables, including
auth_judge_session.
- Enforce a 25 MiB multipart upload limit, store declared participant count
independently from roster rows, and store/display normalized URLs only.
Out of scope
- Scoring, feedback, or judge responses
- Judge assignments, rooms, or judging sessions
- Ranking and winner selection
- Hacker-to-project matching
- Public project gallery
- Devpost API synchronization
- Batch project deletion outside replacement import
- Merge conflict resolution or preservation of manual edits across re-import
Planning artifacts
The feature contract is being developed under
.forge/features/project-judging/. Implementation must wait for approval of
the spec, SRD, and test cases.
Artifact status
The product spec and technical SRD are approved. Importer-focused test cases are
proposed for owner approval; implementation waits for approval of the complete
artifact bundle.
Goal
Add the first Forge project/judging slice: officer-managed Devpost project
imports and a permission-gated project directory for judges.
Product scope
Officer project management
/admin/projectssurface.imported project inventory.
Generalchallenge to every project.Judge project directory
/judge/projectsfor authenticated users withIS_JUDGE; preserve theexisting
IS_OFFICERbypass.hackathon with the nearest upcoming start date.
challenge, prize/category, and participant count.
links and technologies, challenge/category data, team names, emails, schools,
and submission time.
Import constraints
Devpost exports are variable-width and may repeat submission URLs while
expanding team-member data. The importer must produce one project per submission
URL without losing the associated team members. Event-specific questionnaire
answers are not imported for judge display.
An active hackathon satisfies
start <= now <= end. Imported opt-in labels arekept as supplied rather than merged by capitalization, whitespace, or
punctuation equivalence. A replacement import also replaces the selected
hackathon's imported challenge list, while every imported project receives the
Generalchallenge.The import result reports imported projects, excluded drafts, collapsed
duplicate URLs, and malformed or rejected records. Officers may edit title,
URLs, description, categories, challenge assignments, technologies,
universities, team roster/contact fields, and participant count after import.
Discord handles and all other event-specific questionnaire fields are ignored.
Accepted technical direction
there is no production data requiring compatibility.
join records scoped to a hackathon.
and an established CSV parser.
one transaction; do not introduce a separate pool, queue, or staging system.
mutation.
into audit metadata.
auth_judge_session.independently from roster rows, and store/display normalized URLs only.
Out of scope
Planning artifacts
The feature contract is being developed under
.forge/features/project-judging/. Implementation must wait for approval ofthe spec, SRD, and test cases.
Artifact status
The product spec and technical SRD are approved. Importer-focused test cases are
proposed for owner approval; implementation waits for approval of the complete
artifact bundle.