Commit graph

25 commits

Author SHA1 Message Date
sjat
a6033e2038 fix(rack): centre 0U rail labels across the bar (dominant-baseline)
All checks were successful
Build docs site / build (push) Successful in 52s
Build slides / build (push) Successful in 1m11s
2026-06-24 19:07:10 +02:00
sjat
d3d5e9c69e feat(rack): colour and link mermaid power/network nodes by kind 2026-06-24 18:43:52 +02:00
sjat
08862fde51 feat(rack): add elevation legend, both-gutter U-numbers, column frames
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:39:56 +02:00
sjat
8d39fbcdf5 feat(rack): inline interactive elevation with links, tooltips, status borders 2026-06-24 18:34:06 +02:00
sjat
e08862b81d fix(rack): draw shelves after rails (match spec placement) 2026-06-24 17:49:49 +02:00
sjat
aab58e3692 feat(rack): render shelf strip, occupant boxes, and mounted occupancy rows 2026-06-24 17:45:39 +02:00
sjat
b85479b9a0 feat(rack): validate shelf-mounted devices (mounted_on/shelf_face/shelf_slot) 2026-06-24 17:42:07 +02:00
sjat
39644541f1 feat(rack): render mermaid network graph into the rack page 2026-06-24 15:05:42 +02:00
sjat
ed5bda83e0 feat(rack): validate network links against peer files and ports 2026-06-24 15:02:34 +02:00
sjat
1b5e8316ea docs(rack): note render_power precondition (validate_power first)
All checks were successful
Build docs site / build (push) Successful in 49s
Build slides / build (push) Successful in 1m9s
2026-06-24 14:46:29 +02:00
sjat
d2744db4ee feat(rack): render mermaid power graph into the rack page 2026-06-24 14:38:23 +02:00
sjat
ed4e7c751a feat(rack): validate power feeds against PDU outlets 2026-06-24 14:35:19 +02:00
sjat
74b43ed5af test(rack): guard empty rack value and cover 0U/both/multi-rack rendering
All checks were successful
Build docs site / build (push) Successful in 54s
Build slides / build (push) Successful in 1m13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 14:05:56 +02:00
sjat
039b1212b9 feat(rack): render page and orchestrate generation 2026-06-24 13:51:52 +02:00
sjat
2fd0df1597 feat(rack): render SVG elevation (U1 at top, front/rear columns) 2026-06-24 13:48:19 +02:00
sjat
a1b889209a feat(rack): detect U overlaps within a rack face
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 13:45:08 +02:00
sjat
3324c01810 feat(rack): gen_rack placement parsing and validation 2026-06-24 13:42:21 +02:00
sjat
717de70eca feat(hardware): allow rack item kinds (pdu, patch-panel, shelf, blank, ups, kvm) 2026-06-24 13:40:01 +02:00
sjat
7b59a9c1b8 docs(hardware): drop the model field
All checks were successful
Build docs site / build (push) Successful in 43s
Build slides / build (push) Successful in 1m6s
Removed from per-host frontmatter, the index column, and the Specs table.
Model values kept churning (case manufacturer vs. "custom") without adding
useful information.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:37:04 +02:00
sjat
41c4834dbd fix(docs-ci): unblock build by tolerating "?" placeholders in hardware frontmatter
All checks were successful
Build docs site / build (push) Successful in 46s
Build slides / build (push) Successful in 1m7s
mf00.md used bare ? in YAML (a complex-key indicator), breaking gen_overview.py.
Quoted the placeholders and taught fmt_cpu/fmt_ram/fmt_storage/fmt_nic to render
string values literally so unknown specs show as "?" in both the per-host Specs
table and the hardware index. Also regenerates docs/hardware/index.md to clear
the accumulated drift (mf02 16 GB, mf04 entry, mf00 custom).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:31:46 +02:00
sjat
c743416ded feat(docs): add services category alongside hardware
All checks were successful
Build docs site / build (push) Successful in 32s
Build slides / build (push) Successful in 52s
Mirror the auto-indexed per-host pattern for a new docs/services/
category, seeded with the six things currently deployed on or around
makerfloss.eu: docs, slides, forgejo, gandi-dns, marp, mermaid.

Generator/hook generalisation:
- scripts/gen_overview.py: replace the hardcoded `hostname` check
  with a configurable `key_field` (default: hostname). Add a generic
  `key-link` column kind (replaces the old `hostname-link`) and a
  `url-link` kind that renders the value as a clickable link.
- scripts/overview_config.yml: declare hardware's key_field, then add
  a `services` block (key_field=name, its own kind/status enums,
  grouped by kind for the index table).
- scripts/mkdocs_hooks.py: route by `page.file.src_uri` so each
  hardware/* page gets a "Specs" table and each services/* page gets
  a "Service" table; both share the helpers in gen_overview.

Wiring:
- Makefile: docs-index and docs-check now regenerate and drift-check
  both indices.
- .forgejo/workflows/docs.yml: same on the CI runner.
- mkdocs.yml: add Services to nav.
- README.md, CLAUDE.md: list services/ in the repo-layout block.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 17:48:15 +02:00
sjat
62fcd8ac27 docs: add proper README at repo root and per-tree READMEs
All checks were successful
Build docs site / build (push) Successful in 29s
Build slides / build (push) Successful in 48s
- Rewrite the 84-byte Danish placeholder README.md into a proper
  English entry point: what this repo is, live URLs, layout, build
  instructions (make targets), and conventions, with pointers to
  CLAUDE.md for the long form.
- Add short READMEs to notes/, sandbox/, and scripts/ so each tree
  documents its own purpose at the boundary where someone is likely
  to land on it via the Forgejo web UI or a clone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 17:13:50 +02:00
sjat
b9722f082f feat(docs): render Specs table on each hardware host page
All checks were successful
Build docs site / build (push) Successful in 30s
Build slides / build (push) Successful in 51s
- 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>
2026-05-18 15:24:56 +02:00
sjat
03b2430e7a fix(docs-ci): unblock hardware index regeneration
All checks were successful
Build docs site / build (push) Successful in 31s
Build slides / build (push) Successful in 54s
- 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>
2026-05-18 15:14:46 +02:00
sjat
6b1a61461b feat(docs): MkDocs Material site + auto-generated hardware overview
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>
2026-05-17 21:10:58 +02:00