Skip to main content

Quick Thoughts

Some quick thoughts on software development, AI, and startups.

Listenr CLI streaming real-time ASR transcriptions using Whisper-Tiny ASR model alongside gpt-oss-20b-mxfp4-GGUF.

DevelopmentAI

How I locally fine-tuned Whisper using my own voice data and some effort

Locally fine-tuning Whisper and ASR models with Listenr · Part 1

Off-the-shelf Whisper models are impressive but struggle with personal vocabulary, accents, and jargon not present in their training data. This post covers why standard open datasets fall short for personal fine-tuning and how I built Listenr to continuously capture and transcribe my own conversational audio as a training set.

Data Investigation ยท AutoTracko

News Sites Rely on American Surveillance Tech

After scanning news organizations across multiple countries, one finding was unmistakable: the overwhelming majority of tracker calls route through US-based corporations. Explore the interactive data investigation.

The OpenSCAD editor showing the script for a pipe reducer next to its rendered 3D preview.

TechnologyAI

LLM generated 3D modeling is the way to go

After hitting walls with FreeCAD, TinkerCAD, and Fusion 360, I discovered that scripting 3D models in OpenSCAD with an LLM produces precise, reusable parts faster than any GUI-based workflow I tried. Two prompts into ChatGPT, I had a working pipe reducer printed and in hand.

A graphic depicting a human developer collaborating with robotic elements, surrounded by code, symbolizing AI-assisted automation.

DevelopmentTechnology

Automate Everything: LLMs and Bash Scripts Mean Saved Time

Using LLMs to generate deterministic scripts rather than running real-time AI agents is a more reliable, testable, and repeatable approach to automation. This post explains the strategy, shares real examples from managing this blog, and covers how to keep the output production-ready.

A cartoon image of a laptop with a magnifying glass looking at a concern human using the machine

Research

Why do Canadian News Sites Track Me so Much?

After noticing CBC blocking 11 tracker domains in uBlock Origin, I built an automated tool to scan Canadian and international news sites and measure exactly how many trackers each one loads. The results reveal a pattern of aggressive, ad-network-driven data collection that goes well beyond basic analytics.

An illustration of a developer working alongside robotic arms in a library of code, representing the choice between a third-party library and AI-generated code.

TechnologyOpinion

Rethinking Library Dependencies in the GenAI age

Large language models are changing the calculus on when to reach for a third-party library versus generating a lightweight, purpose-built implementation. This post examines the tradeoffs and where a hybrid approach of GenAI-generated code refined by a developer makes the most practical sense.

A colorful cartoon-style digital illustration depicting a light-skinned developer working on a laptop surrounded by code snippets, emphasizing the theme of integrating hCaptcha into web applications.

Development

Using hCaptcha instead of Google's ReCaptcha with Vue and Express

hCaptcha is a privacy-respecting, drop-in alternative to Google ReCaptcha that actually pays you for serving its challenges on your site. This post shows how to integrate it into a Vue frontend and verify tokens server-side in Node with minimal code.

Development

Using Google's Captcha V3 with Express and Node

Google ReCaptcha V3 offers invisible bot detection that scores users without requiring puzzle challenges, and wiring it into an Express backend is straightforward once you understand the token verification flow. This post walks through the full frontend and backend integration with working code examples.

DevelopmentOpinion

Considerations when supporting a legacy software stack

Maintaining a legacy web application is a challenge most developers eventually face, where migrations are too costly, rebuilds are impractical, and doing nothing means a growing list of security risks. This post covers practical considerations for keeping aging stacks alive while keeping technical debt in check.

DevelopmentOpinion

Build a URL Shortener with Node + Mongo

Building a URL shortener is a great project for exploring real-world concerns like unique ID generation, database modeling, and abuse prevention. This post covers the core mechanics using Node and MongoDB, focusing on the counter-based schema design that keeps short IDs truly short.

DevelopmentOpinion

Building a Flask Application: Where to Start

Flask is a lightweight Python web framework that gets out of your way, but choosing the right supporting tools for your database, frontend, and dev environment is where the real decisions are made. This post walks through the key choices when building a full Flask application from scratch.