Root carried 15 *_PLAN/_DEEPDIVE/_AUDIT/bridge/handover docs (many describe shipped work). git mv → docs/ (R100, no content change). README.md stays at root. Already *.md-dockerignored, so no image impact — purely navigability. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
151 lines
11 KiB
Markdown
151 lines
11 KiB
Markdown
# 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.
|