Backend platform for the Generate (Northeastern) Spring 2026 software engineering technical interview. Candidates register with a Northeastern email, pick one of two challenges (algorithm or frontend), and interact with an oracle API that generates per-candidate test data and scores algorithm submissions.
Built by Stone Liu and Zachary Croft (Technical Software Chiefs of Generate).
- Live challenge spec (when the server is running):
/challenge - API docs:
/
Candidates complete either the algorithm challenge or the frontend challenge — not both.
Infiltrate the Museum of Generate and disable sensors to reach the vault.
- Sensors form a DAG. Each sensor has dependents; to disable a sensor you must first disable one of its dependents.
- Edges carry risk scores. After a target sensor is deactivated, risk along that path becomes zero.
- For each target, choose a root→target path with minimal risk (tie-break: smaller sensor ids).
- Submit a list of deactivation paths (
paths: uint[][]). Score is the summed absolute difference from the oracle's optimal path lengths at each step —0is optimal, higher is worse,-1means invalid.
Endpoints:
GET /api/v1/challenge/algorithm/{id}— fetch the graphPOST /api/v1/challenge/algorithm/{id}/submit— submit paths and get a score
Build an underground marketplace UI that consumes a paginated stolen-items API.
- Design: Figma · clickable example
- Gallery (UI requirement: ≤8 items/page; API
limitdefaults to 10), item detail pages, purchase modal (no payment backend) GET /api/v1/challenge/frontend/{id}?limit=&offset=
POST /api/v1/member/registerwith body{ "email": "name.z@northeastern.edu", "nuid": "123456789" }→ receive memberidtoken (nuidmust be exactly 9 characters; email host must benortheastern.edu)- Hit the algorithm and/or frontend challenge endpoints with that
id - Algorithm only: submit answers for scoring (unlimited retries)
Recover a lost token with GET /api/v1/member?email=&nuid=. Health check: GET /healthcheck.
Interview helpers live under interview/ (e.g. candidate.sh is a template for looking up scores in Postgres — fill in host/user/password/DB_NAME before use; as committed the psql connection flags are blank).
| Path | Role |
|---|---|
api/ |
OpenAPI 3.1 spec authored in TypeScript via fluid-oas; writes challenge/openapi.json |
challenge/ |
Go HTTP server (ogen-generated handlers, GORM/Postgres, templ challenge page, scoring oracle) |
interview/ |
Operator scripts for interviewing candidates |
docker-compose.yml |
Local Postgres + hot-reload challenge server |
Taskfile.yml |
Root task runner (includes api and challenge tasks) |
| Tool | Why |
|---|---|
Go 1.25.3 (or any Go 1.21+ with default GOTOOLCHAIN=auto and network to download it) |
Challenge server |
| Task | Build / generate / test / docker workflows |
| Bun | Run the OpenAPI DSL in api/ |
| Docker + Compose | Local Postgres and optional containerized server |
| ogen / templ | Pulled as Go tool dependencies via go generate / go run (no separate host install required) |
Optional for interview tooling: psql (used by interview/candidate.sh after you fill in credentials).
- Clone the repo and create a root
.env(Task loads./.env).
For task docker-develop-run, Compose sets POSTGRES_DB from ${DB_HOST}, so DB_HOST and DB_NAME must be identical and must be the Compose service name (database) — not localhost:
DB_HOST=database
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=changeme
DB_NAME=database
PORT=8081
SLACK_WEBHOOK=fakeFor task challenge:run against Postgres on your machine, use DB_HOST=localhost (and set DB_NAME to whatever database you created). See .env.test for the values used in some containerized setups (DB_HOST / DB_NAME both generate_technical_spring_2026-database-1).
- Install JS deps for the API package:
bun install --cwd api- Sync generated OpenAPI + server code:
task syncList all tasks:
task --list-allStarts Postgres + the challenge server with Air hot reload:
task docker-develop-runThis removes the Postgres volume on every run — local registrations and scores are wiped.
Server defaults to http://localhost:8081.
task challenge:runThis builds (task challenge:generate + go build) and runs ./main_server.
- Edit endpoints in
api/ task api:generate— rewritechallenge/openapi.jsontask challenge:generate— regenerate ogen handlers + templ- Implement or adjust handlers / services under
challenge/
Or in one shot: task sync.
task challenge:testRuns the full suite, including a long property/stress pass on ./internal/services/ (can take a while; needs Docker for testcontainers).
task challenge:formattask docker-build # linux/amd64 image
task docker-save # optional: gzip tarball for manual uploadPushing main triggers .github/workflows/deploy.yml (Docker Hub + droplet deploy).
| Variable | Required | Default | Notes |
|---|---|---|---|
DB_HOST |
yes | — | Postgres host (database in Compose; localhost for host Postgres) |
DB_PORT |
yes | — | Postgres port |
DB_USER |
yes | — | Postgres user |
DB_PASSWORD |
yes | — | Postgres password |
DB_NAME |
yes | — | Database name (must equal DB_HOST when using docker-compose.yml) |
SLACK_WEBHOOK |
yes | — | Slack incoming webhook (use a dummy locally) |
PORT |
no | 8081 |
HTTP listen port |