Why I built ChHeader
ModHeader's ad injection put me off. I built ChHeader to edit HTTP headers without ads, with local profiles and source anyone can inspect.

58 posts on this thread
ModHeader's ad injection put me off. I built ChHeader to edit HTTP headers without ads, with local profiles and source anyone can inspect.

Removing SSR simplified Cubbly but delayed useful inventory. I compared four client-loading compositions and kept the one that made real route content 31–42% faster.

I removed React SSR from Cubbly because maintaining Lingui across the Worker and browser was not worth the speed it bought on a private application.

I wanted to keep a shared table component current without accepting migration work on faith. A side-by-side benchmark made the trade-off much easier to judge.

React Router v8 keeps the framework-mode API familiar and moves v7's future flags into defaults. That restraint matters after an expensive v6-to-v7 migration.

Grok Build produces useful patches, but its weekly limit changes how I use it. The harness and quota now matter more than the model.

Claude Code lowers the cost of being a Rust beginner. It kept two local-hardware projects moving while I learned the language inside them.

I keep changing this blog. One small Cloudflare Worker lets the URLs survive the changes while the site itself stays static.

dns-sd found three Thread meshes in my house. They can still communicate over IP, but they do not share one radio mesh or its redundancy.

My YAML light group vanished after an update. I blamed Home Assistant 2026.5 too quickly; the Helper fixed it, but YAML is still supported.

Tripsy released an official CLI and MCP server in May 2026. The CLI is the better tool. Everything I documented for the SQLite approach is now unnecessary.

Papra looked healthy on my NAS while registration failed. The browser hid the useful detail: SQLite belonged to the wrong user.

I ordered a Google Fitbit Air to test whether a lighter band can solve the sleep-data gap my Apple Watch leaves.

UGREEN said my Hermes container was running. The gateway couldn't read its config. Two user IDs explained the failure—and the fix.

Tripsy stores all your trip data in a local SQLite file that iCloud syncs to your Mac. The file is already on your disk — no export needed.

Adobe Animate kept the Flash timeline alive for HTML5, but the web moved on. Maintenance mode confirms the bridge could not hold.

I registered a San Francisco DBA for $236. It took two City Hall stops, one newspaper email, and four weeks of publication.

I tried Origin as an alternative to Copilot Money. More financial products did not make up for the transaction review it handed back to me.

Six months with React Router loaders changed my default. I add React Query only when repeated fetching, shared data, or polling gives me a reason.

October's report counted 31,039 cuts attributed to AI. It recorded what employers said—not whether deployed systems actually replaced the work.

React Compiler 1.0 moved routine rendering memoization into the build. React.memo, useCallback, and useMemo now need a specific reason.

Meta cut 600 AI roles while still hiring for its superintelligence lab. The move shows which AI work leadership wanted to fund—and which it did not.

Samsung's 7-million-parameter TRM beat much larger models on specific reasoning benchmarks by revising its answer up to 16 times.

I tested SwiftUI toolbar placement, grouping, search, and overflow on iPhone and iPad. The useful mental model is intent—not fixed screen coordinates.

I rebuilt SwiftUI's TabView examples to separate the iOS 18 navigation APIs from the iOS 26 Liquid Glass redesign—and to see where the system takes control.

VoiceOver read my compound views as a pile of unrelated elements. Grouping, labels, and combined accessibility testing fixed the experience.

The full Liquid Glass effect became distracting while I built with it. Here is how I handled Reduce Motion and Dynamic Type in SwiftUI.

My working setup for a Home Assistant Connect ZWA-2 on a Ugreen NAS, using Docker and Z-Wave JS UI.

The migration took two focused sessions: dependencies first, then 40 files of imports and route types. Typegen was the part worth keeping.

My Remix-to-React Router v7 migration touched 40 files and removed 591 net lines. Imports were easy; TypeScript took the time.

My Remix app ran locally and failed on Vercel with EMFILE. The workarounds reduced file churn but could not expose or change the platform limit.

AI search is turning websites from destinations into raw material. The web may survive that transition, but human voices will be harder to find.

Companies can shrink teams without announcing layoffs. They call it AI efficiency, lower hiring needs, and let attrition do the rest.

The package manager was the easy part. File APIs, CI, compatibility checks, and Claude Code produced most of the migration's useful work.

Moving this blog from Node.js to Bun cut its build from 37 seconds to 20. Native file and glob APIs also removed code I no longer needed.

Figma's dispute with Lovable over Dev Mode shows why common developer terms make weak trademarks and costly legal weapons.

OpenAI talked a ~$3B Windsurf deal. I use Claude Code and Cursor; the story that matters is who owns the IDE relationship, not the model API.

A leaked OpenAI lineup showed five models, but the mini and nano pricing mattered more to me than another flagship.

Copilot shipped agent mode and more models. Microsoft also tightened extension licenses so some tools refuse to run in Cursor.

AI access is becoming another way to buy time, better service, and economic leverage. My son will grow up inside that divide.

Claude Code helped build the parser, generator, templates, and Cloudflare deployment. Syntax highlighting and timezones took more work.

I paid about $10 to see whether Claude Code could scaffold the TypeScript static-site generator behind this blog. Most of its choices held up.

Replacing Assistant with Gemini fits Google's long pattern of abandoning products instead of earning trust through steady maintenance.

Public libraries give coding agents examples, documentation, and discussions they can retrieve. Private APIs must supply that context themselves.

When Chrome began disabling uBlock Origin under Manifest V3, I stopped looking for another extension and moved my browsing to Brave.

Bitcoin ATMs charge steep fees and are frequently used in scams. Their placement in vulnerable neighborhoods makes the business model hard to defend.

A personal blog should be fast on a phone and boring to host — Markdown to static HTML on Cloudflare, no app server.

A 2025 report put specialized OpenAI agents at $2k–$20k a month. Even as a reported figure, that belongs in a labor budget—not a footnote.

I use Perplexity for most search and for a daily news skim. Google for the stubborn queries. Apple News lost the paywall fight.

I started writing here again — web development, AI tools I actually run, and what SF startups taught me the expensive way.

Adobe barely documented custom HTML5 components in Animate CC, so I worked backward from its built-in Video component.

Lambda's clunky deployment process forced me to think small. That constraint led me to better microservices design. Sometimes friction is good.

Microsoft added Ubuntu's Bash to Windows. I tested it for real work and hit some rough edges.

The Apache module path was the easy-to-miss part of running Homebrew's PHP 5.6 on macOS El Capitan. Here is the full setup.

I worked in advertising as browsers pushed Flash out. The web gained battery life and privacy controls, while ad production got much harder.

Edge 14 hit 460 points on the HTML5 Test and reached Firefox territory. It was Microsoft's strongest standards result after Internet Explorer.

I upgraded two repositories to Mocha v3. The migration was uneventful, and the fixed .only() behavior was reason enough to do it.

Once I stopped supporting IE8, UglifyJS still emitted compatibility code for it. This Gulp option switched those workarounds off.

Keep exploring