
sitemd.cc
website building toolkit for AI coding agents
If you haven't been following along (and no one is yet...), I shipped my first product this week, sitemd — a static site generator / website building toolkit for AI coding agents like Claude, Codex, Cursor, Gemini, OpenClaw, etc. that runs on markdown files.
Today was my first "public" new version release. While I don't have any paying users yet, it still feels good to publicly show that there's still progress being made. I even built out a full release management workflow with Claude that helps document and stage all feature release notes and doc updates so everything can neatly roll out in one pass when I'm ready.
Here's the full changelog entry for anyone nerdy enough to peruse it (and yes Claude writes this for me as we code). Quite a bit of stuff for only 3 workdays! Onward and upward...
v0.1.1 — April 8, 2026
AI Agent Integration
new
/releaseskill — stages a running log of changelog entries and pending doc page updates between releases, then publishes them atomically; the end-of-session ritual is/release, and/release finalizewrites the section to your changelog page, copies staged docs intopages/docs/, and deployswriteskill gains a staged-output mode (--output <dir>) so other skills can redirect doc page writes into a staging directory instead of the livepages/tree; used by/releaseto stage docs updates/releaseskill now tracks new docs that need a sidebar nav entry — staging classifies each staged doc as new vs updated, drafts the planned sub-anchor list from H2 headings, and persists it as aPending nav additions:block inUNRELEASED.mdso finalize can auto-insert the nav entry viasitemd_groups_add_pagesafter copying the doc intopages/docs/; no more hand-editinggroups.mdfor new docs, and the plan survives across sessions
Distribution
npm package and GitHub repo now ship a top-level
CHANGELOG.mdso users get release notes locally without visiting sitemd.ccnpm install @sitemd-cc/sitemdandnpx @sitemd-cc/sitemd init my-sitenow download the platform binary automatically via apostinstallhook — no separate./sitemd/installstep required; users get a fully working install in one commandnew cross-platform
install.jsNode bootstrap ships alongside the existing shellinstallscript — works on Windows without WSL, runs as the npm postinstall hook, and serves as a manual recovery command on any platform when--ignore-scriptswas used; both scripts read the wanted version from the localpackage.jsonso the download always matches the installed packageboth install scripts (
install.jsandinstall) are now idempotent — re-running with a matching binary version is a silent no-op (~50ms), and version mismatches trigger an in-place upgrade; pass--forceto skip the version check and reinstallplugin manifest descriptions for Claude Code, Codex, Cursor, and OpenClaw now make clear that sitemd is a full product requiring the binary, not just an MCP shim — and point users at
npx @sitemd-cc/sitemd initas the recommended bootstrap path
Content
per-page sidebar nav — declare a custom sidebar directly in any page's frontmatter without touching
groups.md; supports an explicit nested item list (with the sameLabel: /urlsyntax as nav/groups, including+newtaband other modifiers),sidebar: noneto suppress an inherited group sidebar, andsidebar: selfas a shortcut that auto-builds a table-of-contents sidebar from the page's own headings — each##becomes a top-level item,###headings nest as anchors under their parent##, and standalone{#anchor}tags map in as anchors too (alt-id anchors that immediately precede a heading are skipped to avoid duplication); the shortcut expands itself into the equivalent nested explicit list on first build so you can edit, reorder, or remove entries, and per-page sidebars get the search button and full active-state highlighting just like group sidebarsdevice variants — wrap any markdown in
mobile: ... /mobileordesktop: ... /desktopfences to show different content per viewport (768px breakpoint); the canonical use is embedding a portrait video for mobile and a landscape one for desktop, but it works for any content (text, images, copy, sections)self-hosted videos now embed with native markdown —
renders a<video>element with sensible defaults (controls, playsinline, preload metadata), works insidegallery:andimage-row:blocks alongside images, inherits the same width/corner/shape modifiers as images, respects/centerand/rightalignment fences (centered videos wider than the content column overhang equally on both sides on desktop, and shrink to fit the viewport on mobile), and adds video-only modifiers+autoplay,+muted,+loop,+nocontrols, and+poster:filename; videos inmedia/are uploaded to your configured media CDN (R2/S3) automatically, just like imagescomprehensive markdown syntax reference at
/docs/markdown-syntax— single-page lookup for every standard markdown feature, frontmatter field, component block (button:,card:,embed:,gallery:,image-row:,form:,data:,modal:,author:), inline modifier (image options, link+newtab/+sametab, tooltips, hard line breaks, inline anchors), and layout fence (center:,right:,left:,hidden:,mobile:,desktop:,gated:); cross-links to every component-specific deep dive and includes a quick-reference cheat-sheet table for fast lookupsitewide header search is faster and more responsive — typing into ⌘K is debounced to the trailing edge of typing bursts, the fuzzy/typo-tolerance fallback now runs only against titles and headings (not full page bodies, which previously dominated the typing hot path), and the underlying Levenshtein implementation reuses preallocated Int16 row buffers instead of allocating a 2D JS array per call; ships in the default theme so any deployed site picks it up after the next
sitemd deploy. Behavior change: typo tolerance no longer surfaces words that appear only in body text — exact substring matches against bodies still work as before, just not fuzzy ones
Dev Server
dev server rebuilds are dramatically faster on multi-page sites —
/{slug}/seo-previewpages used to be regenerated for every page on every rebuild (regex keyword extraction over rendered HTML, syncfs.statSyncper page, ~40KB of HTML assembly per page), but they're now lazy-generated by the dev server on first request and cached until the next rebuild; editing one markdown file no longer pays the cost of re-rendering preview HTML for every other page in the sitelive-reload no longer compounds with the number of open browser tabs — the hydrate script and dev panel script used to each open their own SSE connection per tab (so 5 tabs meant 10 sockets to broadcast against on every rebuild), and back-to-back rebuilds (e.g. settings change → CSS sync → content rebuild) used to fan out as multiple reload events; hydrate now skips its connection when the dev panel is present, and reload broadcasts are coalesced via a 50ms trailing-edge throttle so multiple rebuilds within the throttle window collapse into a single reload event
Dev Panel
dev panel markdown editor now spellchecks your prose — wavy underlines appear on misspellings with native browser suggestions on right-click, and a new
spellchecktoggle in the editor toolbar (top-right, next tocomments) lets you mute it; preference persists across sessions, and spellcheck re-evaluates when you open a new file so you don't have to type to wake it up
Fixed
settings parsers (
groups.md,header.md,footer.md, and in-page form blocks) now accept 4-space indentation in addition to canonical 2-space — previously a 4-space file would silently parse to nothing, producing surprises like an empty sidebar; the build also auto-rewrites such files to 2-space on the next run so on-disk style stays canonicalclicking a hash-only sidebar link (e.g. table-of-contents anchors) no longer triggers a brief content/sidebar flash from a spurious SPA reload, and the clicked item now correctly highlights as active
npx @sitemd-cc/sitemd init my-siteno longer fails withENOENTwhen run from a fresh npm install — the compiled binary'sinitandscratchcommands now resolve their product directory viaprocess.execPathinstead of__dirname(which yao-pkg snapshots into a virtual path that doesn't exist on the user's filesystem)projects created by
sitemd initnow ship withinstallandinstall.jsalongside the binary, so the new project's ownnpm installtriggers the binary download via its inherited postinstall hooksitemd_content_validateno longer flags false positives on syntax-reference doc pages — fenced code blocks and inline code spans are now stripped before scanning for broken links, missing image alt text, and undefined modal references, so example markdown inside code blocks (like[link](/url)orshown as a teaching example) no longer trips validation; the internal-link check also gained the/media/exemption that the button check already hadcode_language_hintsvalidator now tracks fence length so a 4-backtick code block wrapping a 3-backtick example (````markdowncontaining```js) no longer confuses the in-block toggle into reporting the inner closing fence as a missing-language-hint blocksitemd_pages_createno longer creates a phantom lowercase group when an agent calls it withgroupMembercontaining case variants like["docs", "Docs"]—addPageToGroupnow resolves group references via name- and slug-equivalence (sodocsmatches the existingDocsgroup), and only creates a new group when no equivalent match exists
It's launch day for sitemd.cc. This is the first software product I've ever released (not the first I've started). You could say I'm a bit nervous.
Like many, I've been fully AI-pilled. Everything I do from now until eternity will likely be done with an agent copiloting. I've used low/no-code website builders for years, and while they worked, I realized I would now rather build sites with Claude.
But I still wanted a system to build sites with Claude. I didn't want to think too hard about design — I just wanted a modern site that looked good on any device. I hate all things SEO, so I wanted that to be more or less handled in the background.
And because I can't code, I wanted to write in (mostly) natural language and just have it work. Coding agents already work in markdown files, so I figured that was the way to go. Claude and I started building, and here we are.
Every sitemd feature was born from Claude and I using the product ourselves. We've reached a point where we're both (mostly) happy with it, so it's time to release to the world and see what you all have to say about it.
I think it's at least one of the best ways to build websites with coding agents, and certainly very reasonably priced.
I'd be honored if you'd give it a try (it's free to try forever) and let me know what you think. Claude and I will keep making it better, but we're eager to hear what you want added.
1 Like
Comment
About
I used low/no-code website builders for years, and while they work, now I'd rather build sites with Claude. But I still want a full system with guardrails, best practices, and integrations, so Claude and I built it.

Comment