Developer Tool · 2026 · Solo build

Log Ledger

Your conventional-commit history becomes a semver verdict and a ready-to-paste CHANGELOG in one click.

The problem

Every release cycle, engineers manually scan git log, categorise commits by type, determine whether the next version is a major, minor, or patch bump, and hand-write a CHANGELOG block. This is repetitive, error-prone, and un-tooled unless you already have a full Conventional Commits pipeline (commitlint, semantic-release, changelog-generator) wired into your CI. Log Ledger fills the gap for everyone else: paste any conventional-commit log — with or without SHA prefixes — and get an instant semver verdict, commits organised by type, a breaking-changes alert, and a formatted CHANGELOG.md block ready to copy. All logic runs in the browser; nothing is uploaded.

Architecture

Key decisions

01

Operate surface — not Configure or Decide/Learn

The user is taking action on a defined input (a git log) to produce a defined output (a CHANGELOG block). This is not a wizard (Configure) and not marketing (Decide/Learn). The Operate surface means: no hero section, no feature grid, no decorative stats — just a focused form with a visible result panel that becomes the primary viewport after analysis.

02

TDD-first pure logic module

All 25 tests across parseCommitLine, inferBump, groupByType, renderChangelog, parseLog, and analyseLog were written before lib/log-ledger.ts existed. The Red phase caught a test data issue (non-hex SHA characters being rejected by the SHA regex) before any implementation ran. The pure module has zero React or Next.js imports.

03

No external parsing libraries

The conventional-commit regex is a single 60-character pattern. Semver bump inference is a 12-line decision tree. No commitlint, no conventional-commits-parser, no semver npm package. This keeps the bundle trivial and makes the algorithm the artefact — demonstrating that reliable tooling can be built from first principles.

04

Skips non-conventional lines silently

Real git logs contain merge commits, revert summaries, and GitHub autogenerated lines. parseLog skips any line that doesn't match the conventional-commit pattern instead of erroring, so engineers can paste raw git log --oneline output without pre-processing it.

Metrics

25
TDD unit tests — all written before implementation
12
commit types supported: feat, fix, perf, refactor, docs, test, build, ci, chore, style, revert, other
0
external commit parsing libraries — pure 60-char regex + 12-line decision tree
0
server calls after page load — entirely browser-local