diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ba7207..77fa4b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,24 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Every release corresponds to a `staging` to `main` pull request and a matching `vX.Y.Z` tag on `main`. +## [0.4.0] - 2026-07-17 + +### Added + +- New thread: **"Cron was easy because the job was dumb"** — a deep, practical + guide to Claude routines (cron jobs whose payload is an agent). Covers routine + anatomy, a gallery of real routines with schedules and prompts, idempotency + patterns, a cron syntax refresher, routines vs. loops, and observability. + Includes a companion video link and a new `claude` tag. +- Hand-drawn **pen annotations** for thread prose (`Underline`, `Circle`, `Box`, + `Strike`, `Highlight`) that draw themselves on scroll and are gated behind + `prefers-reduced-motion`. Wired into MDX, so any thread can use them. +- **"On this page"** table of contents: a sticky right rail with scroll-spy that + highlights the current section and jumps to any heading. +- **Cron diagram** component: a styled five-field breakdown replacing brittle + ASCII art. +- **Copy to clipboard** buttons on thread code blocks. + ## [0.3.0] - 2026-07-12 ### Added diff --git a/package-lock.json b/package-lock.json index bead250..4913903 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "binarysemaphore", - "version": "0.3.0", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "binarysemaphore", - "version": "0.3.0", + "version": "0.4.0", "dependencies": { "@mdx-js/loader": "^3.1.1", "@mdx-js/react": "^3.1.1", diff --git a/package.json b/package.json index a1152ce..b8a0e57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "binarysemaphore", - "version": "0.3.0", + "version": "0.4.0", "private": true, "scripts": { "dev": "next dev", diff --git a/src/app/threads/[slug]/page.tsx b/src/app/threads/[slug]/page.tsx index d635851..8d61496 100644 --- a/src/app/threads/[slug]/page.tsx +++ b/src/app/threads/[slug]/page.tsx @@ -11,6 +11,7 @@ import { threadCovers } from "@/lib/thread-covers"; import { Photo } from "@/components/photo"; import { Header } from "@/components/header"; import { Footer } from "@/components/footer"; +import { TableOfContents } from "@/components/table-of-contents"; type Params = { slug: string }; @@ -67,6 +68,7 @@ export default async function ThreadPage({
+
+ + +