Knowledge Center
What ORANIS knows about making apps win — distilled from world knowledge, your own curation, and live App Store movement. Each belief is a prior: a confidence-scored claim that ORANIS's own results confirm or overturn over time. 200 active priors.
Sources: appstore_charts ● · founder_curation ● · opus_distillation ● · data_ai ○ · sensortower ○
Add a prior (your knowledge — highest trust)
What makes apps succeed · 76 priors · avg conf 0.89 · freshness 120d
96% founder directive_2026-06-16 | COMPLETE THE VALUE LOOP — analyzers must never dead-end at a number. Produce RICH, beginner-friendly analysis with MANY domain metrics (consistent higher=better), showing BOTH problems (concerns + why) and strengths; translate to a primary focus + concrete ACTIONS (what to do); WIRE every downstream surface from the analysis (auto-generate routine/plan/recommendations — no empty 'not set up' states); emphasize the TRANSFORMATION with a visible goal + progress; make free-vs-gated visually CLEAR (lock badges) and give subscribers FULL access until expiry; user must understand problem AND solution. Metric set is per-domain. → Rich metrics + concerns/strengths + actions + wired routine/recs + visible goal + clear gating, per domain. | |
96% clearpath first_app | A generated app must be checked with its OWN TypeScript typecheck (tsc against the app's tsconfig + installed deps), not just an esbuild syntax-check with tsconfig-raw='{}'. Syntax-checking proves the file parses; it does NOT prove imported symbols exist, types line up, or the app will run. → Before declaring a generated app ready: run its own `tsc --noEmit` (install deps in the materialized tree) OR at minimum the named-import/export resolver, AND rely on crash reporting for runtime confidence. 'Builds + syntax-checks' is necessary, not sufficient. reality: +1 / −0 | |
95% founder directive_2026-06-16 | PER-APP MONETIZATION TUNING (ORANIS must keep improving this): no two apps monetize identically. For each app, choose the free allowance and what is TEASED vs GATED based on its value loop — enough free to evaluate, NEVER enough to be fully satisfied (or they never pay), and never so much that free users burn expensive AI tokens. Default ~1 free real result; show the headline outcome (score + one takeaway) free, gate the depth (full breakdown, detailed recommendations, history/trends, next action) behind premium. Cutoff matches the app (photo analyzer=1 analysis; interview-prep=1 answer + teaser; dating-profile=1 rating, gate rewrite). Paywall must disclose price/renewal/unlocks/cancel (Apple 3.1.2(c)). Feed outcomes (conversion, retention, token cost) back into priors so monetization improves over time. → Tune free tier + tease-vs-gate per app; learn from conversion/retention/cost to improve. | |
95% founder directive_2026-06-16 | LEGAL SAFETY / NON-LIABILITY is mandatory for every analyze/recommend app (Apple App Store Review Guidelines). 1.4.1: never diagnose/treat or claim clinical accuracy; show a domain-aware DISCLAIMER before the first analysis and on every result + recommendation ('AI analysis, informational only — not medical/financial/professional advice; consult a licensed professional'), plus a one-time onboarding consent. 2.3.1(a): say 'analyze/score/suggest', never 'diagnose/treat/cure'. 5.1.2: consent before sending a photo/personal data, disclose AI processing, never persist raw media, never use data for ads. Generated Terms must include a domain-aware 'Not Professional Advice' + liability-limitation/indemnity section; product links must resolve to verifiable pages (recommendations are suggestions, not endorsements). This keeps the studio non-suable across all apps. → Inject in-app disclaimer + consent; non-advice framing; verifiable links; liability terms — per app domain. | |
95% founder directive_2026-06-16 | CAMERA UX for photo capture: use a premium in-app expo-camera screen (full-screen, front-facing default, MIRRORED preview + face guide + capture/flip/close) — like Snapchat. Flip the captured FRONT-camera image horizontally (expo-image-manipulator) so the saved photo matches the mirrored preview; otherwise selfies look 'flipped' and cheap. The basic expo-image-picker camera produces flipped/awkward selfies — use it only as a library fallback. Downscale on capture (~1280px). → Build an expo-camera screen with mirrored preview + flip the front capture. | |
95% founder directive_2026-06-16 | READINESS/BLOCKER CHECKS must recognize BUILD-TIME-GENERATED artifacts and current state — never flag a compliant app. PrivacyInfo.xcprivacy is generated by Expo from app.json ios.privacyManifests (not a source file); the demo account is created at submit; the ASC app + builds exist after the pipeline runs. Checks that look only for source files / hardcode false produce phantom blockers (PRIVACY_MANIFEST_MISSING, 'missing demo account'). Record real state (e.g. appstore_privacy_manifests from app.json at build) and resolve stale launch_blockers when the underlying condition is fixed so the dashboard reflects reality. → Make readiness recognize Expo-generated + post-pipeline state; auto-resolve stale blockers. | |
95% founder directive_2026-06-16 | APP USER AUTH SPANS TWO SUPABASE PROJECTS: generated-app users live in the SHARED APPS project (SUPABASE_APPS_*), NOT the control plane. Any server endpoint that verifies an app user's bearer (e.g. /api/oranis/intelligence verifySupabaseBearer) MUST validate the token against the APPS project too — otherwise valid app-user tokens fail and the feature silently errors ('Analysis is busy'). Also send anonymousId/userId from the app as a fallback identity. → Verify app-user bearers against the apps project; include anonymousId fallback in requests. | |
95% founder directive_2026-06-16 | VISION RELIABILITY: free vision models over-refuse real selfies ('not a face') and choke on full-res phone photos. Downscale server-side to ~1280px JPEG q88 (enough facial detail, fast, avoids FUNCTION_INVOCATION_TIMEOUT) and append a leniency instruction so the model only returns the no-face sentinel when there is truly no face. Raise the route maxDuration (>=120s). For production reliability, prefer a cheap PAID vision model — free tiers are inconsistent (intermittent empty responses). → Downscale to ~1280, add leniency, raise timeout, and move to a cheap paid vision model for production. | |
95% founder directive_2026-06-16 | IN-APP DATA LOGGING: whenever the app produces a result (a score, analysis, or recommendations), it MUST be persisted to the app's own per-user tables (e.g. scan -> clarity/inflammation/etc., insight, streak) so the user has a history, the home/progress fill with real data, and the retention loop + aggregate growth flywheel have signal. Never show a result without logging it. → Persist every result to per-user tables on completion; surface it in history. | |
95% founder directive_2026-06-16 | MONETIZATION: expose a founder-configurable free-use constant (e.g. FREE_SCAN_LIMIT, default 1). User gets that many free AI uses, SEES the first result in full, and the NEXT use opens a REAL paywall (app/paywall.tsx modal — never a dead button). Purchases are STOREKIT via react-native-iap through the useSubscription hook (NOT RevenueCat — that wrapper file is StoreKit). Subscription product IDs auto-created in ASC as ${bundleId}.premium.monthly|annual|weekly to match the app SKUS. Gate BEFORE doing the work. NOTE: live purchases also need Apple's paid-apps agreement + banking/tax set up by the founder; until then the paywall shows but sandbox purchases may not complete. → Ship a real StoreKit paywall + a configurable free-use limit gating the action before work. | |
95% founder directive_2026-06-16 | RETENTION LOOP is mandatory: a daily core action + growing streak + fresh daily insight/progress + a daily reminder scheduled right after the first success, plus a 'do it again tomorrow' nudge. The home shows streak + progress so returning users feel momentum. This is what makes a subscription business work (DAU + habit). → Wire streak+reminder+progress+next-step nudge into every app; reinforce after each result. | |
95% founder directive_2026-06-16 | PER-APP DATABASE SCHEMA MUST BE RECONCILED, NOT just create-if-not-exists. Generated apps live in their own Postgres schema (=slug) in the SHARED apps Supabase project (SUPABASE_APPS_PROJECT_REF, exposed to PostgREST). 'create table if not exists' NEVER updates an existing table, so a regeneration that changes columns leaves the live table drifted and the app's inserts/selects silently fail (ClearPath: stale scan table had photo_url/ai_clarity_score while code wrote image_url/clarity_score → scans never saved, home all zeros). The provisioner now emits 'alter table ... add column if not exists' for every authored column (self-healing, non-destructive) and runs FK constraints AFTER reconciliation, best-effort. Verify the live app schema matches the app code's columns before trusting a build. → Reconcile columns on every provision (ADD COLUMN IF NOT EXISTS); verify live schema vs app code; FKs best-effort after columns. | |
95% founder directive_2026-06-16 | ABUSE & COST PROTECTION: no app may let free users burn API limits or use the AI as a free general chatbot. ORANIS enforces per-user daily AI caps AND scopes every intelligence request to the app's purpose+feature server-side (off-topic/general-assistant/jailbreak requests are refused). Apps reinforce this: tie AI to concrete in-app actions (scan/summary/coached step), never a raw open-ended chat with no domain frame; gate heavy/unlimited AI behind the subscription. → Scope AI to the app domain + meter per user + gate heavy use behind premium. | |
95% founder directive_2026-06-16 | Apps reach ORANIS Intelligence ONLY via enabled taskTypes (fast_classification, cheap_chat, summarization, support_chat, app_user_inference). Use app_user_inference for analysis/inference; never 'reasoning' (blocked). ORANIS picks the best concrete model per task server-side; VISION images route to a verified free OpenRouter vision model (nex-agi/nex-n2-pro:free + nvidia VL fallbacks; NO Google/Gemini). Model IDs go stale — keep the vision list current/env-overridable (ORANIS_VISION_MODELS). → Use enabled taskTypes; verify the vision model list against OpenRouter's live free-vision models before relying on it. | |
95% founder directive_2026-06-16 | PRIVACY + PER-APP DATA ISOLATION + GROWTH FLYWHEEL: each app's user data is isolated by app_id (service-role RLS) and never crosses apps. NEVER persist raw user media/PII (e.g. the scan photo) — send media transiently for analysis and store ONLY the derived result (scores/insights). Keep only aggregate, non-identifying insights to improve the app in a FUTURE update once it has enough users / proves a winner. Honor Delete Account + privacy policy. SEARCH must run a real query; any paid-to-serve feature (AI analysis, unlimited usage) sits behind the subscription with Restore Purchases, after the user tastes real value. App MEMORY: load the user's profile/history/streak on launch and personalize — a returning user never sees a first-run blank state. → Bake data-minimization + per-app isolation + real search + paywall gating + persistent personalization into every app. | |
95% founder directive_2026-06-16 | Picture-analyzer apps must TRULY analyze the photo. Capture with expo-image-picker (camera + photo-library fallback, base64:true, quality ~0.5), POST to /api/oranis/intelligence with { image:<base64>, imageMimeType } plus a STRICT-JSON prompt naming the exact fields the app stores; parse robustly (extract first {...}), clamp values, and on failure ask the user to retake — NEVER fabricate scores. Add iOS NSCameraUsageDescription + NSPhotoLibraryUsageDescription to app.json and expo-image-picker to dependencies. ORANIS routes images to the best free OpenRouter VISION model server-side (no Gemini; no provider key in the app). → For any analyze-a-photo product, build the capture+vision client and ensure the intelligence endpoint has vision; pick the best model for the task. | |
95% founder directive_2026-06-16 | An app's HEADLINE action must actually PERFORM the work and produce a real, persisted result the user sees — NEVER a button that only navigates to another tab. Wire it: tap -> collect input -> call ORANIS Intelligence (/api/oranis/intelligence) -> parse a real result -> persist to supabase -> show result + next step (update streak/score/history). A core action that only router.push()es is a SHIP BLOCKER. Apps NEVER hold provider keys: auth is the signed-in user's Supabase bearer via platformFetch. ORANIS server-side selects the BEST model per feature (fast classify vs strong reason vs vision) — the app just declares taskType/feature. → Always wire the core loop end-to-end through ORANIS Intelligence and persist the result; verify the headline button does real work before shipping. | |
95% clearpath first_app | Syntax + typecheck do NOT catch native/runtime crashes — a build must be sanity-checked on a real device (or via crash reporting) before it's declared done. → Treat 'builds + typechecks' as necessary-not-sufficient; rely on crash reporting + a smoke test for runtime confidence. Be extra conservative adding native deps before submission. reality: +1 / −0 | |
95% clearpath first_app | Every generated app MUST report crashes to the backend (error boundary + global JS handler -> /api/mobile/error). Without it, with auth-gated analytics, client crashes are invisible and undiagnosable. → Generator template must include a crash reporter wired to the React error boundary AND ErrorUtils.setGlobalHandler, posting to /api/mobile/error (no auth, rate-limited, sanitized). reality: +1 / −0 | |
93% clearpath postmortem | Expo Router apps MUST ship app/index.tsx as the entry route → Emit app/index.tsx that Redirects by onboarding and session state; ensure it survives the merge. | |
93% clearpath postmortem | Use shadows and gradients sparingly not per card → Limit shadow and LinearGradient; use borders and surface tokens for depth. | |
93% clearpath postmortem | Virtualize lists with FlatList not ScrollView and map → FlatList for vertical lists over 8 items; no nested vertical ScrollViews. | |
93% clearpath postmortem | Never write LLM prose or code fences into source files → Extract code from fences and prose in author and repair output. | |
93% clearpath postmortem | All package alias and relative imports must resolve before build → Declare packages in package.json and heal broken imports before build. | |
93% clearpath postmortem | Resize and compress generated images before upload → Resize to 1280px and JPEG q82, under 300KB. | |
93% clearpath postmortem | Never gate SplashScreen.hideAsync on RevenueCat or IAP init → Hide splash immediately; configureRevenueCat fire-and-forget. | |
93% clearpath postmortem | Use expo-image not RN Image for remote images → Use expo-image with cachePolicy memory-disk, contentFit, fixed size. | |
92% clearpath first_app | On account deletion, tell subscribers it does NOT cancel their subscription (it's tied to their Apple ID, not the app account) and link to manage it — Apple requires this. → If the user is premium, the delete-account confirmation must state the subscription continues + offer a 'Manage subscription' link (apps.apple.com/account/subscriptions / Settings). reality: +1 / −0 | |
92% clearpath privacy_2026-06-17 | NEVER persist raw user media (photos) to the backend — send it transiently for analysis and store only the DERIVED result (scores/insights). A device-local file path is OK; image bytes must never be uploaded, stored, or logged. → analyzeSkinPhoto sends base64 transiently; scan row stores derived scores + a local uri only; route records usage metadata, never the image. | |
92% clearpath iteration_2026-06-17 | CORRECTNESS: subscription gating must read the StoreKit entitlement synced into ONE isPremium flag (on launch, foreground, after purchase, on restore). Paying must instantly unlock and persist until expiry — never gate off an unsynced profile.plan. → Add syncEntitlement() bridging getCustomerInfo() -> store.isPremium; call it in loadToday + restore. | |
90% founder directive_2026-06-16 | Analyze-and-recommend apps must recommend specific products by NAME and BRAND, sourced from trusted, widely-tested options across MULTIPLE major reputable brands (breadth, not one narrow category like derm-only), each with an outward link. Route ALL recommendations through ONE data layer (lib/recommendations.ts) where each item carries { brand, productName, why, url, category, priority, sponsored:boolean, affiliateUrl? } so migrating to sponsored/affiliate/paid-placement later is a DATA change, not a code rewrite. Also: the app icon must concretely depict what the app DOES (on-domain), not a generic abstract shape. → Centralize recommendations as data with a sponsored flag + affiliateUrl; source from major trusted brands; make the icon on-domain. | |
90% founder directive_2026-06-16 | Home must feel rich and valuable on first paint: the daily core action PLUS visible stat cards (streak / total / current score) PLUS a short feature or credibility row PLUS at least one insight/recommendation/progress section above the fold. Never a sparse single card surrounded by empty space. If the app analyzes user input (photo/text/answers), the analysis must be GENUINE and aligned to the app's specific goal (via /api/oranis/intelligence) returning concrete findings + next steps — never a placeholder or random score. → Make home content-dense above the fold; ensure any analyzer returns real, goal-specific results. | |
90% founder directive_2026-06-16 | Bottom navigation is a pyramid: 5-6 PRIMARY tabs maximum, never more. Never leave undeclared screen files in app/(tabs)/ — Expo Router renders a phantom broken tab for each file; give non-tab routes href:null and reach secondary features via router.push. The per-app repo push must be a CLEAN full-tree replacement (no base_tree overlay) so routes removed from source don't accumulate and resurface as phantom tabs across rebuilds. → Cap tabs at 5-6; href:null any non-primary (tabs)/ route; keep secondary features as router.push sub-views; ensure the build push fully mirrors source. | |
90% founder directive_2026-06-16 | Text must NEVER be near-invisible. Light/white text is allowed ONLY over a guaranteed-dark surface (a dark hero image with a scrim, or a dark/primary-filled card). Light-background screens (Profile, Settings, lists, detail views) use DARK text for title/eyebrow/subtitle. Never reuse a dark-hero header style on a plain light screen. → Every screen must be fully legible; verify each title contrasts with the surface directly behind it; default to COLORS.text on light backgrounds. | |
90% founder directive_2026-06-16 | Any score, rating, index or grade shown to a user MUST be explained: what it measures, its range, and what is good vs needs-work — via a one-line caption under the number AND a tappable info affordance. Never show a bare uninterpretable number. → For every numeric score, add an inline caption + a tap-to-explain sheet describing meaning, range, and how to improve it. | |
90% clearpath first_app | Sign-out must clear only local/in-memory state and the auth session — never delete the user's DB data; sign-in then reloads everything by user_id. → Keep destructive deletion only behind explicit 'delete account'. Reload all per-user data on auth restore so returning users see their full history. reality: +1 / −0 | |
90% clearpath privacy_2026-06-17 | All per-user reads must be scoped by user_id (plus owner RLS) so one user can never see another user data; only aggregate, non-identifying signals feed the growth flywheel. → Every supabase query filters .eq(user_id); RLS owner policies on every table; flywheel uses aggregates. | |
90% clearpath iteration_2026-06-17 | STRUCTURAL: every Expo Router app must ship app/index.tsx; a missing entry route white-screens the app AND hard-fails validation. The build now self-heals it (ensureEntryRoute). → eas-build synthesizes a tiered entry route when missing; generator should still author it. | |
90% clearpath first_app | AI transparency: before sending a user's personal data (photo, etc.) to a THIRD-PARTY AI service, clearly disclose it and get explicit one-time consent (Apple, enforced Nov 2025). → Show a one-time consent dialog before the first AI call ('photo sent to an AI service for analysis only, never stored'); persist consent; restate it in the standing disclaimer. reality: +1 / −0 | |
90% clearpath first_app | Routine/regimen content must be derived from the SAME data as the product recommendations, so the two always correlate (the routine names the exact products suggested). → Build the routine from the recommendation engine keyed by the user's concern; never a generic default disconnected from recs. reality: +1 / −0 | |
90% clearpath first_app | Every account-based app needs the non-negotiable baseline: signup, login, logout, PASSWORD RESET, account deletion, Restore Purchases, manage subscription, privacy/terms/support links, permission strings, error boundary, loading/empty states, and an App Store rating prompt. → Treat this list as a pre-submission checklist for every generated app; add password reset + a tasteful rating prompt by default. reality: +1 / −0 | |
90% clearpath ux_2026-06-17 | Expo Router: a route group's index screen is the GROUP path ('/(tabs)'), never '/(group)/index' — the literal /index segment throws 'no route' at runtime. The build now auto-heals these literals. → healRouteLiterals rewrites /(group)/index -> /(group) in eas-build before validation. | |
90% clearpath ux_2026-06-17 | Every score shown to a user MUST show its scale and direction (e.g. "62/100 · higher is better"); never a bare number a user cannot interpret. → Render the /N suffix + a one-line "out of N · higher/lower is better" hint next to any score grid. | |
90% opus distillation | Apps that deliver a 'wow moment' within the first 60 seconds retain 2-3x better than those requiring setup, onboarding completion, or account creation before value is felt. → Redesign onboarding so the core value action (first song played, first lesson done, first photo edited) happens before email/account creation is required. Move auth to post-value, not pre-value. | |
88% clearpath privacy_2026-06-17 | Every app must RECORD per-app interaction analytics (scans, toggles, opens, paywall views, screen views) to /api/mobile/analytics — scoped by appSlug + userId/anonymousId, NO PII — so ORANIS can see how users interact and the flywheel learns from aggregates. → Wire analytics.track on every meaningful action; flush batched to /api/mobile/analytics with appSlug. | |
88% clearpath first_app | Backfill/seed derived data for users who predate a feature, so the app is never empty for them (e.g. generate a routine for someone who scanned before routines existed). → On load, if a user has the precursor (a scan) but is missing the derived artifact (a routine), generate it once. Also seed directly for known affected users. reality: +1 / −0 | |
88% clearpath ux_2026-06-17 | Photo/scan apps MUST preview + confirm (Retake / Use this photo) BEFORE running the analysis, so a bad/blurry pic never consumes a metered or free action. This — not a delete feature — is what stops users rage-quitting/reinstalling over a bad pic. → Camera capture -> preview state -> only Use this photo calls the analyzer; Retake discards free. | |
88% clearpath ux_2026-06-17 | Gating/lock copy must use DYNAMIC counts from the actual data ("4 of 8") — never hardcode a number, or it can claim more than it shows. → Compute shown/total from the real array length; drive both the grid slice and the "unlock all N" copy from it. | |
88% clearpath iteration_2026-06-17 | Generate the routine/plan ONCE from the first analysis and persist it; NEVER delete+recreate it on every run (wipes completion + breaks streak). Reset only per-day completion via a local date guard. → In completeScan, insert plan only when none exists; reset completed_today daily in loadToday. | |
87% opus distillation | Variable reward schedules embedded in the core loop (not just notifications) are the primary driver of compulsive daily opens — fixed rewards plateau engagement within weeks. → Audit your core loop: is the primary reward output variable in quality or magnitude? If not, redesign the content, matching, or discovery layer to produce unpredictable but plausible high-value outcomes on roughly 1-in-5 to 1-in-10 core actions. | |
86% opus distillation | Subscription monetization outperforms IAP for apps where the core loop requires daily or near-daily engagement, but destroys retention when engagement is inherently episodic or low-frequency. → Map your median session frequency before choosing a monetization model. If median users open the app fewer than 8x/month, do not default to subscription. Use one-time purchase, credits, or event-based IAP instead. | |
85% clearpath ux_2026-06-17 | Do NOT add delete-to-refund for metered actions (invites farming free AI). Prefer a confirm-before-spend step; only allow deleting things that do not change counters/retention. → Skip scan delete; gate stays on lifetime count; confirm step prevents waste. | |
85% clearpath ux_2026-06-17 | SIMPLE beats DENSE: prefer one clear element over a heavy explainer. If a UI makes the user learn too much, they give up — favour clarity + fewer words. → Replace multi-column legends/walls of text with a single clear banner + plain one-liners. | |
85% clearpath ux_2026-06-17 | Upgrade must be ONE tap and the current plan always obvious: a single simple plan banner high on the main screen, not buried at the bottom or hidden in a dense legend. → Top-of-content plan banner (Upgrade CTA for free, "Premium · full access" pill for paid); keep inline lock chips simple. | |
85% clearpath iteration_2026-06-17 | Generated-app DB writes must only use columns defined in supabase/schema.sql; a stray column (e.g. duration_seconds on routine_step) makes the whole insert fail silently and the feature stays permanently empty. → Keep store inserts aligned to schema.sql; add columns to schema before writing them. | |
85% clearpath first_app | Learning should INFLUENCE ORANIS, not restrict it: fact-based, no random choices, no pre-weighted focus; fact-check and retain what is learned. → Encode learnings as confidence-weighted priors that bias—not gate—choices; require evidence before raising confidence; let relevance emerge from outcomes; keep graceful fallbacks so a weak signal never blocks action. reality: +1 / −0 | |
85% clearpath first_app | Portfolio-overlap / similarity must measure app-specific CONTENT, not shared generator scaffolding. → Fingerprint on caption/content + archetype + niche (not nav/state/screen-count/device-set). Return zero similarity when there is no real content to compare. reality: +1 / −0 | |
85% clearpath first_app | Every consumer app must ship the Apple-compliance baseline before submission. → Treat this list as a pre-submission checklist for every generated app; block submission only on genuine gaps, not on still-building artifacts. reality: +1 / −0 | |
85% clearpath first_app | Each app should declare a per-app data-collection manifest (niche-specific + universal), privacy-tagged, feeding growth + winner decisions. → Configure a manifest per app (collected vs on-device-only vs never); piggyback batched analytics (no new tables/cron); derive an audience descriptor only once there is enough data; never pre-weight which fields matter — let outcome correlation decide. reality: +1 / −0 | |
85% clearpath first_app | Never mix higher-is-better and higher-is-worse metrics in one UI; derive a single consistent scale for all records including legacy. → Expose one helper that returns a higher-is-better breakdown for any record (rich analysis when present, derived from legacy fields otherwise) and use it everywhere. reality: +1 / −0 | |
85% clearpath first_app | Locally-stored user photos must render with a graceful fallback and must never be uploaded to the backend. → Wrap scan images in a component that falls back to a placeholder on error; keep photo bytes on device; send images to inference transiently without persisting them. reality: +1 / −0 | |
85% opus distillation | The single highest-leverage growth lever for consumer apps is reducing the share action to a single tap tied to a moment of peak emotional payoff — not a generic 'invite friends' screen. → Identify the single moment of highest emotional payoff in your app (task completion, achievement, transformation visible). At that exact moment, auto-generate a shareable artifact (image, result, score) and surface a one-tap share action. Do not use a generic referral link — make the shared content itself the ad. | |
84% opus distillation | Apps with a social obligation mechanic (streaks, co-commitments, or visible inactivity to peers) retain 40-80% better at Day 30 than equivalent apps with only personal progress tracking. → Introduce a streak, shared challenge, or mutual commitment mechanic tied to a visible social unit (friend, partner, team). Make inactivity socially legible, not just personally tracked. Even a single 'accountability partner' pairing increases retention measurably. | |
83% clearpath ux_2026-06-17 | An overall score must stay broadly consistent with its component scores (never overall 62 while components read 20) or the user distrusts the whole thing. → Prompt the model to keep the headline score roughly the average of the components. | |
83% opus distillation | Paywall placement immediately after the 'aha moment' — not at app open, not after a time delay, not at feature gate — maximizes free-to-paid conversion rates by 30-70%. → Remove any paywall that appears before the user has completed at least one full core loop action. Instrument the 'aha moment' event explicitly, then trigger paywall presentation on the second or third occurrence of that event, or when the user naturally hits a usage limit in the context of active engagement. | |
82% clearpath ux_2026-06-17 | See-all / navigation actions must point to where that content actually lives (insights -> progress, not a generic search). → Audit every see-all/nav target maps to the real destination. | |
82% clearpath ux_2026-06-17 | Free features must be LABELLED free (a small FREE badge) so users are never confused about what costs money. → Add a FREE badge to any always-free section header (e.g. the routine). | |
82% clearpath iteration_2026-06-17 | Transformation apps need a VISIBLE goal + progress toward it on BOTH home and progress (current vs target, points-to-go) — a journey, not a tracker. → Capture a target in onboarding; render a goal bar + delta on home and progress. | |
82% clearpath iteration_2026-06-17 | Analyzer/transformation apps must PERSONALIZE from onboarding: collect 2-3 domain inputs + a goal, persist them to a per-user profile row at first launch, and feed them (no identity) into the analysis prompt so output speaks to THIS user. → Add an onboarding profile step; ensureProfile() creates the row post-auth; pass skinType/concern/goal-equivalents into the ORANIS Intelligence prompt. | |
82% opus distillation | iOS users have 2-4x higher willingness-to-pay than Android users in Western markets, but Android-first markets (India, Southeast Asia, Latin America) require near-zero price points or ads-only models to achieve meaningful conversion. → Set iOS pricing at 1.5-2.5x Android pricing in Western markets. In India/SEA/LATAM, default Android to ad-supported or freemium with micro-IAP under $1. Run platform-specific pricing experiments via RevenueCat or equivalent before committing to a global price. | |
81% opus distillation | Apps that solve an emotionally acute problem (loneliness, anxiety, financial stress, appearance insecurity) have structurally higher engagement ceilings than apps solving convenience problems, because emotional urgency overrides habit formation barriers. → In positioning and onboarding copy, name the specific emotional pain state explicitly — do not abstract it to a feature benefit. Users should feel 'this app understands exactly what I'm feeling' within the first screen. Validate this with open-coded user interviews, not surveys. | |
80% clearpath ux_2026-06-17 | Related tabs must connect to each other (quick links), not be silos — e.g. Progress links to Today/Routine/Learn. → Add a compact quick-link row between sibling tabs so navigation is coherent. | |
80% clearpath iteration_2026-06-17 | Product recommendations must be RANKED to the actual analysis (concerns + primary focus), not one static generic list for everyone; keep one sponsorship-ready data module. → getRecommendationsForScan(signal) orders the curated list by concern match; UI reads only the module. | |
80% clearpath iteration_2026-06-17 | MONETIZATION is MOVABLE per app (learned, not a fixed rulebook): centralize free allowance + free-vs-gated surfaces + paywall style + price tier in ONE config and choose per app from paywall_pattern_memory conversion/retention; only the value-loop guarantees are fixed. Show a clear free-vs-Premium legend. → Emit a per-app MONETIZATION config seeded by getPaywallInsights(niche); keep tuning from outcomes. | |
79% verify | INDEX-FIX verify 1781595267545 | |
78% clearpath iteration_2026-06-17 | Secondary tabs (search/explore/library) must be useful from day one via a LOCAL curated knowledge set — never an empty state, never an API call just to feel useful. → Bundle a small in-code library (ingredients/concepts) and merge it into search results. |
Why apps fail · 28 priors · avg conf 0.86 · freshness 120d
96% clearpath first_app | When debugging a crash, do NOT anchor on the first plausible suspect ('I changed X, therefore X broke it'). Get the real signal first: the first exception / stack trace / first failing screen, then trace the code path. Verify the suspected fix actually resolves the symptom before claiming it does. → Reproduce + capture the real error (crash report / stack / failing component) before and after a fix. Treat a fix as unverified until the symptom is gone on the build the user actually runs. reality: +1 / −0 | |
96% clearpath first_app | A missing or renamed NAMED export that a screen imports (e.g. import { deriveSkinMetrics } from '@/constants' where the module exists but doesn't export it) is `undefined` at runtime — calling it throws 'undefined is not a function' and crashes that screen the moment it renders. The module PATH resolves, so Metro bundles fine and esbuild syntax-check passes; only a real typecheck or named-export resolution catches it. → Validate that EVERY named import resolves to a real export of the target module before building. ORANIS now enforces this with detectMissingNamedExports in mobile/generated-app-validator.ts (error-severity build blocker, resolves `export * from` chains, skips opaque/package modules to avoid false positives). reality: +1 / −0 | |
95% clearpath first_app | An auth route guard must NEVER redirect OUT of the main app (tabs) on a transient null session — only push logged-IN users from auth/onboarding INTO the app. The entry route owns logged-out routing. → Keep one routing authority (the '/' entry gate). Auth-screen guards should only do session+(inAuth||inOnboarding) -> tabs. Wait for auth init before routing. reality: +1 / −0 | |
90% clearpath first_app | Per-user data must live in the per-user DB (keyed by user_id), not device-local storage — so it survives sign-out/sign-in AND a new device. Local prefs are only for pre-auth onboarding scratch. → Any user-entered value the app needs later must be persisted to the per-user DB row, then mirrored to local for offline. Sign-out must clear only LOCAL state, never delete DB rows; sign-in reloads from the DB. reality: +1 / −0 | |
90% clearpath first_app | A free-tier gate must read an authoritative persisted count, not a lazily-loaded list that may be empty on the screen where the gate runs. → Track a dedicated count (loaded on app open) for any usage-limit gate; never depend on a screen-local array being populated. reality: +1 / −0 | |
90% opus distillation | Apps that fail to deliver a 'moment of value' within the first 60 seconds of onboarding churn 70%+ of users before Day 1 ends, regardless of UA spend. → Redesign onboarding so the single most impressive or useful feature fires before any account creation or permission request. Defer registration to post-value-delivery, ideally after the user has experienced the aha moment at least once. | |
88% clearpath first_app | Fact-check a column's type before relying on it persisting structured data (e.g. confirm jsonb for an analysis/object field). → When a feature depends on storing an object, verify the column is jsonb (not text/missing) and that the insert sends the object; don't assume it persists. reality: +1 / −0 | |
88% clearpath first_app | Data-source consistency: a feature's READ, WRITE and DISPLAY must use the SAME source. Don't mix local seed data with empty DB tables that have typed/uuid FKs. → Pick one source per feature: if data is local, saves go to local storage; if data is in the DB, seed it and use DB ids. Never wire a local string id into a uuid column. Drop unused generated tables. reality: +1 / −0 | |
88% opus distillation | Day 1 retention below 25% is a product-market fit failure, not a marketing failure—no UA optimization or ASO will fix it. → Instrument D1 retention by acquisition source AND onboarding path variant before scaling any paid channel. If D1 < 25%, freeze UA spend and run qualitative exit interviews or session recordings to identify the exact drop-off moment. | |
87% opus distillation | Apps that fail to deliver a 'moment of value' within the first 60 seconds of onboarding churn 70-80% of users before Day 1 ends, regardless of how strong the core loop is. → Redesign onboarding so the user experiences the single most impressive output or outcome of your app before any account creation, permission request, or paywall. Gate account creation AFTER the value moment, not before. | |
86% opus distillation | Consumer apps that define their core retention metric as DAU or session count—rather than a behavior-specific 'habit metric'—systematically over-optimize for shallow engagement and under-invest in the actions that actually predict 90-day retention. → Define a single 'habit metric' as the minimum meaningful unit of value delivery (e.g., 'user completed one X'). Track the % of DAU who hit this metric daily. Make this—not raw DAU—the north star metric reviewed in weekly product meetings, and tie push/email reactivation campaigns to users who opened but did not hit the habit metric. | |
86% opus distillation | Notification permission granted at the wrong moment (e.g., on first app open before value delivery) results in 40-60% denial rates, permanently capping re-engagement capacity. → Show a custom pre-permission screen that explains the specific benefit of notifications for your use case ('Get notified when your results are ready') only after the user has completed one core action. Never trigger on first launch. | |
85% clearpath first_app | Producer and consumer of an enum/category value must agree on the exact strings (or normalize). → Use one vocabulary end-to-end, or normalize at the boundary. Add a tiny mapping helper rather than duplicating literals. reality: +1 / −0 | |
85% clearpath first_app | Never reference a value in a React useCallback dependency array before it is declared (temporal dead zone). → Derive shared values (counts, flags) above the callbacks that use them. Lint generated screens for use-before-declare. reality: +1 / −0 | |
85% clearpath first_app | Product IDs must have ONE source of truth across app SKUs, App Store Connect IAP creation, and provisioning records. → Generate one product-ID convention (<bundleId>.premium.{monthly,annual,weekly}) and reuse it verbatim in the app, the ASC subscription generator, and the provisioning row. Verify they match before submission. reality: +1 / −0 | |
85% clearpath first_app | Monetization/launch QA must recognize native StoreKit (react-native-iap), not only RevenueCat config. → Treat monetization as real when buyable product IDs exist (StoreKit) OR RevenueCat is configured, plus a paywall. Never assume RevenueCat is the only payment path. reality: +1 / −0 | |
85% opus distillation | Thin differentiation is fatal in saturated categories (fitness, productivity, meditation) unless the positioning is so narrow it owns a specific identity—apps targeting 'everyone' get chosen by no one in search. → Before building, validate whether your target keyword cluster is winnable by an entrant (use AppFollow or Sensor Tower to check keyword difficulty). If not, reframe positioning to a narrower sub-segment with a specific pain point, and reflect that specificity in app name, subtitle, and first screenshot. | |
84% opus distillation | Paywalls shown before the user has completed at least one meaningful action convert at less than one-third the rate of paywalls shown post-habit-formation (after 3+ sessions or a key milestone). → Move your hard paywall or aggressive upsell trigger to fire only after a user has completed a predefined 'aha milestone' (e.g., saved first item, completed first exercise, received first AI output). Instrument this milestone explicitly in your analytics. | |
84% opus distillation | Apps triggering a paywall before users complete a meaningful action (not just a time gate) convert 2-4x worse than those that paywall after a demonstrated win. → Define one 'win' action that proves core value (e.g., first workout logged, first AI output generated, first task completed). Gate the paywall modal to trigger only after this event fires, not on session count or day count alone. | |
82% opus distillation | Apps with unclear differentiation fail not because users can't see the difference, but because the App Store screenshot set communicates the category instead of the wedge. Users scroll past because they pattern-match to an app they already have. → Replace at least 3 of your first 4 App Store screenshots with outcome-first frames: show the specific result your app produces that competitors cannot (a unique data output, a transformed state, a time savings). Use contrast framing ('The only X that does Y') in screenshot captions, not feature names. | |
82% opus distillation | Apps with fewer than 50 ratings in their primary country have a measurable conversion cliff in App Store search—users interpret low review count as abandonment or untrustworthiness, not newness. → Build an in-app rating prompt triggered by a high-satisfaction moment (e.g., after user shares content, completes a goal, or explicitly rates their experience positively in a custom modal) within the first 2 weeks of launch. Target 50 ratings before running any paid ASA or ASO campaigns. | |
81% opus distillation | Apps rejected under App Store guideline 4.3 (spam/copycat) almost always share three traits: template-generated UI, no unique data layer, and no signed-in user state. Addressing any one of these is insufficient; all three must be resolved. → Before resubmitting after a 4.3 rejection, add a mandatory signed-in state that persists user-specific data server-side, replace any template navigation patterns with custom UI components, and include a reviewer note explaining the proprietary data source or service powering the app. | |
81% opus distillation | Apple's 4.3 guideline rejection is almost always triggered by insufficient unique functionality relative to competing apps in the same category, not by content—reviewers compare your binary to the top 3 category results. → Before submission, pull the top 5 competitor screenshots and stack them against yours. If your core screens could be mistaken for a competitor, add one defensible unique feature that is visually demonstrable in screenshots and explicitly called out in the review notes. | |
80% opus distillation | The single highest-leverage retention intervention for consumer apps is a context-aware Day 3 push notification tied to a specific incomplete action, not a generic re-engagement message. This can double Day 7 retention vs. no notification. → Instrument every onboarding and core loop action with completion state. Build a Day 3 push that dynamically references the last incomplete action by name (e.g., 'You were halfway through building your first workout plan'). A/B test this against a generic message and measure Day 7 return rate. | |
79% opus distillation | Apps that launch with more than one primary use case in their first version have materially lower D30 retention than apps with a single, ruthlessly scoped use case, even when users rate the multi-feature app higher on initial satisfaction surveys. → Audit your v1 feature set and identify the one action with the highest completion rate in beta. Remove or hide all features that don't directly support that action for your public launch. Position the removed features as a roadmap, not an omission, in your App Store description. | |
79% opus distillation | The single strongest predictor of 30-day retention in consumer apps is whether users establish a habit cue in the first 3 sessions—apps that don't engineer a specific re-entry trigger (external or internal) in early sessions see D30 collapse below 5%. → Design sessions 2 and 3 to explicitly prompt users to set a recurring use context ('When do you want to do X?') and pair it with a calendar reminder, widget, or notification series. Measure whether users who complete this step have statistically higher D30 retention and gate progression on it. | |
78% opus distillation | Trust gaps—not price sensitivity—are the primary reason users abandon subscription flows in consumer apps with no brand recognition. Social proof placed inside the paywall screen (not on a marketing page) reduces abandonment by 20-35%. → Embed 2-3 specific, named user reviews (with star ratings and review count) directly inside the paywall modal, above the CTA button. Use reviews that address fear of wasted money or express surprise at quality, not reviews that list features. | |
70% clearpath first_app | NEVER add a native dependency with a floating '*' version — it resolves to the latest, which can be ABI/SDK-incompatible with the app's Expo SDK and crash the app at runtime. Pin native modules to the SDK-matched version, or omit. → Pin native modules to the exact Expo-SDK version (expo install semantics). Do NOT assume a native dep caused a crash — get the real stack trace / failing symbol first. reality: +1 / −0 |
Great onboarding · 20 priors · avg conf 0.86 · freshness 90d
93% clearpath postmortem | Lead to a first value action before any paywall → Route new users to the core action after onboarding and defer the paywall. | |
91% opus distillation | Permission prompts shown immediately on launch convert at 40-60% lower rates than prompts shown after the user has experienced a concrete benefit that requires the permission. → Never request push, location, or contacts on screen 1-3. Build a 'permission moment': let the user complete one valuable action first, then contextually explain what the permission unlocks for *that specific value*. Use a pre-permission modal with clear benefit framing before the OS dialog. | |
90% opus distillation | Onboarding flows that require account creation before value delivery lose 40-60% of users; deferring registration until after the aha moment recovers the majority of that drop-off. → Architect a 'demo mode' or guest path that lets users reach the aha moment with zero auth friction. Trigger registration only after the aha event, framing it as 'save your progress' or 'sync across devices' rather than a requirement. Use Sign in with Apple/Google to minimize input friction when you do ask. | |
90% clearpath first_app | Onboarding routing must be SESSION-FIRST: a logged-in user must NEVER be routed to onboarding; onboarding is only for logged-out / brand-new users. → In the app entry route: wait for auth to initialize, then if a session exists redirect to the app; only show onboarding when logged out AND not onboarded. reality: +1 / −0 | |
90% clearpath first_app | Onboarding selections must be AUTHORITATIVE: values chosen during onboarding must persist to the profile (applied once on completion, overwriting defaults), or onboarding is pointless. → On onboarding completion set an 'apply once' flag; when creating/ensuring the profile, if the flag is set, OVERWRITE skin/concern/goal with the onboarding answers and clear the flag. Passive loads still backfill only missing fields (never clobber in-app edits). reality: +1 / −0 | |
89% opus distillation | Apps that reach the 'aha moment' within the first session retain 2-3x better at Day 7 than apps that defer core value delivery to Day 2+. → Map your single highest-value action (e.g., first playlist created, first match made, first insight surfaced), then cut every onboarding step that doesn't directly funnel toward that action. Measure median time-to-aha and set an aggressive target under 3 minutes. | |
89% opus distillation | Reducing time-to-aha below 60 seconds is the single highest-leverage onboarding intervention for Day-1 retention in consumer apps. → Instrument your funnel from install to first core value event. If median time-to-aha exceeds 90 seconds, eliminate, defer, or parallelize every step between install and that event. Pre-populate defaults, skip account creation until after value is felt. | |
87% opus distillation | Interactive onboarding (user takes an action) retains 30-50% better at Day 1 than passive onboarding (user watches or reads), even when the interactive version takes longer. → Replace at least one explanatory screen in your onboarding with an action screen where the user does the core task with guardrails. Design it so they cannot fail—scaffold the first use heavily—but ensure the action is real, not a simulation. The user should produce a real artifact or outcome. | |
86% opus distillation | Showing the paywall before the aha moment converts at lower rates and increases churn among converted users; showing it immediately after maximizes both conversion and LTV. → Instrument your aha moment event explicitly. Trigger the paywall on the screen or action immediately following that event, not on a fixed step. Include a message that directly references what the user just did ('To keep [outcome], upgrade to Pro'). | |
86% opus distillation | Deferring permission requests until the user has experienced at least one unit of value reduces rejection rates by 30-50% versus asking on first launch. → Map your 'aha moment' event precisely. Gate all permission prompts (push, location, contacts) to fire only after that event is logged, never before. Build a pre-permission modal explaining the value exchange before triggering the OS dialog. | |
85% opus distillation | Personalization questions during onboarding increase retention only when answers visibly change the product experience within the same session; otherwise they reduce completion rates with no retention benefit. → For each onboarding question you ask, define exactly how the answer changes the first-session experience (content, difficulty, layout, recommendations). If you cannot articulate the immediate change, cut the question. Limit personalization questions to 3-5 max and show a 'customizing for you' moment that makes the effect visible. | |
85% clearpath first_app | Any user setting shown in-app (goal, profile, preference) must be EDITABLE in-app, not only collected at onboarding. → Whenever a screen displays a user-configurable value, wire an inline editor (a small reusable picker) that persists to DB + local state. Onboarding writes initial values; the editor owns changes. reality: +1 / −0 | |
82% opus distillation | Personalization questions during onboarding lift engagement only when the output is demonstrably different—generic questions that produce near-identical experiences destroy trust and increase drop-off. → Audit every onboarding question: if removing it would not change the first session experience, cut it. Limit personalization questions to 2-3 max unless you can show branching content paths for each answer combination. | |
80% opus distillation | Social proof injected at the exact moment of highest user anxiety in onboarding (typically the first commitment screen or paywall) increases conversion 10-20% more than social proof on introductory screens. → Identify the 2-3 highest-friction moments in your onboarding (data input, permission request, paywall). Place specific, outcome-oriented social proof (not star ratings—actual user outcome quotes) directly on those screens, not the welcome screen. | |
80% opus distillation | Showing the paywall immediately after the aha moment—not at install, not during setup—maximizes trial start rate and conversion. → Hard-code your paywall trigger to fire within 1-2 screens after the first completed value event (e.g., after first workout logged, first track played, first document created). A/B test soft (dismissible) vs. hard (trial-required) gates here; soft gates with urgency cues typically outperform hard gates on net LTV. | |
78% opus distillation | Progress indicators during onboarding increase completion rates only when the total step count is honest and small (≤5); fake or inflated step counts that reset or expand cause abandonment spikes. → Cap onboarding flows at 4-5 screens maximum. Show a fixed, accurate step count (e.g., dots or numbered steps). Never add steps dynamically. If additional setup is needed, move it to a post-onboarding 'complete your profile' nudge triggered later via push. | |
77% opus distillation | Progress indicators in onboarding reduce abandonment mid-flow by 15-25%, but only when they show completion percentage, not step count (e.g., '60% done' outperforms '3 of 5'). → Replace step-count indicators ('Step 3 of 7') with percentage-complete progress bars. Keep onboarding flows under 5 minutes total. Front-load the progress bar so users feel 40-50% done after the first 2 screens—this is not deceptive if the remaining steps are genuinely lighter. | |
77% opus distillation | Skippable onboarding steps consistently show that 60-80% of users skip when given the option, but those who complete voluntarily have materially higher LTV—meaning forced completion for all users is wrong but so is making everything skippable. → Classify each onboarding step as 'required for aha' or 'enhances later sessions.' Make only the former mandatory. Add a 'finish setting up' persistent in-app prompt for skipped enhancement steps, triggered after Day-3 when retention probability is established. | |
76% opus distillation | On iOS, the 'Sign in with Apple' option placed first (above email and Google) measurably increases account creation completion rates among iPhone-native users due to friction reduction and trust. → On iOS onboarding, place 'Continue with Apple' as the first and most visually prominent sign-in option. Accept that you will receive masked emails for some users; the retention value of a created account outweighs the CRM limitation for most consumer apps. | |
74% opus distillation | Social proof injected at the moment of highest anxiety in onboarding (typically account creation or first payment screen) reduces drop-off more than social proof on the app store page. → Add a static 1-2 line testimonial or trust signal (user count, press logo, rating) directly adjacent to email/password fields and the trial CTA button. Test placing '4.8★ from 200k reviews' or a specific outcome-based quote at these exact moments rather than only on the paywall headline. |
Paywall conversion · 11 priors · avg conf 0.83 · freshness 90d
90% clearpath first_app | ONE entitlement source of truth: flip it optimistically on a successful purchase, re-verify on app foreground, and only dismiss the paywall on an ACTUAL unlock (never on cancel). → Gates + paywall read one entitlement flag; purchase/restore sync it immediately; an AppState foreground listener re-verifies; dismiss only when premium is true. reality: +1 / −0 | |
90% clearpath first_app | Free tier must let the user EXPERIENCE the core value loop before the paywall — gate the depth, not the first taste of value. → Set the free limit so the user reaches the product's aha/transformation moment, then gate depth + continuation. Tune per app; never gate before the aha. reality: +1 / −0 | |
90% clearpath first_app | Enforce premium gates just-in-time at the blocked action AND defense-in-depth at the destination screen (e.g. the camera), so no path grants a free premium action. → Add the same entitlement check at both the action handler and the gated screen; redirect to the paywall if not entitled. reality: +1 / −0 | |
86% opus distillation | Anchoring with a high-price annual plan makes a mid-tier option feel like the obvious rational choice, lifting conversion 20-40% vs. showing the mid-tier alone. → Build a 3-tier paywall: Annual (highest price, best per-month breakdown), Monthly (mid), Weekly (high per-unit cost, exists to make monthly look cheap). Display annual first, visually highlight monthly as 'Most Popular'. | |
83% opus distillation | Paywalls triggered immediately after a user experiences a concrete 'aha moment' convert 2-4x better than paywalls shown on app open or after a fixed time delay. → Instrument your onboarding to detect the single highest-signal aha moment (task completion, first meaningful output). Gate the paywall to fire within 2 screens of that event, not before it. Never show a paywall before the aha moment. | |
80% opus distillation | Outcome-framed paywall copy ('Lose 10 lbs in 8 weeks') converts better than feature-framed copy ('Unlimited workouts + meal plans') by a measurable margin, typically 15-30% higher trial starts. → Rewrite your paywall headline to state the specific, measurable outcome the user just expressed during onboarding (capture their goal in step 1, reflect it back verbatim on the paywall). A/B test outcome headline vs. feature headline as the first paywall experiment you run. | |
79% opus distillation | Offering a 'cancel anytime' guarantee in the CTA label itself (not just in fine print) measurably reduces paywall abandonment, particularly on first-time subscriber cohorts, by lowering perceived lock-in risk. → Change your primary CTA from 'Start Free Trial' to 'Start Free Trial – Cancel Anytime'. Add a one-line reminder ('No charge for 7 days. Cancel before [date] to avoid billing.') immediately below the button. This requires no design overhaul and is the fastest-to-ship conversion lift available. | |
78% opus distillation | On iOS, displaying price-per-day (e.g., '$0.33/day') instead of price-per-month or total annual price increases annual plan conversion by 10-25% because it passes the 'coffee test'—it's cheaper than a coffee. → On every annual plan CTA button or price display, show per-day cost prominently. Format: '$119.99/year · just $0.33/day'. Ensure compliance by showing billing frequency clearly. Do not use this for monthly plans—it backfires when the daily rate exceeds ~$1. | |
76% opus distillation | Free trials longer than 7 days do not increase paid conversion rates and often decrease them by reducing urgency; 3-7 day trials optimize the urgency-to-value ratio for most consumer apps. → Default trial length to 7 days. For apps with daily-use loops (meditation, language, fitness), test 3-day trials. Eliminate 14-day and 30-day free trials unless you have data proving otherwise for your specific category. | |
74% opus distillation | Adding a single high-quality social proof element (specific transformation story with a number, not generic stars) to the paywall increases trial starts by 10-20%, but only when placed above the CTA, not below it. → Replace star ratings on your paywall with one rotating testimonial that includes: name, age/demographic, specific quantified outcome, timeframe. A/B test position: directly above the subscribe CTA button. Rotate 3-5 testimonials matched to the goal the user selected during onboarding. | |
73% opus distillation | Hard paywalls (no access without subscribing) outperform soft paywalls on ARPU but reduce top-of-funnel retention; the optimal structure is a 'time-locked soft paywall'—full access for N sessions then hard gate. → Design onboarding to deliver full value for exactly 3 sessions or 7 days (whichever comes first), then hard-gate with no degraded free tier. Do not maintain a permanent free tier unless network effects require it. Build the gate to feel like a natural progression, not a sudden block. |
Retention mechanics · 17 priors · avg conf 0.85 · freshness 120d
93% clearpath postmortem | Schedule the daily reminder right after onboarding permission → Schedule the daily reminder on permission grant in onboarding and add a streak nudge. | |
90% opus distillation | D1 retention is dominated by time-to-value: users who reach a meaningful 'aha moment' within the first session retain at 2-3x the rate of those who don't, regardless of onboarding length. → Instrument your onboarding funnel to identify the exact action correlating with D1 retention. Ruthlessly remove every step between install and that action. If it takes >90 seconds to reach, redesign the flow — delay account creation, social graph imports, and permissions until after. | |
90% opus distillation | D1 retention is overwhelmingly determined by time-to-value in the first session, not onboarding completeness. Users who hit a 'magic moment' within 3 minutes retain at 2-3x the rate of those who complete full onboarding without it. → Instrument your funnel to identify the single in-app action most correlated with D7 retention (cohort analysis). Ruthlessly cut all onboarding steps that precede it. Redesign session 1 flow so 80%+ of users reach that action within 3 minutes of signup. | |
87% opus distillation | Streaks improve D7–D30 retention only when paired with a low-cost 'streak repair' mechanic; without it, a single missed day causes permanent churn at rates exceeding 40% of streak holders. → Implement streak shields/freezes (earned or purchasable) before launching streaks. Send a proactive push at 20:00 local time on days when a streak is at risk — not a generic reminder but a specific 'Your 14-day streak ends in 2 hours' message. A/B test one free monthly shield given proactively vs. on-demand purchase. | |
87% opus distillation | Push notifications improve D30 retention only when they are triggered by user behavior context, not by fixed schedules. Scheduled broadcast notifications degrade retention after 2 weeks due to habituation and increase uninstall rates by 15-25%. → Eliminate all time-based broadcast pushes beyond day 1-3 onboarding. Replace with event-triggered notifications: inactivity after N hours (personalized per user's historical session time), social triggers (someone interacted with your content), and progress-based prompts. Use send-time optimization ML or even a simple per-user 'last active hour' heuristic. | |
86% opus distillation | Push notifications improve D30 retention only in the first 2 weeks; after that, poorly timed or generic notifications become the #1 driver of both notification disabling and app uninstalls. → Cap cold-start notifications at 1/day for the first 14 days, strictly triggered by behavioral signals (not calendar). After D14, suppress all non-transactional pushes unless the user has re-engaged in the past 72 hours OR is at risk of streak/subscription lapse. Never send the same notification template twice in a row to the same user. | |
86% opus distillation | Habit loop formation requires reducing action friction to below a 30-second trigger-to-reward cycle in the first 10 sessions. Apps that require more than 3 taps to reach core value in returning sessions fail to encode as habits and are abandoned when competing apps reduce that friction. → Audit your returning-user flow with a stopwatch and tap counter. If core value (first meaningful content/action) requires >3 taps or >20 seconds on a fast connection, prioritize that friction reduction above all other product work. Specifically: default-open to last active context, pre-load content, and remove interstitials for returning users in sessions 2-10. | |
84% opus distillation | Variable reward schedules (not fixed rewards) are the primary driver of D7 retention in content and game apps, but they backfire in utility apps where predictability increases trust and return visits. → For content/social/gaming: inject algorithmic surprise into the core loop (unexpected viral post, mystery reward, unannounced unlock). For utility apps: guarantee a specific, predictable value on each return visit (your portfolio updated, your streak protected, your summary ready) — do not gamble with user trust for engagement. | |
84% opus distillation | Streaks dramatically inflate D7-D30 retention but create a 'streak-or-churn' cliff: users who break a streak of 7+ days churn at 60-80% within 48 hours unless a recovery mechanic exists. → If you ship streaks, simultaneously ship a single free 'streak repair' mechanic (grace period, shield, or retroactive completion). Gate the repair behind a re-engagement action (open app, watch an ad, share) to maintain behavioral commitment without punishing lapse. | |
82% opus distillation | The single highest-ROI retention investment at D1–D7 is a human or human-feeling touchpoint (personalized message, coach check-in, community welcome) within 24 hours of signup — it outperforms all automated nudges by a wide margin in qualitative stickiness. → For apps with <10K DAU: send a real personalized Slack/email from a founder or team member within 24 hours of signup. For scaled apps: build a system that makes automated messages feel specific (reference the user's stated goal, their first action, their location) and come from a named person with a photo. A/B test 'Hi, I'm Maya from the Headspace team — I saw you completed your first session on stress' vs. generic welcome. | |
81% opus distillation | Social proof embedded in the product experience (not marketing) is the strongest lever for D30 retention in social and marketplace apps, but only when it is specific and proximate — showing what people similar to you just did, not aggregate statistics. → Replace global social proof ('Join 10M users') with proximate social proof ('32 people in Austin saved this last week', '5 of your contacts use this feature'). This requires collecting and surfacing behavioral data at the cohort level in-product. Build a 'recently active similar users' signal into your recommendation engine for D14+ users showing signs of churn. | |
81% opus distillation | Content cadence mismatch is the primary driver of D7-D30 drop-off in content-driven apps: publishing faster than users can consume creates overwhelm churn; publishing slower than user appetite creates abandonment churn. The optimal cadence matches the user's natural session frequency, not the creator's production schedule. → Segment users by session frequency in their first 7 days. Deliver content notification cadence matched to that frequency cluster, not a one-size schedule. For UGC apps, use algorithmic pacing to surface content in queues sized to the user's typical session length, not the total content volume available. | |
80% opus distillation | Content cadence mismatches — specifically, apps that surface new content faster than users can consume it — are a top-3 cause of D7 churn in content apps, creating anxiety and avoidance rather than engagement. → Audit your content surfacing rate against median session consumption rate. If you're generating a backlog faster than the median user can clear it, implement pacing mechanisms: daily digests instead of real-time feeds, 'Today's picks' with a hard cap, or a 'you're all caught up' terminal state. Introduce scarcity signals ('3 new things since your last visit') rather than raw unread counts. | |
80% opus distillation | Emotional hooks in onboarding—specifically asking users to articulate a personal goal or identity statement—increase D30 retention by 20-40% compared to feature-tour onboarding, because they create commitment consistency bias. → Within the first session, prompt users to select or write a goal/identity statement that is personal and slightly aspirational ('I want to become someone who...') rather than feature-based ('I want to use this app to...'). Store it visibly in the app and reference it in re-engagement messaging. Do not make it skippable without a soft nudge. | |
78% opus distillation | Emotional hooks formed in the first session — specifically, moments of personal identity affirmation — predict D30 retention better than any engagement metric including session length or actions taken. → During onboarding, ask 1–2 identity-framing questions ('What kind of investor are you?', 'What does a good day look like for you?') and immediately reflect answers back in the UI, content selection, and copy. Don't ask for demographics — ask for self-concept. Ensure the first piece of content or output the user sees is visibly tailored to their stated identity. | |
78% opus distillation | Variable reward schedules (unpredictable reward timing) increase session frequency but do not improve D30 retention unless the variable reward is socially legible—meaning other users can see or react to it. → Pair every variable reward mechanic with a social surface: make the reward visible to a peer set, enable reactions, or tie it to a leaderboard. Even asynchronous social proof (e.g., 'your post got 47 views while you were gone') converts a private variable reward into a socially-anchored retention hook. | |
76% opus distillation | Social proof from near-peers (users similar in tenure, skill level, or context) drives retention more effectively than aggregate social proof (total user counts, celebrity usage). Near-peer proof reduces the 'that's not for someone like me' churn driver. → Replace or augment generic social proof ('10M users trust us') with dynamically generated near-peer proof segmented by at least two attributes (tenure + use case, or location + goal). Surface this proof at the moment of second-session entry, when churn risk is highest and motivation most fragile. |
App Store discovery · 16 priors · avg conf 0.83 · freshness 60d
88% opus distillation | The icon is the single highest-leverage creative asset in App Store discovery — it drives click-through rate before any other element is processed, and a redesigned icon alone can shift CVR by 15–30%. → Run a structured icon A/B test with 3+ variants differing in background color, subject matter, and complexity. Eliminate text from the icon entirely unless it IS the product (e.g., a letter-mark brand). Prioritize readability at 60x60px (iPhone search list view). | |
85% opus distillation | Screenshot 1 functions as a second icon — it must communicate the core value proposition in under 1 second without being read, because 60%+ of users never tap 'See All' or scroll the gallery. → Design Screenshot 1 as a hero visual: single dominant UI moment + a 4–6 word benefit headline in 40pt+ font. Treat it as an outdoor ad, not a tutorial. Reserve feature explanations for Screenshots 3–5. | |
85% opus distillation | The icon is the single highest-leverage creative asset for browse-to-tap conversion; a cluttered icon with text or more than one focal element reduces tap rate measurably. → Strip the icon to one dominant visual element with no text. Use a saturated background color that is uncommon in your app's category (e.g., avoid blue in productivity—oversaturated), and ensure the icon passes the 'thumbnail test' at 40px. | |
84% opus distillation | A rating below 4.4 stars acts as a hard filter for a significant segment of users — particularly in utility, finance, and health categories — and suppresses CVR more than any creative improvement can recover. → Instrument a post-core-action in-app review prompt (after the user achieves their first meaningful outcome, not on launch). Suppress the prompt entirely for users who have triggered error states or support contacts in the prior 48 hours. Target 4.6+ before scaling paid UA. | |
84% opus distillation | A rating below 4.2 stars is a hard conversion floor—most users in competitive categories (health, finance, productivity) will not tap an app below this threshold regardless of other signals. → Gate the in-app rating prompt behind a 'happy path' trigger (e.g., user completes first success moment, not just opens the app). Never prompt after an error. If current rating is below 4.2, prioritize a bug/UX fix sprint before paid UA—CAC efficiency is destroyed below the floor. | |
82% opus distillation | Title keyword placement (within the 30-character app name field) has 2–3x the ASO ranking weight of subtitle or keyword field terms — but most developers waste it on brand name alone. → Append 1–2 high-volume, non-brand category keywords to your app name field using an em-dash or colon separator. Use AppFollow or Sensor Tower to identify terms where top competitors have weak name-field coverage. Rotate quarterly. | |
82% opus distillation | The first screenshot must function as a standalone billboard, not a tutorial slide—apps that put a value-proposition headline (not a UI walkthrough) as the primary text in screenshot 1 see higher conversion from impression to product page. → Make screenshot 1 a hero card: 3–6 word outcome-focused headline in 40pt+, minimal UI, and brand color. Test two variants—'emotional outcome' vs. 'feature proof'—via App Store Connect product page experiments. | |
81% opus distillation | The subtitle field (30 chars) is the highest-read text in the search result card, but the majority of apps use it for a tagline rather than keyword-rich descriptive copy — missing both ASO and CVR value simultaneously. → Write the subtitle as a 2–4 keyword phrase that describes what the app literally does, using terms users type when searching. Format: '[Primary verb] + [object] + [differentiator]' e.g., 'Track Habits & Build Streaks'. Validate terms have >10K monthly searches in Sensor Tower before locking. | |
80% opus distillation | The 3-second scroll decision is dominated by the icon + first screenshot combination in portrait layout; the title is read only if those two pass the visual filter—meaning title optimization is wasted effort if visual assets are weak. → Audit your funnel: if impression→product page CVR is below category benchmark (typically 3–7% for search, 1–3% for browse), fix visuals first. Only optimize title/keyword copy once visual CVR is competitive. | |
79% opus distillation | In category browse (Top Charts, Category pages), landscape-oriented Screenshot 1 outperforms portrait in the featured banner but portrait outperforms landscape in search results — mismatching this destroys CVR. → Maintain two screenshot sets if budget allows — portrait-optimized for search/browse (your primary set), landscape only if Apple features you in editorial banners. Default to portrait 9:19.5 ratio for all primary creative. | |
79% opus distillation | Keyword stuffing in the subtitle does not work; one high-intent, low-competition keyword phrase placed naturally in the subtitle drives more ranking than four awkwardly concatenated keywords. → Identify the single highest-volume keyword not already covered by your title, embed it in a readable subtitle sentence (e.g., 'AI Journal for Anxiety Relief'), and use the 100-char keyword field for the remaining long-tail targets. | |
78% opus distillation | Localized screenshots (translated text + culturally adapted UI scenes) drive 25–40% CVR lift in non-English markets, but localized metadata alone (no visual change) yields negligible improvement. → Prioritize visual localization for your top 3 non-English revenue markets. Change at minimum: screenshot headline text, and one UI screen showing locally relevant content or a local user scenario. Use fiverr/Lingo or in-market contractors for cultural QA, not just translation APIs. | |
77% opus distillation | Social proof signals (download count, press mentions, award badges) placed in Screenshot 2 — not Screenshot 1 — measurably increase conversion for apps with a trust deficit, but harm CVR for already-trusted brands. → If your app has fewer than 500 ratings, dedicate Screenshot 2 exclusively to a credibility signal: press logo ('As seen in NYT'), award ('#1 in Health'), or user count ('2M people track with [App]'). Remove this slide once you cross 4.5 stars with 1K+ ratings. | |
77% opus distillation | In category search results, color differentiation from the top 3 incumbents increases tap rate more than mimicking category visual conventions. → Screenshot the top 10 search results for your primary keyword. Identify the dominant color cluster. Choose an icon background color from the opposite region of the color wheel that still fits brand logic. Validate with a 5-person unmoderated scroll test. | |
76% opus distillation | Apps in the same category with a localized icon and screenshots for their top 3 non-English markets see 15–30% higher conversion in those markets versus English-only creatives, yet fewer than 20% of top-100 apps fully localize visual assets. → Identify your top 3 non-English markets by organic installs. Create locale-specific screenshot text overlays (not full redesigns) for those markets. Prioritize markets with high purchasing power (JP, DE, KR) over volume-only markets. | |
74% opus distillation | Social proof signals embedded in the first two screenshots (e.g., '#1 in 40 Countries', 'As seen in NYT', '10M users') function as decision accelerators and meaningfully lift tap-to-install when placed in the upper third of screenshot 1 or 2. → Add a one-line social proof badge ('Rated #1 Habit App – Forbes') in small but readable text at the top of screenshot 1 or as a banner overlay on screenshot 2. Rotate and A/B test the proof type: media mentions outperform download counts for trust; download counts outperform media mentions for novelty-seekers. |
Social hooks · 6 priors · avg conf 0.83 · freshness 30d
85% opus distillation | The first 0–1.5 seconds must deliver the hook's payoff premise visually before any spoken word lands — thumbnail-frame clarity beats verbal intros by 2–4x on retention. → Design all app tutorial videos, onboarding clips, and paid social creatives so the core value proposition or conflict is legible as a static frame at 0.5s — overlay text, facial expression, or physical object must carry the hook before audio fires. | |
83% opus distillation | Formats using 'show the end result first, then reverse to explain' (reverse chronology) consistently outperform linear narrative formats on sub-60-second content because they resolve the viewer's primary question ('is the payoff worth my time?') immediately. → Restructure app demo videos to open with the finished state (clean dashboard, notification, achievement unlocked, time saved) in the first 2 seconds, then cut to the problem/process — never build to a reveal in short-form. | |
82% opus distillation | The 'direct address callout' hook — naming a specific identity group in the first word — reduces bounce from wrong audiences but dramatically increases completion from matched audiences, net-improving algorithmic profile. → Open every app category ad with the user identity first: 'If you're a [specific user type] and you still [undesirable behavior], watch this' — build distinct video variants per user segment rather than one broad hook per campaign. | |
82% opus distillation | The first spoken word or on-screen text must contain the conflict/payoff noun within 1.5 seconds or retention collapses by 30-50% before second 3 → In any UGC prompt, tutorial flow, or in-app video template, force-display a 'hook word' input field that auto-overlays as large text in frames 0-1.5s. Reject or warn on hooks starting with 'I', 'So', 'Hey', 'Today'. | |
80% opus distillation | Hooks featuring a visible, legible number in the first frame (duration, quantity, rank, or dollar amount) increase click-to-detail and watch-time initiation because numbers create immediate cognitive anchoring that resists scroll inertia. → Mandate that every short-form video asset for app marketing includes a specific number visible on-screen by frame 1 — not 'save time' but '47 minutes' — and test numeral size at minimum 72pt equivalent for mobile readability. | |
80% opus distillation | Hooks that explicitly violate a widely-held belief in the first 3 words ('X is actually bad', 'Stop doing Y', 'X doesn't work') generate 3-5x higher share rate than confirmatory hooks because they create social currency via surprise → Add a 'contrarian hook' template to any content creation flow: '[Common belief] is [negative adjective]. Here's why:'. Instrument share-rate separately from likes to validate. Use this pattern in your own acquisition ads as the default hook format. |
Video that converts · 0 priors · avg conf 0.82 · freshness 30d
No priors yet — run a refresh to distill this domain.
Niche signals beyond demand · 13 priors · avg conf 0.72 · freshness 45d
84% opus distillation | Niches anchored to a daily physiological or behavioral trigger (morning routine, bedtime, post-workout, meal prep) retain 2-3x better than niches with no natural trigger point, independent of feature quality. → During onboarding, explicitly ask users 'When does this problem hit you?' and use that answer to time push notifications and home screen placement prompts—not a generic reminder time picker. | |
82% opus distillation | Underserved sub-segments within saturated categories convert at 2-4x the rate of the broad market because they experience the generic solution as actively wrong for them, not just imperfect. → Identify one demographic or situational sub-segment where the #1 category leader's onboarding uses language that sub-segment finds alienating. Mirror that sub-segment's exact self-description in your first three screens—not your category description. | |
81% opus distillation | Niches where the incumbent solution is a human professional (therapist, accountant, personal trainer, tutor) have a structural price anchor that makes $15-30/month feel trivially cheap, enabling premium pricing without standard consumer app price sensitivity. → On your paywall, explicitly state the professional alternative cost: 'A single session with a nutritionist costs $120. Your entire year with [App] costs less.' Do not use this frame if your product is not a credible partial substitute—it will backfire. | |
81% opus distillation | Niches where failure is publicly visible (fitness, finance, parenting, diet) have 4-6x higher organic shareability than niches where success is private, because users share to signal identity repair or achievement. → Design a single 'trophy moment' screen (a stat, streak, before/after, or milestone) that is visually distinct and one-tap shareable to Stories—not a generic share sheet. This is the only share surface that matters for organic growth. | |
79% opus distillation | Niches with a strong practitioner or expert identity (nurses, teachers, tradespersons, coaches) yield disproportionately high organic acquisition because the app becomes a professional credential signal shared within closed professional communities. → Build one feature explicitly designed to be shown to a peer or client during professional interaction (a report, a dashboard, a shareable plan)—not for the user alone. Gate this feature at a paid tier to convert the social proof moment into revenue. | |
78% opus distillation | Emotional intensity of the problem (shame, anxiety, grief, rage) predicts willingness to pay more reliably than problem frequency, because high-emotion users rationalize premium spend as self-investment. → In your paywall copy, name the emotional state directly ('You deserve to stop dreading Monday mornings') rather than listing features or time-savings. A/B test emotion-naming versus outcome-naming—emotion-naming outperforms in high-intensity niches. | |
76% opus distillation | Recurring needs with an external calendar forcing function (annual tax season, academic year, sports season, pregnancy trimester) create predictable re-engagement windows that compress LTV realization and reduce churn risk. → If your niche has a seasonal forcing function, engineer a 'hibernation + reactivation' UX: explicitly tell users 'See you in September' with a calendar save prompt at offboarding, and invest reactivation budget in the 3-week window before the season starts rather than continuous re-engagement. | |
74% opus distillation | Niches where the user's progress is legible to others in real life (weight, sobriety days, language fluency, home renovation) create a social accountability loop that increases 90-day retention by an estimated 30-50% over private-progress niches. → Add a 'Tell someone' prompt at day 3 and day 14—not a social invite, but a pre-drafted text message the user sends to a specific named person in their contacts announcing their goal. This single intervention is more effective than leaderboards or in-app friends. | |
50% appstore charts | "Lifestyle" is currently concentrated in the US top-grossing charts (1/25 slots), signalling live willingness-to-pay. → When evaluating niches near "Lifestyle", weight current monetization momentum up; look for an underserved sub-angle rather than a head-on clone. | |
50% appstore charts | "Photo & Video" is currently concentrated in the US top-grossing charts (3/25 slots), signalling live willingness-to-pay. → When evaluating niches near "Photo & Video", weight current monetization momentum up; look for an underserved sub-angle rather than a head-on clone. | |
50% appstore charts | "Productivity" is currently concentrated in the US top-grossing charts (3/25 slots), signalling live willingness-to-pay. → When evaluating niches near "Productivity", weight current monetization momentum up; look for an underserved sub-angle rather than a head-on clone. | |
50% appstore charts | "Entertainment" is currently concentrated in the US top-grossing charts (6/25 slots), signalling live willingness-to-pay. → When evaluating niches near "Entertainment", weight current monetization momentum up; look for an underserved sub-angle rather than a head-on clone. | |
50% appstore charts | "Games" is currently concentrated in the US top-grossing charts (9/25 slots), signalling live willingness-to-pay. → When evaluating niches near "Games", weight current monetization momentum up; look for an underserved sub-angle rather than a head-on clone. |
Recent refreshes
- Tue Jun 16 2026 — +24 added, 0 decayed, 0 reconciled, $0.09
- Tue Jun 16 2026 — +24 added, 0 decayed, 0 reconciled, $0.09
- Tue Jun 16 2026 — +24 added, 0 decayed, 0 reconciled, $0.09
- Tue Jun 16 2026 — +24 added, 0 decayed, 0 reconciled, $0.09
- Tue Jun 16 2026 — +29 added, 0 decayed, 0 reconciled, $0.08