2.0 KiB
2.0 KiB
BincioWiki — Developer Documentation
BincioWiki is a private, invite-only wiki for the Bincio group of friends. It is built around a small set of deliberate constraints:
- Git-native content. Every page edit is a git commit with author attribution. The wiki's history is the edit history.
- No CMS complexity. Content is plain Markdown files on disk. No database for content, no object storage, no CDN.
- Shared identity. Authentication is shared with
bincio_activityvia a single SQLite database. One account, two apps, one session cookie. - Client-side auth enforcement. The HTML is publicly served by nginx; JavaScript redirects unauthenticated users to
/login/. This is an intentional tradeoff — the content is community memories, not financial data, and the goal is keeping crawlers and casual visitors out, not resisting determined attackers. - Self-hosted on a cheap VPS. Everything runs on a single Hetzner Debian 12 VPS.
Repository structure
bincio_wiki/
pages/ wiki content (*.md — edited by community)
blog/ blog/stories content (*.md)
config/ bincio-specific config (outside the submodule)
sections.json wiki section + subsection definitions
i.bonsai.md wikibonsai semantic tree
assets/ user-uploaded images (gitignored, rsync'd separately)
site/ Astro 6 app (git submodule → brutsalvadi/astro-bloomz)
edit/ FastAPI edit sidecar (Python, port 4042 prod / 8001 dev)
docs/ this documentation
scripts/ dev.sh, sync-vps.sh
deploy/ VPS config files (nginx, systemd, post-receive hook)
pyproject.toml Python dependencies (managed by uv)
Two-repo model
The project uses two git repositories:
| Repo | Purpose |
|---|---|
bincio_wiki (container) |
Content (pages/, blog/), sidecar, config, scripts |
brutsalvadi/astro-bloomz (submodule at site/) |
Astro rendering engine |
This separation keeps content history out of the engine submodule and allows the engine to be reused or forked independently.