# No placeholder text or lorem ipsum in UI

- **Pattern:** `ab-000490` (`app-store-review-blockers.completeness-stability.no-placeholder-content`)
- **Severity:** high
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-000490
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-000490)

## Why it matters

Apple App Review Guideline 2.1 (App Completeness) and Google Play's Minimum Viable Product policy both reject submissions containing lorem ipsum, TODO markers, or `Coming soon` placeholders on sight. Reviewers open the app as a real user, navigate to every tab, and flag unfinished copy within minutes. A single rejection costs 1–3 days per review cycle, burns reviewer goodwill on future submissions, and blocks marketing launches already committed to press, paid acquisition, or investor demos.

## Severity rationale

High because a single placeholder string triggers automatic rejection and delays launch by multiple review cycles.

## Remediation

Run a repo-wide search for `lorem ipsum`, `TODO:`, `FIXME:`, `coming soon`, `placeholder`, and `under construction` across `src/`, `screens/`, `components/`, `pages/`, and `app/`. Replace each hit with shipped copy, or remove the unfinished route from the navigator entirely. For features genuinely not ready, feature-flag them off for production builds:

```tsx
if (Config.FEATURE_PROFILE_V2) {
  return <ProfileScreen />;
}
return null;
```

## Detection

- **ID:** `no-placeholder-content`
- **Severity:** `high`
- **What to look for:** Count all relevant instances and enumerate each. Search all source files under `src/`, `screens/`, `components/`, `pages/`, `app/` (Expo Router) and template/view files for these patterns (case-insensitive): `lorem ipsum`, `coming soon`, `under construction`, `placeholder`, `TODO:`, `FIXME:`, `[Coming Soon]`, `Test Screen`, `Sample Data`, `dummy content`, `fill in later`, `replace this`, `not implemented yet`. Also check hardcoded string literals in JSX/TSX, Flutter widgets, Swift views, and Kotlin composables. In React Native, look for `<Text>TODO</Text>`, `<Text>Coming soon</Text>`, or similar patterns in `.tsx`, `.jsx`, `.dart`, `.swift`, `.kt` files.
- **Pass criteria:** No placeholder text, lorem ipsum, "coming soon" copy, or obviously unfinished UI copy is visible in source files that would be rendered to the user. At least 1 implementation must be verified. A partial or placeholder implementation does not count as pass. Report the count even on pass.
- **Fail criteria:** Any instance of lorem ipsum, TODO labels, "Coming soon" banners, placeholder copy, or stub screens that render readable incomplete text.
- **Skip (N/A) when:** Never — placeholder content always needs to be evaluated.
- **Detail on fail:** Cite the specific file and string. Example: `"Placeholder text found in src/screens/ProfileScreen.tsx: 'Coming soon — this feature is under construction'"` or `"Lorem ipsum in src/components/OnboardingCard.tsx at render output"`
- **Remediation:** Apple and Google reviewers use the app as a real user and will reject immediately upon finding placeholder content. Before submitting:
  1. Search all source files for the patterns above using your editor's global search
  2. Replace every instance with real, final copy — even a short description is better than a placeholder
  3. Remove or hide any feature screens that are not production-ready using feature flags or by removing the route entirely from the navigator
  4. If a feature is genuinely "coming soon", remove its entry from the app's navigation entirely rather than showing an empty screen

  Review the configuration in `src/` or `app/` directory for implementation patterns.

Taxons: placeholder-hygiene

HTML version: https://auditbuffet.com/patterns/ab-000490
