- Building periscope: an agentic headless browserperiscope An agentic headless browser that websites see as Safari. github.com/oskar-szulc/periscope In short: periscope is an open-source command-line browser for AI agents on macOS. It runs Safari’s WebKit engine so sites see a normal Safari, keeps pages open between commands, and returns a page as markdown, structured JSON, a link list or a screenshot. Agents… Read more: Building periscope: an agentic headless browser
- Building raster: my story of grid sequencer obsessionraster A grid groovebox. Try it at raster.osk.workers.dev In short: raster is a grid groovebox that runs in the browser, inspired by the Yamaha Tenori-on and built with React and Tone.js. It has up to 16 layers, seven synth engines, sample chopping with transient detection, Elektron-style parameter locks, and pages that chain into songs. Note… Read more: Building raster: my story of grid sequencer obsession
- Game dev techniques that made our vue web app 20x fasterIn short: Five game engine techniques fixed our Vue org chart once customers reached 240k employees: frustum culling (render only what’s on screen), spatial partitioning, moving heavy work into Web Workers, level of detail, and hash map lookups. Rendering got 20x faster (a 10k org went from 1 min 45 s to under 5 seconds),… Read more: Game dev techniques that made our vue web app 20x faster
- Making a 240k-record org chart load in a browserIn short: Our org chart froze the browser at 10k employees (1 min 45 s to expand, 5.5 GB of memory) and crashed outright at 240k. Over two years I replaced per-node Vue instances with a ~200-line renderer, rendered only what’s in the viewport, and moved hierarchy building to the backend. A 10k org now… Read more: Making a 240k-record org chart load in a browser
- How do I use coding assistants – quick tipsIn short: Practical patterns for using Claude Code and similar assistants on production code: point the prompt at specific files and functions, ask it to plan before writing code, and have it write tests that pin down current behaviour before changing anything. It includes an example prompt for a full feature loop and a pattern… Read more: How do I use coding assistants – quick tips
- Early startup engineeringIn short: What worked for a small engineering team at Agentnoon (YC W22): keep the stack lean, and treat the job as managing complexity by cutting scope early and hiding unavoidable complexity behind simple module interfaces. Speed and a product that’s easy to use are how a small team beats much bigger ones. In an… Read more: Early startup engineering
- Why not rewrite?In short: My answer to a new engineer who wanted to rewrite our app from scratch. A structure that looks perfect on day one will still bend as requirements change, so the better bet is simple, straightforward code that’s easy to change. A question I got from one of the new engineers on our team… Read more: Why not rewrite?
- How to stay up to date with autostashed git rebaseIn short: git rebase origin/master –autostash brings your teammates’ changes into your branch with one command, even with uncommitted work. It stashes your changes, rebases your commits onto the remote, then restores your work. originally published in 2018 at medium Here’s the thing: sooner or later someone on your team will push some changes to… Read more: How to stay up to date with autostashed git rebase
- Using threads in native plugins for Unity WebGLIn short: Unity WebGL builds compile native C++ plugins to JavaScript with Emscripten, so a slow plugin call blocks the game. The fix is to compile the plugin into a Web Worker and talk to it with messages, creating the worker once and reusing it rather than spawning one per task. A bit of emscripten… Read more: Using threads in native plugins for Unity WebGL