- FastAPI twin of DealGod (async SQLAlchemy/asyncpg). wowplatter/v1: ping, inventory/lookup, inventory/intake (enriches from discogs_full by release_id). - schema v2: unified inventory (vinyl+general), slim crate, sales/sale_items. Discogs catalog NOT copied — joined from discogs_full at read time. - migrate.py: 34,543 shop rows moved (vs ~3.2M in the WowPlatter clone). - Smoke test green; plan/readme carry the architecture + UI boundary. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
52 lines
2.4 KiB
Markdown
52 lines
2.4 KiB
Markdown
# RecordGod
|
||
|
||
**The records back-office engine — the best of WowPlatter, reborn on Postgres, outside WordPress.**
|
||
|
||
RecordGod ingests WowPlatter's *job* (inventory, import, enrichment, labels, copy, queries)
|
||
but not WowPlatter's *code*. It runs as its own service on the VPS, calls DealGod for market
|
||
value, and feeds WordPress the tidy data it likes for the storefront.
|
||
|
||
WowPlatter is the **ancestral founder** — still running the live shop floor, and the reference
|
||
spec RecordGod matches before it retires anything. Honour the founder: don't redesign what
|
||
already works, copy it.
|
||
|
||
## Start here
|
||
- **[RECORDGOD_PLAN.md](RECORDGOD_PLAN.md)** — the plan, the map, the keep/drop triage, build
|
||
order, and the open decisions. Read this first.
|
||
|
||
## The family (sibling repos on this machine)
|
||
| Repo | What it is | Talks to RecordGod via |
|
||
|---|---|---|
|
||
| `../dealgod` | The **market** brain — cross-store value, arbitrage. Its own product. | RecordGod *calls* it (`X-API-Key`) for value |
|
||
| `../PRICEGOD` | The seller **extension** (Discogs cockpit). Successor to pliceclogs. | Calls RecordGod's `wowplatter/v1` contract |
|
||
| `../wowplatter` | The founder — WP/WooCommerce plugin running the live store. | RecordGod publishes tidy data to it |
|
||
|
||
Briefs that define the contracts already live in `../PRICEGOD/DEALGOD_BRIEF.md` and
|
||
`../PRICEGOD/WOWPLATTER_BRIEF.md`. All three still hold; RecordGod is who fulfils the
|
||
WowPlatter side of them.
|
||
|
||
## Run it (dev)
|
||
```bash
|
||
python3 -m venv .venv && ./.venv/bin/pip install -r requirements.txt
|
||
RECORDGOD_TOKEN=dev-tok ./.venv/bin/uvicorn app.main:app --reload --port 8010
|
||
./.venv/bin/python test_smoke.py # self-check — no DB/infra needed
|
||
```
|
||
Postgres schema: `psql recordgod < schema.sql`.
|
||
|
||
Live now: `GET /wowplatter/v1/ping`, `GET /wowplatter/v1/inventory/lookup?release_id=`.
|
||
Routes 3–5 (price / labels / intake) are intentionally **404** — PRICEGOD reads that as
|
||
"pending" and degrades gracefully, so an undefined route is the correct "not built yet" signal.
|
||
|
||
## Layout
|
||
```
|
||
app/
|
||
main.py FastAPI app + /healthz
|
||
db.py async SQLAlchemy over asyncpg (twin of DealGod's db.py)
|
||
auth.py require_token — Bearer; the one place the auth scheme lives
|
||
wowplatter_v1.py the contract router (ping + lookup live)
|
||
schema.sql minimal inventory table, release_id-keyed, store_id seam
|
||
test_smoke.py infra-free self-check
|
||
```
|
||
|
||
_Status: founding — scaffold runs, smoke test green. 2026-06-19._
|