Writing

Blog

The Teammate You Delegate Coding ToMy coding agent lives in one terminal on one laptop. Shraga makes it reachable from my phone: self-hosted, bring-your-own-runtime. Here's the design and where it's honestly not done.
ai-agentsself-hosteddevtools
Recovering the Claude Code Sessions a Crash AteYour Mac reboots, three Claude Code tabs die mid-thought. `--resume` won't show them. Here's how I find the sessions the tool itself never wrote down as findable.
claude-codetuidevtools
Ship Your PWA as a Real Native AppYou already built the web app. appwrap bundles it into an offline iOS/Android shell and hands your web code a typed bridge to 29 native capabilities, with no React Native rewrite, and it refuses to lie about which capabilities it actually has.
pwanativemobile
MCP Servers for Your Whole StackOnce your agent can call tools, the bottleneck is connectors. Here's the one four-decision pattern I reuse for every MCP server I build, and the honest state of the eight I've shipped.
mcpai-agentstooling
Progressive Audio Streaming in the BrowserThe <audio> tag wants a whole file before it commits. Here's how MediaSource Extensions lets you play bytes the instant they arrive, plus the iOS and codec traps I hit building audio.libx.js.
web-audiostreamingbrowser
From Figma to JSON to HTMLEvery "Figma to code" tool tries to skip a step and hands you magic numbers. I split it in two: a clean, inspectable JSON intermediate between Figma and anything. Here's exactly what the tree looks like.
figmadesign-to-codetooling
One Router for Every Edge, That Also Speaks MCPA router built once and deployed to Cloudflare, Vercel, or Bun unmodified, that turns its own route table into MCP tools for free. Here's the exact mechanism, and where it stops being magic.
typescriptedgemcp
Text Your Eyes Can't Read But an LLM CanThere's a block of Unicode your screen refuses to draw but every LLM tokenizer reads perfectly. I built a tool to hush and unhush it. Here's the whole trick.
llmsecurityprompt-injection
A ChatGPT-Plugins Playground, Before the Tooling ExistedOpenAI shipped ChatGPT plugins with a manifest, an OpenAPI spec, and no way to see what the model actually did. So I built the harness, two days after the announcement.
chatgptllmplugins
Fighting Fake Content With Fact-Based GenerationMost misinformation tools just flag a post. Savee tried answering it instead: retrieval-grounded, sourced, and honest about where that stops working.
genaimisinformationllm
MongoDB Pro Hint: Use ObjectID as TimestampIntroducing the ObjectId Utility: a tool to convert ObjectId to timestamp and vice versa, and how to exploit the default _id index.
mongodbdatabaseperformance
Introducing Sheet2TimelineIntroducing Sheet2Timeline: Timeline/Gantt generated from a Google Spreadsheet (Sheets).
toolsproductivitytimeline
A Dojo for System DesignYou can read about queues and autoscaling forever, but you only learn the tradeoffs by fighting a dummy that hits back the same way twice. So I built one.
system-designarchitecturelearning
What Kind of Leader are you: Chef or Salesman?It just recently stroke me that those kinds essentially boil down into 2 types: the "Chef" and the "Salesman" leaders. Read more...
leadershipr&dmanagement
Dependency Injection That Doesn't Take Over Your CodebaseMost DI frameworks want to own your architecture. Mine just resolves things, even the ones that don't exist yet. 3.3KB, no decorators, deferred by default.
typescriptdependency-injectionarchitecture
The Missing Piece of Async in JavaScriptA Promise can only be resolved from inside its own executor. When you need to resolve it from outside, you write the same smuggling trick every time. Here's the pattern that closes the gap, and the ECMAScript method that later proved it right.
typescriptasyncpromises
The TypeScript Scaffold I Start Every Project FromEvery new TS repo costs you an hour before line one of business logic. Here's the template that skips it, plus the one trick in it worth stealing: never storing an npm token in the repo at all.
typescriptscaffoldci
The Toolbelt I've Carried Across Every ProjectSince 2019 I've rewritten the same 20 helpers in every project. After left-pad, I stopped trusting 40 micro-deps and put my boring ones in one repo instead.
typescripttoolingopen-source