Skip to content

Repository files navigation

Generate Spring 2026 Technical Challenge

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: /

What the challenges are

Candidates complete either the algorithm challenge or the frontend challenge — not both.

Algorithm: A Generate Heist!

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 — 0 is optimal, higher is worse, -1 means invalid.

Endpoints:

  • GET /api/v1/challenge/algorithm/{id} — fetch the graph
  • POST /api/v1/challenge/algorithm/{id}/submit — submit paths and get a score

Frontend: Selling stolen goods…

Build an underground marketplace UI that consumes a paginated stolen-items API.

  • Design: Figma · clickable example
  • Gallery (UI requirement: ≤8 items/page; API limit defaults to 10), item detail pages, purchase modal (no payment backend)
  • GET /api/v1/challenge/frontend/{id}?limit=&offset=

Candidate flow

  1. POST /api/v1/member/register with body { "email": "name.z@northeastern.edu", "nuid": "123456789" } → receive member id token (nuid must be exactly 9 characters; email host must be northeastern.edu)
  2. Hit the algorithm and/or frontend challenge endpoints with that id
  3. 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).

Repository layout

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)

Dependencies

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).

Setup

  1. 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=fake

For 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).

  1. Install JS deps for the API package:
bun install --cwd api
  1. Sync generated OpenAPI + server code:
task sync

How to run

List all tasks:

task --list-all

Docker (recommended for local full stack)

Starts Postgres + the challenge server with Air hot reload:

task docker-develop-run

This removes the Postgres volume on every run — local registrations and scores are wiped.

Server defaults to http://localhost:8081.

Local server (Postgres already running)

task challenge:run

This builds (task challenge:generate + go build) and runs ./main_server.

Generate / develop workflow

  1. Edit endpoints in api/
  2. task api:generate — rewrite challenge/openapi.json
  3. task challenge:generate — regenerate ogen handlers + templ
  4. Implement or adjust handlers / services under challenge/

Or in one shot: task sync.

Tests

task challenge:test

Runs the full suite, including a long property/stress pass on ./internal/services/ (can take a while; needs Docker for testcontainers).

Format

task challenge:format

Production image

task docker-build          # linux/amd64 image
task docker-save           # optional: gzip tarball for manual upload

Pushing main triggers .github/workflows/deploy.yml (Docker Hub + droplet deploy).

Environment variables

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

About

take-home challenge server for Spring 2026 Generate SWE candidates

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages