themes-y2k/seed/seed.json
Alex Dunmow ed85f673f4 feat(y2k): Wave A theme-fleet build — 49 overrides, 7 templates, band persona (WO-TF-026)
Rebuild the y2k theme to the OVERRIDE-CONTRACT (frozen cms a0f07e2ae) with the
locked musician/band persona: liquid chrome, frosted-plastic bevels, gradient
mesh, marquees, glitter, a webring, and a dependency-free canvas metaball hero.

- All 49 mandatory builtin overrides in templates/overrides/y2k/ + manifest
  template_overrides; every content/provider field preserved from the frozen
  builtin default, only the chrome re-skinned (legacy button/card field reads
  already reconciled to link/style/label + text/media).
- 7 page templates: default, full-width, landing, article, blog-index, contact,
  auth — chrome header, glitter backdrop, chrome footer.
- Hero override ships a GO-BIG canvas liquid-chrome metaball showpiece
  (hero/landing only): lazy-init on view, prefers-reduced-motion honored, static
  chrome-mesh no-JS fallback, dependency-free.
- Persona blocks (5): waveform_player, tracklist, tour_dates, discography,
  webring_badge. Duplicating theme blocks became overrides; nft_gallery DELETED
  per WO.
- 5 dual-mode presets (frosted iMac plastic light + rave blacklight dark), all
  19 tokens, mode both, tuned dark.
- Bundled OFL fonts (Orbitron / Inter / Share Tech Mono) with licenses; all
  font-family via var(--font-heading|body|mono, fallback). Updated
  RECOMMENDED_FONTS/ICONS; required_icon_packs declared.
- Themed email-safe wrapper (tables, inline styles, chrome header, marquee
  footer). Master pages + demo seed (home/about/blog x3/contact/login) in band
  voice; contact form wired to seeded contact_submissions + row_inserted
  email-admins workflow.

Known platform gaps (OVERRIDE-CONTRACT §11/§12, unchanged): auth trio +
page-suggestions don't dispatch overrides yet; provider-backed overrides render
empty live lists until the codeless loader registers template sources. Files
authored faithful to builtin field/provider names; they light up when the cms
fix lands. Visual quality UNVERIFIED until Wave B.

Gates: `make` exit 0 (codeless y2k-0.2.0.bnp), `ninja plugin verify` OK,
check-safety exit 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 12:58:43 +08:00

223 lines
10 KiB
JSON

{
"demo": true,
"settings": {
"merge": {
"companyName": "Chrome Static",
"tagline": "A four-piece from the frosted end of the millennium."
}
},
"data_tables": [
{
"key": "contact_submissions",
"name": "Contact Enquiries",
"description": "Seeded contact-form submissions for the Chrome Static demo. A submission becomes a row here and emails the site admins.",
"columns": [
{ "key": "name", "label": "Name", "type": "text", "required": true },
{ "key": "email", "label": "Email", "type": "email", "required": true },
{ "key": "subject", "label": "Subject", "type": "text", "required": false },
{ "key": "message", "label": "Message", "type": "text", "required": true }
]
}
],
"pages": [
{
"slug": "/",
"title": "Chrome Static",
"template_key": "landing",
"blocks": [
{
"block_key": "hero",
"title": "Hero",
"slot": "main",
"sort_order": 1,
"content": {
"template": "centered",
"minHeight": "screen",
"eyebrow": "New EP out now",
"headline": "Chrome Static",
"subheadline": "Four tracks. Recorded live to tape.",
"description": "We are a four-piece from Melbourne. We make loud, bright pop for the end of the millennium.",
"ctaPrimary": { "text": "Listen", "url": "#listen" },
"ctaSecondary": { "text": "See the shows", "url": "#shows" }
}
},
{
"block_key": "y2k:waveform_player",
"title": "Now playing",
"slot": "main",
"sort_order": 2,
"content": {
"trackTitle": "Frosted",
"artist": "Chrome Static",
"audioUrl": "",
"coverImage": ""
}
},
{
"block_key": "y2k:discography",
"title": "Records",
"slot": "main",
"sort_order": 3,
"content": {
"heading": "Records",
"releases": [
{ "title": "Chrome Hearts", "year": "2001", "format": "LP", "cover": "", "link": "#" },
{ "title": "Dial-Up Dreams", "year": "2000", "format": "EP", "cover": "", "link": "#" },
{ "title": "Frosted", "year": "1999", "format": "Single", "cover": "", "link": "#" },
{ "title": "Skyline Demos", "year": "1998", "format": "Cassette", "cover": "", "link": "#" }
]
}
},
{
"block_key": "y2k:tour_dates",
"title": "Shows",
"slot": "main",
"sort_order": 4,
"content": {
"heading": "Shows",
"intro": "Doors an hour before. All ages unless noted.",
"dates": [
{ "date": "Fri 12 Sep", "venue": "The Chrome Room", "city": "Melbourne", "ticketUrl": "#", "soldOut": false },
{ "date": "Sat 13 Sep", "venue": "Rollerdrome", "city": "Sydney", "ticketUrl": "#", "soldOut": true },
{ "date": "Fri 19 Sep", "venue": "Basement 88", "city": "Brisbane", "ticketUrl": "#", "soldOut": false }
]
}
},
{
"block_key": "cta",
"title": "CTA",
"slot": "main",
"sort_order": 5,
"content": {
"background": "band",
"heading": "Join the mailing list",
"text": "One email when a record ships or a show goes up. Nothing else.",
"primaryLabel": "Sign up",
"primaryUrl": "/contact"
}
}
]
},
{
"slug": "/about",
"title": "The band",
"template_key": "default",
"blocks": [
{ "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "The band", "level": 1 } },
{ "block_key": "rich-text", "title": "Story", "slot": "main", "sort_order": 2, "content": { "html": "<p>Chrome Static started in a share house with a borrowed drum machine and a broken amp. We kept the sound and fixed the amp.</p><p>We record live to tape in one room. What you hear on the record is what we play on the night. Four people, no click track, one take when we can get it.</p>" } },
{ "block_key": "quote", "title": "Quote", "slot": "main", "sort_order": 3, "content": { "style": "pull", "quote": "Loud, bright, and done in one take.", "attribution": "Chrome Static" } },
{ "block_key": "divider", "title": "Divider", "slot": "main", "sort_order": 4, "content": { "variant": "line", "weight": "medium" } },
{
"block_key": "y2k:tracklist",
"title": "Frosted tracklist",
"slot": "main",
"sort_order": 5,
"content": {
"tracks": [
{ "title": "Frosted", "duration": "3:12", "url": "" },
{ "title": "Dial Tone", "duration": "2:48", "url": "" },
{ "title": "Silver Static", "duration": "4:01", "url": "" },
{ "title": "Skyline", "duration": "3:35", "url": "" }
]
}
}
]
},
{
"slug": "/blog",
"title": "Journal",
"template_key": "blog-index",
"blocks": [
{ "block_key": "card", "title": "Post: Tape", "slot": "main", "sort_order": 1, "content": { "layout": "vertical", "title": "Why we still track to tape", "text": "<p>Tape makes us commit. Here is what that costs and what we get back.</p>", "link": "/blog/tracking-to-tape", "linkLabel": "Read on" } },
{ "block_key": "card", "title": "Post: Tour", "slot": "main", "sort_order": 2, "content": { "layout": "vertical", "title": "Notes from the September run", "text": "<p>Three cities in a van. What went right and what broke.</p>", "link": "/blog/september-run", "linkLabel": "Read on" } },
{ "block_key": "card", "title": "Post: Gear", "slot": "main", "sort_order": 3, "content": { "layout": "vertical", "title": "The one pedal we cannot replace", "text": "<p>A cheap chorus pedal from 1999. It is the whole sound.</p>", "link": "/blog/the-chorus-pedal", "linkLabel": "Read on" } }
]
},
{
"slug": "/blog/tracking-to-tape",
"title": "Why we still track to tape",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Why we still track to tape", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Tape does not let you undo. You play it, you keep it, or you play it again. That pressure shows up in the take.</p><p>It is slower and it costs more. We think the trade is worth it. The record sounds like a room, not a grid.</p>" } }
]
},
{
"slug": "/blog/september-run",
"title": "Notes from the September run",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Notes from the September run", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Three cities, one van, four amps. The van held. One amp did not.</p><p>Sydney sold out and Brisbane nearly did. We ate too much servo food and slept in the van outside a Bunnings. We would do it again next week.</p>" } }
]
},
{
"slug": "/blog/the-chorus-pedal",
"title": "The one pedal we cannot replace",
"template_key": "article",
"parent_slug": "/blog",
"blocks": [
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The one pedal we cannot replace", "level": 1 } },
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>It is a plastic chorus pedal from 1999. It hisses and the knob is loose. It is also the whole guitar sound.</p><p>We have tried to replace it twice. Both times the record sounded wrong, so the old one went back on the board.</p>" } }
]
},
{
"slug": "/contact",
"title": "Contact",
"template_key": "contact",
"blocks": [
{
"block_key": "contact-form",
"title": "Contact form",
"slot": "main",
"sort_order": 1,
"content": {
"heading": "Get in touch",
"description": "Booking, press, or just to say hello. We read every message.",
"submitLabel": "Send",
"successMessage": "Thanks. We will get back to you soon.",
"fields": [
{ "name": "name", "label": "Your name", "type": "text", "required": true, "width": "half" },
{ "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" },
{ "name": "subject", "label": "Subject", "type": "text", "required": false, "width": "full" },
{ "name": "message", "label": "Message", "type": "textarea", "required": true, "width": "full" }
],
"formConfig": { "enabled": true, "captchaEnabled": false, "targetTable": "contact_submissions" }
}
},
{
"block_key": "contact-card",
"title": "Other ways to reach us",
"slot": "main",
"sort_order": 2,
"content": {
"heading": "Other ways in",
"columns": 3,
"channels": [
{ "icon": "lucide:mail", "label": "Email", "value": "hello@chromestatic.band", "link": "mailto:hello@chromestatic.band" },
{ "icon": "simple-icons:bandcamp", "label": "Bandcamp", "value": "chromestatic.bandcamp.com", "link": "#" },
{ "icon": "simple-icons:instagram", "label": "Instagram", "value": "@chromestatic", "link": "#" }
]
}
}
]
},
{
"slug": "/login",
"title": "Sign in",
"template_key": "auth",
"blocks": [
{ "block_key": "auth-form", "title": "Sign in", "slot": "main", "sort_order": 1, "content": { "default_tab": "login", "show_social": false } }
]
}
],
"menu_items": [
{ "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 },
{ "menu": "main", "label": "The band", "page_slug": "/about", "sort_order": 2 },
{ "menu": "main", "label": "Journal", "page_slug": "/blog", "sort_order": 3 },
{ "menu": "main", "label": "Contact", "page_slug": "/contact", "sort_order": 4 }
]
}