Skip to content

Release v1.0: Interview Preparation Tracker (PRD US-01 to US-11, US-13 to US-15) - #31

Merged
Kauakb merged 23 commits into
mainfrom
develop
Oct 31, 2026
Merged

Kauakb merged 23 commits into
mainfrom
develop

Conversation

@Kauakb

@Kauakb Kauakb commented Oct 31, 2026

Copy link
Copy Markdown
Owner

Release of the Interview Preparation Tracker v1.0 (PRD) from develop to main.

What's in it

Everything from #28:

  • US-01 GET /health; the API refuses to start without DATABASE_URL
  • US-02 PostgreSQL with hand-written SQL (schema.sql, repository.py); tests on a separate database
  • US-03 standard error JSON (NOT_FOUND, METHOD_NOT_ALLOWED, CONFLICT, VALIDATION_ERROR, INTERNAL_ERROR)
  • US-04 to US-08 problems CRUD with filters, 404 and 409
  • US-09, US-10 attempts and history
  • US-11 review queue GET /review?limit=5 with the PRD formula
  • US-13 complete Bruno collection (15 requests, all passing in the Runner)
  • US-14 README
  • US-15 CI: ruff, pytest (with a PostgreSQL service) and pip-audit

Checks

Not included

  • US-12 statistics by topic ([US-12] Statistics by topic #24), a "Could" story. Not built.
  • US-14 stays open until the README is checked in a fresh clone (T-14.2) and the demo is ready (T-14.3).

Closes #13
Closes #14
Closes #15
Closes #16
Closes #17
Closes #18
Closes #19
Closes #20
Closes #21
Closes #22
Closes #23
Closes #25
Closes #27

Part of #26

🤖 Generated with Claude Code

Kauakb and others added 23 commits October 23, 2026 01:00
Ignore __pycache__, .pyc, .venv and .env so compiled files, the virtual
environment and secrets never get committed to this public repo.

Closes #1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pin fastapi and uvicorn, document how to run the app with uvicorn,
and add Bruno requests for / and /about.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add dev requirements, a first test for / and /about, ruff and pytest
config in pyproject.toml, and a GitHub Actions workflow that runs
ruff check, ruff format --check and pytest. Format main.py with ruff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Dependabot config for weekly pip and GitHub Actions updates
- Read-only token and pip-audit step in CI; run CI on pushes to develop
- SECURITY.md pointing to private vulnerability reporting
- Ignore .env.* and add .env.example
- Document the security setup in CLAUDE.md

Closes #7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Returns every problem as a JSON list, ordered by id.

Part of #6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Attempt model with a foreign key to problems; created_at set by PostgreSQL
- AttemptCreate/AttemptRead: minutes > 0, confidence 1-5, optional notes
- POST and GET /problems/{problem_id}/attempts, 404 if the problem is missing

Part of #11

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Score = points for the last attempt (40 solved with confidence 1-2,
30 not solved, 20 confidence 3, 10 confidence 4-5) + 1 per day since,
up to 15. Problems with no attempts go last.

Part of #12

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…view queue, Bruno, README (#28)

Implements the PRD's **Must** stories (US-01 to US-10, US-13, US-14) and
the **Should** story US-11 (review queue). Only US-12 (stats, Could) is
not included.

## Review it commit by commit
| Commit | Stories |
|---|---|
| `0374f2c` | US-01 `/health` + `DATABASE_URL`, US-02 raw SQL
(`schema.sql`, `repository.py`, test database), US-03 standard errors |
| `22e2c4c` | US-04 to US-08: problems CRUD, filters, 404/409 |
| `0e904c5` | US-09, US-10: attempts and history |
| `319a90e` | US-13: Bruno Errors folder and folder order |
| `2af80b5` | US-14: README (+ CLAUDE.md) |
| `df8f658` | US-11: `GET /review` with the PRD formula, Bruno Insights
folder, README section (formula, `sorted` vs `heapq`) |

## Big changes
- **SQLAlchemy is gone.** The PRD forbids an ORM: SQL is hand-written in
`repository.py`, always with parameters.
- **Layers:** route (`main.py`) → service (`services.py`) → repository
(`repository.py`).
- **Data model follows the PRD:** a single `topic`, `UNIQUE (title,
platform)`, `created_at` as a date, `ON DELETE CASCADE`.
- **Tests use a separate database** (`TEST_DATABASE_URL`). CI gets a
`postgres:18` service.
- The placeholder routes `/` and `/about` and the old review list are
removed.

## Checks
- `ruff check`, `ruff format --check`, `pytest` (56 tests) and
`pip-audit` pass locally.
- The Bruno Runner passed for US-01 to US-10 (before US-11). It needs
one more run for the new Insights folder.
- **Still to do by hand:** validate the README from a fresh clone
(T-14.2) and prepare the demo (T-14.3).

Part of #13, #14, #15, #16, #17, #18, #19, #20, #21, #22, #23, #25, #26,
#27. The issues close with the `develop` → `main` PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@Kauakb
Kauakb merged commit 976bd82 into main Oct 31, 2026
7 checks passed
Kauakb added a commit that referenced this pull request Oct 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant