Themes & Digital Garden
Indie in a Box separates presentation logic from runtime engine code. Themes are simple, portable directory bundles stored in data/themes/ governed by a declarative theme.json manifest.
01 // The theme.json Manifest
Every theme must contain a theme.json file at its root. This defines theme metadata, authors, required capabilities, custom template overrides, and color options:
{
"name": "Cyber Dark",
"version": "1.0.0",
"description": "A 90s anime cyberpunk dark theme with neon cyan and pink accents.",
"author": {
"name": "Lumen Pink",
"url": "https://lumen.pink"
},
"license": "MIT",
"min_engine_version": "1.0.0",
"supports": [
"microformats2",
"digital_garden",
"webmentions",
"camo_proxy",
"multilingual"
],
"options": {
"accent_color": "#ff2a85",
"secondary_color": "#00f0ff",
"monospace_code": true
}
}
02 // Template File Hierarchy
Theme templates use clean, standard HTML5 with embedded token replacements or minimal PHP view components. The engine falls back to default built-in views if a template file is omitted:
| Template File | Purpose | Available Context Variables |
|---|---|---|
| layout.html | Master site wrapper (HTML shell, head tags, header, navigation, footer). | {{site_name}}, {{fqdn}}, {{content}}, {{hcard}} |
| index.html | Homepage layout rendering recent posts, pinned garden items, and author bio. | {{posts}}, {{author_bio}}, {{recent_replies}} |
| post.html | Single post permalink layout with microformats2 h-entry markup. |
{{post_title}}, {{post_content}}, {{webmentions}}, {{interactions}} |
| garden.html | Digital Garden index grouping notes by flowerbeds, maturity, and confidence. | {{flowerbeds}}, {{maturity_tree}}, {{seedlings}} |
| gemini.gmi | Optional theme override for Gemini protocol capsule rendering. | Gemtext formatting tokens |
03 // Installing & Managing Themes
You can install themes through the Admin panel or by dropping them directly into data/themes/:
Via Admin Dashboard
Navigate to Admin → Configuration → General. Paste a ZIP download URL or select an official repository. The engine extracts the files and validates the theme.json manifest automatically.
Via Git / File System
Clone or extract any theme repository into data/themes/<theme-name>/. Run php indieinabox.php config set --key active_theme --value <theme-name> and rebuild with php indieinabox.php build.
04 // Digital Garden Taxonomies
Unlike traditional reverse-chronological blogs, Indie in a Box includes first-class support for non-linear knowledge graphs:
| Taxonomy Metric | Allowed Values | Visual Representation & Meaning |
|---|---|---|
| Flowerbed (Category) | Any string slug (e.g. tech, philosophy, cyberpunk) |
The thematic "plot of soil" where ideas are cultivated together. |
| Maturity Stage | sprout, seedling, tree, wilted, stone |
Visual plant lifecycle icon indicating whether an essay is an unfinished seed or evergreen resource. |
| Confidence Level | certain, likely, possible, unlikely, impossible |
Epistemic indicator signaling the author's certainty in the hypothesis presented. |
| Importance Weight | trivial, minor, moderate, major, critical |
Sort weight determining prominent placement in search results and capsule roots. |