Local Setup
Full local dev environment — Zola, mise, submodules, the data repos, and validation scripts.
On this page
The fast path for newcomers is Quickstart. This page covers the full dev environment for theme, pipeline, and content-validation work.
Prerequisites#
- Git — version control
- mise — task runner (recommended); installs Zola
- Python 3.11+ — scripts and content validation
- Node.js — optional, for advanced tooling (bifrost dev)
Quick start#
1. Clone with submodules#
git clone --recursive [email protected]:wheelofheaven/www.wheelofheaven.io.git
cd www.wheelofheaven.ioOr if already cloned:
git submodule update --init --recursive2. Install mise#
# macOS
brew install mise
# or via installer
curl https://mise.run | shAdd to your shell:
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc3. Install Zola#
# via mise (respects mise.toml's pinned version)
mise install
# or via Homebrew (uses whatever version brew has)
brew install zola4. Start dev server#
mise run serveSite available at http://127.0.0.1:1199.
Per-repo setup#
www.wheelofheaven.io (deployed at www.wheelofheaven.world)#
git clone --recursive [email protected]:wheelofheaven/www.wheelofheaven.io.git
cd www.wheelofheaven.io
mise run serveapi.wheelofheaven.io (deployed at api.wheelofheaven.world)#
git clone --recursive [email protected]:wheelofheaven/api.wheelofheaven.io.git
cd api.wheelofheaven.io
mise run servebifrost (theme development)#
git clone [email protected]:wheelofheaven/bifrost.git
cd bifrost
# theme is tested via the www repodata-content (content editing)#
git clone [email protected]:wheelofheaven/data-content.git
cd data-content
python scripts/validate.py # check contentmise tasks#
All repos use mise for consistent task running.
# mise.toml (www example)
[tools]
zola = "0.22.0"
[tasks.serve]
run = "zola serve --port 1199"
[tasks.build]
run = "zola build"
[tasks.check]
run = "zola check"
[tasks.clean]
run = "rm -rf public || true"Common commands#
mise run serve # dev server
mise run build # production build
mise run check # validate site
mise run clean # remove build outputSubmodule workflow#
Update submodules#
# update all submodules to latest
git submodule update --remote
# update a specific submodule
git submodule update --remote contentAfter updating#
git add content
git commit -m "Update content submodule"
git pushWorking inside a submodule#
cd content # or themes/bifrost
# make changes
git add .
git commit -m "Your changes"
git push
# back to parent
cd ..
git add content
git commit -m "Update content submodule"Development workflows#
Content changes#
- Edit files in the
content/submodule - Preview with
mise run serve - Commit to the
data-contentrepo - Update submodule pointer in www
Theme changes#
- Edit files in
themes/bifrost/ - Preview with
mise run serve - Commit to the
bifrostrepo - Update submodule pointer in www
Validation#
# content validation
cd content
python scripts/validate.py
# translation coverage
python scripts/i18n_dashboard.pyDirectory layout after setup#
wheelofheaven/
├── www.wheelofheaven.io/
│ ├── content/ # ← data-content
│ ├── data/library/ # ← data-library
│ └── themes/bifrost/ # ← bifrost
├── api.wheelofheaven.io/
│ ├── data/content/ # ← data-content
│ └── data/library/ # ← data-library
├── bifrost/ # standalone for dev
├── data-content/ # standalone for editing
├── data-library/ # standalone for editing
├── data-images/ # image pipeline
└── docs.wheelofheaven.world/Troubleshooting#
“Template not found”#
Ensure the bifrost submodule is initialized:
git submodule update --init themes/bifrost“Content not found”#
Ensure the content submodule is initialized:
git submodule update --init content“Zola not found”#
Install via mise:
mise installOr check that your PATH includes Zola.
Build errors#
Check Zola version:
zola --version # should be 0.22.0+Run diagnostics:
mise run check