RSSAmplifier

Blog

Blog | www.joshfinnie.com

The personal/professional website of Josh Finnie.

joshfinnie.comRSS feed ↗112 posts

Latest posts

I Gave Up tmux and Zellij for Herdr

After years of tmux and a recent stretch running Zellij, I replaced both with Herdr, a background runtime built around keeping AI coding agents alive across reboots. Here is why I switched and how I configured it.

What Impeccable Found When I Pointed It at My Own Blog

I used Impeccable, a design skill for Claude Code, to document this blog's actual design system and then critique it against its own rules. Here is what it caught, from a shadow rule three components were quietly breaking to a blog index rendering ten H1 tags on one page.

Deleting My Copy-Code Component for Expressive Code

A few months ago I hand-rolled a copy-to-clipboard button for my code blocks. This summer I threw it away and let astro-expressive-code do that job and the ones I never got around to. Here is what the swap looked like.

Trading ESLint and Prettier for Biome

A while back I added ESLint and Prettier to this blog. This year I pulled both out and replaced them with Biome, a single Rust-based tool that formats and lints in one pass. Here is why, and what the switch actually looked like.

Setting Up the standard.site Protocol on This Blog

How I wired this Astro blog up to standard.site, the AT Protocol lexicon for long-form publishing, with a well-known file, a single head tag, and a sync script that does the boring work.

The XTEINK X4 Gets Good the Moment You Wipe It

The XTEINK X4 is a $69 credit-card-sized e-reader whose factory software does not deserve the hardware. Here is the ten-minute fix and what we learned living with it for a few weeks.

I Built a Terminal Diff Viewer for Working with Claude Code

diffai is a terminal diff viewer with inline commenting, built specifically for the two-pane workflow of reviewing code changes alongside Claude Code.

What I Put in Every Go SaaS Before Writing a Single Feature

A walkthrough of kairgos, a Go SaaS skeleton with multi-tenancy, async AI inference, JWT rotation, and a background worker — built before a single business feature ships.

Product Ready Full Stack Rust

Part 6 of building a full-stack URL shortener in Rust. We serve the Yew frontend from Axum, Dockerize the whole thing, and deploy to Shuttle.

Front End Development with Yew.rs

Part 5 of building a full-stack URL shortener in Rust. We build a Yew.rs frontend that compiles to WebAssembly and talks to our Axum API.

Django Authentication & Deployment

In the final part of the Django Bootcamp, we add user authentication with Django's built-in auth system and deploy our bookmark manager to production with Railway.

Building a Cozy Terminal Fire in Rust

How I built firesym, a terminal fire simulation based on the DOOM PSX fire algorithm, using Rust and ratatui.

Authentication in a Full-Stack Rust

Part 4 of building a full-stack URL shortener in Rust. We add API key authentication using Axum middleware and Tower layers to protect our write endpoints.

Django Views & Templates

In this beginner-friendly guide, we build out the views and templates for our bookmark manager — listing bookmarks, viewing details, creating new ones, and deleting them.

Error Handling & Validation in Rust

Part 3 of building a full-stack URL shortener in Rust. We add custom error types, URL validation, and structured JSON error responses to our Axum API.

Models & the Django Admin

In this beginner-friendly guide, we define our bookmark model, run database migrations, and explore Django's built-in admin panel to manage our data.

You Can't Afford a House, But Sure, Blame the Avocado Toast

The avocado toast discourse isn't just stupid. It's a symptom of a story that wealthy societies tell themselves to avoid reckoning with how wealth actually works.

Why Is It So Hard to Find a Software Engineering Job Right Now?

The software engineering job market in 2025 and 2026 is broken in ways that are new and strange. Here's what's actually happening, and what to do about it.

Persisting Data with sqlx and SQLite

Part 2 of building a full-stack URL shortener in Rust. We swap our in-memory HashMap for SQLite with sqlx, write migrations, and persist URLs across restarts.

Creating Your First Django Project

In this beginner-friendly guide, we create our first Django project, explore its file structure, and build our first view to display a page in the browser.

Writing Python Docstrings Effectively

A practical guide to writing Python docstrings effectively, covering the __doc__ attribute, help(), Google, NumPy, and Sphinx styles, choosing the right structure, avoiding common mistakes, and generating docs with Sphinx, pydoc, and MkDocs.

Setting Up AWS SES with a Custom Domain

AWS SES is one of the most cost-effective ways to send transactional email, but getting it configured properly takes a few non-obvious steps. Here's the complete walkthrough.

Adding a Copy Code Button to My Astro Blog

A step-by-step walkthrough of how I added a copy-to-clipboard button with a language label to every code block on my Astro blog using a single component and no external libraries.

Building a Full-Stack Rust Application

Part 1 of building a full-stack URL shortener in Rust. We set up an Axum backend with in-memory storage, CRUD routes, and a nanoid-based slug generator.

Getting Started with Python for Web Development

This beginner-friendly guide covers the basics of Python, setting up virtual environments, installing pip, and why Django is the best choice for building powerful web applications.

My Top 20 Albums of 2025

A look back at the albums that defined my year, from experimental hip-hop to art rock to electronic pop.

MIT's $1.2 Trillion Iceberg

Examining the MIT Iceberg Index's claim that AI could replace 11.7% of U.S. wages, and why the real-world execution of mass replacement is unlikely to succeed.

Why I Switched From Tex Live to Tectonic

Slash your LaTeX Docker build times by 85% and reduce image sizes by 95%! Learn how switching from TeX Live to Tectonic transformed my containerized LaTeX workflow with faster builds and leaner images.

The Fatal Flaw in Silicon Valley's AI Gold Rush

Tech giants are investing $400 billion in AI infrastructure while cutting thousands of jobs. This analysis explores the economic contradiction at the heart of automation: why replacing workers with machines may undermine the very source of profit, threatening both value creation and consumer demand in capitalism's latest transformation.

Amazon's AI Layoffs: A Marxist Analysis of Automation and Class Power

Amazon blamed AI for cutting 30,000 jobs while posting record profits and raising CEO pay 37%. We break down the Marxist economics behind tech layoffs: how automation intensifies worker exploitation, why the "AI made us do it" narrative hides class warfare, and what the Luddites can teach us about who really benefits from technology. This is surplus value extraction with algorithmic cover.

ASTs Explained: How Abstract Syntax Trees Fix the Chaos of Resume Parsing

Discover how Abstract Syntax Trees (ASTs) solve the format chaos of traditional resumes, turning unstructured documents into reliable, structured data for programmatic generation and analysis.

Rubber Duck Debugging: The Simplest Developer Tool You Are Not Using Enough

Discover how rubber duck debugging can transform your coding experience. Learn why explaining your code to a simple rubber duck is one of the most effective troubleshooting techniques that experienced developers swear by. This practical guide shows how verbalizing your code helps identify bugs faster than traditional debugging methods.

Building a Word Count Tool in Rust: Step-By-Step

Learn how to build a word count command line utility in Rust from scratch. This step-by-step guide shows you how to create a functional wc tool that counts lines, words, and bytes in files. Perfect for Rust beginners and those interested in command line tools, this tutorial covers argument parsing with clap, file handling, and test-driven development to create reliable utilities for text…

FastAPI and React in 2025

A step-by-step guide to building modern web applications with FastAPI and React in 2025, featuring Vite for faster development and UV for improved Python package management.

Revealing Gender Bias in AI Models

Reposting a paper I did for my UMGC AI Ethics class. It was an interesting exploration into inherent biases in AI models. I reviewed both ChatGPT and Gemini and wrote about the results.

15 Years of Blogging

I noticed while checking my copyright date that I have been blogging for 15 years now. I thought it would be an interesting time to write a bit of a retrospective.

Music of 2024

A brief review of the music I found and fell in love with across all of 2024.

Adding ESLint & Prettier to My Blog

I recently took some time to add ESLint and Prettier to my Astro blog. Here an easy todo to follow and some of my lessons learned.

Review of Buildspace Nights & Weekends

I recently finished Buildspace Nights & Weekends. This is my review.

Adding json-ld To My Blog

In this blog post, we talk about what JSON-LD is and how I implemented it on my Astro.build blog. It was quick and easy; definitely worth a look!

Trying out HTMX with Rust

In this blog post, we walk through building an example app with Rust, Axum and HTMX. This is really cool and a simple way to build web apps. No Javascript framework needed.

Switching to PNPM for Everything Node.js?

In this blog post I talk about my exploration in switching to using PNPM everywhere instead of NPM and NVM.

Unleashing the Power of Python Collections

A deep dive into Python's Collections module. There's a lot of helpful tools there that everyone should know about!

Creating a vCard QR Code in Python

24 Hours with Threads by Instagram

I have been playing around with Threads by Instagram for about 24 hours, it's surprisingly good.

Follow Up: Building a Command-Line Application in Rust

A Quick Review of Spotify's AI DJ

I took a week to listen to Spotify's AI DJ. This is my quick review of it. How'd it work? Did I like it?

Astro Experimental Image and MDX Update

This blog post we discuss the process of adding both MDX support and Astro.js Experimental Asset support. We describe step-by-step the process I took to adding each to this exact blog.

My 2023 Job Search Journey

A brief review of my job search journey in the 2023 market. I applied to over 150 jobs and it was exhausting!

Creating a "Similar Posts" Component in Astro.js

This blog post shares my Astro.js component to share similar posts to readers. It's nice, simple and gives an extra layer of discoverability to my readers!