Dan Trapp

Open-source infrastructure / Developer education

PostHog Handbook Library

An unofficial living reader for PostHog's public handbook: searchable site, dated eBooks, source links, manifests, and change digests.

A rebuildable publishing layer for PostHog's public handbook. It treats the handbook as living source material, then generates a searchable reader, mobile-friendly eBooks, section volumes, print-ready HTML, source manifests, and human-readable change notes.

Status

Live

Timeline

Live reader and rebuild pipeline

Domain

Developer education

Why

Open-source infrastructure

Living handbook

Source → Reader → Editions → Diff

Live

Mode

OSS

Reader

Live

Digest

Diffs

A rebuildable reader for a handbook that changes too often to become a static book.

Stack

Languages, services, data sources, and operating pieces behind the build.

JavaScriptNode.js 22GitHub ActionsGitHub PagesEPUBHTMLCSSManifests

Code Proof

What The Build Actually Contains

Version

0.2.2

Source

969 LOC

Outputs

10+

Schedule

Weekly

Live

Pages

Product proof

Living handbook

Source → Reader → Editions → Diff

Live

Mode

OSS

Reader

Live

Digest

Diffs

A rebuildable reader for a handbook that changes too often to become a static book.

Implementation

Code Behind The Surface

Build from public source

js

The generated reader is not manually maintained. It rebuilds from PostHog's public handbook source.

const SOURCE_REPO = "PostHog/posthog.com";
const TREE_API =
  "https://api.github.com/repos/PostHog/posthog.com/git/trees/master?recursive=1";

const handbookFiles = tree
  .filter((file) => file.path.startsWith("contents/handbook/"))
  .filter((file) => file.path.endsWith(".md") || file.path.endsWith(".mdx"));

Dated generated editions

js

Every edition gets source links and a generated date so readers know exactly what they are holding.

const manifest = {
  generatedAt: today(),
  sourceRepo: "PostHog/posthog.com",
  sourceRef: "master",
  pages: pages.map((page) => ({
    title: page.title,
    sourceUrl: githubUrl(page.sourcePath),
    hash: hash(page.content),
  })),
};

Change digest

js

The point is not just downloadability. It shows what changed since the prior generated release.

const changes = diffManifests(previousManifest, currentManifest);

await writeFile("dist/latest/changes.md", renderMarkdownDigest(changes));
await writeFile("dist/latest/changes.json", JSON.stringify(changes, null, 2));

Project Logic

Why This Exists

The useful part is the path: what was broken, what I built, and where the leverage showed up.

Mission

What makes a constantly changing public handbook easier to read without freezing it into a stale book?

PostHog's handbook is public and unusually useful, but it changes constantly. A normal eBook would be convenient for readers and immediately wrong over time. The useful product is not a static copy. It is a rebuildable reader with dates, source links, and diffs.

Build

What Had To Work

I built a Node-based publishing pipeline that discovers the live handbook source from PostHog/posthog.com, rebuilds the reader, generates complete and section-level editions, writes manifests, compares changes against the previous release, publishes to GitHub Pages, and attaches dated artifacts to GitHub Releases.

Why It Matters

Source → Reader → Editions → Diff

Makes PostHog's handbook easier to consume and revisit, and has already drawn direct thank-yous from PostHog team members.

Hard Parts

The handbook is valuable because it changes

The hard part was designing around drift. A static EPUB would be convenient for a week and misleading later.

Attribution has to be obvious

Every generated edition points back to PostHog's live handbook as the source of truth, with source links and dates attached to generated pages.

The output had to work for different readers

Some people want a web reader. Some want Apple Books or Kindle. Some want one section. Some want a full archive. The build produces each without turning the source into hand-maintained content.

Decisions

Keep the project unofficial and point readers back to PostHog's live handbook.
Use GitHub Actions for scheduled rebuilds, Pages deployment, and dated releases.
Generate both human-readable and JSON change digests from manifest comparison.
Make the reader the current edition and treat downloaded eBooks as dated snapshots.

Proof

Live artifact with inspectable product surface, implementation details, and proof points.

Version: 0.2.2

Source: 969 LOC

Outputs: 10+

Searchable hosted reader

Installable offline-friendly web reader

Complete-library eBook

View GitHub

Tell Me About Your Project

Bring Me The Bottleneck.
I’ll Build The Answer.

Tell me what people are trying to do, where the current path breaks, and what kind of useful answer should exist.

Market Gap

Demand exists, but the answer is missing.

Workflow Drag

The work is still too manual, slow, or scattered.

Product Wedge

A small surface could prove the larger opportunity.

Quick Note