← AI Catalyst C3All programsHomeSearch
AI Catalyst C3·Core Session - Week 18·3:01:04

Adding Beautiful Animations to Your App: Splash and Onboarding, State-Driven Micro-Interactions, an AI Layer That Never Blocks, PostHog Funnels and Feature Flags, and the Road to the Stores

Rajat Sajnani Guest instructor - mobile developer (past JPMorgan feature-flag work), builder of AfterLit; teaches from slides, a coding agent and simulators · Shivani Outskill community manager - CSAT poll and close; points to mentor office hours and next weekend · Kaarthik Outskill staff - pre-start handover only

The short version

  1. Polish is a product layer around the screens: a splash screen, onboarding, micro-interactions, an optional AI explanation, analytics, feature flags and a release plan - all added to yesterday's PromptQuest app by prompting a coding agent with Rajat's reusable React Native animation skill and a reference for every change (0:10-0:25).
  2. Animate state changes, not everything: a pop when an answer is selected (selecting never grades), a progress bar that moves only on Continue, Pip bouncing once when a lesson completes - every prompt lists what must not change and falls back to no motion when the phone has Reduce Motion on. A splash screen should fit time the app needs anyway: 'never add a delay' (0:14-1:08).
  3. Onboarding teaches by doing - a welcome, one practice question and a skip - and its 'seen' flag lives on the device. Progress is restored on return and across devices. 'Explain my mistake' calls an AI only after a wrong answer, never grades, and when the AI failed live the learner could still continue (0:25-1:25).
  4. PostHog: name the events and attach them to buttons (lesson started, answer checked, lesson completed, results viewed), read the funnel (69 testers, 8 completions), keep keys server-side, and never block the lesson if tracking is declined. Feature flags switched the whole new experience on and off live, which matters when store review takes weeks (1:25-2:16).
  5. Getting out of the laptop: Expo EAS builds, the App Store listing (exact screenshot sizes, a test account for the reviewer), TestFlight and Android testing tracks, and an agent-run readiness checklist. AfterLit, submitted 31 July, was still waiting on 4 October (2:24-2:41).

Outskill's post-read

The written recap Outskill published after the session (Catalyst_Week18_Session2_Adding_Beautiful_Animations_to_Your_App_Post_Read.docx). Where it is sharper than the live session, those points are here; the full concepts below are from the recording.

  1. The core idea: polish comes from animation, onboarding, feedback, analytics and release controls working together - 'Animation should communicate state and reinforce the experience - not simply make the interface move.'
  2. A seven-row product layer around the app: splash screen, onboarding, micro-interactions, AI explanations, analytics, feature flags, testing and release.
  3. Animation prompts need six inputs (visual reference, starting artwork, desired motion, timing, app context, technical context); onboarding prompts eight (reference screen, artwork, states, interaction, feedback, accessibility, skip/completion, existing logic).
  4. Micro-interaction triggers mapped to responses, with the warning that motion must not hide or delay Check or Continue; an asset table (PNG, animation-ready vector, Lottie JSON) - 'A 2D character image has limits.'
  5. Animate state changes only, persist progress, keep optional AI features optional, and keep grading deterministic and separate from the AI explanation layer.
  6. PostHog events (sign-in started and succeeded, lesson started, answer checked, lesson completed, results viewed) read as funnels - 'track events that correspond to meaningful product behaviour rather than instrumenting every possible click' - with Microsoft Clarity as a free behaviour tool.
  7. Feature flags in six steps (create or reuse, keep off, connect, enable when ready, target users, reuse across mobile and web); real-device testing, a store-release table, a five-step invited-tester loop, and error handling.
  8. Ends with a weak-vs-strong prompt table, a 15-item polish checklist, nine takeaways and seven reflection questions. Taught live but not in the post-read: Reduce Motion fallbacks, the device-stored onboarding flag, EU consent, percentage and scheduled rollouts, Expo EAS and TestFlight specifics.

Its headings A complete mobile experience goes beyond screens · Splash screens: a visual first impression · Designing animation with AI · Onboarding should teach through interaction · A strong prompt for onboarding changes · Micro-interactions turn actions into feedback · Choosing the right animation asset · Animate state changes - not everything · Preserve progress and make failure graceful · AI explanations should complement core logic · Analytics with PostHog · Feature flags: change product behaviour without a new release · Test on real devices · From prototype to App Store / Play Store · Testing with invited users · Error handling and recovery · React Native: shared code and platform-specific needs · Better AI-assisted mobile development · End-to-end mobile polish checklist · Key takeaways · Reflection questions

At a glance, three clicks deep

Skim here first: the closed row is the glance, open is the study card with the key points and timestamps, and the ↓ link drops to that concept's full write-up below.

01The splash screen: a branded loading moment, never an artificial waitA short branded animation that covers real start-up time and resolves the first route;0:14:00›

A short branded animation that covers real start-up time and resolves the first route; never padded with a delay.

Purpose: show the app is loading and brand the first moment (0:14-0:15)

Inspiration: Apple's handwritten 'hello'; examples Claude, YouTube, Zepto (0:15-0:16, 0:21)

The 2.5-second demo delay - 'never add a delay unless it's very necessary' (0:24-0:25)

Use the splash time to decide login vs last-visited screen (0:25)

↓ Full write-up of this concept

02A reusable React Native animation skill plus a reference-rich promptPackage animation know-how as an agent skill, then prompt with references and explicit invariants.0:17:00›

Package animation know-how as an agent skill, then prompt with references and explicit invariants.

Skill drawn from several RN animation libraries; shared via the resources link (0:17, 0:20, 0:22)

Reference + starting artwork attached to the prompt (0:18-0:20)

Invariants keep colours and characters intact (0:38, 0:56, 0:58)

↓ Full write-up of this concept

03Onboarding that teaches by doing: one practice step, a skip, and a device-stored 'seen' flagA skippable welcome plus one hands-on practice step, with completion stored on the device and explicit rout…0:25:00›

A skippable welcome plus one hands-on practice step, with completion stored on the device and explicit routing rules.

Poll: one practice question with a skip beats a feature tour (0:29-0:30)

Reference-image prompt with states, skip/replay, accessibility, no new colours (0:30-0:38)

Completion flag stored on the device (0:34-0:35)

Routing rules for first, signed-in, signed-out and returning users (0:42)

↓ Full write-up of this concept

04Animate state changes, not everything: selection, progress and celebration with guard-rail promptsTie each animation to one meaningful state change, say what it must not do, honour Reduce Motion, and list…0:43:00›

Tie each animation to one meaningful state change, say what it must not do, honour Reduce Motion, and list invariants.

Poll: animate on select/continue/finish, not all the time (0:45)

Selection pop; highlight persists; selecting does not grade (0:46-0:49)

Progress bar advances only on Continue (0:54-0:58)

Pip bounce once per completed attempt (1:00-1:02)

Reduce Motion fallback in every prompt (0:47, 1:02)

↓ Full write-up of this concept

052D PNG characters vs Lottie JSON: what motion each can carryStatic PNG characters support simple transforms;1:04:00›

Static PNG characters support simple transforms; Lottie (JSON) assets support rich character animation.

2D PNG: bounce, slide, spin only (1:04)

Lottie JSON for richer motion, as in AfterLit (1:04, 2:43)

An RN animation library shown; link promised (1:05-1:06)

↓ Full write-up of this concept

06Preserve the learner's place: answers, progress and cross-device resumeRestore in-lesson state on return and sync progress per account;1:08:00›

Restore in-lesson state on return and sync progress per account; correctness comes from prepared content.

Restore the answered state on return (1:09-1:10)

Same progress on iPhone and Android for one account (1:10-1:11)

Retention is the reason (1:11)

Correctness from content.json, not AI (1:12)

↓ Full write-up of this concept

07'Explain my mistake': an optional AI layer that never blocks the learnerAI explanations are an optional add-on with a prepared fallback;1:12:00›

AI explanations are an optional add-on with a prepared fallback; they never grade and never block progress.

Shown only after an incorrect, checked answer (1:12-1:13)

Protected key; question, answers and prepared explanation sent (1:13-1:15)

Scores and XP unchanged (1:15)

Live failure; graceful fallback; Continue still works (1:21-1:24)

↓ Full write-up of this concept

08PostHog: name the events, attach them to buttons, read the funnelInstrument a few meaningful journey events, verify each fires once, and read drop-off in funnels;1:25:00›

Instrument a few meaningful journey events, verify each fires once, and read drop-off in funnels; tracking must never block the user.

Shop analogy; PostHog, Firebase, Clarity (1:26)

Four events tied to buttons (1:27-1:29)

Live numbers and funnels (1:30-1:35)

Integration prompt: docs, keys, one client, no blocking, consent (1:38-1:42)

Clarity heat map demo (1:43-1:45)

↓ Full write-up of this concept

09Feature flags: ship the feature dark and switch it on without a new store releaseShip features hidden behind a remotely controlled boolean, defaulting safe, with gradual or scheduled rollout.2:01:00›

Ship features hidden behind a remotely controlled boolean, defaulting safe, with gradual or scheduled rollout.

Black Friday example (2:01-2:02)

Live toggle between simple and full experience (2:03-2:06)

Why mobile needs it: slow store review (2:07)

Percentage and scheduled rollout (2:07-2:08)

Boolean flag prompt with safe defaults (2:10-2:11)

↓ Full write-up of this concept

10From web to mobile: reuse the backend, change the navigation, test the awkward casesKeep backend, accounts, content and logic;2:17:00›

Keep backend, accounts, content and logic; rebuild navigation; test offline and large-text cases; gate only network-dependent features.

Reuse backend, accounts, content and logic (2:17-2:18)

Bottom tab bar and a back button (2:18-2:19)

Test offline and large text (2:20-2:23)

Connectivity plugin for network-only features (2:23-2:24)

↓ Full write-up of this concept

11Getting to the stores: Expo EAS builds, the App Store listing, TestFlight and Android testing tracksBuild with EAS, complete the listing and reviewer access, test with invited users, submit, and iterate on r…2:24:00›

Build with EAS, complete the listing and reviewer access, test with invited users, submit, and iterate on rejections.

EAS builds for both stores (2:24-2:25)

Listing walk-through and reviewer test account (2:27-2:29)

AfterLit review history (2:30)

TestFlight vs Android testing tracks (2:32-2:33)

What a reviewer needs; agent readiness checklist (2:33-2:36)

↓ Full write-up of this concept

12Q&A: security, native limits, platform checks, model effort, and 'AI going rogue'Keep secrets native, use payment providers' security, hand games and high-security work to native engineers…2:42:00›

Keep secrets native, use payment providers' security, hand games and high-security work to native engineers, and use Platform checks for per-OS tweaks.

Native side for secrets; Supabase/Clerk for auth and data (2:47-2:48)

Payments through third-party providers (2:50-2:51)

Games and security-heavy builds suit native engineers (2:52-2:53)

One codebase with Platform checks (2:54-2:55)

Model effort matters less with clear prompts (2:49)

↓ Full write-up of this concept

The concepts in full

01

The splash screen: a branded loading moment, never an artificial wait

0:14:00

'A splash screen gives an indication to the user that the app is working.'

The splash covers app start-up - longer on older phones - and doubles as a first impression. Rajat shows Claude, YouTube and Zepto, and says his own was inspired by Apple's handwritten 'hello', took '2-3 tries', and that the geometry-heavy prompt is specific to his logo; the reusable part is the skill and the method. PromptQuest's splash writes out its Q logo in a handwriting effect. Replayed on a warm app it was almost invisible, so he added a 2.5-second delay purely for the class - and warned twice not to ship one. The useful trick: while the splash plays, the app decides where to send the user - login, or the home screen where they left off.

Why it matters

Motion without waiting is the rule that keeps animation from hurting retention.

People get this wrong

Make the splash long enough for people to admire it.

Users may think the app is slow and leave; fit the animation into time the app needs anyway (0:24).

02

A reusable React Native animation skill plus a reference-rich prompt

how-to0:17:00

The more references you give, the less the agent has to guess.

Rajat packaged what he learned from several React Native animation libraries into a skill (as heard 'RN Animation Skills') so Claude or Codex can add motion to any React Native project without the user hunting for libraries. It is shared with the cohort and reused through the session for the progress bar and Pip's celebration. Every prompt keeps 'the same color combinations' and 'original characters' so the model does not invent new styling.

Do it in this order

Gotchas['The skill is generic; the splash prompt is not - it is tied to his logo (0:18)']

Why it matters

Turns one-off animation know-how into a reusable asset any agent can load.

03

Onboarding that teaches by doing: one practice step, a skip, and a device-stored 'seen' flag

how-to0:25:00

'Have you opened a new app and felt unsure where to start?'

Onboarding is a short introduction with a skip for people who do not need it. Rajat's own app uses swipes and omits skip because it must ask for notification and location permissions. PromptQuest's version introduces Pip, shows a one-line value statement, gives one practice question from the real lessons, celebrates a correct answer and ends with an invitation to sign in. The class poll chose 'welcome plus one practice question with a skip' over a tour of every feature. Where does 'completed onboarding' live? On the device, not the database, so it is not tied to an account. On relaunch it does not reappear - repeat onboarding is 'annoying'.

Do it in this order

Gotchas["Pip's speech bubble landed in the wrong place on the first pass (0:39)", 'To see onboarding again he had to delete the app or use a new simulator (0:36-0:37)']

Why it matters

Done once, skippable and stored locally - onboarding that helps instead of nags.

04

Animate state changes, not everything: selection, progress and celebration with guard-rail prompts

how-to0:43:00

'When should our app animate?' - when the user selects, moves on, or finishes.

Rajat's own app changes the whole scene by state (sleeping on a couch, typing, typing faster) so the user feels the change. The class poll chose short animations on select, continue and finish rather than motion everywhere. Three PromptQuest prompts follow one skeleton. Answer selection: a small pop and a highlight that stays; selecting does not grade, Check still grades, the post-check lock remains, Check and Continue stay instantly usable. Progress bar: advances only on Continue - not on select or Check - and the final Continue opens Results with the bar full. Pip on Results: a bounce with the same artwork, once per completed attempt, scores and the Home button usable immediately. Every prompt carries the Reduce Motion fallback.

Do it in this order

Gotchas['The effects are subtle on a small simulator - enlarge it to judge (0:52)', 'Celebrations must fire once per completed attempt, not on every render (1:01-1:02)']

Why it matters

This is 'animation should communicate state' in practice, and the prompt skeleton is reusable.

People get this wrong

Selecting an answer should grade it, with an animation.

Selecting only highlights; the Check button grades (0:47).

05

2D PNG characters vs Lottie JSON: what motion each can carry

1:04:00

A 2D character is 'just PNG images', so the motion available is limited.

Pip is a 2D PNG, so the agent can bounce it, slide it or spin it - little more. In his own app Rajat used a JSON-driven animation with the Lottie library ('Lotte' in the transcript), which lets a character type on a keyboard or bounce a laptop. He also showed a popular React Native animation library's site (blocks moving and scaling; name not spoken) and promised the link. Asked whether 2D and 3D can combine: it depends; PNGs make it hard, and GitHub repositories and Lottie are the place to look for richer characters.

Why it matters

Choose the asset type before asking an agent to animate it, or you hit the limits of the artwork.

06

Preserve the learner's place: answers, progress and cross-device resume

1:08:00

'Have you ever reopened an app and lost your place?'

The room answered 'all the time' (the lost delivery order). PromptQuest restores the selected answer and its right/wrong highlight when the learner leaves and returns, and Continue brings the next question - 'no matter what you're doing, we will remember'. Signed in on an iPhone and then an Android simulator, the same progress appears, because yesterday's Clerk + Supabase setup stores it per account. A poll then asked who decides whether an answer is correct: the app's own prepared data (course content.json), not an AI.

Why it matters

Losing progress loses users, and keeping correctness in data sets up the next rule: AI explains, it does not grade.

07

'Explain my mistake': an optional AI layer that never blocks the learner

how-to1:12:00

If the AI service is unavailable, it should not be a blocker.

Inspired by Duolingo's 'explain my answer', the button appears only after a wrong answer is checked. The prompt asks for a 'prepared, protected' AI service (he used an OpenAI key; a Claude key works the same) and sends everything the model needs, including the prepared explanation from content.json. Grading stays in the content file - the AI only explains. When the live call failed, the prepared correction still showed and the learner could continue, which Rajat turned into the lesson: blocking Continue on a missing AI reply would be a bad experience and a support burden. A digression followed on why polish and character drive app-store reviews.

Do it in this order

Gotchas["Live, the AI call failed ('AI is unavailable. Use a prepared explanation.') - probably an exhausted API key, his guess (1:22)", 'The agent needed several minutes and type checks to apply the change (1:19-1:21)']

Why it matters

Separating deterministic grading from probabilistic explanation keeps the core product dependable.

People get this wrong

If the AI explanation fails, the lesson has to stop.

Show the prepared explanation and let the learner continue (1:22-1:24).

08

PostHog: name the events, attach them to buttons, read the funnel

how-to1:25:00

'If 10 people walk into a shop, did all 10 buy something?'

Analytics shows where people stop. Rajat uses PostHog (Firebase and Microsoft Clarity named as alternatives). The method is naming events and attaching them to buttons. His live data on 4 October: 69 people had tried the app, 8 completed attempts, 65% accuracy; a lesson funnel of 3 users through started, answered, completed, viewed; a sign-in funnel of 46 starts and 3 successes. 'Finished' means completed the questions and saw the results page, not tapped Start. EU rules require consent to track, so the lesson must work when a user opts out. He also showed Microsoft Clarity's free heat map on his resources page.

Do it in this order

Gotchas['An event attached to the wrong button pollutes the data (1:41)', "Duplicate events give misleading numbers - he verified one 'lesson started' and three 'answer checked' per lesson (2:09)", 'Users appear as random IDs, which makes finding one person hard (2:45)']

Why it matters

Turns 'does anyone finish my app?' into measurable drop-off - and sets up flags.

People get this wrong

A user who tapped Start has finished.

Finished means they completed the questions and viewed the results (1:37).

09

Feature flags: ship the feature dark and switch it on without a new store release

how-to2:01:00

A flag is 'a simple on and off switch' for a feature that is already in the app.

Rajat's example is a Black Friday sale asset that ships early and appears only on the day. Live, on the build the cohort downloaded the day before, the flag off showed the old plain app; switched on for all users in PostHog, the app reopened with Pip, the animated progress bar and 'explain my mistake'; switched off, it reverted. On mobile this matters because Apple and Google reviews 'are taking too long'. Flags can roll out to 10-15% of users a day or release on a schedule - a pattern he used at JPMorgan. The agent reached into PostHog by itself to find or create the flag.

Do it in this order

Gotchas['Default to the simple experience when misconfigured (2:10)', 'A flag only switches code already in a reviewed build; new code still needs review (2:46)']

Why it matters

Separates releasing code from releasing behaviour when store review takes days or weeks.

People get this wrong

A feature flag lets me add any new feature without store review.

The code must already be in a reviewed build; the flag only switches it on or off (2:46).

10

From web to mobile: reuse the backend, change the navigation, test the awkward cases

2:17:00

Rebuild the screens, not the backend.

Moving a web app to mobile, reuse the backend, accounts, data, lesson content and core logic; change the navigation - a bottom tab bar and a visible back button, which web apps usually omit. The poll agreed: reuse. On a real phone, test no internet, no Wi-Fi or cellular, and a larger system font. He tried Larger Text in the iOS simulator's accessibility settings and found the app 'pretty well handled', crediting the skill or iOS. A React Native connectivity plugin can show 'please connect to the internet', needed only for network features such as the AI explanation.

Why it matters

Tells a web builder what carries over and what does not before committing to a rebuild.

11

Getting to the stores: Expo EAS builds, the App Store listing, TestFlight and Android testing tracks

how-to2:24:00

'Uploaded' does not mean 'live'.

Until now every build ran on Rajat's own devices and simulators. Expo's EAS produces packages that connect to the App Store and Play Store; then comes review. On PromptQuest's App Store page he walked through the required fields, a sign-in toggle with a test account for Apple's reviewer, and the release option. His AfterLit, submitted 31 July, was rejected, fixed and resubmitted, and on 4 October was still waiting. TestFlight shares iPhone builds by invite or public link; Android testers download the test build from the Play Store when signed in. A reviewer needs account access, real screenshots and descriptions, an explanation of permissions and data collection, and a support address.

Do it in this order

Gotchas['Wrong screenshot sizes are rejected on the spot (2:27)', "A future release date still waits for Apple's approval (2:29)", 'Google did not approve his public test build in time, so the cohort got an APK (1:30, 2:38)', "Any modified app re-enters review; Apple's testing review is about a day (2:46)"]

Why it matters

The last jump from prototype to product is mostly process, not code.

People get this wrong

Once it is built and pushed, it is in the store.

It still needs submission, review and a release step (2:34).

12

Q&A: security, native limits, platform checks, model effort, and 'AI going rogue'

2:42:00

'It depends how deep it goes' - what React Native does and does not cover.

Supabase and Clerk handle data and auth security, but React Native apps can be probed, so sensitive values belong on the native side where the platform protects them. Payments go through providers that carry their own security (Stripe, Dodo Payments). For games or security-heavy work an experienced iOS or Android engineer is the better choice. One codebase serves both phones, and a Platform check adds per-platform touches such as a font or icon. On models: he used a high-effort setting but says medium or lower is enough when references and prompts are clear. Other answers: Clarity can tell bots from humans (unsure about PostHog); an APK can be downloaded from a website, a store app cannot; EU phones may allow third-party stores; he has no protection against 'AI going rogue' beyond Apple's own measures; a second weekend is Harshit's decision.

Why it matters

Marks the honest boundaries of 'AI builds your mobile app'.

Tools referenced

ToolCoverageMomentContext
React Nativedemonstrated0:17The PromptQuest app; one codebase with Platform checks
ChatGPTdemonstrated2:14The coding agent reaching into PostHog; model named as heard ('6.1 high')
PostHogdemonstrated1:25Events, funnels, feature flags, live dashboard
Microsoft Claritydemonstrated1:43Free heat map on his resources page
Lottieexplained1:04JSON-driven character animation
Expo EASexplained2:25Store-ready builds
TestFlightexplained2:32iPhone testers by invite or public link
Claudementioned0:11Named as an agent that can use the animation skill
Codexmentioned0:11Same
Firebasementioned1:26Alternative analytics
Supabasementioned0:12Progress storage; security of data
Clerkmentioned0:12Accounts from day one
Stripementioned2:51Payments carry their own security
Duolingomentioned1:12Source of 'explain my answer'

Action items

    Resources mentioned

    Resources
    • docRajat's resources page (re-shared)
    • docAnswer-selection animation prompt 0:46:00
    • docFeature-flag prompt 2:10:00
    • docStore-readiness checklist prompt 2:35:00
    • docSlide deck and post-read

    Extraction notes

    This page was built from an auto-generated transcript, which garbles product and people's names. Those were corrected silently in everything above and logged here for transparency. The warnings flag claims that were true on the recording day but change fast.

    Transcript corrections applied

    The transcript saysThe trainer actually means
    SPRAS screensplash screen
    SuperbaseSupabase
    post-hoc / postdocPostHog
    Lotte / Lotte LibraryLottie
    Expose / EAS systemExpo / Expo Application Services (EAS)
    ENV / EMV file.env file
    Locket / logcatslogcat (Android)
    Dodo PayDodo Payments (probable)
    Cloud (as an agent or key)Claude
    queue animation / Queue Quest / PromQuestPromptQuest and its Q logo
    Shaliniprobably Shivani

    True on recording day — verify before relying