RECORDGOD/WOWPLATTER_DEEPDIVE.md
type-two beabfe1297 docs(audit): WowPlatter mega deep-dive + reorganise
Deeper companion to WOWPLATTER_MIGRATION_AUDIT.md — refreshes status (covered/partial/todo/dropped)
after the recent build wave, drops to tab + AJAX-action level (40 pages / ~90 tabs / 460 actions),
and proposes RecordGod's 5-group IA (STOCK/SELL/STOREFRONT/GROW/SYSTEM) to replace WP's 2-root sprawl.
Key reframe: internal mirror + local images make whole subsystems evaporate, not migrate (~1/3 of
actions drop as WP-survival/pre-data-centre enrichment).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 11:07:38 +10:00

151 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WowPlatter admin — mega deep-dive & reorganise (2026-06-24)
Deeper companion to `WOWPLATTER_MIGRATION_AUDIT.md` (page-level, 2026-06-22). That one decided cream-vs-bloat;
**this one refreshes status** (a lot shipped since), drops to **tab + button (AJAX action) level**, and proposes a
**clean RecordGod information architecture** to replace WowPlatter's sprawl.
**The thesis:** WowPlatter is everything bolted to WordPress because that's the cage John was in. RecordGod runs on
metal/Postgres and uses WP only as a dumb, secure storefront skin (the bridge). So the rule for every feature below is
not "port it" — it's **"what is this actually for, and is it still needed once the data lives locally?"** Internal
`disc_*` mirror lookups + the local image store make whole subsystems (per-row API calls, image downloaders, enrichment
harvesters) *evaporate*, not migrate.
Surface measured: **~40 admin pages · ~90 tabs · 460 distinct AJAX actions.**
Legend: **✅ COVERED** (built in RecordGod) · **🟡 PARTIAL** · **🔜 TODO** (cream, not yet) · **❌ DROP** (rejected, with reason).
---
## A. ALREADY COVERED ✅ (built since the first audit — the bandaid is half off)
| WowPlatter area | RecordGod now |
|---|---|
| Dashboard | `/admin` dashboard — counts, stock value, sales tiles, quick actions, lazy charts |
| Inventory list/edit/bulk | `/admin` Inventory — table, search, inline edit, delete, bulk actions, add-item |
| Import (bulk stock-in) | **Intake (3-source)** — internal mirror lookup + Discogs collection folders + Google Sheet (service account); one `_stage()` core, enrich-on-demand, skip-existing |
| Sales / POS | `/pos` — register, tender/change, split, layby, discounts, history, settings |
| Receipts + payments | server-rendered print/email receipts + **Square Terminal** wired |
| Shipping | AusPost own-rates table + `/shop/shipping/quote` (no API, no paid WP plugin) |
| Search / Navigator | Store→Rack→Crate→Item drill-down, Collections CRUD, Reorganize backend, locator |
| Crates / Store map | virtual crates + rack map nav |
| Customers | `customer` table + Woo customer sync (unified CRM) + POS picker + edit |
| Wantlist | table + public "request a record" intake + admin nav |
| Reports | `/admin/reports` workbench (date×dim×metric) |
| Connect (vault) | Fernet vault + tests: discogs/woo/dealgod/square/mail/**google**/bridge_key |
| Staff | accounts + roles + time clock |
| 3D Virtual Store | Three.js store, 3 rooms render |
| Gig Guide | lives in DealGod (`/api/gigs`), consumed via API |
| Storefront | `/shop` API + **WP bridge** (SSR pages, on-the-fly Woo product, order webhook) |
| Audio (storefront) | per-track previews, jog/seek, Apple-ID (country-scoped) + dead-YouTube check |
**Beyond WowPlatter (net-new in RecordGod):** DealGod price-intel join, store-intel dossiers, the WP bridge itself,
internal enrich-on-demand that *grows* the mirror, the 3-source intake.
---
## B. THE DEEP MAP — every page/tab, what it does, status
### STOCK group
- **Dashboard** `dashboard.php` — at-a-glance + Top-Performers(30d). ✅ (add the best-sellers widget — small).
- **Inventory** `inventory/{main,list,form,bulk,meta-catalog,discogs-marketplace,ebay-marketplace,ebay/*}`
list/form/bulk ✅. `meta-catalog` = Facebook product feed (fb×12 actions) → 🔜 fold into **Ads/Meta**.
`discogs-marketplace` = list/manage Discogs Marketplace inventory → 🔜 (wanted). `ebay*` = ❌ (not used).
- **Import** `import/{main,other,reference-conversion}` — paste IDs/catnos/barcodes → match → create stock;
reference-conversion = catno/identifier→release_id. ✅ **superseded by Intake** (matching is now local against
`disc_release`/`disc_release_identifier`). Keep a "paste a list of IDs/barcodes" box as a 4th Intake source — 🔜 small.
- **Print / Labels** `print.php` + `label-designer.php` — thermal price labels + template designer. 🔜 **cream, still missing.**
Reuse PriceGod/rfid-daemon print path; templates first, visual designer later.
- **Analyse** `analyse.php` (analyze×4) — find dupes / missing data / anomalies = **stock hygiene**. 🔜 → build as the
**"Heal" sweep** (scan inventory for missing artist/label/cover → backfill from mirror; dry-run first). The genuinely
good idea salvaged from the old import engine.
- **Search** `search.php` + panes — Scanner / Returns / Reorganize / Collections / Stock-Finder. ✅ backend; 🔜 finish
**Scanner (scan-to-slot), Returns, Reorganize walkthrough** UIs.
- **Wiki** `wiki.php` — per-release wiki lookup/editor. ❌ **DROP** — built before the local data centre; enwiki/Discogs/
MusicBrainz lookups + the `notes` field cover it.
### SELL group
- **Sales** `sales/*` — POS engine. ✅.
- **Customers** `customers.php` — CRM: Overview/Sales/Loyalty/Wantlist/Mailing/Messages/Info per customer. 🟡 table+sync
done; 🔜 **the customer record page** (history, wants, contact, mailing prefs). Messages tab = ❌ (see Messaging).
- **Wantlist** `wantlist.php` — who-wants-what → buy signals + notify-on-arrival. 🟡 capture done; 🔜 **intake-match +
notify** (match incoming stock to wants).
- **Loyalty** `loyalty-{users,reports,settings}` — points/tiers/rewards. 🔜 migrate data+UI but **keep INACTIVE** (needs work).
- **Inbox / Messaging** `messaging-settings.php` + `channels/` (Beeper/WhatsApp bridge) — ❌ **DROP in-app**; messaging stays
external (email/socials). Note: `/admin/inbox` already runs hello@ mail externally.
### STOREFRONT group
- **Pages** `pages.php` — storefront builder: General/Sales/Header/Welcome/FAQ/SEO/URL/Placeholder. 🟡 `/builder` exists;
🔜 fold content bits (welcome/FAQ/SEO/header copy) in.
- **Profile Editor** `profile-editor.php` — customer-facing account editing. 🔜 **LATER** (storefront not far enough).
- **Audio** `audio.php` — MusicBrainz / Streaming&Harvester / Beatport BPM-Key / Reports. 🟡 storefront previews + Apple-ID
done. 🔜 **internalize enrichment**: local MusicBrainz (Ultra) + enwiki + Discogs instead of API keys; KEEP Apple-ID
(country-preserving JSON) + previews + Beatport. ⭐ needs its own page-by-page pass. `reports/audio.php` = ❌ (pipeline tooling).
- **Virtual Store** `virtual/{main,builder,editor,tools,store-view,store-view-analytics,audio-tab}` — 3D store **view** ✅;
**editor** (rack/crate placement) 🔜 **build inside RecordGod**; analytics 🟡; builder(release page) overlaps `/builder`.
### GROW group
- **Ads** `ads/{summary,meta,google}` + `ads-admin-display.php` (fb×12) — post ads to Meta + manage listings. 🔜 migrate as
**Meta API post + Discogs-marketplace management** (not used yet, but wanted in record-store software).
- **Beatport** `beatport-match.php` (bp×14) — BPM/Key matcher (Search / Work Queue) via extension. 🔜 migrate (valuable for
the dance catalog).
- **Reports** `reports/*` + `sales/reports.php` — sales/stock/audio analytics. ✅ core; deepen per need.
- **Gig Guide** `gig-guide.php` (gi×7) — ✅ in DealGod, consumed via API.
- **Blagginate** `blagginate.php` (blagginate×29!) — YouTube-cookie tracklist/metadata scraper. ❌ **DROP** (29 actions of
rope; PriceGod plan already cut it).
### SYSTEM / INTEGRATIONS group
- **Connect** `connect/{main,auspost,dealgod,discogs,ebay,facebook,google,google-service,listenbrainz,mail,recaptcha,serp,square,database,extra}`
(test×15) — the credential hub. ✅ vault + discogs/woo/dealgod/square/mail/google; 🔜 add auspost/facebook as Ads/Shipping
need them; ebay/listenbrainz/serp/recaptcha = ❌ unless used.
- **Database** `database/{export,import,files,locate,transients}` (backup×6) — WP backup/restore/transient tools.
❌ mostly (RecordGod has pg_dump sync `refresh.sh`); `locate` overlaps the navigator (already ✅).
- **System / Tools / Settings** `system.php`, `tools/{debug,logging,shortcodes,wpcli}` (wpcli×7), `settings/{general,performance,endpoints}`,
`endpoints.php` — WP plumbing. ❌ drop the WP-specific bits; **General settings (currency/tax/store info)** 🟡 → some already
in POS settings, finish there. RecordGod has its own `/admin` System health panel ✅.
- **AI** `ai-tabs/{main,agent,chatbot,connect,prompts}` — chatbot/agent. ❌ **DEFER** (side quest, not the seller loop).
- **Sound** `sound.php` — the 2nd menu root (SOUND), audio-side landing. 🟡 = the Audio group above.
---
## C. THE REORGANISE — RecordGod's clean IA (5 groups, not 2 roots + 40 pages)
WowPlatter grew organically into ~40 flat-ish pages. RecordGod should expose **5 task-based groups**. Proposed nav
(✅=there, 🔜=to add):
```
STOCK Dashboard ✅ · Inventory ✅ · Intake ✅ · Search/Navigator ✅ · Crates ✅ · Labels 🔜 · Heal 🔜
SELL Register/POS ✅ · Orders ✅ · Customers 🟡 · Wantlist 🟡 · Loyalty 🔜(inactive)
STOREFRONT Builder/Pages 🟡 · 3D Store ✅(+editor 🔜) · Audio/Previews 🟡 · (served via WP bridge ✅)
GROW Ads — Meta + Discogs marketplace 🔜 · Beatport 🔜 · Reports ✅
SYSTEM Connections ✅ · Staff ✅ · Shipping ✅ · System health ✅ · Sync ✅
```
**Old → new collapse:**
- Import + reference-conversion + meta-catalog-matching → **Intake** (+ a paste-IDs source).
- Wiki + Audio-enrichment-via-API + Blagginate + Analyse-missing-data → **one local enrich/Heal** path (mirror + MusicBrainz/enwiki).
- Database tools + System + Tools + Settings/endpoints → **System health + Sync** (pg_dump), drop WP plumbing.
- Messaging + Inbox + channels → external (email/socials), not in-app.
- eBay (marketplace/inventory/orders/connect) → dropped entirely.
- 2 menu roots (WowPlatter / SOUND) → SOUND folds into **STOREFRONT Audio**.
**Net drop count:** Blagginate(29) + AI(5 tabs) + eBay(~3 pages,6 actions) + Wiki + Messaging/channels + Audio-Reports +
WP system/tools/database plumbing ≈ **a third of the 460 actions vanish**, because they were WordPress survival gear or
pre-data-centre enrichment.
---
## D. REFRESHED BUILD ORDER (what's actually left)
1. **Heal sweep** (Analyse, salvaged) — scan stock for missing artist/label/cover → backfill from mirror; dry-run first.
2. **Labels / Print** — templates + price-label print (reuse PriceGod/daemon).
3. **Customers** record page (history/wants/contact/mailing).
4. **Wantlist** intake-match + notify-on-arrival.
5. **Finish Search** UIs (Scanner / Returns / Reorganize walkthrough).
6. **Audio internalization** review+build (local MB/enwiki; keep Apple-ID + previews + Beatport).
7. **Ads** — Meta post + Discogs-marketplace management (+ meta-catalog feed).
8. **Beatport** BPM/Key.
9. **3D scene editor** (rack/crate placement in-app).
10. **Pages content → /builder** · **Dashboard** best-sellers widget · **Loyalty** (migrate, inactive).
**DROP:** Wiki · Messaging/Inbox/channels · Blagginate · AI chatbot · Audio-Reports · eBay · WP system/tools/database plumbing.
**LATER:** Profile Editor.