Projects and how they're built

Two shipped products and the agents I build at work. The dots in the diagrams are requests moving between the parts.

MyCoffee

A coffee shop discovery and review app. Live on the App Store, active on Google Play. 2026.

The MyCoffee app: a home screen showing a monthly summary and recent coffee reviews, and the log-in screen, over a photo of a barista making coffee. Mobile appReact NativeBack endNetlify FunctionsDatabaseSupabase, row-level securityShop discoveryGoogle Places APIOwner advisorAnthropic Claude API
  • Data: relational database with row-level security policies.
  • Discovery: Google Places API integration for finding shops.
  • Owners: tiered plans with analytics, QR code tools and an AI advisor built on Anthropic's Claude API.
  • Engagement: a Coffee Passport with location-based challenges and badges.

ratemycoffee.app

A personal finance app

Private, because it uses real data. Built in about ten weeks and in daily use.

Web appReact 19Back endNetlify FunctionsDatabaseSupabase Postgres, RLSBank tokensseparate tableBank syncPlaidLocal AI model on a Mac miniCategorizes, summarizes, models tax scenarios. Data stays local.
10weeks to build, about
116commits
13klines of code, about
160automated tests, about
  • Bank sync: I applied to Plaid for API access myself, then worked with Claude Code to wire it in, making the setup and security decisions along the way.
  • Access: role-based, enforced with row-level security. Bank tokens live in a separate table.
  • AI: a local model categorizes transactions, summarizes spending and models tax scenarios, so financial data never goes to a cloud AI service.
  • Features: net worth, loan amortization, cash flow, taxes, spending and multi-scenario forecasts, duplicate detection.

AI agents for the software development lifecycle

Built at work. Three agents and nine skills, run in the GitHub Copilot desktop app.

I created each agent and the skills it can use. Together they cover project management, technical analysis and business analysis, and a skill can build on what another produced, such as the project package that a smoke test checks a feature branch against.

Project Management Agent

  • Create project package
  • Create project charter
  • Create meeting summary
  • Generate current project summary

Technical Analyst

  • Create current state from GitHub code

Business Analyst

  • Create work item structure
  • Create work items (features and user stories)
  • Review user story against the code base
  • Smoke test feature branch against project package

There is governance around it. I set up the plugin repository in Azure DevOps Git with proper environments, and changes reach the agents only through a pull request.

How changes reach the agents Source code is saved in the Azure DevOps repository. Changes are made on a staging branch. An approved pull request merges them into the main branch. The agents run in the GitHub Copilot desktop app. staging branch main branch pull request approved Plugin repoAzure DevOps Git Copilot desktop appwhere the agents run 1234
  1. Source code is saved in the Azure DevOps repo.
  2. Changes are made on a staging branch.
  3. A pull request gets approved and the changes merge into the main branch.
  4. The Copilot desktop app is where the agents run.

The SDLC page shows where each piece fits.

Mockups and prototypes

Made before development starts.

I use AI to build working mockups of layouts and logic, so requirements are concrete before a developer writes a line. People react to something real, and the rules behind each screen are written down next to it. These three are sample wireframes of the kind I make: a form, a dashboard and a mobile screen, with numbered notes for the logic.

Wireframe of a request intake formA request form with a four-step status bar, three input fields, an attachment area and a submit button.New requestRequestReviewApproveDoneRequesterItem neededReasonAttachSubmit123
Request intake form
  1. Required fields are checked as the person types.
  2. Submit stays disabled until the form is valid.
  3. The status bar tells the requester where the request is.
Wireframe of an approvals dashboardA dashboard with a filter sidebar, three summary boxes and a table of requests with one highlighted row.Filters123
Approvals dashboard
  1. Summary boxes count requests by status.
  2. Overdue rows are highlighted so they get picked up first.
  3. Filters change the table immediately.
Wireframe of a mobile approvals screenA phone screen with a list of request cards, each with approve and reject buttons, and a bottom navigation bar.Approvals123
Mobile approvals
  1. Approve or reject in one tap, without opening the request.
  2. Each card shows what it is waiting on.
  3. Bottom navigation keeps the main views one tap away.