Skip to content

Docs V2: full Docusaurus rebuild - #3

Merged
paulmatthis merged 94 commits into
mainfrom
docs-v2
Oct 27, 2026
Merged

paulmatthis merged 94 commits into
mainfrom
docs-v2

Conversation

@paulmatthis

@paulmatthis paulmatthis commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Full Docusaurus rebuild of the FreeMoCap documentation site, replacing the placeholder currently live at docs.freemocap.org.

  • Functionally rewritten for FreeMoCap v2.0.0-alpha.25. Pages were audited line by line against the real current source, then updated to match the alpha.25 app: install, first recording, calibration, tracking, data layout and reference.
  • Four-tier homepage (Get Started / Beginner / Intermediate / Advanced) mirroring the Tutorials sidebar, plus a concepts/ / tutorials/ / guides/ / reference/ / about/ split and a frozen 1.x legacy version.
  • Per-page provenance (AI-generated vs. human-checked) with an audit history, and an in-flux banner on pages expected to change before beta.
  • Site-wide Vale prose linting, non-blocking.
  • Items that need an engineer to change the app or another repo are tracked in ENGINEER-CALLOUTS.md.

Deploy

Deploys by rsync over SSH to the Plesk VPS. The key is locked server-side with rrsync to the docs.freemocap.org folder only, so it cannot touch the main freemocap.org site. Each deploy dry-runs first and aborts if it would delete more than 50 files. Merging never deploys by itself: it takes a manual "Run workflow", or a push to docs-v2 while the PREVIEW_DEPLOY repo variable is true.

The full site has been deployed to the VPS and tested there through a hosts-file override. DNS still points at GitHub Pages, so nothing is live for anyone else.

Before merging

GitHub Pages on main is still a legacy build off main's root. Merging with Pages on would try to Jekyll-build the Docusaurus source and break the live placeholder, so disable Pages first. The full go-live sequence is in DEPLOY-PLAN.md.

Known issues

  • V2's data model is still stabilizing during alpha: build-docs/ and a few data-model pages carry an in-flux banner.
  • The ground-plane calibration videos (about 24MB) aren't in the repo yet.
  • Curriculum tier reconciliation between the tutorial tiers and Skelly University's module numbering is unresolved.

Test plan

  • npm run typecheck
  • npm run build:local
  • CI build green
  • Deployed to the VPS and checked via hosts-file override
  • Disable GitHub Pages before merging

🤖 Generated with Claude Code

paulmatthis and others added 30 commits August 19, 2026 15:55
Docusaurus aggregator delivered for the docs.freemocap.org V2 uplift, plus
the coordinate-conventions content, navigation, and homepage fixes from the
initial review session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Navbar sections now expand on hover instead of requiring a click, with a
two-level flyout for Tutorials (tier, then page) since Docusaurus's stock
dropdown rejects nested dropdowns outright. Removes the dropdown carets and
the Skelly University sidebar entry (it's link-only via the homepage's
coming-soon card for now).

Replaces the footer with a full sitemap grid matching the navbar, a social
icon row, and the About section's links as plain text below it, following
the ethereum.org /learn footer pattern. The navbar dropdowns and the footer
both read from one new src/data/sitePages.ts instead of hand-duplicating the
same ~65 links in three places.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The on-site placeholder had nowhere real to send readers. Links directly to
github.com/freemocap/university instead, opened in a new tab, and the badge
shows the URL rather than repeating "Coming soon" under a heading that
already says it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The drawer (.navbar-sidebar) was collapsing to its own brand-row height on
mobile instead of filling the viewport, hiding every item below it. Forcing
height explicitly works regardless of why the implicit fixed-position
stretch wasn't.

Tutorials needed more than that: its hover-flyout component has no mobile
form, since Docusaurus only builds separate desktop/mobile renderings for
its own stock item types. It now reads the `mobile` prop Docusaurus passes
to every navbar item and renders a genuine two-level tap accordion for the
drawer, tiers then pages, using the same Collapsible primitive Docusaurus's
own sidebar uses, instead of the flat single-level dropdown a first pass
fell back to.

Also makes the mobile menu's expand/collapse caret visible as its own tap
target. Infima already gives it a rounded box and background, but only on
:hover, which never fires on touch, so the two-targets-per-row split (link
navigates, caret expands) was invisible on mobile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The label became "About" a few sessions back, but the URL stayed
/community/, which was misleading and, per the fetched SkellyCam docs'
stale /community/roadmap reference, an actual broken link waiting to
happen once /community/roadmap moved. Renames docs/community/ to
docs/about/ (about.md to about-us.md specifically, so it doesn't route to
the redundant /about/about), updates every internal reference, adds V1
redirect targets and a /community/* -> /about/* bridge for anything that
already linked to the old paths, and fixes the hardcoded rewrite target in
fetch-external-docs.mjs that was pointing SkellyCam's roadmap link at the
old URL.

Also adds PREVIEW.md with quick-start instructions for reviewing this
branch in a browser.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was never a reason for docs.freemocap.org to have its own download
page: the real one, with OS/GPU detection and a release selector, already
lives at freemocap.org/download. The plan to "lift it wholesale" assumed
otherwise. Deletes the placeholder page and points the navbar's Download
item straight at the external URL instead, same pattern as the Code link.
Also fixes the archival redirect for the old interim site's
/freemocap/download, and extends fetch-external-docs.mjs's existing
link-rewrite mechanism to catch SkellyCam's own /download references,
which the build caught pointing at a page that no longer exists.

Also drops the "about-us exists twice" known issue: it's a non-issue, two
different sites are allowed to each have their own about page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Four pages were stubs blocking real links: /start/, /concepts/what-is-freemocap,
/concepts/accuracy-and-limits, and /concepts/data-model. The latter two were
the sitemap's own self-identified highest-value gap ("the pages that decide
whether a researcher trusts this project"), and both had a direct source
sitting unused: Cherian's dissertation validation study (gait/balance/
prosthetic alignment against a marker-based reference) plus the array-shape
facts the sitemap had already extracted from skellymodels in code.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The homepage had four flat, equal-weight sections and no signal for a
first-time visitor to know they could stop reading, or for a returning one
to skip ahead, exactly the "too many docs" overwhelm problem the project
wants to stay clear of. Restructures around the curriculum DAG's own
1000/2000/3000 progression instead:

- TierPicker: three big Beginner/Intermediate/Advanced boxes right under
  the hero, the primary router, each jumping to its matching section.
- Each tier holds a fixed-width tile grid, one small box per page (icon,
  one-line blurb, and a "?" tooltip with a real bulleted table of contents
  for wherever it links), replacing the old per-section cards plus a
  separate flat "more links" list.
- The Advanced tier carries three specialization-track tags (Technology /
  Science / Art, matching the DAG's 3100/3200/3300 split) that link to the
  real per-track module content in freemocap/university, verified to
  exist via the GitHub API rather than guessed.
- Accent color switched from an unrelated light blue to the cross-org
  teal/green already defined in freemocap.org's own main.css, matched
  per-theme (green for light mode, teal for dark) since a single flat
  value read weak against both a white and a near-black background.

Adds react-icons (Feather set) for the per-tile icons, no other new
runtime dependencies.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… tooling

npm run lint:prose had never been run locally (vale wasn't installed).
Running it surfaced two tooling gaps rather than prose problems: the
domain vocab list was missing recurring terms (intrinsics, extrinsics,
realtime, posthoc, addon), and vale sync's locally-downloaded Google
style package was untracked and about to get committed by accident.
Gitignore it, CI's vale-action manages its own copy and never reads
this one.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ch. 2-4 of Cherian's dissertation (the same validation study behind
accuracy-and-limits.md and data-model.md) map directly onto the site's
remaining /concepts/ stubs: the field's history and landscape, the
four-stage pipeline, cameras and synchronization, pose estimation, and
calibration. All nine /concepts/ content pages the sitemap called for
now exist.

Calibration's math is deliberately kept conceptual, with a pointer to
triangulation.md's existing equations for anyone who wants the
derivation, rather than standing up a second equation-heavy page for
the sibling half of the same math.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
concepts/index.md now links all eleven /concepts/ pages instead of
sitting as a stub itself.

The four tutorials (multi-camera positioning, calibration best
practices, post-processing, choosing a tracker) round out the action
plan's suggested sequencing, sourced from the same dissertation.
Scoped deliberately not to duplicate what /concepts/ already explains:
better-calibration.md is the proactive counterpart to the existing
reactive troubleshooting guide, and choose-a-tracker.md points at
accuracy-and-limits.md's numbers rather than restating them a third
time.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The dissertation isn't the right source for software-usage pages, these
needed FreeMoCap's actual V1 Writerside docs and V2 architecture docs
instead. Both are reachable via `gh api` even though this site's
automated fetch script doesn't pull them yet (data/repos.yml sets the
core repo's docs_path to null on purpose, pending its own 34-page
consolidation).

custom-pipeline.md is deliberately shallow: the real architecture doc
is ~300 lines of backend internals (IPC flags, ONNX sessions), not
end-user tutorial material, so this points to it instead of
reproducing it at the wrong altitude. analyze-in-python.md had no doc
source at all ("NEW" in the sitemap); built instead from data-model.md's
already-verified schema, generic pandas against real column names
rather than a claimed API.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same real-source approach as the previous commit. posthoc-mocap.md's
source is notably human-authored, not AI-drafted like everything else
pulled this session (its own frontmatter says so), so it keeps both of
its documented Alpha-build bugs verbatim rather than smoothing them
over. blender-export.md here is deliberately a short companion to the
fuller tutorials/blender.md rather than a second full copy that could
drift out of sync with it.

cite-freemocap.md resolves a real discrepancy: CITATION.cff's DOI field
(zenodo.1234) is an unfilled placeholder, not a working ID. Uses
Zenodo's own concept DOI instead, verified live against Zenodo's API,
with a note so nobody trusts the placeholder if they check CITATION.cff
directly. That placeholder is still worth fixing at the source
(freemocap/freemocap, a different repo) since every citation of this
software downstream inherits it until then.

see-your-results.md was still a stub despite being step 3 of the main
/start/ onboarding flow, one click from the homepage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Went back through the full stub inventory and, this time, checked each
page against real source before assuming it needed one, rather than
just working down a list:

- recording-structure.md: same source as tutorials/find-your-data.md,
  rewritten as a terse spec instead of a walkthrough.
- rest-api.md, websocket-api.md: real source exists but is ~300+ lines
  of byte-level binary protocol and internal implementation detail
  aimed at this app's own frontend developers, mixed with an explicitly
  labeled "planned redesign" that isn't current. Wrong altitude and a
  real risk of documenting an API that doesn't exist yet as if it were
  current, wrote high-level orientation instead and pointed at the real
  source for anyone building against it.
- system-requirements.md: no single doc source, but enough
  already-verified facts across this session's other pages to assemble
  an honest one.
- export-formats.md: the stub's own title claimed FBX, BVH, and glTF.
  Checked the actual Blender addon source first: glTF is commented out,
  not implemented. Retitled to match reality instead of leaving the
  wrong title standing.
- reference/index.md, guides/index.md, about/index.md: trivial hubs.
- how-these-docs-are-written.md: documents the actual provenance
  frontmatter scheme and sourcing process this session used throughout,
  not a hypothetical policy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Every page already carried provenance/reviewed/reviewed_against
frontmatter, but nothing rendered it, readers had no visible signal
about a page's sourcing at all. Swizzles DocItem/Content to inject a
banner above the content, reading the current page's frontmatter via
useDoc(), for any page that has a provenance value (external fetched
content like SkellyCam's docs doesn't, and is left untouched).

The banner is a small local component
(src/components/ProvenanceBanner), not skellydocs' AiGeneratedBanner:
that component hardcodes emoji into its icon set with no override prop,
and its three-valued GenerationType doesn't map cleanly onto this
site's two-valued provenance field anyway. The local version shows this
site's own provenance value directly and surfaces the actual
reviewed_against string when present, instead of a hardcoded assumption
that goes stale the moment a page gets a real review pass. Links to
/about/how-these-docs-are-written.

src/global.d.ts is a standard Docusaurus TS setup gap unrelated to the
banner itself: tsc can't resolve @theme/* type imports without ambient
declarations from @docusaurus/module-type-aliases and
@docusaurus/theme-classic, and nothing in this repo had swizzled a
component with a type-only import before now.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Standing style rule: no emoji anywhere. Found via a repo-wide scan
(first-recording.md's two pointer emoji, install.md's celebration and
troubleshooting emoji), removed with no other wording changes. Left
about-us.md's skull-and-sparkles line alone, explicitly exempted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
lastVersion is 'current' and no other version has been cut yet (1.x
still isn't, on purpose, see HANDOFF), so the built-in 'unreleased'
banner's "see the latest version" link resolved to the exact page
already being read. Switched to banner: 'none' until 1.x actually
exists as something distinct to point to; the "2.0 (alpha)" navbar
label still communicates alpha status on its own.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…e background

Both were diagnosed in an earlier session and left unfixed. The
onBrokenAnchors check flags #beginner/#intermediate/#advanced as broken
on every build even though they work correctly, a confirmed limitation
with manually-added ids on custom React pages rather than MDX-generated
heading anchors. Set onBrokenAnchors: 'ignore' for that specific check,
onBrokenLinks stays at 'throw'. Build now produces zero warnings for
the first time this project.

Light mode rendered a transparent page background instead of white:
@freemocap/skellydocs only defines --ifm-background-color for
[data-theme='dark'], with no light-mode value anywhere including its
own :root. Added the missing light-mode value to this site's own
custom.css, which loads after the shared package's. #ffffff is
Infima's own standard light default, not a new color decision.
Verified with getComputedStyle rather than a screenshot, since
transparent-over-a-white-page and actually-white are visually
identical there.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
history: [{date, against}] replaces the single reviewed/reviewed_against
pair, newest entry first. Pages without the new array fall back to
reading their existing reviewed/reviewed_against as a one-entry history,
so none of the 75 already-shipped pages need migrating.

Also fixes a real bug hit while building this: gray-matter/js-yaml parses
bare YYYY-MM-DD frontmatter as a JS Date, not a string, which was
silently breaking the "Last reviewed" line sitewide (typeof !== 'string'
on every page). Normalizes Date values to ISO date strings instead of
silently dropping them.
…tructure the top nav

Version picker:
- Cut 1.x (legacy) as a real frozen version alongside 2.0 (alpha)
- current stays on banner: 'none' permanently, not just until 1.x exists:
  'unreleased' links to lastVersion, so as long as current IS lastVersion
  that banner is self-referential regardless of how many older versions
  exist. 1.x gets 'unmaintained' instead, which correctly points at a
  genuinely different, newer version.
- Restyled the stock version badge (was stark white-on-black on its own
  row) onto the breadcrumb row, right-aligned, using Infima's own
  emphasis-200/800 tokens so it inverts correctly in light mode too
- Restored Infima's own default caret for just the version dropdown,
  the one item in the bar with nothing else marking it as a switcher

Developer Docs section (new):
- /developers landing page with a polyrepo tree (SVG, generated from
  data/repos.yml's tier field, not hand-coded): Core alone on top,
  Pantheon connected by lines, Utility floating with no connectors
- New repos-data Docusaurus plugin (usePluginData) exposes repos.yml to
  browser-bundled components; data/repos.ts is the shared Node-side
  loader used by both it and docusaurus.config.ts
- Boxed "Developer Docs" navbar dropdown: Core/Pantheon/Utility/More,
  matching the tree's grouping and data source
- Every repo gets a real destination now, not a muted/unavailable state:
  the 4 utility repos got real routes in repos.yml, and all 7 repos
  without docs of their own yet got a short stub page (src/pages/<id>/)
  instead of being greyed out
- "Home > Developer Docs > ..." breadcrumb and a "Back to Developer
  Docs" sidebar link for /build/ and any repo instance with real docs
  (DocBreadcrumbs swizzle, driven by repos-data, not a hardcoded list)
- Hero copy: homepage tagline is now "User documentation for the
  FreeMoCap project.", developers page is "Developer documentation..."
- Footer: boxed "Developer Docs" link, right-aligned in the Get Started row

Nav restructuring:
- Concepts and Build no longer have their own top-level navbar dropdowns.
  Both are still separate Docusaurus instances under the hood (per-
  instance versioning for Concepts, Build standing in for a future
  fetched instance), but that's no reason for two more entry points.
- "Key Concepts" now lives inside the About dropdown/sidebar category,
  with the concepts pages as real sub-items, and sidebars/docs.ts and
  sidebars/concepts.ts are both generated from one shared tree
  (sidebars/sharedDocsTree.ts) so the sidebar's shape, order, and
  expand state never change crossing the docs/concepts boundary
- Build is reached through Developer Docs instead, its existing front door
Three short paragraphs plus two images between the tree and the closing
links row: a labeled composite image introducing the analogy, a
paragraph on independent-but-composed repos framed through it (without
naming the reference directly in the copy), and a paragraph on how
FreeMoCap tracks cross-repo compatibility in practice (data/repos.yml's
own tag-pinning convention), grounded in two external polyrepo-
architecture write-ups read directly rather than plagiarized. Closes
with a third image, centered below both paragraphs.
…ion reference

SkellyTracker, SkellyForge, SkellyBlender, SkellyLogs, SkellyPings, SkellyDocs,
and SkellySync all had docs_path: null in data/repos.yml, no docs site of
their own yet, so /developers pointed at short stub pages instead. Replaced
each stub with real developer documentation grounded directly in that
repo's own source (architecture, key modules/classes, how it's consumed by
the rest of the polyrepo), not ported from anywhere since nothing existed
to port. cli.md and configuration.md are the same move applied to two
gaps in the core freemocap repo's own reference docs: no CLI beyond one
console script, and deliberately minimal configuration surface, both
verified against the actual source rather than assumed.

Written by stealth/ox-alpha via OpenRouter, an experiment running a
tool-calling agent loop (read/list/write against the cloned repos) instead
of writing this content directly. See ../ox-alpha-docs-experiment/ASSESSMENT.md
for the full methodology, task-by-task attribution, and a performance
write-up covering both what worked and what needed correcting.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
roadmap.md pulls from the org's actual GitHub Projects boards (32 and 34),
counts snapshotted with an explicit date since they're a live source, not
a hand-maintained backlog. faq.md is the interim stand-in for the
Discord #help-requests export this project's docs have been blocked on:
sourced from real freemocap/freemocap GitHub Discussions Q&A, but not
transcribed as-is, each answer was checked against the current source
first and corrected or dropped where it described the pre-alpha release
rather than the current one (multi-person tracking and realtime support
both changed since the original answers were written). guides/index.md
gets a new "Quick answers" section linking to it.

Written by stealth/ox-alpha via OpenRouter; see
../ox-alpha-docs-experiment/ASSESSMENT.md for methodology and attribution.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Both pages were previously left as stubs on the reasoning that V2's data
model was being replaced and hadn't landed, so a precise reference would
describe something about to be thrown away. Revisited that call: rather
than continue waiting, read the actual current code to document what's
really there now, however messy, instead of guessing or staying silent.

Found two real systems coexisting, not one: SkellyTracker's
TrackerDefinition (what the frontend sees over the websocket handshake)
and SkellyForge's skellymodels ModelInfo (what actually names the columns
in output files), verified independently rather than assumed from a
stale HANDOFF note that treated one as legacy. In the process, found a
likely real bug worth a maintainer's attention (noted separately, not
fixed here): for RTMPose recordings, the aspect order used to slice
output arrays doesn't match the detector's actual emission order, so
hand and face data in the output files doesn't match its own labels.
Also documents a parquet filename that's declared canonical but never
actually written, and a reprojection_error column that's currently
always NaN.

Written by stealth/ox-alpha via OpenRouter; see
../ox-alpha-docs-experiment/ASSESSMENT.md for methodology and attribution.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Paul and others added 2 commits October 20, 2026 14:56
…real hits

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd move actions to Node 24 releases

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…deploy results in plain language in the run log

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Paul and others added 11 commits October 20, 2026 15:21
…GitHub shows them whole

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…redirects.js with the settled targets, let rsync deploy .htaccess

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e paths itself. Document the nginx rules for Plesk instead

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…AQ pages

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s that setting

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…onent, click-to-zoom plugin, media manifest

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…gle-camera tutorial

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…gineer callouts, document saved_data/

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…a to the folder tree

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…n on phones

Lazy loading left unsized images unloaded on phones, and an inline max-width overrode the 100% cap, so a 480px screenshot overflowed a 356px column.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… bundles, so 50 blocked every deploy

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Paul and others added 2 commits October 20, 2026 19:08
…inux

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Smooth scrolling was left on for as long as Home was mounted, so leaving
Home animated the scroll-to-top on the next page. It is now enabled only
while a same-page hash link is followed, via a site-wide client module.

Co-Authored-By: Claude Code <noreply@anthropic.com>
The site is going live, so deploy-on-push is no longer a docs-v2
pre-merge test mode. DEPLOY_ON_PUSH=true deploys on any push to main or
docs-v2; unset means pushes only build.

Co-Authored-By: Claude Code <noreply@anthropic.com>
…crets guard

- Redirect old SkellyCam URLs (/docs/ layout, es/ar copies, download,
  roadmap, blog) and bare roots that returned 403 (/skellycam, /freemocap,
  /1.x, /freemocap/docs/*)
- Generate nginx 301 rules from data/redirects.js
- Add redirect-only github-pages-stub so freemocap.github.io keeps
  redirecting to docs.freemocap.org instead of being disabled
- Add robots.txt with sitemap, fix stale github.io links in architecture
- Ignore credential-looking files; update DEPLOY-PLAN

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add the root CNAME (the merge would otherwise delete it from main and stop
freemocap.github.io redirecting to docs.freemocap.org) and .nojekyll. Drop the
github-pages-stub folder, which is no longer needed, and update DEPLOY-PLAN.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@paulmatthis
paulmatthis merged commit 2e48eaf into main Oct 27, 2026
5 checks passed
@paulmatthis
paulmatthis deleted the docs-v2 branch October 27, 2026 19:41

This branch was successfully deployed

1 active deployment
production — 4466c8b9 Deployed Oct 27, 2026 by paulmatthis via deploy #61
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.

2 participants