Built with Pennington
A gallery of sites and tools built with Pennington — and the .NET-native stack it grew up alongside.
A gallery of sites and tools built with Pennington — and the .NET-native stack it grew up alongside. Each one leans on the content pipeline differently; these are the ones worth a closer look.
MonorailCSS


A Tailwind-compatible JIT CSS engine written in pure C# — and the engine that styles Pennington itself. Hand it utility class names and it compiles exactly the CSS they need, in-process and npm-free: oklch theme palettes, custom variants, arbitrary [values], and tailwind-style conflict resolution. Its docs are the compiler documenting itself.
IContentService reflects over the engine's own documentation model to publish 169 utility-reference pages — and each one compiles its example CSS live, through a real CssFramework instance, at render time.Spectre.Console


Documentation for Spectre.Console, the library for rich cross-platform .NET console apps — tables, trees, prompts, live progress, and markup. The site skips the packaged template and is built straight on AddPennington: one bespoke Blazor host wiring three markdown sources, each with its own front-matter type. It is the deepest custom integration here — nearly every Pennington seam, exercised at once.
:symbol fence, and a reflection-generated API table rendered by an embedded Mdazor component.Pennington


Pennington's own documentation, generated by the pipeline it documents — markdown in, a fast static docs-and-blog site out, styled with MonorailCSS. The reference build: one DocSite host dogfooding tree-sitter source fences, a reflection-driven API reference, per-area PDF books, and a hand-tuned grape OKLCH palette.
:symbol fences embed real source by name-path at build time — 212 of them across 68 pages, resolved against the repo root — so every quoted snippet stays in lockstep with the file it came from.Ashcroft

Ashcroft generates Open Graph images, X cards, and blog headers from a small C# API: set a background, describe the content, pin it to one of nine anchors, save. SkiaSharp draws it and HarfBuzz shapes every string — real kerning, honest wrapping, shrink-to-fit before ellipsis, emoji and CJK fallback — with an automatic legibility scrim behind text over photos.
:symbol fence, while the image beside it is rendered by running that exact method through a /samples/{id}.png endpoint wired into Pennington's content discovery — even the page's own og:image.VCR#


A browserless .NET terminal recorder: it turns .tape scripts into SVGs, GIFs, and videos by driving a real shell over an in-process pseudo-terminal and rendering frames with a from-scratch VT500 engine — no ttyd, no Chromium, and SVG output needs no external binaries at all. The docs are a near-stock DocSite that earn their polish by dogfooding the tool: every embedded recording is an SVG VCR# made from its own sample tapes.
AddDocSite call — but it slots in a custom ICodeHighlighter at priority 60, above the built-in TextMate highlighter and below shell, to syntax-color the .tape language with a hand-written TextMate grammar.Thirty25


Phil Scott's personal dev blog, and the gallery's lone BlogSite — a single AddBlogSite() call that wires the homepage hero, a project list, and social links, plus RSS, a sitemap, and tag browsing. Posts are dated Markdown carrying tags, series, and a repository link in front matter.
SocialCardOptions.Render hook a SkiaSharp + HarfBuzz canvas, minting a 1200x630 OpenGraph card for every post — title, description, and date drawn over a gradient-faded background image.Building something with Pennington? Add your site.