Full LCARS library-computer interface for a sci-fi podcast/media outfit. Codeless .bnp. Re-skins every mandatory builtin inside LCARS framing and ships the full Wave A surface. - 49 mandatory template overrides (chrome, marketing, primitives, commerce, blog family, auth, page-suggestions), field-faithful re-skins of the frozen builtin defaults; identity carried by the lcars-* class system. - 8 page templates (default+sidebar rail, full-width, full-display, landing, article, blog-index, contact, auth) with elbow-frame chrome. - 4 persona blocks: episode_console, crew_roster, stardate_log, transmission_status. Legacy lcars_header/sidebar/panel removed (now overrides + page chrome). - 5 dual-mode presets (canonical black + daylight-ops cream), all 19 tokens. - Bundled Antonio + Share Tech Mono (OFL); email-safe LCARS wrapper. - Seed "Subspace Signal": home, about, 3 episodes+articles, contact (hail_signals table + row_inserted email-admins workflow), login. - GO BIG motion: dependency-free canvas panel-sweep on the hero (lazy-init, reduced-motion static frame, no-JS fallback). Build + check-safety green. Visual UNVERIFIED until Wave B. Known frozen-cms limits (contract §11 auth/404 non-dispatch, §12 provider-backed empty lists) authored faithfully. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
121 lines
10 KiB
JSON
121 lines
10 KiB
JSON
{
|
|
"demo": true,
|
|
"settings": {
|
|
"merge": {
|
|
"site_name": "Subspace Signal",
|
|
"tagline": "A weekly transmission on science fiction and the future."
|
|
}
|
|
},
|
|
"data_tables": [
|
|
{
|
|
"key": "hail_signals",
|
|
"name": "Hail signals",
|
|
"description": "Messages sent from the Subspace Signal contact console.",
|
|
"primary_key": "id",
|
|
"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": "Subspace Signal",
|
|
"template_key": "full-width",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "hero", "title": "Hero", "slot": "main", "sort_order": 1, "content": { "template": "left-aligned", "eyebrow": "Now broadcasting", "headline": "Subspace Signal", "subheadline": "A weekly transmission on science fiction, deep space, and the people building the future. Two hosts. One open channel.", "ctaPrimary": { "text": "Listen now", "url": "/episodes" }, "ctaSecondary": { "text": "Meet the crew", "url": "/about" } } },
|
|
{ "block_key": "lcars:episode_console", "title": "Featured episode", "slot": "main", "sort_order": 2, "content": { "eyebrow": "Latest transmission", "title": "First contact was a podcast", "episodeNumber": "048", "duration": "58:12", "stardate": "78412.3", "description": "We open the season with a simple question. If a signal reached us tomorrow, who would answer, and what would we say back.", "listenUrl": "/episodes/first-contact", "listenLabel": "Listen now", "platforms": [ { "label": "Apple", "url": "/episodes" }, { "label": "Spotify", "url": "/episodes" }, { "label": "RSS", "url": "/episodes" } ] } },
|
|
{ "block_key": "stats", "title": "Signal log", "slot": "main", "sort_order": 3, "content": { "heading": "Signal log", "columns": 3, "countUp": false, "items": [ { "value": "48", "label": "Episodes aired" }, { "value": "4", "label": "Seasons on air" }, { "value": "26", "label": "Star systems covered" } ] } },
|
|
{ "block_key": "lcars:crew_roster", "title": "Crew", "slot": "main", "sort_order": 4, "content": { "eyebrow": "On the bridge", "heading": "Your crew", "members": [ { "name": "Vega Okonkwo", "role": "Host", "callsign": "Bridge-1", "bio": "Reads too much hard science fiction and asks the questions engineers dread." }, { "name": "Rell Tavras", "role": "Co-host", "callsign": "Science-2", "bio": "Keeps the physics honest and the metaphors from getting away from us." } ] } },
|
|
{ "block_key": "cta", "title": "Closing CTA", "slot": "main", "sort_order": 5, "content": { "background": "band", "heading": "Tune the frequency", "text": "New transmission every week. Subscribe on your channel of choice.", "primaryLabel": "Subscribe", "primaryUrl": "/episodes" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/about",
|
|
"title": "About",
|
|
"template_key": "default",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "About the signal", "level": 1 } },
|
|
{ "block_key": "text", "title": "Intro", "slot": "main", "sort_order": 2, "content": { "text": "<p>Subspace Signal is a weekly show about science fiction and the real science it borrows from. We read the books, watch the shows, and talk to the people who build the future for a living. Every episode is one open channel between two hosts and you.</p>" } },
|
|
{ "block_key": "lcars:transmission_status", "title": "Systems", "slot": "main", "sort_order": 3, "content": { "eyebrow": "Console", "heading": "Channel status", "systems": [ { "label": "Weekly uplink", "status": "online", "detail": "Every Tuesday" }, { "label": "Back catalogue", "status": "online", "detail": "48 episodes" }, { "label": "Listener comms", "status": "standby", "detail": "Open for hails" }, { "label": "Live recordings", "status": "standby", "detail": "Next season" } ] } },
|
|
{ "block_key": "lcars:stardate_log", "title": "Log", "slot": "main", "sort_order": 4, "content": { "eyebrow": "Ship's log", "heading": "How we got here", "entries": [ { "stardate": "74001.0", "title": "Signal first opened", "text": "Two friends started recording arguments about warp drives in a spare room." }, { "stardate": "76210.5", "title": "First guest aboard", "text": "A working propulsion engineer joined to explain why the arguments were wrong." }, { "stardate": "78412.3", "title": "Season four begins", "text": "New gear, same open channel, more star systems to cover." } ] } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/episodes",
|
|
"title": "Episodes",
|
|
"template_key": "blog-index",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "card", "title": "Episode 48", "slot": "main", "sort_order": 1, "content": { "title": "First contact was a podcast", "text": "<p>If a signal reached us tomorrow, who would answer, and what would we say back.</p>", "link": "/episodes/first-contact", "linkLabel": "Listen" } },
|
|
{ "block_key": "card", "title": "Episode 47", "slot": "main", "sort_order": 2, "content": { "title": "The physics of warp, honestly", "text": "<p>A propulsion engineer walks us through what the math actually allows.</p>", "link": "/episodes/warp-honestly", "linkLabel": "Listen" } },
|
|
{ "block_key": "card", "title": "Episode 46", "slot": "main", "sort_order": 3, "content": { "title": "Terraforming on a budget", "text": "<p>What it would really take to make one small world a little more livable.</p>", "link": "/episodes/terraforming", "linkLabel": "Listen" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/episodes/first-contact",
|
|
"parent_slug": "/episodes",
|
|
"title": "First contact was a podcast",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "First contact was a podcast", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>We open the season with a simple question. If a signal reached us tomorrow, who would answer, and what would we say back. The honest answer is that nobody is really in charge of the reply.</p><p>So we build the reply ourselves. We talk through who we would want on the line, what we would lead with, and why the first message matters more than the last.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/episodes/warp-honestly",
|
|
"parent_slug": "/episodes",
|
|
"title": "The physics of warp, honestly",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The physics of warp, honestly", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>Warp drive makes for a great story and a hard equation. We asked a working propulsion engineer to walk us through what the math actually allows and where the fiction quietly cheats.</p><p>The short version is that the energy budget is the whole story. Everything else is set dressing until you solve for that.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/episodes/terraforming",
|
|
"parent_slug": "/episodes",
|
|
"title": "Terraforming on a budget",
|
|
"template_key": "article",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Terraforming on a budget", "level": 1 } },
|
|
{ "block_key": "text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "text": "<p>Making a whole planet livable is a project measured in centuries. So we asked a smaller question. What is the cheapest first step that would make one small world a little more forgiving.</p><p>The answer is not domes or rockets. It is patience, pressure, and a very long supply of the right microbes.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/contact",
|
|
"title": "Hail us",
|
|
"template_key": "contact",
|
|
"reconcile_blocks": true,
|
|
"blocks": [
|
|
{ "block_key": "contact-form", "title": "Hail console", "slot": "main", "sort_order": 1, "content": { "heading": "Open a channel", "description": "Send a hail. We read every signal and reply within a few days.", "submitLabel": "Transmit", "successMessage": "Signal received. We will reply on this channel shortly.", "formConfig": { "targetTable": "hail_signals", "enabled": true, "captchaEnabled": false }, "fields": [ { "name": "name", "label": "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" } ] } },
|
|
{ "block_key": "contact-card", "title": "Direct channels", "slot": "aside", "sort_order": 1, "content": { "heading": "Direct channels", "columns": 1, "channels": [ { "icon": "lucide:mail", "label": "Email", "value": "hail@subspace.example", "link": "mailto:hail@subspace.example" }, { "icon": "lucide:radio", "label": "Studio line", "value": "+61 2 5550 0148", "link": "tel:+61255500148" } ] } },
|
|
{ "block_key": "hours-location", "title": "Broadcast hours", "slot": "aside", "sort_order": 2, "content": { "heading": "Broadcast hours", "address": "Deck 12, Signal Studios, Sydney NSW 2000", "hours": [ { "day": "New episode", "hours": "Tuesdays 06:00" }, { "day": "Listener comms", "hours": "Monday to Friday 09:00 to 17:00" }, { "day": "Weekend", "closed": true } ] } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/login",
|
|
"title": "Access terminal",
|
|
"template_key": "auth",
|
|
"reconcile_blocks": true,
|
|
"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": "About", "page_slug": "/about", "sort_order": 2 },
|
|
{ "menu": "main", "label": "Episodes", "page_slug": "/episodes", "sort_order": 3 },
|
|
{ "menu": "main", "label": "Hail us", "page_slug": "/contact", "sort_order": 4 }
|
|
]
|
|
}
|