Files
bincio-wiki/docs/content-location.md
T

3.6 KiB

title
title
Content location and structure

Content location and structure

Two open design questions about where wiki content lives and how it can be organised on disk.


Q1 — Content in site/ vs bincio_wiki/

The tension

Ideally wiki content (the .md files the community edits) would live in bincio_wiki/, the container repo. The Astro app is a reusable engine; content is wiki-specific. Mixing them means content commits go into the astro-bloomz submodule history, and updating the engine requires care not to disturb content.

Currently content is at site/src/content/entries/ (inside the submodule).

Symlinking bincio_wiki/pages/site/src/content/entries/ was tried but abandoned: macOS's fsevents (used by Vite's file watcher) does not follow symlinks reliably, causing Astro's hot-reload and content layer to miss changes or crash.

Options

Option A — Astro glob base pointing outside site/

Change content.config.ts to use a relative or absolute path that escapes the site/ directory:

loader: glob({ pattern: '**/*.md', base: '../pages' })

../pages from the Astro project root (site/) resolves to bincio_wiki/pages/. No symlinks. Content stays in the container repo.

Risk: Vite (which Astro uses internally) may refuse to watch files outside the project root by default. This can be overridden with server.watch.ignored / server.fs.allow in astro.config.mjs, but needs testing. Build-time collection (no watch) is likely fine regardless.

Option B — Copy/sync at dev time

Keep content source at bincio_wiki/pages/ (source of truth). Add a step to dev.sh that watches pages/ and syncs changes to site/src/content/entries/ (gitignored there). Build step copies before astro build.

Edit server already reads WIKI_PAGES_DIR from the environment, so pointing it at bincio_wiki/pages/ is a one-line change. The sync is the only new piece.

Downside: a two-directory sync is extra moving parts; a crash or missed sync during dev means stale content in the browser.

Option C — Absorb Astro app into bincio_wiki

Remove the submodule entirely. Move Astro source into bincio_wiki/src/. Content and engine live together, content at src/content/entries/.

Cleanest at runtime, but loses astro-bloomz as a reusable starting point for other sites. Only worth it if we never intend to fork the engine again.

Recommendation

Try Option A first — it is a two-line change and, if Vite's file watcher cooperates, gives us exactly the right separation with minimal risk. If the watcher proves problematic in dev, fall back to Option B.


Q2 — Subdirectory support in the edit panel

Current state

The backend already handles subdirectory slugs fully:

  • _SAFE_SLUG regex allows / in slugs
  • Routes use {slug:path} so FastAPI preserves slashes
  • _list() uses rglob("*.md") — nested files are already listed
  • _save() calls path.parent.mkdir(parents=True, exist_ok=True)

The frontend edit panel, however, only offers flat slug input. Work needed:

  • Allow the "new page" field to accept a slug with / (e.g. archivio/2024/festa)
  • Show nested entries grouped by prefix in the page list
  • Possibly add a folder picker or breadcrumb

Pictures

Not yet addressed. Open questions:

  • Where are images stored? (options: site/public/img/, alongside content, or a dedicated bincio_wiki/assets/ tree)
  • How does the edit panel upload/reference them?
  • How are they referenced from markdown (/img/foo.jpg vs relative ./foo.jpg)?
  • Are images versioned in git or stored out-of-band?