When merging CSVs in the browser, handling mismatched columns and quoted cells changes everything. Here's how filetools does it. Last week we shipped CSV merge/split/transpose tools for filetools, and the most…
🔍 Free AI Visibility Teardown: Want to know if ChatGPT & Perplexity cite your domain vs competitors? Request a Free Instant AI Search Teardown on AppWebSeo. What is an enterprise RAG system? An enterprise…
Last month I was prototyping a 2D roguelike in Phaser. I had about 180 sprites — 16x16 tiles, a few 32x64 characters, UI buttons, particle effects. I loaded them individually because "I'll optimize later." Later came…
Every browser testing comparison eventually collapses into a speed argument, and that framing hides the thing that actually matters. Cypress is not Selenium with the rough edges sanded off. It made one architectural…
We somehow accepted a strange bargain on the modern web. We wanted convenience. In exchange, we got tracking. A button remembers what we clicked. A page remembers what we looked at. A “helpful” service remembers where…
The landscape of web engineering has shifted dramatically. Generative media workflows have graduated from instantaneous text completions to compute-intensive, multi-second operations. Think multi-stage latent diffusion,…
Most people think browser privacy begins and ends with cookies. Cookies matter, but a website can also observe connection and browser details before you ever create an account. This post is a practical overview of the…
🔍 Free AI Visibility Teardown: Want to know if ChatGPT & Perplexity cite your domain vs competitors? Request a Free Instant AI Search Teardown on AppWebSeo. What does it mean to integrate AI citations into content?…
I shipped four browser-only video tools with ffmpeg.wasm: trim, compress, video-to-GIF and MP3 extraction. Files never leave the browser, nothing to install. Trim · Compress · GIF · MP3 (Korean UI, but the buttons are…
I built a Korean dialect converter that runs entirely in the browser and uses no LLM. Type a standard Korean sentence and it rewrites it the way people speak in Gyeongsang, Jeolla, Chungcheong, Gangwon or Jeju. Paste a…
A few weeks ago I shipped Out for Never, a web app whose entire premise is: what if the fun part of online shopping — the checkout, the tracking page, the "it's on the way" dopamine — existed without the spending? You…
Most date pickers still use the same interaction model they have used for years: Open the calendar. See one month. Click an arrow. See the next month. Repeat until you reach the date you want. That works reasonably well…
Have you ever loaded a SaaS app and seen an announcement banner flicker in 500ms after the page loads, shifting the entire layout down by 60px? That Layout Shift (CLS) destroys user experience and SEO rankings. Here is…
VPAID has been deprecated since VAST 4.1. The replacement is SIMID: Secure Interactive Media Interface Definition. It loads an HTML creative into a sandboxed cross-origin iframe and talks to the player over postMessage.…
Building Drs Kart: Technical Architecture, Technology Stack, and Lessons Learned Building a marketplace is very different from building a simple website. A marketplace needs to handle multiple types of users, different…
When I want to understand a Minecraft seed, I usually need more than a random coordinate list. I want to see how the biomes connect, compare the Overworld, Nether, and End, and share a useful view with someone else.…
I Built a Free YouTube Description Template Builder (Because TubeBuddy Charges $10-40/month) Stop paying $10-40 per month for TubeBuddy when you just need a clean YouTube video description. I was tired of TubeBuddy's…
Microfrontends solve a real problem: letting multiple teams ship frontend code independently without stepping on each other. But the implementation usually involves a week of webpack config, Module Federation plugins,…
I wanted a chess board that felt precise, opened without an account, and told me something useful after the game. I did not want to build another closed player pool and then pretend that an empty matchmaking queue was a…