Welcome, and thanks for taking the time to interview with us! 👋
This repository is your starting point for the Malted AI technical interview. Before the session begins, the only goal is to get everything running correctly — the status page at http://localhost:4173 will confirm that your environment is set up as expected.
When the interview starts, your interviewer will send you an interview.patch file. Drop it in the root of this repository and run bash apply_patch.sh — this will reset the repo to a clean state and apply the task. After that, re-run the setup steps from the Setup section below (rebuild, re-seed, and bring Docker Compose back up). Your interviewer will walk you through this step at the time.
Windows users: run
bash apply_patch.shfrom Git Bash (included with Git for Windows) rather than Command Prompt or PowerShell.
- No AI tools — please disable AI-powered code completion (e.g. GitHub Copilot, Tabnine, Cursor, etc.) for the duration of the interview.
- Search is fine — Google and any other reference material (docs, Stack Overflow, etc.) are all encouraged.
- We're here to help — if you get stuck or have questions at any point, just ask your interviewer.
| Layer | Tech |
|---|---|
| Backend | Python 3.12, FastAPI, SQLite (stdlib sqlite3) |
| Frontend | TypeScript, React, Vite |
| Tooling | Docker, Docker Compose |
- Git
- Docker and Docker Compose
- Python 3.11+ and uv (for local development)
- Node.js 22+ and npm (for local development)
You can verify that bash and git are available by running:
bash --version
git --versionBoth should print version info without errors. If either fails on Windows, make sure you're running from Git Bash.
docker compose build
docker compose run --rm backend python seed.py
docker compose upVisit http://localhost:4173 — you should see a green "Setup completed successfully!" message.
Visit http://localhost:8000/api/health — should return {"status":"ok"}.
docker compose downTo fully reset (wipe the database and clear cached volumes):
rm -f backend/db.sqlite3
docker compose down -v| Method | Path | Description |
|---|---|---|
GET |
/api/health |
Health check |
GET |
/api/status |
DB connectivity and seeded record count |
The SQLite database file lives at backend/db.sqlite3 and is created after you run seed.py.
Option 1 — Online viewer
Open https://inloop.github.io/sqlite-viewer/ and drag-and-drop backend/db.sqlite3 onto the page.
Option 2 — sqlite3 CLI
Install sqlite3 if not already available then open the database:
sqlite3 backend/db.sqlite3Useful commands inside the prompt:
.tables -- list all tables
.schema records -- show the schema for a specific table
SELECT * FROM records;
.quit
docker compose run --rm backend pytestBackend:
cd backend
uv sync
source .venv/bin/activate # Windows: .venv\Scripts\activate
python seed.py
uvicorn app.main:app --reloadFrontend:
cd client
npm install
npm run dev