How to make a scroll-driven video animation with FFMPEG, WebP frames, and canvas
How I turned a short video into a scroll-controlled WebP frame animation using FFMPEG, canvas, an...
Notes on software, tools, productivity, and the small operational hazards of trying to make useful things.
How I turned a short video into a scroll-controlled WebP frame animation using FFMPEG, canvas, an...
How to add a custom Buttondown signup form to a Jekyll blog without exposing API keys or building...
A quick overview of this past weekend's workflow for making short AI-generated videos with Gemini...
Why AI-generated content can feel exhausting, and what that means for reading, writing, and atten...
Reflections on McLuhan, Postman, and why the medium still has a habit of quietly eating the message.
How Pinia simplifies Vue state management for location and language settings compared with manual...
How to deploy a Nuxt 3 frontend with Firebase Hosting and Firestore-backed data.
How to style Jekyll code blocks with Rouge instead of leaving snippets to fend for themselves.
How to build a reusable pagination component in Vue for cleaner list navigation.
How to test Firebase Cloud Functions locally with the Firebase emulator suite.
A quick setup guide for using Tailwind in a Nuxt project.
A quick look at using DaisyUI with Tailwind to move faster without hand-rolling every component.
Why Tailwind can drop dynamic classes and how to use a safelist when generated class names disapp...
A practical review of Stay Resort in Phuket, covering the fitness setup, location, price, and whe...
How to deploy a Nuxt app on Vercel, including preview builds and common dependency issues.
How to use cookies and server middleware in Nuxt for lightweight API route guards.
Notes from getting a Thai driver license, including the process, requirements, and practical gotc...
A personal reflection on chasing calm in a society that keeps handing you more inputs.
A short migration note on moving a Vue project from Vue CLI to Vite for faster local development.
How to reset Firebase user passwords with the Firebase SDK and a small admin workflow.
A location-scouting note on Thailand, tourism, and the strange geography of influencer culture.
How to persist Vue user settings with localStorage and keep the interface in sync.
How to generate QR codes in a Vue app using JavaScript libraries and reusable components.
A short note on breathwork as a simple habit for regulating stress and attention.
How to call OpenAI from a Vue frontend through a cloud function instead of exposing secrets in th...
How to generate CSV exports from Vue and Firebase using a cloud function.
A Dart note on why set equality may not behave the way you expect.
A small Dart trick for removing duplicates from collections with sets.
Notes from building a 50-day meditation habit and what changed once the novelty wore off.
A comparison of e-readers and physical books, with notes on convenience, focus, and reading habits.
A practical list of keyboard shortcuts that save time once they become muscle memory.
How to render Google Sheets data on a Mapbox map using a cached backend flow to avoid CORS and ru...
Three productivity books that were actually useful, plus what stuck after reading them.
Desktop rules and habits that helped me keep files, browser tabs, and visual clutter under control.
A simple risk-analysis method for making decisions under uncertainty.
The portable work setup I use to stay productive without carrying half an electronics store.
Tools and habits that helped me stay consistent while learning to code, without pretending motiva...
How to add a small form to a static site using Netlify Forms without building a backend.
How I organized an image library to reduce clutter and make old photos easier to find.
Visual VSCode extensions that make the editor easier to use without turning it into a casino.
How to deploy a Jekyll blog with GitHub and Netlify for a simple automated static-site workflow.
A beginner-friendly walkthrough for creating a static blog with Jekyll, Liquid, Markdown, and sim...