Commitpad — Layout Options
Three approaches to reading a repo's story
Option A
Commit List → Pick → Read
A table of contents. Each commit is a standalone story. Simple, scannable, but no continuity between entries.
📦
RasKrebs / sonar
14 commits · 3 styles available
f4667ac
feat: add code snippet convention and sample outputs
Dan Brown
Mar 21
1af887d
chore: verify build and error handling
Dan Brown
Mar 20
50c9272
feat: wire up CLI commands (story, analyze, narrate)
Sidney Sheldon
Mar 19
c0346de
feat: add narrator with Dan Brown and Sidney Sheldon styles
Dan Brown
Mar 18
a91dc9a
feat: add LLM-powered commit analyzer
Sidney Sheldon
Mar 17
Option B
Chronological Narrative
The repo reads like a book. Each commit is a chapter with continuity — "In the previous chapter, we scaffolded the foundation. Now the team turns to…"
The Sonar Chronicles
in the style of Dan Brown
Chapter 3 of 8
35%
Chapter I
The Blueprint
The repository was empty — a void of potential. Then, with a single commit, the architect laid the foundation types that would define everything to come…
📎 459a77c 5 min read
Chapter II
The Extraction
With the types in place, the codebase needed eyes — something to parse the raw commit data and extract meaning from chaos…
📎 747c570 7 min read
Chapter III — Reading
The Mind
The extractor could see. But seeing is not understanding. Now the system needed intelligence — an LLM that could look at a diff and grasp what the developer intended…
📎 a91dc9a 8 min read
Chapter IV
The Voice
Coming next — the narrator learns to speak…
📎 c0346de ~6 min read
Option C
Hybrid — Timeline + Reader
A timeline sidebar for navigation, with a reading pane that includes a "Previously…" recap. Loose continuity — you can jump anywhere but still feel the thread.
Timeline
The Blueprint
scaffold project · Mar 15
The Extraction
add extractor · Mar 16
The Mind
add analyzer · Mar 17
The Voice
add narrator · Mar 18
The Wiring
wire CLI · Mar 19
Previously: The extractor learned to parse raw commit data — counting files, detecting languages, and pulling function signatures from diffs. The system could see, but it couldn't yet understand.
Chapter III
The Mind

The diff was sixty-three lines long, but its true weight couldn't be measured in lines of code. Dr. Sarah Chen stared at the terminal, knowing that what she was about to build would give the system something no parser could provide — intent.

async function analyze(diff: string, facts: Facts): Promise<IR> { const response = await claude.messages.create({ model: "claude-sonnet-4-20250514", messages: [{ role: "user", content: buildPrompt(diff, facts) }] }); }

The function was deceptively simple. But inside that buildPrompt call lay the real architecture — a carefully constructed prompt that would teach the LLM to see what humans see when they read code…