Notes
Things I learned today, in one or two sentences. The bar here is deliberately low. If a note keeps coming back, it graduates into a proper entry.
This month12notes filed
October 2026
A
pubDateis UTC midnightastroA
pubDatelike2026-10-09parses as UTC midnight, which is 8:00 in Manila, so a post merged earlier that day waits for the next deploy.cloneturns offtext-wrap: prettycssIn Chrome, one inline box with
box-decoration-break: clonemakes its whole paragraph skiptext-wrap: pretty. My code chips cloned, so paragraphs with a chip could end on a lone word.Justified text vs code chips
cssBrowsers justify one line at a time, and a code chip can’t hyphenate or break, so a long chip that won’t fit opens wide gaps in the line before it. My posts are ragged now.
Teleporting a cloud session home
workflowclaude --teleport <session-id>pulled a Claude Code cloud session into my Mac’s terminal, with its branch checked out and the whole conversation loaded.claude plugin validateaudits a modclaude-codeclaude plugin validatereads a Claude Code mod’s source and prints every event it handles and every API call it makes, so I run it on any mod before installing it.Linux hands Chrome a substitute font
fontsOn Linux, a font family that isn’t installed can still come back from fontconfig as something else:
"Apple Symbols"drew as FreeSans in my figure script. I list the fonts I actually have first.The status line JSON already had my limits
claude-codeMy old bash status line could have shown context use and both plan limits all along: Claude Code’s
statusLineJSON carriescontext_window.used_percentageandrate_limits.Carry the engine's hint row
claude-codeAt
PromptHint, the terminal draws its own hint row above whatever a mod returns, and the engine node in the mod’s tree draws as nothing. Leave it out anyway and the hint row disappears./clearand a reload forget different thingsclaude-code/clearempties a mod’s$.statebut keeps its module variables, and a hot reload does the opposite. So my status line compares against$.state, never against what it remembers writing.git symbolic-refworks on any gitgitgit branch --show-currentneeds git 2.22, whilegit symbolic-ref -q HEADnames the branch on any version and prints nothing on a detached HEAD.My terminal font had no reload arrow
fontsMonoLisa, Cascadia Mono and Consolas all lack
↻, so the terminal drew it small from a fallback font. My status line marks a reset with◷now.$.ui.statusisn't a status lineclaude-codeThe mods API’s
$.ui.statusdraws⚠ my-mod: …in the warning colour, so my status line draws in the hint line under the prompt instead, withui.renderonPromptHint.
September 2026
Body's
overflowgoes to the viewportcssoverflow-x: cliponbodyis handed to the viewport, so body itself clips nothing, and the ghost 07 still let phones scroll sideways. It sits in its own clipping layer now.bun testruns in UTCtestingbun testruns in UTC unlessTZis set, so a date helper that read local time instead of UTC still passed. Pinning the test file toAmerica/Los_Angelesmakes that mistake fail.Fontsource subsets download together
fontsFontsource’s per-subset CSS files have no
unicode-range, so importinglatinandlatin-extfor one face downloads both. I ship latin only and let the metric-matched fallback cover the rest.1frhas anautominimumcssA grid track sized
1frwon’t shrink below its content, so one longnowrapnote title widened its whole column.min-width: 0on the column lets it fade out instead.:hoversticks after a tapcssOn touch screens a tap leaves
:hoverapplied, so the menu’s gold close button turned ink the moment it opened under my finger. Hover colours live inside@media (hover: hover)now.LCP can be a faint numeral
performanceI expected the headline to be the new home’s LCP element, but it’s the faint 07 behind it. LCP goes by size, not by how much an element matters.
My redesign loop with Claude Code
workflowThe Colophon redesign runs on one loop with Claude Code: brainstorm, spec, plan, execute. The Claude Design export’s desktop artboards render exactly in headless Chrome, so I check every page against the drawing.
Tailwind v4 owns
.containertailwindTailwind v4 ships its own
containerutility with breakpoint max-widths, and it overrode my.container. The Colophon’s page column is called.frameinstead.Headless Chrome won't go narrow
testingHeadless Chrome won’t lay out a window narrower than about 500px, so a 430px screenshot crops a wider page and fakes an overflow bug. Phone checks set the viewport through Puppeteer instead.
July 2026
Astro 7 backgrounds itself for agents
astroAstro 7 notices when a coding agent like Claude Code runs
astro devand moves the server to the background. Under the Cloudflare adapter that crashed on every request, so my dev script setsASTRO_DEV_BACKGROUND=0.
June 2026
Stop the dev server before building
cloudflareA flaky
ERR_DISPOSEDinastro buildgot likelier with the dev server running, since two Miniflare runtimes were competing. I stop the dev and preview servers before every build now.
April 2026
No native binaries on Cloudflare
cloudflareThe Cloudflare adapter builds every route for Workers, prerendered ones too, so
@resvg/resvg-jsand its native binary can’t be imported in an Astro page. OG images come from a Bun script that runs beforeastro build.