Tollstack — Content Platform with Cross-Platform Publishing Pipeline
What Is This
A Jekyll content platform (tollstack.dev) teaching builders how to construct revenue infrastructure inside other people’s businesses — “toll positions” that collect recurring revenue without building products. 19 published articles, 50+ interactive calculators, and a full design system.
The most technically interesting piece: a 2,000-line Python pipeline that transforms Jekyll-built content for publication on Substack, handling Mermaid diagram rendering, table density detection, paywall placement, UTM attribution, and publication ledger tracking.
88 commits. 300+ article images converted to WebP.
Why This Approach
Jekyll was chosen because the content pipeline is the product, not the framework. The site needs to be fast, hostable on GitHub Pages, and transformable by external scripts. A Rails app would have been overhead for what is fundamentally a publishing workflow.
The Substack pipeline exists because Substack’s editor doesn’t support Mermaid diagrams, complex tables, or Jekyll-style layouts. Rather than dumbing down the source content, the pipeline transforms it into platform-appropriate formats — static PNGs for diagrams, simplified tables, platform-native CTAs. The source of truth stays in Jekyll.
Key engineering decisions:
-
Cross-platform content transformation engine. Four Python scripts form a publishing pipeline:
generate-artifact.py(1,248 lines) reads_site/, strips site chrome, processes customSUBSTACK:marker annotations, rewrites internal links with UTM attribution, generates platform-appropriate CTAs, and tracks published state via a JSON ledger.audit-readability.pyis a pre-publication linter that gates the pipeline on content quality (dense tables, long paragraphs, raw URLs).render-mermaid-playwright.pyuses headless Chromium to render Mermaid diagrams to branded PNGs.render-table-fallbacks.pydoes the same for dense HTML tables. -
Calculator gating via Jekyll’s future-post exclusion. 50+ revenue calculators are registered in
_data/calculators.yml, each keyed to an article slug. Calculators auto-show on the index only when their corresponding article is published. Because Jekyll excludes future-dated posts at build time, unpublished calculators hide automatically — zero runtime logic, zero toggle flags. -
Five-dimension content taxonomy. Articles are tagged with a
dimension(Build / Partner / Monetize / Scale / Data). Each dimension has its own color in the design system. Navigation, filtering, and calculator visibility all key off this single taxonomy. The design system implements the full token system with CSS custom properties and data-theme switching for light/dark mode.
What Would Break
- Substack’s HTML import format is undocumented. Any change to their editor’s sanitization rules could break the artifact generator.
- The Mermaid rendering depends on headless Chromium via Playwright. Chromium version changes occasionally break rendering.
- The calculator registry is a flat YAML file. At 100+ calculators, it would benefit from per-dimension files or a build-time validator.
What I Learned
- Content transformation is harder than content generation. Rendering Mermaid to PNG with branded colors, detecting table density, and managing paywall placement across platforms is real engineering work that most content teams solve manually.
- Jekyll’s
future: falseflag is an underappreciated content gating mechanism. No feature flags, no CMS — just dates. - A consistent content taxonomy (the five dimensions) applied early makes every downstream decision simpler: navigation, calculator visibility, color coding, cross-references.
Repo: github.com/plentyofsaas/tollstack-web (private)
Status: Production at tollstack.dev. Active content development.