Product brief
PRODUCT.md records what your app is, which features and integrations it keeps and what it should look like, so the bundled skills act on those decisions instead of asking you twice.
The setup skill writes the file during its discovery phase, the first thing it does
on a fresh project. Edit it by hand whenever a decision changes.
Sections
Keep the headings, their order and the table shapes as shipped. yarn skills:doctor
parses them, and the design skill reads the last section.
| Section | Holds | Allowed values |
|---|---|---|
| Summary | One paragraph: what the app does and for whom | Prose |
| Audience | Who uses it and what they are trying to get done | Prose |
| Platforms | One row each for ios and android | yes or no |
| Features | One row each for chat, create and scan | keep or remove |
| Integrations | One row each for payments (RevenueCat), paywall (Superwall), push (OneSignal), analytics (PostHog), crash reporting (Sentry), Google sign-in and Apple sign-in | on or off |
| Monetization | The model, and what Pro unlocks | free, one-time or subscription |
| Design inputs | Logo path, brand colours, fonts, reference apps or screenshots, three adjectives | A value per line, or an empty line |
Each section ships with a TODO line and the boilerplate’s own example values. Delete
the TODO line once the section describes your app; the doctor reports the section as
unfinished while the line is there.
Two rules constrain the tables:
createis Pro-only, so keeping it means paymentson. Monetizationfreemeans payments and paywalloffandcreateremoved.- Apple rejects an iOS app that offers Google sign-in without Apple sign-in. If Google
sign-in is
onand iOS ships, Apple sign-in ison.
Leave a design input empty rather than inventing one. The design skill asks for what is missing, and a made-up brand colour ends up in the theme.
How the brief is written
The discovery phase asks six questions in one message, each with a proposed default, so you answer only where you differ:
- What the app does, and for whom. The name you use here becomes the app name.
- Identity: the slug, URL scheme and bundle identifier derived from the app name and your Expo account username, to confirm or correct, plus the platforms you ship.
- Which of
chat,createandscanto keep. - Which integrations are on. The default keeps payments, analytics, crash reporting and both sign-ins on, and Superwall and push off.
- Monetization.
- Design inputs.
The answers go into PRODUCT.md, and the identity values into config.js. The agent
then runs yarn remove:feature for every feature marked remove and
yarn remove:integration for every integration marked off; see
Removing features and integrations.
Platforms marked no change nothing in the code; they tell the build phase which store
credentials to skip.
Identity derivation
| Value | Rule | Native Express + robinfaraj |
|---|---|---|
slug | The app name lowercased; every run of characters outside a-z0-9 becomes one -; leading and trailing - dropped | native-express |
scheme | The slug with its hyphens removed | nativeexpress |
iosBundleIdentifier | com.<owner>.<scheme>, with the owner lowercased and everything outside a-z0-9 removed | com.robinfaraj.nativeexpress |
androidPackageName | The same as the iOS bundle identifier | com.robinfaraj.nativeexpress |
A segment that would start with a digit gets app in front of it, because an Android
package segment must start with a letter. npx nativeexpress create-app applies the
same rules, so a scaffolded project already carries them. Anything you correct wins
over the derivation; a bundle identifier you already registered with Apple is the usual
case.
Who reads it
| Reader | Uses |
|---|---|
The setup skill | Every section. It skips the interview when no TODO line remains, and configures only the integrations marked on |
The design skill | Design inputs |
yarn skills:doctor | Reports which sections are written and the decisions it read, and warns when a feature marked remove is still under src/features/, or one marked keep is gone |
AGENTS.md and CLAUDE.md | Point any coding agent at the brief before it asks what the app is |
Verify
yarn skills:doctorThe Brief block lists every section as written and shows the platform, feature, integration and monetization decisions it read.