Build a mobile app from an empty repository

A phone app is built the same way as everything else here, one screen at a time, with each screen a change you look at before it goes in. The difference is the last step, where the app gets compiled, signed and installed on phones, and the path below runs from an empty repository to an app on your own phone and in the stores.

Overview

Example project. Allotment is an app for a community garden: a map of the plots, a watering rota with reminders, and a notice board. It runs on iPhone and Android from one codebase. The project is an illustration written to show the steps.

A mobile app run this way: a ten-year-old app for Android and iOS has merged more than 110 agent-written pull requests through ProPR.

Pick the stack

One codebase for both phones, free tooling, and a cloud service that does the compiling and signing so you never install a developer toolchain.

PiecePickWhy
App frameworkExpo (React Native)One codebase builds real iPhone and Android apps, and the agents write it fluently.
Screens and navigationExpo RouterEach screen is a file, so each screen is one pull request.
DataOn-device storage firstThe first version keeps its data on the phone. Add a shared database later as its own plan.
Building and signingExpo Application Services (EAS)Expo's cloud compiles and signs the app and uploads it to the stores. You never run a build on your computer.

Verified November 2026: Expo SDK 58 is current and MIT licensed. EAS Build's free plan includes 15 Android and 15 iOS cloud builds; paid plans start at $19 a month. Publishing needs an Apple Developer Program membership at $99 a year and a one-time $25 Google Play registration.

Create the repository and the Expo account

On GitHub, create a repository called allotment-app and tick Add README. Create a free account at expo.dev and connect it to the GitHub repository; that is where builds will appear. In ProPR, open Repositories, choose Add Repository, enter the repository name, and switch on Visual previews.

Tell the planner what you want

Open Planner Studio, pick the repository, and describe the app.

Build a phone app called Allotment with Expo and Expo Router for iPhone and Android. Three tabs: a map of our 24 garden plots as a simple grid with the holder's name on each; a watering rota where members pick their days and get a reminder notification the evening before; and a notice board where anyone can post a short message. Store everything on the phone for now. Big friendly buttons, works one-handed. Include the EAS configuration so the app builds in Expo's cloud for both platforms.

The planner comes back with a plan. Adjust it in the chat: "make the reminder its own task", "add a task for the app icon and name". Approve it, and ProPR files one GitHub issue per task.

A generated plan broken into five ordered tasks, each a future GitHub issue, with drag handles to reorder them
The plan outline: each task becomes one GitHub issue.

The plan becomes issues

Each issue ends in a checklist of what done means, and a plan for this app looks like this.

  1. Set up the Expo project with Expo Router, three tabs and EAS build configurationDone when: the project builds for web, iOS and Android, shows three empty tabs, and the EAS configuration produces a development and a store build profile.
  2. Plot map tabDone when: a 4 by 6 grid shows plot numbers and holder names from a local data file, tapping a plot opens its details, and the grid fits a small phone without scrolling sideways.
  3. Watering rota tabDone when: a member picks their watering days, the choice is saved on the phone, and the week view shows who waters each day. Tests cover the rota rules.
  4. Evening reminder notificationDone when: the app asks permission once, schedules a local notification at 7 pm the day before each watering day, and cancels it when the day is removed.
  5. Notice board tabDone when: members post a message up to 280 characters with their name, posts show newest first, and a post can be deleted by its author.
  6. App icon, splash screen, name and store detailsDone when: the app has an icon and splash screen, is called Allotment on the home screen, and the configuration holds the bundle identifiers for both stores.

ProPR builds each issue

Start the issues. Each runs in its own clean workspace on its own branch. For the plot map, the agent writes the screen, tests the data handling, runs the app's web build at a phone-sized window to check the layout, and captures it. ProPR opens the pull request with the summary, the tests and the capture.

Task header: repository and pull request, Implementing status, the run in progress, its model and runtime, and token consumption
The run header on the task: status, duration, token cost and the model that ran.

What you look at in each pull request, and on your phone

  • The capture. Does the plot grid fit? Are the buttons big enough?
  • The summary against the checklist. The agent lists what it built and tested.
  • A build on your phone. On expo.dev, press Build from GitHub, pick the pull request's branch and the development profile. Expo compiles it in the cloud and gives you an install link for Android. For iPhone, register your phone once and the same link installs there too. The agent can also add an Expo Workflows file so every merge to main builds on its own.
@youcommented on the pull request

Tried it on my phone. The plot names are too small to read in the sun. Make the text bigger and show the plot number in a dark circle. Also the tap target on each plot feels fiddly; make the whole square tappable.

A new commit lands on the same pull request with a new capture, and you build it again when you want to feel it. Merge when it is right.

Ship it, then grow it

When the tabs are in, build with the store profile, and EAS Submit uploads the app to App Store Connect and Google Play Console, where you fill in the listing and press publish. From there every improvement is an issue, and every release is a merge followed by a build. The next plan is usually a shared database so the rota syncs between members; a goal handles an open-ended outcome such as full accessibility support, and the second-model review is worth running before each store release.

Good to know

  • The agent's workspace is a Linux container with Node.js and Python, with no iPhone or Android simulator and no screen. It checks logic with tests and layout with the app's web build in a headless browser at phone size. Testing on a phone is yours, through the cloud builds.
  • Compiling and signing happen in Expo's cloud, with your Apple and Google developer accounts connected there. ProPR builds the code and opens pull requests; it never touches store credentials.
  • The free build allowance is enough to get the first version onto phones. Keep builds for milestones and review most pull requests from their captures.

Start your app.

Everything above happens in a browser. ProPR Hosted gives you your own instance, run by the ProPR team; the live demo lets you click through plans and pull requests first.

On your own server, self-host ProPR, free and open source.

All Build something walkthroughs