A short guide to organizing FastAPI apps beyond a single main.py file. FastAPI makes it easy to start with a single main.py file. That is great for demos, prototypes, and small APIs. But once your application grows, one file can quickly turn into a mix of routes, database logic, security helpers, settings, and business rules. A clear project structure helps keep the app easier to understand, test,
How to Use the OpenWeatherMap API in a Firefox Extension Weather data is one of the most commonly requested features in new tab extensions. The Weather & Clock Dashboard uses OpenWeatherMap's free tier. Here's a complete guide. Sign up at openweathermap.org — free tier allows 60 calls/minute, 1M calls/month Go to API keys in your account dashboard Copy the default API key (or create a new one) K
The setup I was building an AI article generator. Four phases: Research — pull live SERP data, extract entities, score competitors Brief — Claude Sonnet writes a structured brief from the SERP Draft — section-by-section drafting in a fixed persona voice Polish — adversarial review pass that flags AI tells End-to-end: 6–8 minutes. Each phase: 60–180 seconds. Multiple LLM calls per phase. Token st
Firefox Extension Manifest V3 vs V2: What Actually Changed If you've been following Chrome's controversial Manifest V3 migration, you might be wondering: does Firefox have the same MV3? The answer is: yes and no. Firefox has its own implementation of Manifest V3, and it's meaningfully different from Chrome's. Firefox MV3 supports both MV2 and MV3 extensions Firefox's MV3 is less restrictive than
Handling Offline Mode in Firefox Browser Extensions When building extensions that depend on network data — like my Weather & Clock Dashboard — offline handling is critical. Users notice immediately when your extension shows stale data or broken UI. Browser extensions run at browser startup. If the user is on a train, airplane, or just has spotty WiFi, your fetch calls will fail. Without proper h
[Day 1] DGX Spark Came Home — I Made It Draw a Cat So... what is "local LLM" again? Honestly, I'm still figuring out what "local LLM" even means. But somehow, through a series of decisions I won't fully justify here, I ended up buying an NVIDIA DGX Spark — and now it's sitting in my house. DGX Spark: NVIDIA's "supercomputer for the home" — a small but seriously expensive box with the
How I Automated Firefox Extension Screenshots for AMO Listings One of the most tedious parts of publishing to Mozilla's Add-On Observatory (AMO) is creating consistent, high-quality screenshots. After publishing the Weather & Clock Dashboard extension, I wanted a repeatable process for capturing screenshots automatically. AMO requires screenshots in specific dimensions (typically 1280×800 or sim
I read Nate Herk's "I Tried 100+ Claude Code Skills. These 6 Are The Best" today. He converged on 6 meta-tools (Skill Creator, Superpowers, GSD, Context Mode, Claude Mem, plus Frontend Design as a bonus) for the agency dev who builds automations for clients. I converged on a different 6 — for the indie hacker who's shipping their own product. Same number, different layer. Here's what they are, and