The Postgres answer to WowPlatter's sluggish rigid search. Was ILIKE '%..%' → Seq Scan (3038 cost),
zero typo tolerance, and multi-word phrases ('bob marley legend 2022') returned NOTHING (needs a
contiguous substring). Now: pg_trgm GIN index on disc_release.search_text (already populated) +
word_similarity operators — :q <% search_text (filter, GIN-accelerated) ranked by :q <<-> search_text.
Threshold pinned at 0.45 on the DB (recall vs speed sweet spot ~140ms; 0.3 too loose/slow, 0.6 too strict).
Added the missing disc_release_format(release_id) index (was seq-scanning per row) + inventory.title trgm
for stock-finder. All DDL idempotent in _STARTUP_DDL. Live: 'bob marly survivl' (2 typos) -> Survival in 117ms.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .claude | ||
| app | ||
| site | ||
| webstore | ||
| wp-bridge | ||
| .dockerignore | ||
| .gitignore | ||
| audio_sync.py | ||
| build_disc_cache.py | ||
| customer_woo_sync.py | ||
| disc_images_backfill.py | ||
| disc_sync.py | ||
| Dockerfile | ||
| migrate_virtual.py | ||
| migrate.py | ||
| README.md | ||
| RECORDGOD_AI_AGENT_BUILD.md | ||
| RECORDGOD_AI_AGENT_PLAN.md | ||
| RECORDGOD_NAVIGATOR_PLAN.md | ||
| RECORDGOD_PLAN.md | ||
| RECORDGOD_STOREFRONT_PLAN.md | ||
| refresh.sh | ||
| requirements-migrate.txt | ||
| requirements.txt | ||
| SCANGOD_BRIDGE_BRIEF.md | ||
| SCANGOD_BRIDGE_REPLY.md | ||
| schema.sql | ||
| shipping_sync.py | ||
| test_smoke.py | ||
| WAXMUSEUM_DEEPDIVE.md | ||
| WOWPLATTER_DEEPDIVE.md | ||
| WOWPLATTER_MIGRATION_AUDIT.md | ||
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 — 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)
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.