Skip to content

Add post: How I over-engineered my book - #1949

Open
benbalter wants to merge 1 commit into
mainfrom
post/how-i-over-engineered-my-book
Open

Add post: How I over-engineered my book#1949
benbalter wants to merge 1 commit into
mainfrom
post/how-i-over-engineered-my-book

Conversation

@benbalter

Copy link
Copy Markdown
Owner

Adds src/content/posts/2026-08-03-how-i-over-engineered-my-book.md.

The post promised in the Overcommitted write-up ("a rabbit hole that's getting its own post soon").

What it covers

Framed for a developer who knows nothing about book publishing. The unlock is stated early — an EPUB is a zip archive of XHTML and CSS, so the book is a build target, not a document — and everything else follows from that:

  • The CSS-to-CSS transpiler that downgrades modern CSS for e-readers, with a real before/after of the .tldr rule
  • Shipping to a runtime with no DevTools, no error console, and no published spec
  • The Kindle transparent-PNG bug (Twemoji's transparent pixels are dark slate, so renderers that flatten alpha draw a charcoal box) and the two-iteration fix
  • Seven blocking prose linters plus six custom rules
  • An honest accounting: 1,065 of 4,944 commits touched the toolchain, about one in five

Ends on the archive sweep that surfaced typos live since 2011, which sets up a follow-up post on accessibility.

Verification

Check Result
vale --minAlertLevel=error 0 errors
markdownlint-cli2 0 issues
remark (report-only) no issues
prose-quality + front-matter 1,332 passing
astro build page renders; all three :quote directives resolve to id="quote-*" anchors

Frontmatter uses title/description/tldr per the collection schema. No hideBookCta, so the standard book CTA appends.

Notes for review

  • Résumé link is absolute (https://ben.balter.com/resume.pdf) rather than relative. The prose-quality link resolver only checks .md/.mdx/.html, so it can't resolve Astro pages — both /resume.pdf and /resume/ fail it. This matches the existing convention in the archive, which also links the résumé absolutely. Post links stay relative, since those resolve fine.
  • Title is 29 characters, under the 50–60 the writing guide suggests for SEO. Left as-is deliberately; happy to lengthen if you'd rather hit the range.
  • Local astro build fails at the astro:build:done hook because astro-pdf can't launch Chromium in this environment. Unrelated to the post — page HTML generates fine, and CI caches its own Chrome.

🤖 Generated with Claude Code

Walks through building the book as a software project: an EPUB is a zip
of XHTML and CSS, so the book became a build target rather than a
document. Covers the CSS-to-CSS transpiler that targets e-readers, the
Kindle transparent-PNG bug, the prose linters that block CI, and an
honest accounting of what the tooling cost (about one commit in five).

Verified before commit: Vale (0 errors), markdownlint, remark, and the
prose-quality + front-matter suites (1,332 passing). Astro build renders
all three :quote directives to proper anchors.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant