Unified documentation site for the Soliplex ecosystem, built with Zensical.
Live site: https://soliplex.github.io/
This repository aggregates documentation from several upstream repositories, included here as git submodules under projects/:
- soliplex/soliplex — Core Platform
- soliplex/ingester — Document Ingestion
- soliplex/chatbot — Chatbot Widget
- soliplex/frontend — Flutter Client
- soliplex/ingester-agents — Ingester Agents (README only)
- soliplex/pdf-splitter — PDF Splitter (README only)
- soliplex/bubble-sandbox — Bubble Sandbox (README only)
- Each project is a git submodule in
projects/. scripts/build-docs.pycopies each submodule'sdocs/(or itsREADME.md) intodocs/<project>/.- The same script generates
zensical.tomlfromzensical.toml.template, expanding each@auto:<project>navigation stub by walking the copied docs tree — so new, renamed, or removed upstream pages flow into the site automatically. zensical buildrenders the static site intosite/.- The build-docs.yml workflow deploys
site/to thegh-pagesbranch viaghp-import.
The copied docs/<project>/ directories and the generated zensical.toml are git-ignored build artifacts — only docs/index.md, shared assets, and zensical.toml.template are tracked.
The deploy workflow runs on:
- Push to
main - Nightly schedule (
cron: 0 6 * * *) to pick up upstream submodule changes repository_dispatch(docs_update) sent by submodule repos when their docs change (see.github/workflows/TRIGGER_TEMPLATES/)- Manual dispatch via the GitHub Actions UI
Requires Python 3.13+ and uv.
# Install dependencies (including dev tools like ruff)
uv sync
# Pull the latest docs and generate zensical.toml from the template
uv run python scripts/build-docs.py
# ...or generate/validate without updating submodules
uv run python scripts/build-docs.py --no-update
# Preview locally (http://127.0.0.1:9001/)
uv run zensical serve
# Production build (outputs to site/)
uv run zensical buildsoliplex.github.io/
├── .github/workflows/
│ ├── build-docs.yml # Build & deploy to GitHub Pages
│ └── TRIGGER_TEMPLATES/ # Per-submodule repository_dispatch trigger
├── projects/ # Git submodules (upstream sources)
├── scripts/
│ └── build-docs.py # Copy docs + generate zensical.toml + validate nav
├── docs/
│ ├── index.md # Landing page (tracked)
│ ├── img/ # Shared assets (tracked)
│ └── <project>/ # Copied from submodules (git-ignored)
├── zensical.toml.template # Source of truth for site config + nav (tracked)
├── zensical.toml # Generated from the template (git-ignored)
└── pyproject.toml # Dependencies, ruff & pymarkdown config
- Add the repository as a submodule under
projects/and commit the.gitmoduleschange. - Add an
@auto:<project>nav stub (and any title overrides) tozensical.toml.template. - Add a trigger workflow to the new repo from
.github/workflows/TRIGGER_TEMPLATES/. - Run
uv run python scripts/build-docs.py --no-updateand confirm the nav validates.
- Check the Build Docs workflow runs.
- Run
uv run python scripts/build-docs.py --validate-only— it reports broken nav references and orphaned pages (copied but not in the nav). - Check for Markdown errors in the upstream docs.
# Clean build artifacts
rm -rf site/ .cache/ zensical.toml
# Reinstall dependencies and rebuild
uv sync
uv run python scripts/build-docs.py
uv run zensical serveDo not edit the copied docs/<project>/ directories or zensical.toml directly — both are regenerated on every build. To change:
- Upstream documentation: edit it in the source repository; it syncs on the next build (nightly, on dispatch, or manually).
- Site config / navigation structure: edit
zensical.toml.template. - Landing page: edit
docs/index.md.
Documentation is licensed under the same terms as the respective upstream projects.