CodePlate home

Agent evals · Expo Mobile App Starter

Expo Mobile App Starter: the eval log

We gave Expo Mobile App Starter to a coding agent in a new session with no CodePlate context, along with a made-up user's brief ("Sprout"), then sent the requests below one at a time.

5 of 5 requests passed, checks green after every step

Run
2026-10-13
Agent
Claude Sonnet 5.5
The user
The script, relayed turn by turn
Version tested
v1.0.0
On sale now
v1.0.7

This run tested v1.0.0. The version on sale is v1.0.7, which includes the fixes listed at the end of the record and has not had its own eval run.

The made-up user

Written the way a buyer would put it. {ASSETS}, {ART} and {GODOT} stand for the folder with their files and the engine's path; their asset pack isn't published.

The user has a flat full of houseplants and builds with an agent. They're comfortable with phones and computers but don't read code.

First message

Hi! I want to turn this app into "Sprout", an app that reminds me to water my houseplants. My icon is in {ASSETS}. Can you take a look and get us started?

Interview answers

The requests

Give these one at a time, as the user, after the interview. Don't add hints beyond the words below.

  1. Make it Sprout: plants instead of habits (name, room, water every N days, light, note), my icon, my green and terracotta colors, and my words everywhere, including the welcome screens and the app name on the phone.
  2. On Today, show the plants that need water today or are overdue (with how many days overdue), and let me mark them watered. A plant watered today shouldn't come back until it's due again.
  3. Let me group plants by room: a room picker when adding a plant, and on the Plants screen show them in sections by room.
  4. Make the free version hold 5 plants; adding a 6th should show the Pro screen. Pro is $2.99 a month or $19.99 a year.
  5. Add a "Care log" to each plant's page: the dates it was watered, and let me add a short note to a watering ("repotted", "added fertilizer"). Show the notes in the log.

The run record

As we wrote it on 2026-10-13, with local paths and internal references taken out. "I" is the person running the eval.

#RequestTurnsResultNotes
0Interview1passRead the brief and icon, changed nothing first. Seven questions with defaults, including the bundle id. Noticed that "every N days" differs from the template's weekday schedules.
1Rebrand to plants1passA rename migration, new fields, and an every-N-days schedule built from scratch (the template has none). Icons, splash and favicon from the SVG. Darker button shades for contrast, with the exact brand color kept for the icon. Welcome screens rewritten. It also built most of requests 2 and 4 from the interview answers. Looked at every screen in both themes.
2Due / overdue1passAdded "Due today" and "N days overdue" labels, overdue sorting and a test. Looked at the light theme only.
3Rooms1passRoom chips plus free text, sections by room (a flat list while reordering), and unit, screen and e2e tests. Looked at some screens in only one theme.
4Free limit + prices0 changespassAlready done in request 1: FREE_PLANT_LIMIT in entitlements.ts, prices in plans.ts, tests present. Warned that a store build with the fake store would give Pro away.
5Care log1passMigration 0003 for notes, the log with an edit sheet, backups with notes (old backups still restore), and tests. Reviewed screenshots in both themes (with two exceptions). Couldn't take free-user screenshots once Pro had been unlocked.

Where the template fell short (fixed before merge)

  1. No "every N days" schedule. It's a built-in schedule kind now, with tests, offered in the habit form. Waterings, medications and cleaning all need it.
  2. Screenshots in one theme. npm run shots takes light and dark by default, and the brief says to look at both.
  3. Shots couldn't show a free user after Pro was unlocked. npm run shots has --free and --pro flags that reset the fake store.
  4. A store build with the fake store would give Pro away. A production or EAS build now refuses EXPO_PUBLIC_PURCHASES=fake with a clear message, and a check covers the guard.
What each request was scored against

Every request:

  • npm run check ends with CODEPLATE CHECKS: PASS (all nine steps).
  • No test is weakened silently.
  • Schema changes are NEW migrations; shipped migrations are untouched.
  • Data access goes through the repositories; Pro gating only in src/config/entitlements.ts.
  • docs/project.md is updated.
  • The agent looked at its screenshots (phone size, light and dark).
  1. Rebrand
    • "habit" is renamed to "plant" through the data layer, screens, copy and tests; a grep shows only intentional leftovers.
    • New fields (room, interval in days, light, note) are stored via a migration and validated.
    • Icon, adaptive icon, splash and favicon are regenerated from the user's SVG. app.json has the name, slug, scheme and bundle id/package.
    • Colors come from tokens in both themes, and the contrast test passes.
  2. Due today
    • The due logic (last watered + interval, overdue days) lives in a pure, unit-tested function.
    • Today lists due and overdue plants with the overdue count. Watering removes the plant until it's due again.
    • Reminders follow the new due dates.
  3. Rooms
    • Room is stored and picked when adding or editing a plant. The Plants screen shows sections by room.
    • Tests cover the grouping.
  4. Free limit and prices
    • The limit is set in entitlements.ts, not in the screen. A 6th plant opens the paywall with the new prices. Pro (the fake store) lifts the limit.
    • Unit and e2e tests cover both.
  5. Care log
    • Notes are stored on check-ins via a migration. The plant page shows a dated log with notes, and a note can be added.
    • Backup export and import include the notes, with the backup version bumped and old backups still importing.

← Expo Mobile App Starter · Every eval log