Skip to content
When Google Forms Prints Only One Page: PrintImg Splits a Tall Screenshot into A4 Pages thumbnail

When Google Forms Prints Only One Page: PrintImg Splits a Tall Screenshot into A4 Pages

Introduction After you run a survey, someone always asks for a printed copy of the results. If you built the form in Google Forms, the Responses tab already draws you nice charts, so printing that screen straight off should just work, right? Try hitting print from the responses page, though, and you get one broken page — even though there are plenty more questions below the fold. The pie charts in the Summary tab get sliced in half at the page boundary, too. I ran into this wall myself, and eventually built a tool for it: PrintImg, which splits a tall screenshot into as many A4 pages as it needs. ...

Published date: 2026-09-11 · Reading time: 14 min · Word count: 2815 words · Author: Isaac
Safari 27 Fixed top-level await — Retested, and Loading Doubled thumbnail

Safari 27 Fixed top-level await — Retested, and Loading Doubled

Safari’s top-level await bug was reported back in July 2022 (WebKit bug 242740), and by October 2025 it had gotten bad enough that top-level await dropped to “Limited” on Baseline (the cross-browser support signal for web platform features). The fix merged in April 2026, shipped starting with Safari Technology Preview 243 in May, and on September 2 the WebKit team posted the postmortem: Fixing top-level await in Safari. ...

Published date: 2026-09-03 · Reading time: 12 min · Word count: 2555 words · Author: Isaac
Claude 4-Model Accessibility Test: Fable 5.1, Opus, Sonnet 5 thumbnail

Claude 4-Model Accessibility Test: Fable 5.1, Opus, Sonnet 5

On September 1st, the Claude Code v2.1.257 release notes carried one short line: the default model for the Fable line had switched to 5.1. If you use Fable and have never touched the model setting, the brain writing your code got quietly swapped out that day. The same release notes had an exception, too — the fable alias in Claude app gateway sessions stays on Fable 5 for now. Read this as a story about the regular Claude Code you run from the terminal. ...

Published date: 2026-09-03 · Reading time: 16 min · Word count: 3289 words · Author: Isaac
When aria-live Stays Silent — Getting ARIA Live Regions Right thumbnail

When aria-live Stays Silent — Getting ARIA Live Regions Right

A green toast reading “Saved” pops up in the bottom-right corner of the screen. It disappears two seconds later. For someone using a mouse, that’s complete feedback. But for someone who isn’t looking at the screen? That toast never happened. There’s no way to know whether the save succeeded or not. This is exactly what live regions exist to solve. Mark a region ahead of time as one whose content can change without a page refresh, and when the text inside it changes, the screen reader reads it out automatically. One line — aria-live="polite" — is all it takes. ...

Published date: 2026-09-02 · Reading time: 17 min · Word count: 3505 words · Author: Isaac
Slack, Discord, Telegram Alerts for Claude Code thumbnail

Slack, Discord, Telegram Alerts for Claude Code

Once you’re in the habit of kicking off a long task and walking away, you end up wiring up a notification. And once you have one, the same thought always follows: “This would be nicer on Slack.” Email is quiet and it sticks around, but it’s slow. If you keep Slack open all day, having alerts land in one window you already watch beats digging through your inbox. If you want your phone to buzz the instant something finishes, Telegram is faster. It’s not just a matter of taste, either — if your team already lives in a channel, that’s where the notification belongs. ...

Published date: 2026-08-18 · Reading time: 49 min · Word count: 10363 words · Author: Isaac
Claude Code: Email Results When Tasks Finish thumbnail

Claude Code: Email Results When Tasks Finish

Ever sent off a long task, gone to do something else, and come back to the terminal an hour later only to find it finished thirty minutes earlier? Or the opposite — checking the window every five minutes and getting nothing else done? For me there was one more wrinkle on top of that: when the task produces a file. A markdown writeup of some research, an extracted CSV, a report I asked for. If it finished while I was away, there was no good way to check it from my phone. SSH in and cat the file, and every line break is mangled, you’re scrolling with your thumb, and if there’s a table in there, forget reading it at all. ...

Published date: 2026-08-16 · Reading time: 39 min · Word count: 8258 words · Author: Isaac
CLAUDE.md, AGENTS.md, DESIGN.md — Markdown in the AI Era thumbnail

CLAUDE.md, AGENTS.md, DESIGN.md — Markdown in the AI Era

Ever opened someone else’s repository after a while and found a bunch of unfamiliar files sitting there? Next to README.md there’s a CLAUDE.md, an AGENTS.md shows up too, and some repos even have a DESIGN.md. They’re all .md files, but what are they actually for? They’re all documents written to be read by AI — not by people. Just a few years ago, the only markdown files in a repository were the README and maybe a license. But now that AI coding tools have become part of everyday work, projects need to tell AI, too, “here’s how we do things around here.” Instead of repeating the same explanation in chat every time, teams started writing it down in files. That’s how we ended up with the files you’re looking at now. ...

Published date: 2026-08-15 · Reading time: 23 min · Word count: 4852 words · Author: Isaac
Markdown Syntax: Common Pitfalls and Accessibility thumbnail

Markdown Syntax: Common Pitfalls and Accessibility

Have you ever asked an AI to “put this in a table” and gotten back text littered with pipes (|) and dashes (-)? It looked like a clean table right there in the chat window — but the moment you copied it into a messaging app, it turned into a mess of symbols. Those symbols are Markdown. These days you run into it everywhere — GitHub READMEs, technical blogs, note-taking apps like Notion, even the replies an AI chatbot sends you. ...

Published date: 2026-08-15 · Reading time: 8 min · Word count: 3630 words · Author: Isaac
Scroll-Driven Animation: When Scroll Becomes the Timeline thumbnail

Scroll-Driven Animation: When Scroll Becomes the Timeline

Opening: treating scroll as “time” When you build scroll-based animations, you eventually hit this thought: “What if scroll were not just an input event” “but a proper timeline?” Scroll-Driven Animation is that idea made explicit. Instead of treating scroll as a trigger, you treat it as the timeline itself. In this post, I group implementation strategies into three families: Native CSS Scroll-Driven Animation IntersectionObserver for state changes scroll + requestAnimationFrame with manual progress mapping For each one, we will cover the principle, strengths, tradeoffs, and accessibility concerns. The code samples here are minimal and correct by themselves, and each section ends with a link to a live demo you can poke at directly. ...

Published date: 2026-08-12 · Reading time: 21 min · Word count: 4471 words · Author: Isaac
Test Culture, Interviews, and What Comes Next — Wrapping Up the Frontend Testing Series thumbnail

Test Culture, Interviews, and What Comes Next — Wrapping Up the Frontend Testing Series

This is Part 22 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary What do you end up with when you stack tests onto one small app, one layer at a time? This article is the retrospective on that journey — and a map of frontend testing as a whole. The layers we stacked were these: unit tests that check whether a single function does its one job, component tests that poke at the screen the way a user would, real-browser E2E that sweeps end to end, accessibility checks that protect users who never look at the screen, and CI that runs all of it for you on every PR. By the end, we’d even gotten to verifying code and tests written by AI. ...

Published date: 2026-08-08 · Reading time: 11 min · Word count: 2297 words · Author: Isaac
맨 위로