← Lorenzo Ventures.
Case study · MODA
contact@lorenzoventures.co
Case studyBuilding Moda with an AI agent teamFeb — Sep 2026

One founder. Eight agents.An app on Apple’s doorstep.

How Moda went from a chat-assisted prototype to an App Store submission — and what it actually takes to let agents ship: the rules, the failures, and the handful of decisions only a human made.

  1. Feb 18, 2026
    First commit
  2. May 18
    Fleet charter and circuit breakers written
  3. May 20
    57 pull requests merged in one day
  4. Jun 3
    Four-tab navigation decided. Merge deadlock found the next day
  5. Jul 17
    Build-freshness guard shipped
  6. Sep 6
    Apple asks for more information
  7. Sep 27
    Moda 1.0.0 approved and live on the App Store
  8. Sep 14
    Design system v1 frozen. 40 PRs merged
  9. Now
    Live on the App Store in 175 territories

Start here

A green build, refused

Pull request #913 changed the colour tokens on a small confidence badge. Typecheck passed. Lint passed. All 2,210 tests passed. The PR body listed its contrast ratios, and they cleared WCAG AA.

Pix — the vision agent that doubles as the fleet’s design-QA judge — rejected it. The label doesn’t sit on bare surface; it sits on a 12% tint composited over the surface, and the author had computed the ratios against the wrong background. Recomputed against the tint, the medium-confidence label came out at 4.40:1. AA needs 4.5.

Pix asked for changes. Stitch dropped the tint from 12% to 10%. Mo merged the second round. No human looked at that badge — which is the point of everything that follows.

Phase one

The chat era

Moda began the way most AI-assisted projects begin now: a founder, a day job, ChatGPT for thinking, and Cursor for writing code. First commit, February 18, 2026.

It worked — until it didn’t. Chat tools are powerful but stateless. Every session started from zero: re-explaining the codebase, re-establishing conventions, re-discovering decisions already made. The founder was the memory, the router, and the bottleneck. Progress moved exactly as fast as one person’s free evenings.

Phase two

The agent team

In May 2026 the chat workflow was replaced with a team of autonomous agents, each with a name, a role, a schedule, and its own git worktree. The charter and its circuit breakers were written on May 18. Two days later the team merged 57 pull requests in a single day.

  • Product managerMo

    Reads every PR in review, checks CI, waits for the design-QA verdict, merges to develop, posts the 5:00 PM standup. Never merges to main.

    Hourly, 9 AM – 9 PM ET
  • FrontendStitch

    Screens, components, theme tokens, hooks. Owns everything the user sees.

    Hourly at :15
  • BackendLoom

    Database migrations, row-level security, edge functions, query performance.

    Hourly at :30
  • Vision & design QAPix

    Photo intake: auto-tagging, background removal, batch import. Also the fleet’s design-QA judge — 244 review verdicts and counting.

    Hourly at :45
  • Release & infraAtelier

    CI, EAS builds, Sentry, App Store Connect tooling, submission artifacts.

    Hourly at :05
  • Intelligence & specsMuse

    Outfit compatibility, affinity and insight logic. Writes the design specs and does the contrast arithmetic.

    Every 4 hours
  • EngagementBell

    Local notifications: the morning dress-me prompt, wear reminders, streak-at-risk nudges.

    Weekdays, 9:40 AM
  • MonetizationCoin

    Paywall and subscription wiring. Consumes the pricing spec; never writes it.

    Daily, 10:35 AM
  • HumanFounder

    Sets direction, makes product calls, approves builds and releases. The only person on the team.

    Nights and weekends

Three more agents sit outside the build line: a weekly competitor researcher that never touches app code, a draft-only marketing agent that never posts, and a chief-of-staff agent that relays the founder’s decisions into Mo’s inbox.

The line

How a pull request moves from a task on the board to code on develop — around the clock, without anyone watching.

  1. 01→
    Claim

    An agent wakes on its schedule, takes the highest-priority open task from a shared board, and marks it claimed. An empty queue is a normal outcome, not an error.

  2. 02→
    Branch

    Work happens in the agent’s own git worktree on a dated branch. Nobody touches anyone else’s checkout.

  3. 03→
    Pull request

    The PR targets develop with a body that shows its proof — measured, not estimated. A PR whose proof is an estimate gets sent back.

  4. 04→
    CI gate

    Typecheck, lint, 2,210 tests across 278 suites, and an Expo config check. Fifteen-minute budget.

  5. 05→
    Design QA

    If the PR touches UI, Pix must post an approved verdict first. CI-green is not enough.

  6. 06→
    Merge

    Mo merges to develop — unless the PR is over 15 files or touches migrations, dependencies, or app config. Those wait for the founder.

  7. 07→
    Chain

    A watcher sees the status change and wakes the next agent within minutes instead of waiting for its next hourly slot.

The rules

Six circuit breakers

Autonomy is only useful with hard limits. These were written before the first agent ran, and every one of them has fired.

  • CB-1Four tasks per agent per day.
  • CB-2A task claimed three times without a merge is auto-blocked for a human.
  • CB-3No auto-merge over 15 files, or touching migrations, dependencies, or app config.
  • CB-4Database migrations need an explicit approval flag on the task.
  • CB-5One environment variable stops the whole fleet.
  • CB-6No merge to develop in 48 hours raises an alert — an alert, not a stop. A silent full-stop is what stalled the team once; surface loudly and keep running.

What broke

Four failures, all logged by the agents themselves. Each one changed a rule.

June 1

Thirteen days of silence

Mo had been idle for thirteen days. Its token was valid; its git remote had been re-pointed at a repo it couldn’t reach, from one stale line in a memory file. The fix was one line.

Every agent’s prompt now names the canonical repo.

June 4

Everyone healthy, nothing shipping

All seven agents fired hourly with status OK, and throughput was near zero. Five green PRs were parked behind an approval rule that notified no one, agents abandoned their own red PRs to claim new work, and five of seven had nothing claimable.

Three policy changes: auto-merge green PRs to develop, fix your own red PR before claiming, restore the hourly cadence.

July 28 – 30

The alarm that buried the message

A drift check refused to auto-fix a dirty tree and posted the refusal to Discord. It did that 155 times over 39 hours with no dedup. Ninety-four of those posts buried the standup carrying the one-word App Store go-ahead the team was waiting on — and Mo then logged the silence as “awaiting founder”.

From Mo’s own post-mortem: “the human hasn’t responded” is a claim about a channel, so check the message is still readable before concluding anything about the human.

July 3

The crash that survived six fixes

The add-item flow crashed on TestFlight builds and only there. Dev builds never reproduced it, which is exactly why it slipped three cycles. The sixth diagnosis found the flag meant to strip a native module never stripped anything, so the guard in front of it always passed.

Two fix-verification playbooks came out of it. Now a fix isn’t done until it’s reproduced on the build that failed.

The human

What only the founder does

The founder doesn’t write code anymore. The job is deciding, and the decisions have timestamps.

Jun 3
Four tabs: Home, Wardrobe, Planner, Wishlist. Profile is a header action, not a tab. The agents had found the wishlist fully built with no way to reach it, and were told not to fix it — an unmade product decision isn’t a bug.
Sep 14, 8:09 AM
Design system v1 approved and frozen.
Sep 14, 9:25 AM
One create entry point: the tab-bar centre button. No corner buttons. Same morning.
Sep 6 → now
Apple returned the submission with a six-item information request — no defect, no crash, just a new developer account. Mo drafted five of the six answers, paste-ready, four days later. The sixth is a screen recording on a physical iPhone. Only a human can hold the phone.

What shipped

All numbers pulled from the repo, CI, and the task board on September 15, 2026 — nothing estimated.

902

merged pull requests — the overwhelming majority authored, reviewed, and merged by agents. The top git author on the repo is an agent.

704

tracked tasks across design, engineering, QA, release, and App Store operations. 659 done.

2,210

tests across 278 suites — written and maintained by the same agents that write the features

57

PRs merged in a single day at peak (May 20). 40 on September 14.

244

design-QA verdicts on UI pull requests, each measured against the real screen

Feb → Sep

idea to App Store submission, nights-and-weekends founder time only

In the app · From the App Store listing
MODA wardrobe grid screen
MODA home screen
MODA outfit planner screen
MODA wardrobe stats screen

Outcome

What actually changed

The shift wasn’t speed alone — it was continuity. Agents hold context across sessions, so decisions stick, and the board remembers what a tired founder would forget.

Quality became systematic instead of heroic. A green build is refused when a title sits a few points left of centre, or a contrast ratio was computed against the wrong background. The failures were real, and each one turned into a rule the agents now enforce on themselves. And the founder’s job changed from typing code to making decisions — which is the only part that ever required him.

Chat tools made one person faster. Agents made one person a team.

2,210 tests. 900+ pull requests. One human.