PRD 001 - The MVP curriculum portal
| Owner | Sheila Pande |
| Contributors | Michelle Rubin (copy, scripts) |
| Status | Draft for review |
| Written | 2026-08-19 |
| Ships | Web live Sept 1 2026. iOS submitted Sept 1, live ~Sept 12 |
| Sources | Fathom 08-08, 07-18, 06-25 (see ../docs/00-source-plans.md), Design-File-WTFISAI.md, WTFISAI-BRAND-GUIDE.md, WTF-is-AI-101-SMB-Owner-Track.md |
| Reviews | ../prototype/ (clickable) and the design canvas |
1What this document is
A review of the MVP as currently designed, and the fix list to get it shippable. It covers five things:
- The product experience and goals, checked against what the business actually needs
- The MVP map: journeys, screens, states, and what the API owns
- Copy fixes
- Branding fixes
- UI/UX improvements for the web app and the iOS app, and what they force on wtfisai.co
Where this document disagrees with the mockups, this document wins. Where it disagrees with the Fathom calls, the calls win and the disagreement is flagged.
2Goals
2.1 What the MVP is for
The Sept 1 launch is a list-building instrument that teaches, not a course. It exists because the 101 is not recorded yet and the business needs an audience by the time it is.
| Goal | Why | How we know it worked |
|---|---|---|
| G1. Capture qualified emails | There is no course to sell yet. There is a list to build. | Emails captured, and how many are the priority persona (owns a real business, 1-20 people) rather than curiosity traffic |
| G2. Make the product self-evidently good | The free thing IS the sales argument. Michelle's line: if this is what the free things look like, you can guess what the paid ones look like. | Plans generated, and plans exported or emailed (export = she thought it was worth keeping) |
| G3. Teach the agentic framework by demonstration | Modules 08 and 09 teach shared context and chained agents. The app runs on exactly that pattern. Using it is the first lesson. | Qualitative. Do users describe what the app did in the course's vocabulary |
| G4. Establish App Store presence | Distribution and credibility. "Download the app" outperforms "visit my site" in a bio link. | Approved and live |
| G5. Prove the pipeline | One video, one plan generator, one email flow, all working end to end, is the skeleton the whole course hangs on. | It runs for 30 days without Sheila touching it |
2.2 Targets to set before launch
The Aug 8 call set a date but no numbers. Pick these now so the launch can be judged:
- Emails captured in the first 30 days: [TARGET]
- Plans generated: [TARGET]
- Percentage who finish intake once started: 60% (proposed floor; below this the intake is too long)
- Percentage who export or email their plan: 35% (proposed floor; below this the plan is not good enough to keep)
- Waitlist-to-101 intent captured: [TARGET]
2.3 Non-goals
Explicitly out of the MVP. Every one of these goes in the ClickUp post-MVP folder per the Aug 8 discipline.
- The 101 course itself, or any video beyond Sheila's intro
- Community forum. The Aug 8 call flagged engagement as unsolved. A dead room is worse than no room.
- The "female CTO" agent
- Payments of any kind, on either surface (see D1 in section 8)
- The 201 build track
- Office hours booking
3Review: problems with the MVP as designed
Findings from reviewing the mockups against the goals. Each has a fix in sections 5 to 7.
P1. The plan asserts numbers the intake never collected - CRITICAL
The plan screen shows "4h per new client", "$310 monthly software", "2 processes only you know". The intake asks three questions and none of them produce those figures. Right now the mockup fabricates precision.
This is not a cosmetic problem. The entire product promise is this AI is worth trusting because it knows your business. Inventing a dollar figure is the exact failure mode module 0 teaches people to catch. If a user spots one invented number, the plan is dead and so is the course pitch.
Fix: either ask, or do not assert. See R2.4 and the intake redesign in 5.2.
P2. The career path has no product behind it
The two paths fork the whole experience, but the 101 is written only for the SMB owner. A career user finishes her plan and the next step we offer her is a course that is not for her.
This is worth solving rather than cutting, because the career persona is validated: Michelle is it, and her outcome is the strongest testimonial the business has. The repo already holds the assets - amazon-playbooks/audit-your-career-for-the-ai-economy.md and how-millennials-should-prep-for-the-ai-workforce.md.
Fix: keep both paths, route them to different post-plan destinations. See R3.
P3. Email is captured too late
In the current flow the user only gives an email at resource download. Someone who completes the intake, sees the plan, and closes the tab is lost entirely - and she is the most qualified person who visited that day.
Fix: capture email before the plan renders, framed as delivery rather than a gate. See R2.5.
P4. Nothing brings anyone back
Between Sept 1 and the course launch there is no reason to reopen the app. A dormant install is worth almost nothing, and a dormant install on iOS gets deleted.
Fix: the profile-to-better-plan loop is the mechanic. Make it explicit and give it a nudge. See R4.
P5. The plan might satisfy the need instead of creating it
The plan is deliberately good. Good enough that some users will act on it and never buy anything. That is an acceptable trade only if the boundary is deliberate.
Product principle, to be enforced in copy: the plan tells her what and why. It never tells her how. Every "how" is a named module. This is exactly the 101-versus-201 line from the Aug 8 call, applied one layer earlier.
P6. No states are designed
No empty state, no loading state, no error state, no offline state, no "agent failed" state. The generating screen is the happy path only. AI calls fail, and the first time a user sees a raw error the trust is gone.
Fix: see 7.4.
P7. The demo persona is a real person
The mockups use Michelle Rubin, her real business, and a real-looking email. These screens will end up in App Store listings, decks, and social posts.
Fix: replace with a fictional persona everywhere. See 5.5.
P8. Brand continuity between site and app is thin
Someone arrives from wtfisai.co and lands somewhere that shares a palette but none of the signatures: no marquee, no logo, no profanity, no "built for you". It reads like a different company's product.
Fix: see section 6.
4The MVP map
4.1 Personas
| The owner (priority) | The operator (secondary) | |
|---|---|---|
| Who | Owns a real established small business in middle America. Salon, clinic, boutique agency, services firm. 1-20 people. | Works inside a company, not technical, wants to lead AI there rather than watch someone do it badly. |
| Comes for | "Is AI going to eat my business, and what do I do about it" | "I need to be the person who understands this" |
| Path | Business | Career |
| Ends at | The 101 course | Career playbooks, then the 101 if she also owns something |
| Source | WTF-is-AI-101-SMB-Owner-Track.md | Fathom 08-08; Michelle's own outcome |
4.2 The journey
wtfisai.co ─┐
social bio ─┼──▶ Welcome ──▶ Pick path ──▶ Intake ──▶ Email ──▶ Generating ──▶ PLAN
App Store ─┘ (sign in) career / 4-6 q capture agent runs │
business │
▼
┌───────────────────────────────────────────────────────── Home / portal
│ │
▼ ▼ ▼ ▼
Free shelf Intro video Your business 101 waitlist
(3 magnets) (4 min, Sheila) (profile) or career
│ playbooks
└─▶ regenerate a better planTwo entry facts that shape everything: she arrives from a phone in most cases, and she has never heard the word "agent" used this way.
4.3 Screen inventory
| # | Screen | Phase | Purpose | Notes |
|---|---|---|---|---|
| 1 | Welcome / sign in | 0 | Promise + account | Email code primary, Sign in with Apple on iOS |
| 2 | Pick your path | 0 | Segment, and set positioning | The most important screen for who we attract |
| 3 | Intake | 0 | Collect real inputs | Redesigned in 5.2 |
| 4 | Email capture | 0 | New. Deliver the plan | Framed as delivery, not a wall |
| 5 | Generating | 0 | Show the agent working | Teaching surface, not a spinner |
| 6 | The plan | 0 | The deliverable | Export, email, share |
| 7 | Home / portal | 0 | Return destination | Becomes the course dashboard in Phase 1 |
| 8 | Free shelf | 0 | The three existing magnets | Already built, in WTF-EDU/leadmagnets/ |
| 9 | Resource detail | 0 | Preview + download | |
| 10 | Intro video | 0 | Sheila, 4 minutes | Also proves the video pipeline |
| 11 | Your business (profile) | 0 | The shared context layer | The retention mechanic |
| 12 | What is next | 0 | 101 intent, or career playbooks | Forks by path |
| 13 | Course dashboard | 1 | 10 modules, progress | Laid out now so Home survives the change |
| 14 | Module detail | 1 | Video, do this, take-home | |
| 15 | Take-home library | 1 | All one-pagers | 8 already exist in WTF-EDU/onepagers/ |
| 16 | Purchase | 1 | Web checkout; iOS per D1 |
4.4 What the API owns
Non-negotiable, because two front ends drift into two products otherwise.
| Owned by the API | Never in a client |
|---|---|
| Identity, sessions, entitlements | Any business logic |
| The profile record (shared context) | The agent prompt chain |
| The agent chain and plan generation | Hardcoded module lists |
| Plans, versioned, with history | Price strings |
| Content manifest: modules, videos, assets | |
| Progress and completion | |
| Email triggers to Kit |
The content manifest matters most. Modules, videos, and assets are served, not compiled in. Without it, adding module 08 means an App Store release and a ~10 day wait - the exact tax Sheila worried about on the Aug 8 call.
4.5 Data the profile holds
This is the shared context layer from the Aug 8 call, made concrete. It is also the answer to P1: the plan may only assert what this holds.
| Field | Asked where | Feeds |
|---|---|---|
| Business name | Intake | Plan header |
| What she sells, in her words | Intake | Everything |
| Headcount including her | Intake | Build-vs-buy thresholds |
| The task she personally redoes most | Intake | The top opportunity |
| Hours per week or per client on that task | Intake | The time-saved figure |
| Software she pays for monthly | Intake, multi-select + other | The spend figure, and module 09 |
| What worries her most | Intake | Tone and the protect column |
| Path (career / business) | Path screen | Which chain runs, which CTA |
Everything the plan asserts traces to a row in this table. Nothing else gets a number.
5Copy fixes
5.1 Voice rules the app must follow
From WTFISAI-BRAND-GUIDE.md section 7, non-negotiable:
- No em dashes anywhere. Hyphens only.
- Profanity censored with asterisks, never spelled out. And it must actually appear - see C1.
- Plain English, no jargon, no gatekeeping
- Direct, unapologetic, empowering
- Do NOT prefix product names with "WTF is AI:". Canonical names are in brand guide section 8.
5.2 Fixes
| ID | Where | Now | Change to | Why |
|---|---|---|---|---|
| C1 | Whole app | Zero profanity | Land it once, deliberately. Proposed: the free shelf headline becomes **"Free ways to unf\*ck your AI literacy"** | The brand's most recognizable line appears on the site and nowhere in the app. One placement is strategic; five is a tic. |
| C2 | Course dashboard overline | "WTF is AI 101 - SMB Owner Track" | "A 101 Course" | Brand guide section 8 explicitly forbids the "WTF is AI:" prefix and names this product "A 101 Course". "SMB Owner Track" is internal vocabulary. |
| C3 | Welcome headline | "You are not behind. You are cautious." | "You are not behind because you are not curious. You are cautious." | The site already carries this exact thought. Matching it makes the arrival feel continuous, and the longer line names the reason instead of just the label. |
| C4 | Nav label | "Free stuff" | "Free" on phone, "Free tools" on web | "Free stuff" undersells assets that took real work. |
| C5 | Primary CTA, welcome | "Start free" | "Build my plan" | Names the outcome, not the price. Price is handled by the line beneath. |
| C6 | Path cards | "Takes about 6 minutes" | "6 questions. About 4 minutes." | Concrete beats vague, and it sets the finish line before she starts. Raises intake completion. |
| C7 | Plan, stat block | Bare numbers | Every figure carries its source inline: "4h per new client - your answer" or "~$310/mo - based on the 4 tools you listed" | Fixes P1. Also models the evaluation habit module 0 teaches. |
| C8 | Generating screen | "Scoring build vs buy" | Same, plus one plain-English line under each: "checking what already exists before suggesting you build something" | This screen is teaching material. Jargon with no gloss wastes it. |
| C9 | Plan, closing card | "This plan is the what. The 101 is the why and the how." | "This plan is the what. The 101 is the why, and the 201 is the how." | Enforces P5, and makes the 101/201 ladder legible from the free tier. |
| C10 | Profile screen | "This is what the AI knows about you" | "This is what the AI knows about your business" | "Knows about you" reads surveillant to a cautious 50-year-old business owner. The whole audience thesis is that she is right to be cautious. |
| C11 | Empty plan state | Not written | "No plan yet. Six questions and you will have one." | P6 |
| C12 | Agent failure | Not written | "That did not work. Nothing you entered was lost - we saved your answers. Try again, or we will email your plan when it goes through." | P6. Never show a raw error to this audience. |
| C13 | Course teaser, career path | Shows the 101 | Career users see the two career playbooks instead | P2 |
| C14 | Whole app | "Course 102" in call notes | "201" everywhere | The curriculum files use 201 and the number gap signals the difficulty gap. Decide once, before it is in App Store copy. See D2. |
5.3 Copy that is working, keep it
- "Cautious women who get educated outperform reckless early adopters" - straight from module 0, does the emotional work in one line
- "Not here to make you a founder or get you VC money. Here to make your business and your career worth more." - from the Aug 8 call, and it filters the audience Sheila does not want
- "Do not automate the part they hired you for. Automate the 4 hours around it." - the single most useful sentence in the plan
- "If this is what the free things look like, you can guess what the paid ones look like." - Michelle's framing, working as a shelf subhead
5.4 Michelle's scope
Per the Aug 8 call she is writing scripts and copy edits. The highest-leverage writing in the MVP, in order:
- The plan output template. It is the deliverable, and it is 80% of whether the free tier converts.
- The intake questions. Every word affects completion rate.
- The generating screen narration. It is a teaching surface disguised as a loading screen.
- Welcome and path copy.
She needs the repo to do this. Still outstanding since the Jul 18 call.
5.5 Demo persona
Replace Michelle Rubin and Rubin Creative everywhere in mockups, App Store screenshots, and decks. Proposed: Dana Reyes, Reyes & Co, a 3-person branding studio in Springfield MO serving med spas. Fictional, matches the priority persona, and safe to publish.
6Branding fixes
Audited against Design-File-WTFISAI.md, which is canonical.
| ID | Issue | Fix | Reference |
|---|---|---|---|
| B1 | The app uses a text wordmark. The real logo is never used. | Use the actual mark from WTFISAI-WEB/wtfisai-brand/WTF New Brand/. Logo on welcome, in the header, and as the App Store icon. Apply the logo glitch: drop-shadow(-1px 0 0 #00FFFF) drop-shadow(1px 0 0 #FF00FF) | Design file, glitch recipes |
| B2 | No app icon exists. Blocks App Store submission. | Design it. Purple field, the mark, glitch offset. Must survive at 60px and in grayscale. On the critical path for Sept 1. | |
| B3 | The marquee, the brand's most recognizable motion, appears nowhere in the app | Add one band on the welcome screen only. Purple fill, border-top: 2px solid #00FFFF; border-bottom: 2px solid #FF00FF. Reuse the site's phrase list. | Design file, bars/dividers |
| B4 | Card padding is 26px on phone against a spec of 40-44px | Document the responsive step explicitly: 40px desktop, 24-28px phone. The spec is written for 1920px surfaces and needs a stated mobile scale rather than a silent one. | Design file, layout |
| B5 | Cyan risks appearing as body text on white | Enforce the rule in code: cyan and magenta are never body text on white or lilac. They are body-legal only on purple. Encode this as separate token sets. | Design file, on-purple scale |
| B6 | Glitch is applied liberally | Budget it: at most one glitch text emphasis per screen, plus buttons and badges. Emphasis word stays upright, weight 600, never bolder. | Design file, typography rules |
| B7 | Retired colors | Mauve #E2A9F1 and red #FF0000 must never appear. Add a lint check on the token file. | Design file, retired |
| B8 | Tokens live in three places (site CSS, prototype CSS, canvas artboards) and will drift | One token source, generated into CSS custom properties for web and a Swift enum for iOS. Generated, never hand-copied. | |
| B9 | No App Store listing assets | Needed for Sept 1: icon, 6.7" and 6.1" screenshots, app name (30 char), subtitle (30 char), description, keywords, privacy labels. Proposed name "WTF is AI", subtitle "Your AI plan, in plain English". | |
| B10 | Favicon and social card for app.wtfisai.co | Needed before web launch. |
6.1 Typography - DECIDED 2026-08-20: Broadcast
Sheila's read on the mockups, 2026-08-19: the type is what feels off. Agreed, and it is worth treating as a real decision rather than a tweak, because Playfair Display is doing two jobs badly at once.
Why Playfair is the wrong tool here. It is a didone: extreme thick-to-thin contrast, hairline serifs, drawn for large-format print and editorial mastheads. It reads elegant at 104px on a slide and it reads fussy at 22px on a phone, where the hairlines thin out and the whole line goes soft. It also carries the wrong association: Playfair says wedding invitation and fashion masthead. The brand says 90s broadcast, bright, a bit degraded, unapologetic. Those are not the same room.
Three candidates, each a genuinely different axis, all live in the prototype behind the font switcher:
| Broadcast | Terminal | Poster | |
|---|---|---|---|
| Display | Archivo, expanded width, 700 | Space Grotesk 700 | Anton |
| UI / body | Archivo 400 | IBM Plex Sans | Work Sans |
| Labels | Archivo 700 uppercase | IBM Plex Mono uppercase | Work Sans 700 uppercase |
| Reads as | Network title card, 1996 | Terminal on a CRT | MTV bumper |
| Strength | One superfamily across display and UI, so the whole system tightens. Expanded width is the single most 90s-broadcast typographic move available. | The mono label track is a strong CRT cue and costs nothing in body legibility. | Loudest. Real impact at display size. |
| Cost | Least distinctive of the three on its own. Needs the width axis to be used properly or it is just a grotesque. | Space Grotesk is a heavily used default face right now. | Condensed heavy type at small sizes and in long paragraphs is hard on a 40-60 audience. Uppercase headlines compound it. |
Decided: Broadcast. Archivo at expanded width for display, Archivo for UI, Archivo 700 uppercase for labels. One superfamily doing both display and UI is the cleanest possible outcome, which was the actual request, and the expanded width delivers the era without any costume.
Playfair Display is retired from the product. It survives nowhere except in assets not yet re-cut, and those are listed below.
This is a three-surface change. wtfisai.co, the web app, and the iOS app all currently run Playfair plus Inter, so whatever is picked here changes all three. Two knock-ons to budget for:
- The site's hero tagline is artwork, not live text:
/images/wtf-tagline-lower.png. It has to be reset and re-exported in the new face. Design-File-WTFISAI.mdtabs 6 and 7 become wrong the moment this is decided. Update them in the same pass or the design file stops being canonical, which is worse than any font choice.
See D6.
6.2 The glitch budget - DECIDED 2026-08-20
The type is what got noticed, but the noise had a second source: the 90s TV effect was applied to type, and type is the one place it costs legibility. Chromatic offset sat on headlines, overlines, buttons, bullets, badges, and card edges at once. When everything glitches, nothing reads as glitched - it just reads as slightly broken, with a fuzzy edge on every word the user is trying to read.
The fix is not less fuzz. It is fuzz that is earned. There are exactly four ways to earn it, and anything not on this list does not get it.
| Earns it | What gets it | Why it survives the cut |
|---|---|---|
| 1. Identity | The AI in the wordmark, always, on every screen | Same mark, same place, every time. The eye stops registering it as an effect and starts reading it as the logo. |
| 2. State | The current nav tab, the in-progress module number, a selected choice, a New or Live badge | Here the glitch is carrying information. It marks what is current or chosen, which is the one job decoration is allowed to have. |
| 3. Interaction | Button and card hover, focus, and press | Invisible at rest, arrives on touch. A reward for doing something rather than a permanent texture. Steps timing, not easing, so it snaps like a switch instead of gliding. |
| 4. Emphasis | One word per screen, at display size. Plus the gradient divider rule, which appears at most twice. | At display size the offset reads as an effect. At 16px it reads as blur. That is the whole rule. |
Never, at any setting: body copy, overlines, section labels, every bullet, every pill, every card edge.
And the surface carries what the type gave up:
| Was | Now | |
|---|---|---|
| Dark cards | Glitch halo around the whole box | Cyan left edge, magenta right edge. Same two colors, same idea, no halo around the text. |
| Buttons | Glitch box-shadow at rest | Flat purple with a 3px cyan underline. Glitch on hover only. |
| Purple surfaces | Flat fill | Faint scanlines, 7% black, 1px on 4px. Invisible at arm's length, unmistakable across a room. |
| Video and hero blocks | Flat purple rectangle | Full tube: heavier scanlines plus a phosphor vignette darkening the corners. Nobody is reading it, so it can take the whole effect. |
| Motion | None | Signal drift. Roughly once every 9 seconds the wordmark loses tracking for about 160ms, the way an old tube drops lock for a frame. Wordmark and video block only, never body copy, and off entirely under prefers-reduced-motion. |
Every brand color stays at full brightness and the era stays. The words go sharp. Both settings are in the prototype so the two can be compared directly.
Six supporting moves, all boring and all necessary:Six supporting moves, all boring and all necessary:
- Spacing on an 8pt scale. Current values run 24, 26, 28, 32, 34, 36, 38, 40 with no logic. Pick 8, 16, 24, 32, 48, 64 and stay on it.
- Fewer containers. Cards inside cards inside bordered sections. Let the lilac ground separate things instead of drawing another border.
- Overlines are not free. Right now nearly every block has an uppercase tracked label above it. Cap it at two per screen.
- One type scale, actually enforced. Display, H1, H2, body large, body, label, caption. Nothing between.
- Cyan and magenta are never body text on white or lilac. They fail contrast. They are legal on purple only, which is what the design file already says.
- These rules apply to the website too. It has the same glitch-everywhere problem in the offerings cards and the marquee area.
7UI/UX improvements
7.1 Both surfaces
| ID | Improvement | Why |
|---|---|---|
| U1 | Rebuild the intake. 6 questions, one per screen, progress shown, back always available, answers saved per question. Two of the six exist only to make the plan honest: hours on the repeat task, and monthly software (multi-select with "other"). | Fixes P1. The multi-select doubles as the setup for module 09. |
| U2 | Email capture before the plan renders, framed as delivery: "Where should we send it?" with the plan visible behind a light scrim. Not a hard wall - she can skip and read it now, and we ask again at export. | Fixes P3 without a bounce-inducing gate |
| U3 | Plan export and share. PDF export, email to self, and a shareable read-only link. | The plan is the artifact she shows a partner or an accountant. Sharing is organic distribution the launch has no other source of. |
| U4 | Plan versioning. Every regeneration is kept, with a visible diff of what changed since the last one. | Makes the profile loop rewarding rather than destructive, and it is the audit-as-a-spine idea from the curriculum made real. |
| U5 | 44px minimum hit targets everywhere. Current mockup buttons are close but the choice rows are not consistently there. | The audience skews 40-60 and mobile. Non-negotiable. |
| U6 | Generating screen is a lesson. Named steps, plain-English gloss, and a "what just happened" link at the end that names the pattern and points at module 08. | Turns dead time into the product's best teaching moment |
| U7 | Reduce the tab bar to what exists. Phase 0 has Home, Free, You. Course arrives in Phase 1. | Three tabs pointing somewhere beats four with one dead end |
7.2 Web specific
| ID | Improvement |
|---|---|
| W1 | Plan screen gets a sticky action bar (export, email, share) on scroll. It is a long document. |
| W2 | Keyboard flow through intake: Enter advances, Escape goes back. This user has a keyboard and no patience. |
| W3 | Print stylesheet for the plan. She will print it. |
| W4 | Real 1024-1280 tablet layout, not a stretched phone. Clinic front desks run iPads. |
7.3 iOS specific
| ID | Improvement |
|---|---|
| I1 | Offline access to downloaded one-pagers and a generated plan. This is also the strongest answer to Apple's "is this just a website" review question. |
| I2 | Push for new modules and new lead magnets. The only re-engagement channel that does not depend on email deliverability, and second native-value justification. |
| I3 | Native share sheet for the plan PDF |
| I4 | Sign in with Apple, with account linking on matched email, including private-relay addresses |
| I5 | No fake status bar and no fake keyboard in any mockup or screenshot. The real ones render on top. |
| I6 | Dynamic Type support at least to the first two accessibility sizes. This audience enlarges text. |
7.4 States to design before build
Currently missing entirely (P6). Each needs a designed screen, not a developer's default:
- Empty: no plan yet, no downloads yet, profile incomplete
- Loading: generating (designed), plan loading, video buffering
- Error: agent failed, network lost, sign-in code expired, code entered wrong 3 times
- Offline: iOS, what is still reachable
- Edge: intake abandoned then resumed days later, plan generated before profile completed, same account signing in on a second device
7.5 App Store reach, and why web is the primary surface
Asked 2026-08-19: is an App Store launch global, and if not, is that another reason to build the web app?
The store is global by default. App Store Connect defaults to "All Countries or Regions" - 175 storefronts, and it automatically includes any storefront Apple adds later. Availability is not the constraint.
But there is a compliance floor, and one item is a hard blocker.
| Requirement | What it means here |
|---|---|
| EU Digital Services Act trader status | Since 17 Feb 2025, apps without verified trader status are removed from all 27 EU storefronts. Trader status must be declared even by developers who do not distribute in the EU. Verification takes time, so it cannot be left to submission week. |
| Published trader contact details | Once verified, Apple publishes a business address, phone number, and email on the App Store product page in the EU. If the registered address is a home address, that becomes public. Worth resolving before submitting. |
| Export compliance | The standard HTTPS declaration, but it must be answered or the build sits in review |
| Age rating | The brand uses censored profanity as an identity element. Any of it in-app moves the rating and narrows reach in some storefronts. Section 5.2 C1 places it once, deliberately - keep it to that. |
| Country-specific licensing | Some storefronts (China most notably) carry additional licensing requirements. Not worth solving for launch; deselect rather than delay. |
Global availability is not global usability. The MVP is English only, the persona is explicitly middle-American, the agent's build-vs-buy reasoning assumes US software pricing, and any future purchase flow is USD. A user in Jakarta can download it. She cannot use it well.
The stronger argument for the web app
Yes, this is more reason to build the web app - but it is the fourth reason, not the first. Ranked honestly:
- Android. iOS is roughly 58-60% of the US mobile market, which means an iOS-only launch is invisible to about 4 in 10 of the target audience in the only country the MVP actually serves. Globally it is worse: Android is roughly 69%. A woman running a salon in Missouri is not reliably an iPhone user, and there is no Android app in this plan. The web app is the Android app.
- Desktop. The plan is a document she will read, print, and hand to a partner or an accountant. She will do the audit sitting at the front desk with a keyboard, not thumbing through it on a phone.
- No review queue. Web ships the day it is ready and iterates daily. Every iOS change costs ~10 days.
- Reach and terms. Global from the first minute with no storefront compliance, no 15%, and a plan that can be shared by URL - which is the only organic distribution channel the launch has.
Conclusion, and it confirms the existing plan rather than changing it: the web app is the product and the iOS app is a distribution channel. That is already the build order in ../docs/01-scope.md. This is the evidence for it, and the reason to hold the line if the App Store timeline slips - web live Sept 1 is the launch, with or without Apple.
Android is committed
Decided 2026-08-19: Android ships after the web app and iOS, and it is a goal, not a maybe. It is out of the MVP and out of Phase 1 on sequence alone, not on merit. The web app covers Android users in the meantime, which is what makes the wait survivable rather than a hole in the plan.
Three consequences worth acting on now, while it is cheap:
- Three clients on one API, not two. Every rule in 4.4 goes from good practice to load-bearing. Any logic that leaks into a client now has to be written three times and kept in sync three ways. The content manifest in particular stops being a convenience and becomes the only way a new module reaches all three surfaces at once.
- Design tokens compile to three targets (B8): CSS custom properties for web, a Swift enum for iOS, a Kotlin or Compose object for Android. Generated from one source. Hand-copying across two targets is already a bad idea; across three it is guaranteed drift.
- Stop assuming iPhone dimensions. Android skews toward budget hardware and a far wider range of screen sizes and densities, and among this audience that skew is stronger, not weaker. Layouts should already be fluid rather than pinned to iPhone breakpoints, and the 44px hit-target floor (U5) should be treated as 48dp, which is the Android guideline and the stricter of the two.
One thing Android gets right that iOS does not: Play review typically takes hours to a few days, not ~10. The update tax that shapes so much of the iOS plan mostly disappears there.
See D7 for the form it takes.
8Website impact - wtfisai.co
The app changes what the site is for. The site currently sells four products behind a waitlist modal. After Sept 1 there is a free product that exists and works, which is a stronger opening than a waitlist.
| ID | Change | Detail | Priority |
|---|---|---|---|
| S1 | Primary CTA changes | Hero goes from "Join the Waitlist" to "Build your AI plan, free" pointing at app.wtfisai.co. A working free product outperforms a list signup. | Must, by Sept 1 |
| S2 | Retire or repurpose the waitlist modal | The multi-step modal collects segmentation the app now collects better, inside a product. Keep it only for Training and Build Office Hours enquiries. | Must |
| S3 | Offerings section is out of date | It shows four products. Reality is: free plan tool, free and $5 magnets, playbooks, the 101, the 201, Build Office Hours, Training. Restructure as a ladder, not a four-up. | Must |
| S4 | Reconcile wtf-products.md | It still lists a $1,350 4.5-month cohort 101, contradicting the curriculum doc's $499 / $1,350 annual SKUs. Two live price stories on one site. | Must, blocks S3 |
| S5 | Playbooks pages say "Coming soon" | Do not drive app traffic to dead CTAs. Wire Stripe and Kit, or hide the pages until launch. | Must |
| S6 | App Store badge | Add once approved, ~Sept 12. Not before - a badge linking nowhere is worse than no badge. | Should |
| S7 | Cross-domain continuity | wtfisai.co and app.wtfisai.co need shared nav, shared tokens (B8), and shared session awareness so a signed-in visitor sees "Open your plan" instead of "Sign up". | Should |
| S8 | Apple linking constraint | If iOS ships as a reader app (D1), the app may not link to or mention buying on the website. This constrains in-app copy, not the site. Whoever writes the App Store description needs to know. | Must, awareness |
| S9 | Michelle's testimonial | "I got a job leading AI at a tech company" is the strongest proof the business has. Get it in writing and put it on the site and the course teaser. | Should |
| S10 | The link hub | sheilapande.com/linklibrary from the July TODO points at magnets. Repoint at the app as the primary destination. | Should |
9Requirements
Numbered for tracking. R1-R5 are Phase 0. Anything not listed is out.
R1. Account
- R1.1 Email 6-digit code sign-in, web and iOS
- R1.2 Sign in with Apple on iOS, linking to an existing account on matched email, private relay included
- R1.3 One session state visible across surfaces: sign in on web, open iOS, already signed in
- R1.4 No passwords anywhere
R2. The plan agent
- R2.1 Two chains, career and business, sharing a profile
- R2.2 Chain of 4 nodes, each output feeding the next, matching the plan's sections
- R2.3 Runs server side. Prompts never ship to a client.
- R2.4 The plan may only assert values present in the profile. No inferred numbers, no market averages, no invented spend. Every figure renders with its source.
- R2.5 Email captured before the plan renders
- R2.6 Plans are stored, versioned, and regenerable
- R2.7 Failure is graceful, answers are preserved, and the plan is emailed if it completes later
R3. Path routing
- R3.1 Business path ends at the 101
- R3.2 Career path ends at the two career playbooks, with the 101 offered secondarily
- R3.3 Path is stored and changeable in the profile
R4. Return loop
- R4.1 Profile is editable at any time
- R4.2 Editing it prompts a regenerate
- R4.3 Regeneration shows what changed
- R4.4 One nudge per user: after 7 days, if the profile is incomplete, one email and one push, offering a sharper plan
R5. Content
- R5.1 Three existing lead magnets, email captured on download
- R5.2 Sheila's intro video, streamed, with an offline copy on iOS
- R5.3 Content served from a manifest so it changes without an app release
- R5.4 Kit receives every capture, tagged by path and by asset
10Acceptance criteria for Sept 1
- A new user reaches a finished plan in under 5 minutes on a phone
- Every number in the plan traces to something she typed (R2.4)
- Intake completion is above 60% in testing with 5 real people who match the persona
- The plan exports to a PDF that looks on-brand when printed
- All three magnets download and land in Kit, tagged correctly
- Sign in on web, open iOS, still signed in, same plan visible
- Every state in 7.4 has a designed screen, no raw errors
- No em dashes anywhere in the product (automated check)
- No retired brand colors anywhere (automated check)
- The web app is live at
app.wtfisai.co - The iOS build is submitted, with icon and screenshots
- wtfisai.co points at the app, with no dead "Coming soon" CTAs in the path
11Open decisions
Carried from ../docs/03-open-decisions.md, unchanged where unresolved.
| ID | Decision | Recommendation | Blocks |
|---|---|---|---|
| D1 | Does iOS sell anything at launch? | No. Reader app for Sept 1. Phase 0 sells nothing, so StoreKit costs a week for zero revenue. Add IAP in Phase 1. Note the linking constraint in S8, and the compliance floor in 7.5. | iOS scope, App Store copy |
| D2 | 102 or 201? | 201. The curriculum files use it and the number gap signals the difficulty gap. | C14, all course copy |
| D3 | The price story | Sheila's call. Three versions are live: "high-ticket" (Aug 8), $499/$1,350 (curriculum doc), $1,350 cohort (wtf-products.md, stale). | S3, S4, course teaser |
| D4 | Launch targets in 2.2 | Sheila's call. Pick numbers or the launch cannot be judged. | Everything downstream |
| D5 | Michelle's repo access | Outstanding since Jul 18. Blocks 5.4 and the two new modules. | Copy, curriculum |
| D7 | What form does the Android app take? | Two routes. A: the web app packaged for Play via a Trusted Web Activity - days of work, one codebase, immediate Play presence, and it inherits every web fix automatically. B: native Kotlin/Compose - a third real codebase to build and maintain, against a solo founder and one contract developer. Recommendation: A first, B when Android traffic earns it. Route A also keeps the option open, since a TWA can be replaced by native later without changing the API or the account model. | Android timeline, hiring, token pipeline |
| D6 | Type pairing | DECIDED 2026-08-20: Broadcast (Archivo expanded + Archivo), with the Clean treatment and the glitch budget in 6.2. Now default in the prototype. Remaining work: re-cut the hero artwork, update design file tabs 6 and 7, roll to wtfisai.co. | Every surface, the design file, the hero artwork |
12Risks
| Risk | Impact | Mitigation |
|---|---|---|
| EU trader status not verified in time | App pulled from 27 EU storefronts, or blocked at submission | Declare and verify it now, not in submission week (7.5) |
| Apple rejects as a website wrapper | Miss the launch window entirely | I1 and I2 are the native-value answer. Build at least one before submitting. |
| The 10-day review means nothing is live Sept 1 | Launch lands flat | Web live Sept 1 is the launch. App Store is a second announcement ~Sept 12. Two moments, not one missed one. |
| Curriculum and app compete for Sheila at the same time | Both slip | The MVP deliberately needs no course content. Only the intro video couples them. |
| The plan is good enough that nobody buys | Free tier cannibalizes the course | P5's what/why/how boundary, enforced in C9 |
| Agent costs scale with a viral moment | Surprise bill | Per-account rate limit, one plan per 24 hours unless the profile changed |
| The font decision does not reach the site and the design file | Three surfaces drift apart again, and the design file stops being canonical | D6 is decided. Roll it into Design-File-WTFISAI.md tabs 6 and 7 and re-cut /images/wtf-tagline-lower.png in the same pass, before production code starts |
| Michelle is interviewing and may take the job | Copy capacity disappears | Get the plan template and intake copy written first (5.4), they are the irreplaceable parts |
13What happens after this is approved
- Sheila answers D1 through D5
- Create the repo, give Michelle a branch (D5)
- Michelle drafts the plan template and intake copy (5.4)
- Redesign intake and add email capture in the mockups (U1, U2)
- Fix the plan screen so every number has a source (C7, R2.4)
- Design the app icon (B2) - long pole for the App Store
- Build: API and account first, then web, then iOS against the same API