- Delete two stale single-meeting todos: 2026-03-16_todo.md and 2026-05-05.md.
- Rename `2026-04-14 TODO.md` -> `2026-04-14_todo.md` to match the
underscore convention used by the other dated files, and update the
CLAUDE.md reference.
- Remove the two Marp/CSS fit-test sandboxes (labdesign-fit-test.md
and 2026-05-11_messaging-presentation-fit-test.md); the responsive
experiments were never folded back into the canonical decks.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add scripts/mkdocs_hooks.py: on_page_markdown hook that prepends
`# {hostname}` + a Specs table built from the YAML frontmatter.
Reuses fmt_cpu/fmt_ram/fmt_storage/fmt_nic from gen_overview.py so
the host page and the index table stay in sync.
- Wire the hook into mkdocs.yml.
- Demote `# Notes` / `# ToDo` to `##` in the five host source files so
each rendered page has a single H1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add `staging` to allowed status enum so mfXX hosts validate.
- fmt_nic and fmt_storage now accept lists (mf00 has 3 NICs and 4 drives).
- Rename makerfloss.md -> makerfloss.eu.md so filename matches the FQDN.
- Regenerate docs/hardware/index.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bootstraps an MkDocs Material documentation site (rendered to
docs.makerfloss.eu by the Forgejo Actions runner). The first feature
is an auto-generated hardware overview built from per-host YAML
frontmatter blocks under docs/hardware/.
- mkdocs.yml, requirements.txt: MkDocs Material 9.5 + pyyaml
- Makefile: docs-index | docs-build | docs-serve | docs-check
- scripts/gen_overview.py: stdlib + pyyaml generator, deterministic and
offline. Reads scripts/overview_config.yml — category-driven so
services/vms can plug in later without touching the script.
- scripts/overview_config.yml: hardware schema and index layout
- docs/hardware/{makerfloss,fisi,tembo}.md: 3 sample entries
- docs/hardware/index.md: GENERATED, committed (CI fails on drift)
- docs/index.md: site landing page
- .forgejo/workflows/docs.yml: drift-check + mkdocs build --strict +
rsync site/ to /srv/docs-makerfloss/html on push to main
- .gitignore: site/, .venv, __pycache__
Schema:
- hostname, kind, status (required; kind/status are enums)
- model, location, cpu, cpu_cores, cpu_threads, ram_gb, storage_gb,
storage_type (enum), storage_notes, nic_gbps (all optional)
- Filename stem MUST equal hostname (enforced by generator)
- Extra optional fields are accepted silently and live on the per-page
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds .forgejo/workflows/build-slides.yml triggering on push to main and
manual dispatch. Job runs in node:20-bookworm-slim, installs marp-cli +
python3, mounts /srv/slides/html into /output, and invokes
build-slides.sh with OUTPUT_DIR=/output.
build-slides.sh now honors OUTPUT_DIR/SLIDES_TITLE/REPO_WEB_URL env
overrides (defaults preserve local-dev behavior), wipes stale .html
before each build, and regenerates a styled index.html listing every
deck — replacing the equivalent logic from the old webhook update.sh.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds -fit-test copies of the labdesign and messaging decks that apply
container-query font sizing (option 5) and a max-height cap on mermaid
SVGs (option 4) so we can compare overflow behavior side-by-side
against the originals.
Includes a comment explaining why option 2 (custom canvas size) cannot
be demoed inline and would require registering a custom theme via
marp.config.mjs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add .mermaid svg CSS to scale diagrams to fit slide bounds
- Split Requirements into Requirements+Details / Constraints
- Split Proposals into Short term / Midterm
- Switch Lab Diagram to graph LR (left-to-right fits the
Internet→VPS→Firewall→Lab flow and uses vertical space better)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two 4-column tables replace the box-drawing character grid, which
rendered poorly in the gaia theme's proportional font. Dense class
applied to keep both tables within slide bounds.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Messaging deck:
- Slide 5: remove redundant E2EE column (all apps have it), add italic note
- Resources: shorten meshtastic link text, apply .dense class
- Add .dense CSS class (0.5em) for slides that need extra reduction
SoMe deck:
- Apply .dense class to The Categories and Messaging slides (7 rows each)
- Add .dense CSS class definition
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Language rule updated: adds commits, changes Danish exception to
meeting notes (was: service UIs)
- Add Git norms: trunk-based, feature branches, simple messages
- Add AI policy: allowed but reviewed, no secrets in commits
- License: FLOSS by default (was: MIT by default)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tables with 6-9 rows overflowed the 720px slide height and scroll
events were captured by Bespoke.js for slide navigation instead.
0.65em with tighter padding keeps all tables within bounds.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signal Under the Hood: sequence diagram shows the message path and
what the server can/cannot see, clearer than ASCII art.
Matrix Federation: graph shows client→homeserver→federation topology,
replacing the ASCII box diagram.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
el.closest('pre') returns null after marp's polyfill replaces
<pre is="marp-pre"> with <marp-pre> on browsers without customized
built-in element support. el.parentElement works in both cases.
startOnLoad:true does not trigger in a deferred type="module" script
because DOMContentLoaded has already fired. Explicit mermaid.run()
ensures diagrams render regardless of timing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Prevents AI tooling docs (specs, plans) from being built as presentations.
The grep pattern matched marp: true inside code examples in plan files.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Creates inject-mermaid.sh to apply mermaid.js CDN injection to HTML files
that contain mermaid code blocks. This can be called independently or
integrated into deployment scripts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Process each slide individually to avoid Docker --output flag issues
- Use a temp directory with 777 permissions for Docker to write to
- Copy generated files to final output directory after build
- Both marp-cli and mermaid injection now work properly with Docker
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Max ~8 content lines per slide, tables max 5-7 rows
- Split Signal pros/cons to use bold instead of ### subheadings
- Split "Two More Worth Knowing" into separate XMPP and Briar slides
- Trim bridges table (drop duplicate IRC row)
- Trim resources table to 7 essential links
- Tighten participation slides
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>