Deliver the full conservation-nonprofit theme per OVERRIDE-CONTRACT (Wave A).
- 49 mandatory builtin overrides in templates/overrides/earthen/ (chrome,
marketing, primitives, commerce, blog family, auth surface, page-suggestions),
re-skinned from the frozen builtins into botanical/paper-grain chrome with
all content fields, custom tags, provider vars, HTMX/auth wiring and JS
preserved verbatim. Stale button/card/image/text/heading overrides fixed to
the new field contract (link/style/label, media/text via {% img %}).
- 7 page templates: default, full-width, landing, article, blog-index, contact,
auth.
- Blocks rework: impact_metrics/partner_logos/botanical_divider/footer converted
to builtin overrides (deleted as theme blocks); donation_cta and field_note
kept; impact_report added. Persona blocks now 3.
- 5 presets (all 19 tokens; mossbed/sage-morning/ember-loam are dual-mode).
- Bundled Fraunces + Work Sans woff2 (OFL) in assets/fonts/; fonts.json,
RECOMMENDED_FONTS.md, RECOMMENDED_ICONS.md; required_icon_packs=[lucide].
- Seed: home/about/blog(3 posts)/contact/login as Rootline Trust, contact-form
formConfig.targetTable=contact_submissions + row_inserted email-admins workflow.
- Themed email-safe wrapper; on-theme master pages; CSS-first botanical motion.
Verified: make (build) exit 0, make archive-check exit 0, check-safety exit 0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
186 lines
10 KiB
JSON
186 lines
10 KiB
JSON
{
|
|
"demo": true,
|
|
"settings": {
|
|
"merge": {
|
|
"companyName": "Rootline Trust",
|
|
"tagline": "We restore land with the people who live on it."
|
|
}
|
|
},
|
|
"data_tables": [
|
|
{
|
|
"key": "contact_submissions",
|
|
"name": "Contact Enquiries",
|
|
"description": "Seeded contact-form submissions for the Rootline Trust 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": "region", "label": "Region", "type": "text", "required": false },
|
|
{ "key": "message", "label": "Message", "type": "text", "required": true }
|
|
]
|
|
}
|
|
],
|
|
"pages": [
|
|
{
|
|
"slug": "/",
|
|
"title": "Rootline Trust",
|
|
"template_key": "landing",
|
|
"blocks": [
|
|
{
|
|
"block_key": "hero",
|
|
"title": "Hero",
|
|
"slot": "hero",
|
|
"sort_order": 1,
|
|
"content": {
|
|
"template": "centered",
|
|
"eyebrow": "Land restoration",
|
|
"headline": "Bring the land back to life.",
|
|
"subheadline": "We restore land with the people who live on it.",
|
|
"description": "Rootline Trust plants native cover, mends waterways and hands care of the land back to local hands. Small work, done every season, in places that need it.",
|
|
"ctaPrimary": { "text": "Donate", "url": "/contact" },
|
|
"ctaSecondary": { "text": "Read a field note", "url": "/blog" }
|
|
}
|
|
},
|
|
{
|
|
"block_key": "earthen:impact_report",
|
|
"title": "Impact Report",
|
|
"slot": "main",
|
|
"sort_order": 1,
|
|
"content": {
|
|
"period": "Season 2025",
|
|
"title": "What we grew together",
|
|
"summary": "<p>Every acre here started as a pledge. This is where those pledges went last season. The figures below are example figures for this demo site.</p>",
|
|
"outcomes": [
|
|
{ "value": "840 acres", "label": "Native cover planted", "detail": "Across twelve restoration sites." },
|
|
{ "value": "19 km", "label": "Creek bank mended", "detail": "Fenced, replanted and handed to local carers." },
|
|
{ "value": "1,200", "label": "Volunteer days", "detail": "Given by people who live near the work." }
|
|
],
|
|
"sourceNote": "Example figures for demonstration."
|
|
}
|
|
},
|
|
{
|
|
"block_key": "earthen:field_note",
|
|
"title": "Field Note",
|
|
"slot": "main",
|
|
"sort_order": 2,
|
|
"content": {
|
|
"author": "Mara Ellison",
|
|
"location": "Wirra Creek",
|
|
"dateline": "March 2025",
|
|
"body": "<p>The first rain after planting is the one that tells you. We walked the creek line at dawn and the tube stock had held. Small green points, thousands of them, holding the bank against the next flood.</p><p>Restoration is slow. You plant, you fence, you wait. Then one morning the land answers back.</p>"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"slug": "/about",
|
|
"title": "Our work",
|
|
"template_key": "default",
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "Our work", "level": 1 } },
|
|
{ "block_key": "rich-text", "title": "Story", "slot": "main", "sort_order": 2, "content": { "html": "<p>Rootline Trust began with one degraded paddock and a handful of neighbours who wanted it back. We plant native cover, mend waterways and fence stock out of creek lines. Then we hand the care of the land to the people who live beside it.</p><p>We work slowly and in public. Every site is chosen with local carers. Every season is reported to the people who fund it.</p>" } },
|
|
{ "block_key": "divider", "title": "Divider", "slot": "main", "sort_order": 3, "content": { "variant": "ornament", "icon": "lucide:sprout" } },
|
|
{ "block_key": "quote", "title": "Quote", "slot": "main", "sort_order": 4, "content": { "style": "block", "align": "center", "quote": "You plant, you fence, you wait. Then the land answers back.", "attribution": "Mara Ellison, Field Lead" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog",
|
|
"title": "Field Journal",
|
|
"template_key": "blog-index",
|
|
"blocks": [
|
|
{ "block_key": "card", "title": "Post: First Rain", "slot": "main", "sort_order": 1, "content": { "layout": "vertical", "title": "The first rain after planting", "text": "<p>What a dawn walk along Wirra Creek tells you about a season of restoration.</p>", "link": "/blog/the-first-rain-after-planting", "linkLabel": "Read the dispatch" } },
|
|
{ "block_key": "card", "title": "Post: Fencing", "slot": "main", "sort_order": 2, "content": { "layout": "vertical", "title": "Why we fence before we plant", "text": "<p>The least glamorous work protects everything that comes after it.</p>", "link": "/blog/why-we-fence-before-we-plant", "linkLabel": "Read the dispatch" } },
|
|
{ "block_key": "card", "title": "Post: Handover", "slot": "main", "sort_order": 3, "content": { "layout": "vertical", "title": "Handing the land back", "text": "<p>Restoration is not finished when we leave. It is finished when local carers take it on.</p>", "link": "/blog/handing-the-land-back", "linkLabel": "Read the dispatch" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/the-first-rain-after-planting",
|
|
"title": "The first rain after planting",
|
|
"template_key": "article",
|
|
"parent_slug": "/blog",
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "The first rain after planting", "level": 1 } },
|
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>We walked the creek line at dawn and the tube stock had held. Small green points, thousands of them, holding the bank against the next flood.</p><p>The first rain after planting is the one that tells you whether the season will take. This one took. The soil was dark and the roots had gripped.</p><p>Restoration is slow. You plant, you fence, you wait. Then one morning the land answers back.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/why-we-fence-before-we-plant",
|
|
"title": "Why we fence before we plant",
|
|
"template_key": "article",
|
|
"parent_slug": "/blog",
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Why we fence before we plant", "level": 1 } },
|
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Stock will find new growth before it has a chance to root. So we fence first. It is the least glamorous work we do and it protects everything that comes after.</p><p>A good fence buys a young planting three years of quiet. That is usually enough.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/blog/handing-the-land-back",
|
|
"title": "Handing the land back",
|
|
"template_key": "article",
|
|
"parent_slug": "/blog",
|
|
"blocks": [
|
|
{ "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Handing the land back", "level": 1 } },
|
|
{ "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "<p>Restoration is not finished when we leave. It is finished when local carers take it on. We plant with them from the first day so the knowledge stays on the land.</p><p>By the third season we step back. The site keeps going because the people beside it keep going.</p>" } }
|
|
]
|
|
},
|
|
{
|
|
"slug": "/contact",
|
|
"title": "Get in touch",
|
|
"template_key": "contact",
|
|
"blocks": [
|
|
{
|
|
"block_key": "contact-form",
|
|
"title": "Contact Enquiry",
|
|
"slot": "main",
|
|
"sort_order": 1,
|
|
"content": {
|
|
"heading": "Work with us",
|
|
"description": "Tell us about your land, your region or how you would like to help. We read every message.",
|
|
"submitLabel": "Send message",
|
|
"successMessage": "Thank you. Your message has been received. We will reply by email.",
|
|
"fields": [
|
|
{ "name": "name", "label": "Your name", "type": "text", "required": true, "width": "half" },
|
|
{ "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" },
|
|
{ "name": "region", "label": "Region", "type": "text", "required": false, "width": "half" },
|
|
{ "name": "message", "label": "How can we help?", "type": "textarea", "required": true, "width": "full" }
|
|
],
|
|
"formConfig": { "enabled": true, "captchaEnabled": false, "targetTable": "contact_submissions" }
|
|
}
|
|
},
|
|
{
|
|
"block_key": "hours-location",
|
|
"title": "Where to find us",
|
|
"slot": "aside",
|
|
"sort_order": 1,
|
|
"content": {
|
|
"heading": "Office hours",
|
|
"hours": [
|
|
{ "day": "Monday to Thursday", "hours": "9am to 5pm" },
|
|
{ "day": "Friday", "hours": "9am to 3pm" },
|
|
{ "day": "Saturday", "hours": "Field days only" },
|
|
{ "day": "Sunday", "closed": true }
|
|
],
|
|
"specialHoursNote": "Planting days run most weekends in autumn. Check the field journal.",
|
|
"address": "3 Wattle Road\nWirra Creek",
|
|
"phone": "+1 555 0142"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"slug": "/login",
|
|
"title": "Members",
|
|
"template_key": "auth",
|
|
"blocks": [
|
|
{ "block_key": "auth-form", "title": "Sign in", "slot": "main", "sort_order": 1, "content": { "default_tab": "login", "show_social": false } },
|
|
{ "block_key": "text", "title": "Foot", "slot": "footer", "sort_order": 1, "content": { "text": "<p>Members track pledges and see each site's season report first.</p>" } }
|
|
]
|
|
}
|
|
],
|
|
"menu_items": [
|
|
{ "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 },
|
|
{ "menu": "main", "label": "Our work", "page_slug": "/about", "sort_order": 2 },
|
|
{ "menu": "main", "label": "Field Journal", "page_slug": "/blog", "sort_order": 3 },
|
|
{ "menu": "main", "label": "Get in touch", "page_slug": "/contact", "sort_order": 4 }
|
|
]
|
|
}
|