All Posts
Notes on software, tools, productivity, and the small operational hazards of trying to make useful things.
Apr 26, 2026
How I turned a short video into a scroll-controlled WebP frame animation using FFMPEG, canvas, and vanilla JavaScript.
Apr 26, 2026
How to add a custom Buttondown signup form to a Jekyll blog without exposing API keys or building a backend.
Apr 19, 2026
Why AI-generated content can feel exhausting, and what that means for reading, writing, and attention.
Jan 6, 2025
Reflections on McLuhan, Postman, and why the medium still has a habit of quietly eating the message.
Mar 13, 2024
How Pinia simplifies Vue state management for location and language settings compared with manual localStorage listeners.
Feb 14, 2024
How to deploy a Nuxt 3 frontend with Firebase Hosting and Firestore-backed data.
Feb 12, 2024
How to style Jekyll code blocks with Rouge instead of leaving snippets to fend for themselves.
Feb 11, 2024
How to build a reusable pagination component in Vue for cleaner list navigation.
Feb 3, 2024
How to test Firebase Cloud Functions locally with the Firebase emulator suite.
Jan 10, 2024
A quick look at using DaisyUI with Tailwind to move faster without hand-rolling every component.
Jan 8, 2024
Why Tailwind can drop dynamic classes and how to use a safelist when generated class names disappear.
Dec 4, 2023
A practical review of Stay Resort in Phuket, covering the fitness setup, location, price, and whether the stay is worth it.
Oct 3, 2023
How to deploy a Nuxt app on Vercel, including preview builds and common dependency issues.
Sep 23, 2023
How to use cookies and server middleware in Nuxt for lightweight API route guards.
Sep 11, 2023
Notes from getting a Thai driver license, including the process, requirements, and practical gotchas.
Aug 1, 2023
A personal reflection on chasing calm in a society that keeps handing you more inputs.
Jun 28, 2023
A short migration note on moving a Vue project from Vue CLI to Vite for faster local development.
Jun 13, 2023
How to reset Firebase user passwords with the Firebase SDK and a small admin workflow.
Jun 10, 2023
A location-scouting note on Thailand, tourism, and the strange geography of influencer culture.
Jun 1, 2023
How to persist Vue user settings with localStorage and keep the interface in sync.
May 29, 2023
How to generate QR codes in a Vue app using JavaScript libraries and reusable components.
May 25, 2023
A short note on breathwork as a simple habit for regulating stress and attention.
May 24, 2023
How to call OpenAI from a Vue frontend through a cloud function instead of exposing secrets in the browser.
May 22, 2023
How to generate CSV exports from Vue and Firebase using a cloud function.
May 17, 2023
A small Dart trick for removing duplicates from collections with sets.
Jul 5, 2020
Notes from building a 50-day meditation habit and what changed once the novelty wore off.
Jul 1, 2020
A comparison of e-readers and physical books, with notes on convenience, focus, and reading habits.
Jun 28, 2020
A practical list of keyboard shortcuts that save time once they become muscle memory.
Jun 24, 2020
How to render Google Sheets data on a Mapbox map using a cached backend flow to avoid CORS and runtime surprises.
Jun 21, 2020
Three productivity books that were actually useful, plus what stuck after reading them.
Jun 17, 2020
Desktop rules and habits that helped me keep files, browser tabs, and visual clutter under control.
Jun 14, 2020
A simple risk-analysis method for making decisions under uncertainty.
Jun 10, 2020
The portable work setup I use to stay productive without carrying half an electronics store.
Jun 7, 2020
Tools and habits that helped me stay consistent while learning to code, without pretending motivation is a stable resource.
Jun 3, 2020
How to add a small form to a static site using Netlify Forms without building a backend.
May 31, 2020
How I organized an image library to reduce clutter and make old photos easier to find.
May 27, 2020
Visual VSCode extensions that make the editor easier to use without turning it into a casino.
May 24, 2020
How to deploy a Jekyll blog with GitHub and Netlify for a simple automated static-site workflow.