# RecordGod — public storefront + component page editor Port WowPlatter's **customer-facing** storefront to RecordGod as a **component-based page system** with a **page editor** (arrange the blocks). Studied: `wowplatter/public/{templates,partials,handlers}` + `shortcodes/{entities,components,navigation,templates}`. Legend: 🟢 build · 🟡 confirm · 🔵 new (no RecordGod equiv yet). --- ## 1. The key insight — it's already component-based WowPlatter renders public pages by composing **shortcode "blocks"**, not monolithic templates: **Entity blocks** (`shortcodes/entities/`): `release · artist · label · genre · style · format · identifier · inventory · price · market · wantlist`. **Component blocks** (`shortcodes/components/`): `items (grid) · filter (facets) · media (audio/video) · credits`. **Navigation** (`shortcodes/navigation/`): `breadcrumb · pagination · search`. Pages (`public/templates/*.php`) assemble these. → **So the page editor is natural:** a page = an ordered list of component blocks (each with config), stored as JSON, editable by dragging/reordering. This is exactly "page edit style so I can arrange the components." --- ## 2. The public pages (mapped) | Page | WowPlatter file | Components / sections | Data | Verdict | |---|---|---|---|---| | **Browse / Records** (the shop) | `records.php` (1378), `browse.php` | **faceted filter** (genre/style/format/year/price) + sort + **items grid** + pagination | `disc_release` mirror + `inventory` (in-stock, price) | 🟢 the core catalog page | | **Release detail** | `release.php` (1701), `mobile-release.php` | cover, detail panels, **tracklist**, **credits**, price/inventory (buy), AI blurb, Apple/YT links, related | `disc_release` + `disc_release_track/artist/label/format/image` + `inventory` | 🟢 the hero page | | **Artist** | `artist.php` (270) | artist header (name/bio/image) + their **releases grid** | `disc_artist` + `disc_release_artist` → releases | 🟢 | | **Label** | `label.php` | label header + releases grid | `disc_label` + `disc_release_label` | 🟢 | | **Genre / Style** | `genre.php` (278), style template | genre/style header + filtered releases grid | `disc_genre/style` + `disc_release_genre/style` | 🟢 | | **Search** | `search-shortcode`, public-search | search box → results grid (reuse items grid) | inventory + `disc_release` | 🟢 (extends the admin search infra) | | **Wantlist** | `wantlist` entity + public-wantlist partial | customer's wants + match-to-stock | `customer` + a `wantlist` table (intake-match — see audit) | 🟡 ties to the Wantlist cream item | | **Login / Signup** | `login.php` (334), `signup.php`, forgot/reset | username/password forms, redirect, remember | **customer accounts** | 🔵 NEW — RecordGod has admin-token auth only, no customer accounts yet | | **Profile / Loyalty** | `profile.php`, `loyalty-dashboard.php` | account info, order history, loyalty (inactive) | `customer` + `sales` | 🟡 (Loyalty inactive per audit) | | **Listen** | `listen.php` | audio-preview player + crate map | audio previews (Audio cream) | 🟡 (ties to Audio previews) | | Header / Footer / FAQ | `header/footer/faq.php` | chrome blocks | store_config | 🟢 fold into the builder | --- ## 3. RecordGod build — component library + page editor **a) Component library** (RecordGod renders these; reusable across pages): `release-card · release-detail · tracklist · credits · price-buy · items-grid · facet-filter · artist-header · label-header · genre-header · search-box · breadcrumb · pagination · hero/banner · text/markdown · audio-preview`. Each is a small template + a data contract, themed by the builder tokens. **b) Page-type layouts** (the editor's output): a page-type (`browse / release / artist / label / genre / style / search / account`) has a **layout = ordered `[{component, config}]`** in `store_config` jsonb (already exists). The public renderer reads the layout for the page-type + the entity data → composes the blocks. **c) The page editor** (the ask): in `/builder`, a **per-page-type canvas**: pick a page type → see its block list → **drag to reorder, add/remove blocks, edit each block's config** (e.g. items-grid: columns, sort default; facet- filter: which facets; release-detail: which panels). Live preview using a sample entity. Saves the layout JSON. (Builds on the existing `/builder` theme/brand-import + element editor — this adds the *structural* layer.) **d) Data layer** — already mostly there: - `disc_release` mirror (+ genre/style/label/format/artist/track/image) = all entity data, local. ✓ - `inventory` = what's in stock + price (the buyable layer). ✓ - Images = `/img/r/` (self-hosted WebP). ✓ - Public read endpoints: extend `/shop/catalog` + add `/shop/release/`, `/shop/artist/`, `/shop/browse?facets…`. **e) Routing** — pretty public URLs: `/records` (browse), `/release/-`, `/artist/`, `/label/`, `/genre/`, `/style/`, `/search`, `/account`. (WowPlatter uses rewrite rules; RecordGod adds FastAPI routes.) **f) Customer auth** 🔵 — the one genuinely NEW piece: customer accounts (signup/login/forgot/profile) — a `customer_auth` (email + password hash + session) layer separate from the admin token. WooCommerce currently owns customer accounts; decide: RecordGod own accounts, or SSO/keep Woo for checkout (see §5). --- ## 4. How it connects to what exists - **`/builder`** (theme + brand-import + element editor) → gains the **page-structure editor** (this plan's core). - **`/shop`** (themed storefront reading `/shop/config` + `/shop/catalog`) → becomes the rendered output of the layouts. - **disc_release mirror + inventory + /img/r** → the data + images, already built. - **Customers + Wantlist** → power the account + wantlist pages. --- ## 5. Open questions (confirm before building) 1. **Customer accounts + checkout**: does RecordGod own customer auth + cart/checkout, or does **WooCommerce** stay the commerce/account backend (RecordGod renders, Woo transacts)? Big architecture fork. 2. **Editor depth**: full drag-drop block canvas, or a simpler ordered list with show/hide + config per block (faster to ship, 90% of the value)? 3. **Which pages first**: Browse + Release (the 80% — catalog + detail) before Artist/Label/Genre/Style + account? 4. **Listen/audio previews** on the storefront — in this phase or with the Audio internalization work? ## 6. Phases - **P0 — read API + Release/Browse render** (no editor yet): `/shop/release/` + `/shop/browse` rendering the component blocks with a default layout. The 80% value, proves the data + components. - **P1 — the page editor**: per-page-type layout editor in `/builder` (reorder/add/remove/config blocks) + live preview. - **P2 — Artist/Label/Genre/Style** entity pages (reuse items-grid + header blocks). - **P3 — customer accounts** (signup/login/profile) — pending the §5.1 decision. - **P4 — Wantlist + Search + Listen** storefront pages.