Skip to content

docs: v1.2 followups — table-to-card layouts, K8s example, social-card SEO#14

Merged
cjimti merged 3 commits into
mainfrom
docs/v1.2-followups
May 7, 2026
Merged

docs: v1.2 followups — table-to-card layouts, K8s example, social-card SEO#14
cjimti merged 3 commits into
mainfrom
docs/v1.2-followups

Conversation

@cjimti
Copy link
Copy Markdown
Contributor

@cjimti cjimti commented May 7, 2026

Three threads of post-v1.2.0 docs polish, bundled because they all surfaced together while reviewing the live site against the v1.2.0 release.

Summary

  • Identifier-shaped tokens never wrap mid-character again. Markdown tables hyphenate backtick'd identifiers when columns are narrow (auth.allow_anonymous rendered as auth.all / ow_anony / mous; 00-namespace.yaml rendered as 00-namespace.yam / l). Three new card components (.api-endpoint, .config-key, .def-card) anchor the identifier on its own line at full row width with type/default chips locked to a second line. Conversions across 9 docs pages (43 config keys, 30 HTTP endpoints, route lists, surface lists, method lists, file-system paths).
  • Self-contained Kubernetes example. New examples/kubernetes/ with one file per resource (Namespace + Postgres Service/Secret/StatefulSet + mcp-test Secret/ConfigMap/Service/Deployment/Ingress) and a bash installer that generates secrets in-place, applies in numeric order with [N/M] progress, gates on Postgres readiness, patches a config-hash/secret-hash so config edits trigger rollouts. Documented at docs/operations/kubernetes.md with each manifest's full YAML embedded inline (verbatim from disk; a python check enforces no drift between embeds and source).
  • SEO surface aligned with v1.2. llms.txt updated with the new Operations pages. mkdocs-material's social plugin enabled (gated enabled: !ENV [CI, false] so dev builds without imaging deps still work). On deploy, every page gets a 1200×630 PNG card baked with its title, description, and Plexara typography (Outfit display, midnight + slate palette), so Twitter/X switches from summary to summary_large_image and Slack/LinkedIn previews look intentional.

Plus: ASCII box-drawing diagrams in gateway-testing.md converted to mermaid (flowchart LR for client/gateway/mcp-test/audit topology, sequenceDiagram autonumber for the identity-forwarding contrast).

Files

Area Files Change
CSS components docs/stylesheets/extra.css +430 lines (.api-endpoint, .config-key, .def-card with shared border/radius/copper-hover vocabulary, slate-mode variants, reduced-motion gates)
HTTP API reference docs/reference/http-api.md 30 endpoint cards + 4 JSONB filter cards
Config reference docs/configuration/reference.md 43 cards across 8 sections (server, oidc, api_keys, auth, database, audit, portal, tools)
Env vars docs/configuration/environment.md 11 env-var cards with maps to chips
Audit page docs/operations/audit.md column cards + 6 endpoint cards (the second table that was hidden below the JSONB filter section)
Portal page docs/operations/portal.md 10 route cards
MCP reference docs/reference/mcp.md 5 method cards
Surface tables docs/getting-started/{overview,quickstart}.md 7 + 4 def-cards
Mermaid docs/operations/gateway-testing.md 2 diagrams converted from ASCII
Kubernetes example examples/kubernetes/*.{yaml,sh,md} (10 files) + docs/operations/kubernetes.md + mkdocs.yml nav + docs/operations/deployment.md cross-link new
SEO docs/llms.txt, mkdocs.yml, .github/workflows/docs.yml inspection + kubernetes pages added; social plugin enabled in CI; cairo / freetype / libpng / libjpeg / libffi / libz dev packages installed for cairosvg + Pillow

Total: 26 files, +3375 / −188.

Card design vocabulary

Same shell as the carousel slides shipped in PR #12: 1px --md-default-fg-color--lightest border, --plex-radius-md, copper hover-tint with shadow lift. 3px left strip color-codes the entry's category:

  • .api-endpoint--get--copper-400 (read, frequent)
  • .api-endpoint--post--copper-700 (write)
  • .api-endpoint--delete → coral #b04829 (destructive but not traffic-light red)
  • .config-key--required → deeper --copper-700 (required-config has the same coral chip variant in the meta row, shared with the DELETE pill so destructive verbs and required-config-failures share one visual lookout)

Head row is a fixed two-row stack (flex-direction: column): identifier on row 1 at full row width (no wrap), [label] value chips on row 2 in the same horizontal slot every card. Description body sits below in DM Sans, indented under the identifier so the eye doesn't have to reset.

Kubernetes example architecture

client → Ingress (nginx + cert-manager) → Deployment mcp-test → StatefulSet postgres

Manifests in examples/kubernetes/:

  • Numeric prefix is the apply order (00, 10, 12, 14, 20, 25, 30, 40, 50).
  • install.sh confirms the kubectl context, fills REPLACE_ME_* placeholders with openssl rand output on first run, applies in sequence with [N/M] progress, waits for pod/postgres-0 Ready (180s) before applying mcp-test, waits for the Deployment rollout (180s).
  • mkdocs-material[imaging]-driven social cards make the docs page itself shareable.

Verification

  • mkdocs build --strict ✅ (zero warnings, zero broken refs).
  • make verify ✅ (Go suite untouched; ran for sentinel parity).
  • All 9 K8s manifests pass kubectl apply --dry-run=client.
  • Python script in the commit verifies every embedded YAML in kubernetes.md matches its on-disk source verbatim (no paraphrasing drift).
  • Site-wide audit confirms 0 mid-token wraps remain on identifier-shaped backtick'd content.
  • Browser-driven smoke test on the live mkdocs serve confirmed: card layouts render, chips lock to a fixed slot, mermaid renders in both themes, lightbox carousel still works (PR feat(audit): portal inspection UI — drawer, compare page, walkthrough docs #12 shipped that; not regressed).

Pre-commit gate

Three separate review rounds across the three commits, each verdict CLEAN. Findings caught in-tree before commit:

  • MAJOR: YAML drift between kubernetes.md embeds and the on-disk manifests (paraphrased valueFrom: {secretKeyRef: ...}). Fixed: embeds are now byte-identical to the on-disk source.
  • MINOR: em-dashes in CSS comments and install.sh header (project hard-rule violation). Fixed.
  • MINOR: missing libz-dev in the social-plugin system-deps list (parity with mkdocs-material upstream). Fixed.
  • NIT: indent inconsistency in a reduced-motion CSS block. Fixed.

Test plan

  • CI: Deploy Documentation workflow runs green on this branch's merge.
  • On the deployed site, share /operations/inspection/ to a Slack/Twitter test channel and confirm the 1200×630 social card renders with the Plexara colors and Outfit typography.
  • Click a method pill / route / config key on the live /configuration/reference/ page and confirm no horizontal scroll on a 1440px viewport, even for the longest identifier (server.streamable.session_timeout).
  • Open /operations/kubernetes/ and confirm each YAML block has a copy button (mkdocs-material default) and the file-path title displays correctly.
  • git clone && cd examples/kubernetes && INGRESS_HOST=test.example.com ./install.sh --dry-run against a real cluster context.
  • llms.txt: visit https://mcp-test.plexara.io/llms.txt post-merge, confirm the two new Operations bullets are present.

cjimti added 3 commits May 7, 2026 00:13
Bundles the post-PR-#13 documentation polish that came out of reviewing
the v1.2.0 docs end to end on the live site.

Card layout for identifier-shaped tables:
  Markdown table renderers hyphenate backtick'd identifiers mid-character
  to fit narrow columns (`auth.allow_anonymous` becomes `auth.all` /
  `ow_anony` / `mous`; `00-namespace.yaml` becomes `00-namespace.yam` /
  `l`). Horizontal-scroll is not the answer. Three new card components
  in docs/stylesheets/extra.css (.api-endpoint, .config-key, .def-card,
  ~430 lines) take the identifier as a hero on its own line at full row
  width, with type/default/required chips on a second line that anchors
  in the same horizontal slot on every card. Components share a
  vocabulary: 1px border, --plex-radius-md, copper hover, 3px left strip
  color-coded by category (GET copper-400, POST copper-700, DELETE
  coral; required-config in deep-copper).

  Pages converted:
  - docs/configuration/reference.md (43 cards across 8 sections)
  - docs/configuration/environment.md (11 env-var cards)
  - docs/reference/http-api.md (30 endpoint cards + JSONB filter cards)
  - docs/reference/mcp.md (5 method cards)
  - docs/operations/audit.md (column cards + endpoint cards)
  - docs/operations/portal.md (route cards)
  - docs/getting-started/overview.md (surface cards)
  - docs/getting-started/quickstart.md (URL cards)

Kubernetes example:
  New self-contained installation under examples/kubernetes/. One file
  per Kubernetes resource (Namespace + Postgres Service/Secret/StatefulSet
  + mcp-test Secret/ConfigMap/Service/Deployment/Ingress). Bash installer
  (install.sh) generates secrets in-place on first run, applies manifests
  with [N/M] progress, gates on Postgres readiness mid-sequence, patches
  config-hash/secret-hash annotations so config edits trigger rollouts.
  Documented in docs/operations/kubernetes.md with each manifest's full
  YAML embedded inline (verbatim from disk: a python check enforces no
  drift between doc embeds and source files). Cross-linked from
  deployment.md, added to mkdocs.yml nav under Operations.

Mermaid for the gateway-testing diagrams:
  Two ASCII box-drawing diagrams in docs/operations/gateway-testing.md
  replaced with mermaid (flowchart LR for the client/gateway/mcp-test/
  audit topology, sequenceDiagram with autonumber for the identity
  forwarding contrast). mkdocs-material has mermaid wired in via
  pymdownx.superfences.

Pre-commit gate: 1 review round, 4 findings (1 MAJOR YAML drift between
kubernetes.md embeds and on-disk manifests; 2 MINOR em-dash hard-rule
violations in CSS comments and install.sh header; 1 NIT indent
inconsistency in a reduced-motion block). All resolved before commit;
strict mkdocs build clean, make verify green.
llms.txt: add the two v1.2 Operations pages that landed in PR #12
and on this branch (inspection workflow + Kubernetes example) so
LLM consumers indexing the project don't miss them.

mkdocs-material social plugin: per-page 1200x630 OG cards baked with
the page title, description, and Plexara colors. Without these, every
page falls back to the 378x338 logo.png, which downgrades Twitter / X
to a small `summary` card instead of `summary_large_image`. Slack
and LinkedIn share previews render the same fallback. Plugin is
gated `enabled: !ENV [CI, false]` so a dev `mkdocs build` without
the imaging deps still works; production exports CI=true and runs.

docs.yml workflow: install the cairo / freetype / libpng / libjpeg /
libffi / libz dev packages so cairosvg + Pillow can compile during
the social-card render step, and bump the pip install to
mkdocs-material[imaging] (which pulls in those Python bindings).

Sitemap (auto-generated by mkdocs-material) already picks up the new
Operations pages from this branch's nav additions; no changes needed
there. robots.txt, canonical URL, OG, Twitter Card, JSON-LD
(SoftwareSourceCode + Organization) all confirmed in place.

Pre-commit gate: 1 review round, 1 minor (missing libz-dev in the
system-deps step, parity with mkdocs-material's upstream guidance);
fixed in-tree before commit.
Pin mkdocs-material's social plugin to Outfit (the same display font
used in the carousel headings and the lightbox title) instead of
mkdocs-material's default Roboto. The midnight-950 / slate-50 palette
already matches the rest of the site; this lines up the typography too,
so a tweet of any docs page reads as part of the same designed
artifact.

Google Fonts is reachable from the GitHub Actions runner, so the
plugin fetches the Outfit woff2 at render time without extra CI deps
beyond the imaging install added in the previous commit.
@cjimti cjimti merged commit 7dce1d7 into main May 7, 2026
8 checks passed
@cjimti cjimti deleted the docs/v1.2-followups branch May 7, 2026 08:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant