// Hello there 👋

I'm Walt

// 2X Startup Founder · Software Engineer · Blogger

I'm a software engineer from Los Angeles, CA who enjoys building things and writing about how they work. I've been coding since 2002 and building startups since 2017.

Get the newsletter — no spam, ever.
Join 1K+ devs. Unsubscribe any time.
20+
Years coding
800+
Articles
1M+
Devs reached
// Latest
How to Use package.json imports for Node Aliases How to Use the Cookie Store API How to Use Uint8Array Base64 Helpers in JavaScript Why HTML-in-Canvas Is Big News How to Use Vite Environment Variables Without Leaking Secrets How to Use the Web Locks API to Stop Duplicate Browser Jobs How to Use Intl.DurationFormat How to Set Up Fathom Analytics in Your Web Apps Use Node's Built-In SQLite For Local App Features Build a Chrome Extension That Saves Text Snippets From Any Page How to Use UUIDv7 in PostgreSQL 18 How To Prepare Your Web App For Chrome’s Two-Week Release Cycle How To Try Node.js 26 Temporal Without Breaking Your Date Code IBM launches an AI platform called Bob GitHub Copilot's New Pricing Model Has Got Some Developers Worried Why AI-Assisted Development Needs Video Receipts How to Use package.json imports for Node Aliases How to Use the Cookie Store API How to Use Uint8Array Base64 Helpers in JavaScript Why HTML-in-Canvas Is Big News How to Use Vite Environment Variables Without Leaking Secrets How to Use the Web Locks API to Stop Duplicate Browser Jobs How to Use Intl.DurationFormat How to Set Up Fathom Analytics in Your Web Apps Use Node's Built-In SQLite For Local App Features Build a Chrome Extension That Saves Text Snippets From Any Page How to Use UUIDv7 in PostgreSQL 18 How To Prepare Your Web App For Chrome’s Two-Week Release Cycle How To Try Node.js 26 Temporal Without Breaking Your Date Code IBM launches an AI platform called Bob GitHub Copilot's New Pricing Model Has Got Some Developers Worried Why AI-Assisted Development Needs Video Receipts

Latest Articles

Browse all
javascript
Use Node's package.json imports field for small private aliases like #db, #http/*, and #config without relying on a bundler alias.
The Cookie Store API is the cleaner way to work with script-visible browser cookies. It gives you promise-based reads, object-shaped writes, deletes, and change events instead of forcing you to parse and assign `document.cookie` strings.
JavaScript now has native `Uint8Array` helpers for converting bytes to and from Base64 and hex. Use them when your data is actually bytes: file chunks, image payloads, cryptographic output, compact URL tokens, or binary API responses. They are cleaner than `atob()` and `btoa()` because they work with `Uint8Array` directly.
HTML-in-Canvas is big news because it targets one of the worst tradeoffs in web development: canvas gives you powerful rendering, but once you draw your UI there, you lose a lot of normal browser behavior. Chrome's experimental origin trial points toward a better model where a canvas app can draw real HTML while keeping browser-managed text, controls, focus, accessibility, and interaction.
vite
In Vite, a variable that starts with `VITE_` is public browser configuration, not a secret. Vite exposes it through `import.meta.env` and bundles it into client-side code at build time, so use `VITE_` for values like API base URLs, keep real secrets on the server, and only use `loadEnv()` when `.env` values need to shape `vite.config.*`.
javascript
Use the Web Locks API when the same web app can be open in multiple tabs and only one tab or worker should run a browser-side job at a time. It is a clean fit for sync jobs, cache refreshes, IndexedDB maintenance, and polling loops that should not stampede just because the user opened your app twice.

Developer Tools

All tools

Browse by Topic

// Color Theme

Custom accent
Pick any color
for the accent
Sample Issue
// Issue #47 — May 2026
5 CSS tricks I keep going back to
Sent May 14, 2026 · 4 min read

Hey — Walt here. This week I was deep in a client codebase untangling a layout that had clearly been written by someone who had given up. It reminded me how many small CSS patterns I reach for constantly that I've never actually written down. So here they are. Five tricks, no fluff.

01
The flex trick that kills most layout bugs
One line — min-width: 0 — and half your overflow problems go away. Here's why it works and when to reach for it.
02
Container queries: a real-world pattern
Forget breakpoints for component-level layout. Container queries let the component respond to its own space — not the viewport. Here's the pattern I've settled on.
03
Why I stopped using CSS resets entirely
Resets were a browser compatibility hack. In 2026, box-sizing: border-box and a handful of targeted rules is all you need.
04
CSS logical properties are worth the switch
margin-inline, padding-block — once you start writing direction-agnostic CSS, you won't go back.
// Quick tip from the trenches
If you're still reaching for parseInt() to convert strings in JavaScript — try the unary + operator instead. +"42" gives you 42. Shorter, faster, and it makes junior devs ask questions, which is always fun.

That's it for this week. If something was useful, forward it to a dev friend. If it wasn't — hit reply and tell me why. I read every response.

— Walt