MyBlueBerry

Field notes · Post 1 of a series

I shipped an iOS app on paternity leave, with Claude

MyBlueBerry is a baby tracker for iPhone. I built it in under ten weeks with Claude Code, in a language I had never used, and it's live on the App Store. This post is the numbers.

Amool · July 2026 · ~8 min read

The tracker app we used after our baby arrived needed seven taps and a network round trip to log one feeding. Offline it didn't work at all. And every entry about my kid was stored on someone else's server.

I'm a backend engineer. I've built distributed systems in big tech my whole career — and never shipped a single product of my own. No app with my name on it, no public writing. So I set two goals for my paternity leave, both firsts:

  1. Ship a product to real users.
  2. Write about it in public.

You're reading goal #2. Goal #1 is MyBlueBerry, live on the App Store. Making money was explicitly not a goal.

Why now

Three things lined up:

Why native iOS, and why Swift

The requirements were fixed before any technology discussion:

A web app fails the first requirement. React Native could get close, but the things I wanted — CloudKit sync, a Live Activity on the lock screen — are native APIs anyway. Native Swift was the straightforward answer.

I had never written a line of Swift or SwiftUI, and I'd never built a UX-heavy app of any kind — my career is backend. I kept Swift because I didn't know it. If the experiment was going to mean anything, it had to run where I couldn't fall back on experience. What I actually brought to the project: I'm the target user's parent, and I know how software gets built.

The experiment: every hat

The real question wasn't whether Claude can write Swift. It was whether one person and an agent can cover every role a product team has:

Researcher UX designer Product manager Architect Developer Tester Marketer Monetization

Research on what parents complain about in existing trackers; UX specs with tap budgets; product decisions about what ships and what waits; the architecture calls; all of the Swift; automated test suites plus manual testing; App Store screenshots and copy; and a pricing model I built mostly to learn how App Store monetization works.

The architect hat deserves a word, because it's the one that transferred straight from my day job. I couldn't write the Swift, but a career of backend systems meant I could reason about sync topologies, data ownership, and migration safety — and the project needed that repeatedly. I had Claude consolidate two persistence engines into one when co-parent sharing demanded CloudKit's native share machinery; tear out a QR-code invite system and rebuild invites around owner-held state; and re-root the whole family data model after device testing disproved the first sharing design. In the charts below that work files under Developer — architecture rides the same branches as the code that implements it — but the decisions weren't Swift knowledge. They were systems judgment.

I wanted to measure this, not just claim it. Every Claude Code transcript records which git branch the work happened on, and my branch names encode the role — feat/, fix/ and refactor/ are development, docs/ branches hold specs and validation plans, design/ is UX and research, site/ and the marketing branches are marketing, and so on. Classifying every transcript record by its branch gives a per-session picture of where the time went. It's in the charts below.

The numbers

I kept everything: the Claude transcripts, the git history, the CI logs. Every figure below comes from the JSON data block embedded in this page's source, which was in turn computed from those artifacts. One caveat up front: the first commit is May 8, but the preserved transcripts start June 11 — the first month of sessions wasn't kept, so every conversation stat undercounts the project.

weeks
9.5
May 8 → Jul 13, 2026
commits
477
593 tracked files
lines of Swift
64,286
across 436 files
test-to-code
~1 : 1
31,339 test · 32,947 app lines‡
Claude sessions†
10
Jun 11 → Jul 13
of transcripts
1.0 GB
117,733 records
model responses
12,077
Opus 4.8 + Fable 5
tool calls
4,404
edits, builds, tests, searches
subagents
225
spawned by Claude
lessons memorized
61
in Claude's memory bank
CI runs
580
4 GitHub Actions workflows
TestFlight deploys
3 of 18
first success on run 9

Commits per day

477 commits, May 8 – Jul 13. Empty slots are days with no commits.

03570May 8: 2 commitsMay 18: 5 commitsMay 19: 15 commitsMay 20: 4 commitsMay 21: 6 commitsMay 22: 6 commitsMay 27: 3 commitsMay 28: 15 commitsMay 29: 19 commitsJun 10: 22 commitsJun 11: 66 commitsJun 12: 53 commitsJun 13: 28 commitsJun 14: 65 commitsJun 15: 16 commitsJun 16: 15 commitsJun 17: 20 commitsJun 18: 7 commitsJun 19: 6 commitsJun 20: 26 commitsJun 21: 14 commitsJun 22: 27 commitsJun 23: 1 commitJun 24: 13 commitsJun 25: 7 commitsJun 26: 9 commitsJun 27: 1 commitJun 28: 1 commitJul 10: 2 commitsJul 12: 1 commitJul 13: 2 commits66May 8Jun 1Jul 1Jul 13
A slow May, a ten-day pause at the start of June, then the sprint: 66 commits on June 11 alone. The near-empty stretch into July is mostly waiting on App Review.

What Claude actually did all day

4,404 tool calls across all sessions†

Bash (build, test, git, scripts)2,145Bash (build, test, git, scripts): 2,145 callsEdit (code changes)700Edit (code changes): 700 callsRead (files)682Read (files): 682 callsAgent (subagent spawns)225Agent (subagent spawns): 225 callsOrchestration & interaction215Orchestration & interaction: 215 callsWrite (new files)182Write (new files): 182 callsXcode simulator (build/test/tap)119Xcode simulator (build/test/tap): 119 callsBrowser (screenshots, checks)60Browser (screenshots, checks): 60 callsWorkflow (multi-agent runs)39Workflow (multi-agent runs): 39 callsOther tools22Other tools: 22 callsWeb research15Web research: 15 calls
Nearly half of everything is shell commands — builds, tests, git, scripts. The agent read files 682 times, edited 700 times, and delegated to 225 subagents.

Which hat each session wore

Share of each session's transcript records, by branch role§

DeveloperPMMonetizationMarketerOther
Jun 11–16 · solids, sharing, CloudKitJun 11–16 · solids, sharing, CloudKit — Developer: 77% (12,096 records)Jun 11–16 · solids, sharing, CloudKit — PM: 7% (1,153 records)Jun 11–16 · solids, sharing, CloudKit — Other: 15% (2,359 records)n=15,608Jun 16–17 · edit-model keystoneJun 16–17 · edit-model keystone — Developer: 60% (1,940 records)Jun 16–17 · edit-model keystone — PM: 29% (934 records)Jun 16–17 · edit-model keystone — Monetization: 9% (278 records)Jun 16–17 · edit-model keystone — Other: 2% (57 records)n=3,209Jun 17–18 · sleep editor + rebrandJun 17–18 · sleep editor + rebrand — Developer: 71% (4,036 records)Jun 17–18 · sleep editor + rebrand — PM: 8% (436 records)Jun 17–18 · sleep editor + rebrand — Monetization: 10% (585 records)Jun 17–18 · sleep editor + rebrand — Marketer: 9% (504 records)Jun 17–18 · sleep editor + rebrand — Other: 3% (155 records)n=5,716Jun 18 · account deletion for reviewJun 18 · account deletion for review — Developer: 79% (3,253 records)Jun 18 · account deletion for review — PM: 21% (846 records)n=4,099Jun 18–19 · sync perf + invite racesJun 18–19 · sync perf + invite races — Developer: 87% (1,768 records)Jun 18–19 · sync perf + invite races — PM: 13% (257 records)n=2,025Jun 19–20 · sharing re-architectureJun 19–20 · sharing re-architecture — Developer: 100% (6,122 records)n=6,122Jun 20–Jul 2 · family sharing, 1.2Jun 20–Jul 2 · family sharing, 1.2 — Developer: 85% (19,295 records)Jun 20–Jul 2 · family sharing, 1.2 — Monetization: 13% (2,868 records)Jun 20–Jul 2 · family sharing, 1.2 — Marketer: 1% (323 records)Jun 20–Jul 2 · family sharing, 1.2 — Other: 1% (234 records)n=22,723Jun 23 · two short monetization runsJun 23 · two short monetization runs — Monetization: 100% (90 records)n=90Jul 10–13 · resubmission + siteJul 10–13 · resubmission + site — Developer: 32% (349 records)Jul 10–13 · resubmission + site — Marketer: 56% (615 records)Jul 10–13 · resubmission + site — Other: 13% (138 records)n=1,102
The ten sessions in nine chronological groups (two short runs share one). Development dominates every mid-project session — one is 100% development. The last session flips: 56% of its records are on marketing branches, as 1.2 went through App Review resubmission.

For every line of app code, a line of tests

Lines of Swift in the repo at launch

App code‡32,947App code‡: 32,947 linesTest code31,339Test code: 31,339 lines
190 test files, 31,339 lines. I required tests with every merge; this is what that rule produces in under ten weeks.

Who did the talking

12,077 model responses across all sessions†

Claude Opus 4.810,346Claude Opus 4.8: 10,346 responsesClaude Fable 51,731Claude Fable 5: 1,731 responses
Opus 4.8 carried the mid-project sessions. Fable 5 appears in the first session, then ran the final resubmission-and-site session end to end.

CI told the truth the whole time

GitHub Actions runs, May 8 – Jul 13

WorkflowRunsPassedFailedCancelledPass rate
iOS Test (unit + integration)5253731183471%
Nightly UI Tests3423206%
TestFlight deploy18315017%
Deploy site321067%
580 runs total. The unit-test workflow passed 71% of the time; 22% of runs failed and 6% were cancelled mid-run — the failures are what development actually looks like. The nightly UI test suite failed 32 of its 34 nights; UI test flakiness outlived the project. All 18 TestFlight runs happened in one week of May: 8 failures — App Store Connect auth, code signing, icon validation — before the first success.

† Transcript-derived stats (sessions, records, model responses, tool calls, hats) cover Jun 11 – Jul 13. Git and CI stats cover the full project, May 8 – Jul 13.

‡ App-code lines = total Swift lines minus test lines.

§ Hat classification: each transcript record is attributed by the git branch it was recorded on; branch prefixes map to roles. Records on main (~29,000, mostly planning conversation and merges) can't be attributed and are excluded. "Other" = research, testing, release, and UX-design branches. Architecture work rides the same feat/ and refactor/ branches as implementation, so it files under Developer.

It shipped

MyBlueBerry is on the App Store: a one-handed baby tracker. Most entries are one or two taps. It works with no signal and syncs through your family's own iCloud. No account beyond your Apple ID, no analytics, no spinner between you and "the baby ate."

It's a small app, and that's deliberate — it does the specific thing I needed, the way I needed it. But a stranger can download it today, which is not something I could say about anything I built in my career before this.

Next in this series