From 42d616750f4fe580a22b92dc5f52d22666bb189d Mon Sep 17 00:00:00 2001 From: Shahid Raza Date: Fri, 17 Jul 2026 15:44:31 +0530 Subject: [PATCH] chore(release): v0.4.0 Adds the "Cron was easy because the job was dumb" thread (Claude routines and cron), plus reusable thread reading enhancements: hand-drawn pen annotations, an "On this page" table of contents with scroll-spy, a styled cron diagram, and copy-to-clipboard on code blocks. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 18 ++ package-lock.json | 4 +- package.json | 2 +- src/app/threads/[slug]/page.tsx | 9 + src/components/annotate.tsx | 189 ++++++++++++ src/components/code-block.tsx | 46 +++ src/components/cron-diagram.tsx | 64 ++++ src/components/table-of-contents.tsx | 96 ++++++ .../threads/claude-routines-and-cron.mdx | 274 ++++++++++++++++++ src/mdx-components.tsx | 13 + 10 files changed, 712 insertions(+), 3 deletions(-) create mode 100644 src/components/annotate.tsx create mode 100644 src/components/code-block.tsx create mode 100644 src/components/cron-diagram.tsx create mode 100644 src/components/table-of-contents.tsx create mode 100644 src/content/threads/claude-routines-and-cron.mdx 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({
+
+ + +