Phase 2 — Implementation¶
AI-assisted. Use your coding agent freely — please do. Share your screen and think out loud. We're watching how you scope the work, how you direct the agent, and how you review and integrate what it produces, as much as the final code.
You'll do one track, depending on the role you're interviewing for:
- Track A — General / Backend SWE: a revenue dashboard.
- Track B — Applied AI Engineer: natural-language hybrid search.
We'll tell you which track is yours at the start of the phase. Both are comparable in scope.
Refer to the Environment page for the API surface and the scaffolding each track builds on.
Track A — Revenue dashboard (General / Backend SWE)¶
This is a streaming / data-engineering task: read a Redis stream, aggregate, persist, and expose the results through the API and UI.
The task¶
The
workerservice is already simulating sales — every sale is appended to a Redis stream. You'll build a revenue dashboard: a backend consumer that reads that stream and aggregates revenue per machine and per region, persists the aggregates, exposes them via the API, and a new React view in the existing UI that shows total revenue, top machines, and a by-region breakdown. Live-updating is a bonus. Use your agent — we want to see how you drive it.
What's provided¶
The stream contract, throughput, and how to inspect the stream are all documented under Revenue stream on the Environment page. In short:
- Stream name:
vendomo:revenue:events. - Fields (all stored as strings):
machine_id,region,item,amount(USD as a string),ts(epoch milliseconds as a string). - The stream is capped via
MAXLEN(trimmed — the full history is not retained), and runs at roughly 8 events/sec. - You can inspect it live with
redis-cli(XINFO STREAM/XREVRANGE).
You have Postgres and Redis available, plus the existing React UI to mount a new view in.
Track B — Natural-language hybrid search (Applied AI Engineer)¶
Build a search feature where a user types a natural-language query and the app returns the nearest machines that actually stock the product they want, ranked by distance.
The task¶
A user types a natural-language query into a new search box — for example, "what's the closest vending machine that has coke near West 42nd Street in New York City" — and the app returns the nearest machines that stock that product, ranked by distance, on a new search UI. You'll build the backend NL→search pipeline and a UI on top. Use your agent — we want to see how you drive it, and especially how you review what it gives back.
What's provided¶
The details are on the Environment page; the relevant pieces for this track:
- Per-machine inventory. Each machine's
productslist is{ "product": <name>, "quantity": <int> }, andquantity == 0means sold out. It's returned onGET /api/machines/{id}. - Canonical product catalog.
GET /api/productsreturns the canonical vocabulary (~27 items). Names are canonical — e.g. the catalog has"Cola", not"Coke"— so a user's product term may need to be matched to a canonical name. - Geo + metadata. Machines have
latitude/longitude,region,status,city,address, and a free-textlocation_description. - Redis 8 with the query engine (
FT.*), GEO, JSON, and vector built into core — no modules to install. - Anthropic Claude is configured via environment (
ANTHROPIC_API_KEY,ANTHROPIC_MODEL), and theanthropicpackage is installed, so LLM features are ready to use.
You'll build the search endpoint, any LLM/query-understanding piece, the retrieval/index, and the new search UI.