Files
Ken a951c00e35 fix: purge AI slop from judgment essay, add voice linting pipeline
- Killed 16 em-dashes (Claude fingerprint, 15.9/1000 words -> 0)
- Replaced all clause-dash-elaboration patterns with periods, colons, restructuring
- Removed 'The One-Sentence Version' section (restated the intro, voice anti-pattern)
- Broke tricolon at lines 56-58 (too-clean parallel structure)
- Collapsed 'How to Actually Help' listicle into connective prose
- Added receipt link for ~100x inference cost claim
- Heading dashes replaced with colons (Tradesman Analogy, Excellence vs Functional)

New tooling:
- scripts/lint-voice.sh: mechanical anti-slop linter (em-dashes, trigger words,
  hedging, filler, receipts, sentence uniformity)
- .amplifier/skills/voice-check/SKILL.md: LLM-as-judge voice authenticity check
  (8 dimensions against VOICE.md profile)
- .amplifier/AGENTS.md: standing rule requiring both checks before any publish

🤖 Generated with Amplifier

Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
2026-05-27 00:42:18 +00:00

5.5 KiB

Blog Architecture: Crash Test Dev

What We're Building

A blog for lessons, patterns, and writing. Elegant like the Amplifier Masterclass site. Read-aloud feature. No AI slop. Ken's voice throughout.

Reference: What the Masterclass Does Right

The masterclass site (anderlpz.github.io/amplifier-masterclass/) achieves its elegance through:

  • Three-font stack: Serif body (Source Serif 4), sans headings (Inter), mono code (JetBrains Mono). The serif/sans pairing is the single biggest quality signal.
  • 18px base, 1.75 line-height: Generous reading. Feels like a printed essay.
  • Muted color palette: Cool lavender-grey background (#F4F5F9), body text in secondary grey (#5C5E6E) not black, muted steel blue accent (#3E5C8A).
  • 720px reading column + 840px breakout: Prose narrow, code/diagrams wider. Creates visual breathing rhythm.
  • Pre-recorded narration: OpenAI TTS voices (Fable, Nova, Alloy), 3 choices, with full transport controls, scrubber, speed selection, auto-advance.
  • Progressive disclosure: TOC pill, drawer, inline term definitions, xref hovers, scroll-driven diagram revelation.
  • Zero framework bloat: Hand-crafted HTML/CSS/JS. Every pixel intentional.

Tech Decision: Astro

Current stack (Gatsby 2): Dead framework. React 16. gatsby-theme-blog 1.0. Not worth upgrading -- better to start fresh.

Recommended: Astro

  • Same framework the masterclass uses for its component rewrite
  • Ships zero JS by default. JS only where explicitly needed (audio player, TOC)
  • Markdown/MDX content with frontmatter. Content-first architecture
  • Built-in code highlighting (Shiki), image optimization, RSS
  • Minimal deps: just astro + typescript, like the masterclass

Why not Next.js/Remix: Over-engineered for a blog. Ken's content doesn't need server-side rendering or API routes. Static generation + islands is the right fit.

Design Approach

Inspired by the masterclass but adapted for a multi-post blog (not single-page document):

Typography

Role Font Why
Body prose Lora or Source Serif 4 Serif signals "read this slowly"
Headings, UI Inter Clean, modern, tight tracking
Code JetBrains Mono or Berkeley Mono Monospaced with personality

Color

Warm variation on the masterclass palette:

  • Background: warm paper (#F4F2ED or similar) -- not cool lavender
  • Surface: white cards
  • Text: near-black (#1A1815), secondary grey for body
  • Accent: deep blue or muted violet (Ken's existing blog uses #007acc)
  • No dark mode initially (the masterclass explicitly chose this)

Layout

  • 650-720px reading column, centered
  • Code blocks break wider (840-900px)
  • Generous vertical spacing between sections (64px+ for h2 breaks)
  • Fixed minimal nav at top (site title, optional TOC pill for long posts)

Content Structure

/                          Index -- list of posts, most recent first
/posts/[slug]              Individual post pages
/patterns/[slug]           Technical patterns (shorter, reference-style)
/lessons/[slug]            Longer lesson-format pieces

Frontmatter:

---
title: "Speeding Up Webpack Typescript Incremental Builds by 7x"
date: 2019-08-16
type: post | pattern | lesson
tags: [webpack, typescript, performance]
audio: true  # triggers TTS generation
summary: "One-sentence hook for the index page"
---

Read-Aloud Feature

How the Masterclass Does It

  • Pre-generated MP3s per chapter using OpenAI TTS API
  • 3 voice options (Fable, Nova, Alloy)
  • Script files that are spoken-word summaries, NOT verbatim text reads
  • Full transport controls (play/pause, skip, scrub, speed, voice select)

Our Approach

Same pattern, adapted for blog posts:

  1. Generate at build time or on-demand: For each post with audio: true, generate a narration script (spoken-word summary, not verbatim) and run it through OpenAI TTS.

  2. Narration script generation: Use the VOICE.md profile to write spoken versions. Key rules from the masterclass:

    • Don't read code blocks aloud. Describe what they do.
    • Don't read URLs. Say "I've linked the PR in the post."
    • Keep the conversational energy. This should sound like Ken explaining it to you at a whiteboard.
  3. Audio player component: Minimal pill in the nav area. Click to expand transport controls. Single voice initially (can add multiple later).

  4. Per-post, not per-section: Unlike the masterclass's per-chapter audio, blog posts are short enough for single-track narration.

TTS Pipeline

content/posts/my-post.md
  --> narration-script generator (strips code, converts to spoken prose)
  --> OpenAI TTS API (voice: "fable" or "nova")
  --> public/audio/my-post.mp3
  --> referenced in post frontmatter

Migration Path

Phase 1: Foundation

  • New Astro project in this repo (replace Gatsby)
  • Design tokens (CSS custom properties, no Tailwind)
  • Base layout, typography, color
  • Markdown/MDX content pipeline
  • Migrate 2 existing posts

Phase 2: Polish

  • Audio player component (pill + transport)
  • Generate narration for existing posts
  • Index page design
  • Code block styling (breakout width, optional filenames)
  • RSS feed

Phase 3: Content Types

  • Pattern pages (shorter, reference-style)
  • Lesson pages (longer, progressive disclosure)
  • Cross-references between related content

Phase 4: Advanced

  • Scroll-synced TOC for long posts (like the masterclass)
  • Inline term definitions (if building a technical vocabulary)
  • Reading progress indicator
  • Multiple TTS voices