I’ve been really busy for the past few months. As I type, I’m using Google’s Antigravith IDE + Gemini Pro 3.1 to add features to PRZ, my personal MacOS app for showing me a list of pull requests to review, in the order I care about. It’s been a really exciting journey, but more on that later.

How It Started

My first real attempt at using AI to code something of value, was on a 12 hour flight, headed to Japan in the Summer of 2025. I prepped for the flight by downloading Ollama and a few smaller models onto my MacBook Pro (Gemma and Llama) for offline use. My first app, was a text based Wordle clone and it was a complete throwaway. I don’t have the source code and it only worked ok. It was super buggy, but it allowed me get a feel for crafting prompts to create things from scratch. It was kind of amazing that I was able to get something working with no internet connection.

I’ve used LLM-assisted coding tools before this. I’ve been using Github Copilot at work, built into my IDEs, Visual Studio Code and IntelliJ IDEA. It’s been monumental in helping me write boilerplate code, tests, and has even helped me migrate an internal app from an older UI framework to React.

The real unlock for me occurred when I returned home from my vacation and really began diving into various tools, prompting strategies, and models.

Vibing at Work

My first big unlock, writing bespoke scripts and tools that can assist me with some part of my day. At work, I’m a huge user of Gemini and Gemini CLI. We have access to approved tools. In my personal life, I use both just as heavily and I use Google’s Antigravity.

I work on a distributed system that generates a lot of data, think logs, messages, webhooks, etc. Sometimes chunks of this data needs to be analyzed, triaged, or sent somewhere else. Using LLMs 10x’d my output in this case. I compile some data and a prompt and off I go. For example (not the exact prompt) :

I have a CSV of JSON based callback messages that need to be re-transmitted to API X. Here is an example HTTP POST request. Please write a Python script that can resend these events. It should allow me to specify the file, replay rate, sleep time between requests, BASIC auth credentials, and an output fileusing command line arguments or .env file. Write up a README.md describing how I can use the app. Be sure to write tests to verify your logic.

Ten minutes later, with some back and worth, I had a script able to send thousands a messages, is reusable, and well documented. This has happened a few times at work, but it really paid off over the holidays.

The Label Maker

I try to send Christmas cards every year in an attempt to do adult things. In the past, I used a Google Sheets extension took my sheet full of addresses and produced a PDF I could use to print addresses onto Avery 5260 labels. My demo expired and I wasn’t sure I was ready pay real money again this year. Google’s Antigravity browser was just released, so in a curious attempt and using my Python-scripting-prompting-skills, I asked Gemini to produce something for me.

Hey, I need a Python script that processes a CSV of addresses (see @sample.csv for an example structure). Produce a Python script that produces a PDF containing addresses that can be printed on a sheet of Avery 5260 labels (30 per sheet).

It pretty much nailed it in one shot with no back and forth required.

Avery Label PDF Output

Github: Label Maker

How It’s Going

Arqstar

I’ve been working on a software product called Arqstar for five years.

Arqstar is workflow software designed to help HOAs automate the handling of architecture requests residents submit. It addresses a real pain point—if you want to paint your house or put up a fence, you usually have to submit a request and wait. It’s a paperwork-heavy process.

I’ve started and stopped this project more times than I care to admit. It started out as a TypeScript serverless app running on AWS Lambdas. Then, I rewrote it as a Node.js Express API with a React front-end. Then, naturally, I rewrote it again with Java, Spring Boot, and NextJS. This loosely reflected the trends I’d see at day job, with my project mix, and so it at least was a useful way to learn.

Just last year, I thought I was close to launching, when I wrote:

I’ve been working on a side project off and on for five years (since before COVID). I’m building a web app, Arqstar, that helps community HOAs take a paperwork-heavy process and move it into the digital world.

I had some code and it was kinda working, but it was incomplete. In December, I used Gemini 3 Pro in IntelliJ and Antigravity to rewrite the entire app from scratch. I acted as the Tech Lead, defining the architecture and the data models, while the AI handled the heavy lifting of the NextJS/Spring Boot stack.

It was over 50k lines of code. I didn’t just “one-shot” it; I iterated, brick by brick, verifying each layer as we went. I launched it six weeks later, working on it during nights and weekends.

Arqstar Landing

Arqstar

PRZ

This brings me to last night. Over the past few years, I’ve developed an algorithm in my head that dictates which pull requests I review first. I like to start with a few easy ones as a warm up before diving into some longer ones. I wrote, by hand, a Nodejs script that pulled all pull requests assigned to me (on Github) and using a few signals, gave each a score. The pull requests with a high enough score would get reviewed that day in the order of the score (descending order). The original script produced a list of links in my terminal window. I updated it create tasks in my todo app, Todoist.

A few days ago, I thought this should exist as a MacOS app. Last night, I prompted Gemini to build it.

In index.js I wrote an algorithm that script to help me prioritize pull requests. Prioritized pull requests are added to a todoist list. I need a new application I can run on MacOS that does the same thing, except instead of adding it todoist, I’d like the application to show a list of PRs in the correct order that I should review. It should be based on the same algorithm. Do some research on the existing code, what I can use to run on my Mac, etc. And come back with a plan we can chat about.

Over the next few interactions I specified the stack (Rust, Tauri, and NextJS) and added a few useful features. Thirty minutes later, I had an installable app!

PRZ

Github: PRZ

The Senior Filter

I know I make this sound like butterflies and unicorns, but there is a huge HOWEVER.

The code generated by these models, even the latest, like Gemini 3.1, isn’t always “Senior” quality. Left on own devices, it will duplicate logic, introduce weird performance bottlenecks, or get stuck in a loop fixing its own failing unit tests.

This is where the Senior Filter comes in.

My value in this new workflow isn’t that I can type faster than the AI; it’s that I can spot a bad pattern in milliseconds. I’ve been doing this since 2006 (oof). I know what a “clean” API looks like. I know when a component is getting too bloated or when an N+1 query is lurking in the background.

Building with LLMs is successful for me because I’m acting as the Editor-in-Chief. I’m not just accepting the first draft. I’m asking for refactors, I’m correcting the data models, and I’m steering the architecture. I’ve traded my chisel for an excavator, but I still have to be the one who knows exactly where to dig the hole.

So Now What

My current AI stack:

  • GitHub Copilot (work)
  • Gemini CLI (work and home)
  • Google Antigravity
  • IDEs with built in AI integrations, IntelliJ, VS Code, and Android Studio

I want to do somethings with Claude Code next.

It’s a really good time to be a software builder AND have a stack of ideas for products and experiments to iterate on. I have an Android and iOS app, TallyCam - A Camera App for Fencing, that I’m building. In some ways, it’s more complicated than a simple web or desktop app. It’s capturing video, rendering overlays, and some tricky UX problems to work through. It feels like I can get to a solution a lot quicker with the new tools at my disposal.

With that said, the barrier to entry, the “Syntax Tax”, is gone**. All that’s left is the quality of your ideas, your ability to steer the tools, and your ability to learn. I’ll continue to lean into my senior experience to ensure that what I build isn’t just fast, but right.

** It’s gone as a barrier, but it’s not forgotten. While Gemini wrote a large portion of PRZ & Arqstar, I combed through the code and documentation to understand how Tauri and NextJS works. I’m a better developer for it.

🧇