A search-and-monitoring tool that watches ~20 online marketplaces — manufacturer recertified stores, storage-specialist resellers, eBay/Amazon/Newegg, business VARs, and refurbished-server sellers — for hard disk drives (HDDs) and solid-state drives (SSDs), and scores each listing (0–100) to surface the best deals for a homelab/small-business buyer who favors enterprise/NAS-grade and recertified drives. It alerts on availability and price drops.
Personal/business use; single maintainer.
MS-0 foundation built and deployed — live in production. The Django
foundation, TimescaleDB-backed schema (the ADR-0010 identity ladder through the
offer_snapshot hypertable), auth stub, health/login/dashboard surface, poller
stub, and deploy artifacts run on a dedicated Debian LXC container, deployed by
GitHub Actions CD. The Python verification gate (uv · Ruff · BasedPyright strict ·
pytest + coverage · pip-audit) is green locally and in CI. The MS-1+ product
surface — the fetch → parse → normalize → entity-resolve → score → alert
pipeline, the marketplace connectors, and scoring — is not built yet.
| Doc | What it is |
|---|---|
docs/specs/hw-radar-master-spec.md |
The master specification — requirements, architecture, scoring, deployment, milestones. |
docs/adr/ |
Architecture Decision Records (MADR) — the authoritative record of significant decisions. |
docs/open-questions.md · docs/resolved-questions.md |
Decision backlog (open) and settled provenance. |
docs/research/index.md |
Generated index of the research corpus (in-depth context behind decisions). |
AGENTS.md |
The toolchain/agent contract (verification gate, dependency/typing/testing rules). |
podman compose up -d db # TimescaleDB dev database (docker works too)
uv sync --all-groups # create the env from uv.lock
uv run python manage.py migrate
uv run python manage.py createsuperuser
uv run python manage.py runserver
uv run python -m scripts.check # full verification gate (fmt · lint · types · test · cov · audit)
uv run ruff format . && uv run ruff check . --fix # fix passThe verification gate needs the dev database running.
Branching: main is protected and advances only via a pull request from dev. dev is the long-lived working branch — commit and push to it directly (no PR needed); use a short-lived feature/* branch only when you want isolation. To update main, open a PR from dev and merge with a merge commit (not squash — keeps dev in sync with main and preserves history); the PR must pass CI and carry signed commits.
Python · Scrapy (HTTP-first / structured-data-first / browser-last) · PostgreSQL + TimescaleDB · Django + server-rendered templates + HTMX · APScheduler in one systemd-supervised poller · deployed to a dedicated Debian LXC container · NGINX + Let's Encrypt · GitHub Actions CD. See the master spec §8.3 for the ADR-backed rationale behind each choice.