Pinned Tweet
Introducing Built on iPhone.
Describe any app on your iPhone. Vibecode writes the Swift, builds, tests, and installs it DIRECTLY on your home screen.
No Mac. No Xcode. No Computer.
Powered by Opus 5.5. Live on the App Store now.
Use the link below to get 50% off your first month 👇🏼
Strava has 200 million users and no Halloween mode.
This one has route replays, Kudos, segment leaderboards and live recording.
All made in 2 prompts. One more made it Strava for trick-or-treating.
Remix on @vibecodeapp and make it your own today
Remix it here: vibecodeapp.com/s/cmvpft6b70…
Prompt 1, the full build:
[6 screenshots of the real Strava app attached]
Build a polished native iOS clone of Strava in SwiftUI: the Home feed of activities with route maps and Kudos, activity details with splits, segments and a Course Record leaderboard, Record with a live route, Maps, Groups, and You with Progress.
It is Strava on screen, in its light theme: its name, orange #FC5200 and its own words ("Kudos", "gave kudos", "PR", "CR", "Achievements", "Segment", "Leaderboards", "Choose a Sport", "Resume", "Finish", "Save Activity", "Best Efforts", "Progress"). The attached screenshots are the real app in dark mode: copy their layouts and words, build them light. Draw the STRAVA wordmark and the two-chevron logo mark in SwiftUI. US units (mi, ft, /mi). The user is Sam Rivera, Brooklyn.
SHELL
Tabs (icon over label, orange selected): Home, Maps, Record, Groups, You. Opens on Home: no splash, onboarding, login, paywall or permission prompt. The status bar stays visible.
SCREENS
1. Home: top bar with Sam's photo, search, "Home", chat bubbles, bell. White cards on #F0F0F0: avatar (subscribers get Strava's shield shape with an orange rim), name, sport icon + "Today at 7:12 AM · San Francisco, California", "•••"; title (bold 24 pt); stats row (grey label over bold value, up to 3, then "Achievements" with gold trophies and a count); a big map (card width, about 4:5); avatar stack + "23 gave kudos", "2 comments"; Kudos thumb, comment, share. Kudos: the outline thumb pops (0.8 to 1.2 to 1.0) and fills orange, the count goes up and Sam's photo joins the front of the stack; tap again to undo. Tapping a map replays its route; tapping the card opens the detail. Activities:
- Maya Chen, Morning Run, Today at 7:12 AM · San Francisco, California: Distance 4.68 mi, Pace 8:21 /mi, Time 39:05; route sf; 23 kudos; achievements 2.
- Theo Brooks, Afternoon Run, Today at 4:40 PM · Brooklyn, New York: Distance 3.83 mi, Pace 7:58 /mi, Time 30:31; route prospect; 41 kudos; markers "1 mi", "2 mi", "3 mi" and a crown "CR · Zoo Hill"; medal "PR" / "5K · 24:58"; achievements 3.
- Priya Nair, Evening Walk, Yesterday at 7:40 PM · Salem, Massachusetts: 1.84 mi, 41:20; route salem on the night map.
- Jonah Park, Morning Swim (no map): 1,650 yd, 32:10, 1:57 /100yd. Lena Fischer, Weight Training (no map): Elapsed Time 45:30, Total Volume 9,120 lb, Total Sets 18, her gym photo.
2. Replay: the orange route draws from a green start dot to a checkered finish at constant speed along its length in 1.2 s, a white-rimmed orange dot at its head. Each marker pops (0 to 1.15 to 1.0, 0.2 s) the moment the head reaches it, never before: a white pill with orange text or a gold crown pill. Stats marked counting run from 0 to their value in step with the line, keeping their format. Then the finish flag pops, the medal stamps onto the map centre (gold disc, big "PR", subtitle; 1.4 to 1.0 with a small turn, 0.25 s, a few gold confetti, no flash, holds), and Achievements lights up.
3. Activity detail: full-bleed map with round back and bookmark buttons; a sheet: athlete, date, place, title, stats grid (Distance, Avg Pace, Moving Time, Elevation, Calories, Achievements), "Splits" (mile, pace, elevation, orange bars), "Segments" (Zoo Hill 1:52 crown "CR", East Drive Sprint "PR"), "Best Efforts", kudos and comments. A segment opens its leaderboard.
4. Leaderboard: "< Segment" "Leaderboards"; pills All-Time, All-Time (Men), All-Time (Women), This Year; the leader's shield photo with gold rays, "1:52", "CR", crown + "Theo Brooks"; RANK / ATHLETE / TIME, SPEED rows (crown at 1, then 2-8); "Theo has the Course Record!".
5. Record: "Hide", "Run", gear over a map of Prospect Park with Sam's blue dot; "Choose a Sport" sheet with "Your Top Sports" circles (Run checked orange, Ride, Walk, Hike, Workout); a big orange START. Recording: huge Time, Distance, Avg Pace; the route draws along prospect at 20x. Stop -> "Resume" and orange "Finish" -> "Save Activity" sheet (title, description, orange "Save Activity"); saving puts it atop Home and opens its detail with the replay and "That's your 4th run this week!".
6. Maps: Brooklyn with 3 saved routes in orange, pills Routes, Length, Elevation, Surface, and route cards ("Prospect Park Loop · 3.35 mi · 148 ft · Made for you").
7. Groups: Challenges ("October 5K Challenge" badge, 3 of 5 runs, "Joined") and Clubs ("Brooklyn Run Club", "Golden Gate Striders").
8. You: Sam (Following 128, Followers 141); "Progress": pills Run, Distance, Time, Elevation, "This week 14.2 mi ▲12%", a 12-week chart (orange vs light blue prior); Best Efforts (5K 26:40, 10K 55:12, Half 2:01:33); Trophy Case. Search, chat and bell open small sheets; no dead buttons.
ROUTES (Google encoded polylines, precision 5; draw as a 5 pt orange line with a 1.5 pt white casing):
sf: s|veFh{hjV}@hBFbBxD~l@v@bC[nA~G~dAhCbFAt@oCdd@i@zA^hBg@tBiDrEu@ZkCEcAd@kAfGyBfEPlEwAjBhAzC{@~@z@_AiA{CvAkBQmExBgEjAgGbAe@jCDt@[hDsEbAuElFyDLyEq@iBRcFQ_Af@XX[l@qEIyApBuCzGeFyDgC|BcGuH_Fb@wC{DoClA_GUSVkE_HsJZo@{DuMcCsEcEmo@EaA|@iB
prospect: {{fwFjgnbMLk@vFDpBvC|KbInDb@fG]pBZvDtDrEpCpCnDd@q@n@d@nEtJxBN|As@dAcDdATbGaMpAgA|La@zCsCKaAj@o@xDe@bFp@lDsEF]qAkEsFiHAwCy@{CJqD}@}CeBsBx@qAaAgE
salem: orobG|zuoLEb@|@RKzEFxEzEdLJYN`@iBjAjCdN{EfA}FdDoC{HzCcBu@aCQ{BU@AsB_@mBoBuGn@NR]~Ik@jAjCkAkCGyEJ{E}@SAiAuCa@WeDaCE?]oABwA}Nq@f@aB`@l@hH
MAPS
Every map is an MKMapSnapshotter image (light, or dark for night activities) rendered once at launch and cached, drawn on its first frame; the route is a SwiftUI Path projected through the snapshot (trim animates the replay).
HOOK (the video's first 3 seconds)
- HOOK MODE: tapping an invisible 44x44 pt area at the top right, just below the status bar, on every screen, plays this run through the real Kudos and replay code, identical every time (seconds from the tap): 0.00 close everything; Home at the top with Maya's card filling the feed exactly (its header just under the top bar, its action row just above the tab bar, nothing of the next card visible), held still; 0.40 her Kudos pops, 23 to 24, Sam's photo in by 0.65; 0.85-1.25 the feed scrolls up exactly one card (one ease-out move, nothing jumps or fades) so Theo's card fills it the same way; 1.35-2.55 his replay; 2.55 finish flag; 2.65 medal; 3.00 the crown chip slides up under it; 3.30 Achievements 3.
- Holds use these times, never the app's normal delays. Motion stays in the middle 80% of the screen. Warm up haptics and snapshots at launch. Every screen is fully drawn on its first frame. Flashes at most 0.12 s at 35%. Decode images off the main thread.
LOOK
Page #FFFFFF, feed #F0F0F0, ink #242428, secondary #6D6D78, hairlines #E6E6EB, orange #FC5200, gold #F5B800 (medals, crowns, trophies), start green #3CB043. SF Pro; numbers bold with monospaced digits.
RULES
- Native SwiftUI, iOS 26 (keep the template's target), iPhone portrait; standard TabView, NavigationStack and sheets.
- Deterministic fixtures. No backend, login, permissions, analytics or network calls except map snapshots. No persistence: delete the SwiftData starter, no UserDefaults or files, so every launch starts the same.
- Photos: every person is fictional, made with gpt-image-1.5 (run env; POST $OPENAI_BASE_URL/images/generations with the project's OPENAI_API_KEY): Maya, Theo, Priya, Jonah, Lena, Sam + 4 kudos givers as candid outdoor portraits, plus Lena's gym photo; ~600 px JPEGs in the asset catalog. No logo, text or celebrity. A grey initial circle until a photo exists.
- Springs under 350 ms, haptics on key taps, pressed states, nothing under the tab bar.
- Files under 300 lines, big bodies split into subviews, no long chained expressions.
- Keep every file inside /home/user/workspace (/tmp is denied).
REMIX-READY
Theme/Brand.swift (name, wordmark, logo mark, a Copy enum with every word), Theme/Theme.swift (role colours, fonts, map looks; no colour literals elsewhere), Data/Routes.swift (polylines), Data/Fixtures.swift (athletes, activities with stats as label/value/counts items, route id, map look, replay markers as fraction/text/style, medal, crown chip, kudos, comments, splits, segments, leaderboard, routes, clubs, challenges, Sam's weeks), Data/DemoScript.swift (HOOK MODE run and timings, the record script). Codable models with String ids behind one AppDataSource protocol (FixtureDataSource) feeding one @Observable AppStore; views never read Fixtures. Features/<Tab>/, Components/. README.md under 80 lines: file map; how to rename, recolour, swap athletes, change an activity's stats and markers; 3 one-prompt remixes ("Strava for X"). "Read README.md first." atop CLAUDE.md and ios/AGENTS.md; replace ios/CLAUDE.md's structure block with this app's files. No scratch folders.
FILMING
Long-press "Home" in the top bar to reset everything to launch.
BUILD
Theme, Brand, Routes, Fixtures, then each screen in small files, a one-line status per screen; launch in the simulator every two or three files. Start the photos as a background job once Home runs; check each file exists, never view them. Walk each flow once and fix what breaks; no pixel measuring or debug modes. Deliver the whole app, not a plan. Do not publish.
Prompt 2, one round of fixes after we watched it at 30 fps:
The Strava clone works end to end and looks right. A 30 fps screen recording and a walk through every tab show 5 problems. Fix them and keep everything else exactly as it is, including every HOOK MODE time.
1. The prospect route stops halfway. Its polyline was cut short, so Theo's replay, the Record run and the Maps route end at the lake instead of closing the loop back at Grand Army Plaza. Replace the prospect polyline in Data/Routes.swift with this full loop (73 points, 3.84 mi; Google encoded, precision 5):
{{fwFjgnbMLk@vFDpBvCvD~B|BhCfBx@nDb@fG]pBZvDtDrEpCpCnDd@q@n@d@nEtJxBN|As@dAcDdATf@iBfBcCrBsEpAgA|La@zCsCKaAj@o@xDe@lDx@t@GlDsEF]qAkEsFiHAwCy@{CJqD}@}CeBsBx@qAMaBs@eBJaBPAk@iBkk@fFcAQwBaCgAp@CkAo@WcCnCcAWs@xAkDfB]xAmBAaGjDIn@g@CSbAsAPgGqAaAx@oG_BcBx@yAjKc@`@Gv@KbGfA~@t@g@
Re-space Theo's markers along it: "1 mi" at 0.26, "2 mi" at 0.52, the Zoo Hill crown at 0.62, "3 mi" at 0.78 of its length.
2. Pace counts up from 0:00 during a replay ("0:14 /mi", "2:29 /mi"), which no runner would believe. Pace and Avg Pace never count: they show their final value from the first frame, in the feed and in the detail. Distance, Time and Moving Time still count.
3. The Course Record shows twice. After Theo's replay, the chip "CR · Zoo Hill · 1:52" slides up right on top of the route's own "CR · Zoo Hill" marker pill and overlaps the bottom of the PR medal. Make the route's crown marker a small gold disc with a crown and no text, and place the chip 10 pt below the medal's bottom edge so it never touches the medal.
4. In the activity detail, scrolling the sheet up draws its text under the status bar on top of the clock ("Splits" over "10:31"). Keep a white band behind the status bar (the top safe area) once the sheet reaches the top, so nothing draws under the clock.
5. Record plays its simulated run at 20x, so in a few seconds the line barely leaves the start. Play it at 60x (one minute of run per second); Time, Distance and the line stay in step.
Build, then check the replay, the chip and the detail scroll with screenshots about 100 ms apart (no screen recordings), and run HOOK MODE once.
+1 prompt, the remix that made it Strava for trick-or-treating:
Make this Strava for trick-or-treating. Keep every screen, animation, the look and HOOK MODE timing; change only Copy, Fixtures, DemoScript and photos. HOOK MODE still opens on Maya's Morning Run card, kept exactly as it is ("Morning Run", the sf map, "23 gave kudos"). Theo's card becomes "Trick-or-Treat Run 🎃", Today at 6:12 PM · Salem, Massachusetts, salem route, night map: Candy 112, Houses 14, Distance 1.84 mi, all counting; a "+8 🍬" marker at each house (one "🍫 FULL SIZE"); medal "PR" / "Most candy · 112"; crown "King of the Block". Everything else becomes trick-or-treating too.
Vibecode retweeted
You've seen this ad. The UK banned it as misleading.
So we put the real game inside the iPhone Duo. 3 prompts on @vibecodeapp
Remix it: vibecodeapp.com/s/cmvf8n4lm0…
Finding a cofounder is harder than finding a date.
This one has prompts, likes with comments, Roses and Standouts.
All made in 2 prompts. One more made it Hinge for cofounders.
Remix on @vibecodeapp and make it your own today
Remix it here: vibecodeapp.com/s/cmvo04gh90…
Prompt 1, the full build:
Build a polished native iOS clone of Hinge in SwiftUI: profiles you scroll, likes on one photo or prompt with a comment, Roses, Standouts, Likes You, Matches with Your turn, chat, and your profile with prompts.
It is Hinge on screen: its name, plum, serif prompt answers and its own words ("Send like", "Add a comment", "Rose", "Standouts", "Your turn", "Designed to be deleted"). Draw the H tab icon and the "Hinge" wordmark in SwiftUI. The user is Sam Rivera, 30, Brooklyn.
SHELL
Tabs (icons only, black selected, grey otherwise): H (Discover), star (Standouts), heart (Likes You, plum badge "3"), bubbles (Matches), Sam's round photo (Profile). Opens on Discover: no splash, onboarding, login, paywall or permission prompt. The status bar stays visible.
SCREENS
1. Discover: one profile at a time, scrolled vertically with momentum. Sticky header: the name (heavy sans 28 pt) with a plum verified seal (scalloped, white check); undo arrow and "•••" right. Then photo 1, prompt 1, a vitals card ("28", "5' 6"", "Product designer", "Brooklyn", "Long-term relationship"), photo 2, prompt 2, photo 3, prompt 3. Photos 4:5, full width minus 16 pt margins, 10 pt corners. Prompt cards: white, 12 pt corners, label 17 pt sans, answer New York serif 30 pt semibold. Every photo and prompt has a 48 pt white circle with an outlined heart at its bottom-right. A round white X (56 pt, soft shadow) floats bottom-left above the tab bar and skips. 6 profiles:
- Maya 28, product designer; photo 1 laughing on a rooftop at golden hour; "Together, we could" / "find the best tacos in the city", "My simple pleasures" / "the first sip of iced coffee", "I'm weirdly attracted to" / "people who parallel park on the first try".
- Theo 31, pastry chef; photo 1 in a bakery kitchen; "Typical Sunday" / "croissants at 6, nap by noon", then 2 more.
- Priya 29 urban planner, Jonah 33 nurse, Lena 30 architect, Marcus 32 music teacher.
2. Like: a heart pops (0.85 to 1.1 to 1.0, fills plum) and its photo or prompt card lifts into a sheet over the dimmed profile: the item on top, an "Add a comment" field, a round Rose button (plum outline) and a wide plum "Send like" pill. Send like: the sheet drops and the profile slides out left as the next slides in from the right. Rose: a plum rose blooms on the card, "Rose sent", then the next profile. Theo, Lena and every 3rd like after them like you back.
3. It's a match!: white; Sam's and their round photos slide together and a plum heart pops between them; "It's a match!" (serif 40 pt) springs in; a "Start the chat with Theo" field and "Keep browsing". Send opens the chat.
4. Standouts: "Standouts", "1 free Rose", a paged row of 4 tall cards (a big photo or prompt) with "Send Rose".
5. Likes You: 3 likes, Roses first; each shows what they liked ("Liked your photo" + the item) and their comment. Tap: their profile with the like on top, X and a plum heart that makes a match.
6. Matches: "Your turn (2)" then "Their turn (2)": photo, name, "Start the chat with Ava" or the last line. Chat: the liked prompt on top as a #EEEEEE card (label + serif answer); bubbles theirs #EEE1DB with a round photo, mine #D2C4D4; "Send a message"; typing dots for 1.5 s, then a scripted reply.
7. Profile: Sam, "Edit profile": 6 photo slots (3 photos, 3 "+"), "Written prompts": "Don't hate me if I" / "pick two restaurants", "My simple pleasures" / "a long walk with no plan", and an empty "Select a prompt" that opens Hinge's prompt list ("Dating me is like", "Green flags I look for", "I go crazy for", "My most irrational fear", "Typical Sunday"); picking opens a serif editor ("0/150", Done) and the card drops into its slot. A plum "Hinge+" card with the wordmark: "See everyone who likes you" (demo, no payment).
HOOK (the video's first 3 seconds)
- HOOK MODE: tapping an invisible 44x44 pt area at the top right, just below the status bar, on every screen, plays this run through the real like code, identical every time (seconds from the tap): 0.00 close everything; Discover on Maya scrolled so her "Together, we could" card is centred, held still; 0.40 its heart pops; 0.45-0.70 the card lifts into the sheet; 0.75-1.00 "I know a place 🌮" types; 1.10 Send like; 1.15-1.45 page slide to Theo; 1.55-1.95 Theo momentum-scrolls up until his first prompt is centred; 2.05 its heart pops; 2.10-2.35 sheet; 2.40-2.65 "save me one 🥐" types; 2.75 Send like; 2.80 It's a match! (photos meet 2.80-3.10, title 0.6x to 1.0x by 3.05, heart 3.10, field and Keep browsing by 3.30).
- Holds use these times, never the app's normal delays. Motion stays in the middle 80% of the screen. Warm up haptics at launch.
MOTION
- The liked card lifts into the sheet as one matchedGeometryEffect move, never a jump.
- A profile change is one clean page slide: the old profile moves left off screen as one piece while the new one comes in from the right, both 0.30 s ease-in-out; nothing fades, overlaps or leaves an empty frame.
- Typed text appears letter by letter (no keyboard in HOOK MODE). Every screen is fully drawn on its first frame. Flashes at most 0.12 s at 35%. Decode images off the main thread.
LOOK
Page #F7F6F3, cards #FFFFFF, ink #1A1A1A, secondary #6F6A6B, hairlines #E8E4E1, plum #67295F (seal, Send like, Rose, badges), light plum #D2C4D4, beige #EEE1DB, heart outline #B58C84. New York serif for prompt answers and big titles, SF Pro for the rest.
RULES
- Native SwiftUI, iOS 26 (keep the template's target), iPhone portrait; standard TabView, NavigationStack and sheets.
- Deterministic fixtures. No backend, login, permissions, analytics or network calls. No persistence: delete the SwiftData starter, no UserDefaults or files, so every launch starts the same.
- Photos: every person is fictional, made with gpt-image-1.5 (run env; POST $OPENAI_BASE_URL/images/generations with the project's OPENAI_API_KEY; a person's later photos via /images/edits from their first, so the face matches): 6 people x 3, 8 Likes You and Matches people x 1, Sam x 3; candid phone photos in warm natural light, ~900 px JPEGs in the asset catalog. No logo, text or celebrity in any image. A warm gradient placeholder until a photo exists.
- Springs under 350 ms, haptics on key taps, pressed states, no dead buttons, nothing under the tab bar.
- Files under 300 lines, big bodies split into subviews, no long chained expressions.
- Keep every file inside /home/user/workspace (/tmp is denied).
REMIX-READY
Theme/Brand.swift (name, wordmark, H icon, seal, rose, a Copy enum with every word), Theme/Theme.swift (role colours, fonts; no colour literals elsewhere), Data/Fixtures.swift (people, photos, prompts, likes, chats, prompt list), Data/DemoScript.swift (HOOK MODE run and timings, who likes back, comments, replies). Codable models with String ids behind one AppDataSource protocol (FixtureDataSource) feeding one @Observable AppStore; views never read Fixtures. Features/<Tab>/, Components/. README.md under 80 lines: file map; how to rename, recolour, swap the people; 3 one-prompt remixes ("Hinge for X"). "Read README.md first." atop CLAUDE.md and ios/AGENTS.md; replace ios/CLAUDE.md's structure block with this app's files. No scratch folders.
FILMING
Long-press the header name to reset everything to launch.
BUILD
Theme, Brand, Fixtures, then each screen in small files, a one-line status per screen; launch in the simulator every two or three files. Start the photos as a background job once Discover runs; check each file exists, never view them. Walk each flow once and fix what breaks; no pixel measuring or debug modes. Deliver the whole app, not a plan. Do not publish.
Prompt 2, one round of fixes after we watched it at 30 fps:
The Hinge clone works end to end and looks right. A 30 fps screen recording shows 3 motion problems in the like flow. Fix them and keep everything else exactly as it is, including every HOOK MODE time.
1. The lift is a blink and a fade. When a heart is tapped (a prompt or a photo, real taps and HOOK MODE alike), the item disappears from its slot for 2 frames, leaving an empty card-shaped hole with only the heart, then a faded copy fades in at the sheet position. It must lift as one piece: in the frame the heart is tapped, a floating copy sits exactly over the original (hide the original in that same frame), stays at full opacity the whole time, and moves to its sheet position over 0.25 s ease-out, scaling to 1.03 with a deeper shadow, while the dim fades in under it and the comment field and buttons slide up from the bottom. Never fade the item itself.
2. Send like puts the item back into the feed. The item drops back down onto its slot while the feed's own copy fades back in, so for about 3 frames the prompt text (or the photo) is drawn twice, one over the other. On Send like the item never returns to the feed: the item, the comment field and the buttons slide down off the bottom of the screen together over 0.25 s while the dim fades out, and the feed's slot stays hidden until the profile has left the screen.
3. The page slide overlaps two profiles. In the slide after Send like, the outgoing and incoming prompt cards draw on top of each other in the same place for about 3 frames ("someone who laughs at my 3am stories" over "staircases. Ask me about staircases"). The whole outgoing profile must move left off screen as one piece while the whole incoming profile comes in from the right edge beside it, never on top of it, both over 0.30 s ease-in-out, on every path (Send like, X, HOOK MODE). HOOK MODE's slide now takes about 0.18 s; make it 0.30 s, still starting at 1.15 s.
Build, then check the lift, the Send like and the slide with screenshots about 100 ms apart (no screen recordings), and run HOOK MODE once.
+1 prompt, the remix that made it Hinge for cofounders:
Make this Hinge for cofounders. Keep every screen, animation, the look and HOOK MODE timing; change only Copy, Fixtures, DemoScript and photos. Everyone but Maya becomes a founder seeking a cofounder (gpt-image-1.5 photos at laptops and whiteboards; vitals like "Technical cofounder"). HOOK MODE still opens on Maya, the one dating profile kept exactly as it is ("Together, we could" / "find the best tacos in the city", "I know a place 🌮"); its second like is Priya at a whiteboard: "Together, we could" / "hit $10k MRR by Christmas", "I'll handle sales 🤝", then "It's a match!" over "Designed to be acquired."
Vibecode retweeted
Lots of people want to build a game like Candy Crush.
This one has cascades, color bombs, levels, and unlimited lives.
All made in 2 prompts.
Remix on @vibecodeapp and make it your own today
Everyone has a Duolingo for X idea.
This one has lessons, streaks, XP and leagues.
All made in 2 prompts. One more made it Duolingo for brainrot.
Remix on @vibecodeapp and make it your own today
Remix it here: vibecodeapp.com/s/cmvmjokti0…
Prompt 1, the full build:
Build a polished native iOS clone of Duolingo in SwiftUI: the path, lessons with word-bank chips and the "Nice job!" banner, energy, the streak, Leaderboards, Quests and Profile.
It is Duolingo on screen: its name, colours and words, and Duo the owl drawn in SwiftUI (round green body, lighter belly, big white eyes with black pupils, small orange beak, ear tufts, small wings, orange feet; poses: idle with a blink, cheer, sad, wave). The learner is Sam Rivera, on a 27-day Spanish streak.
SHELL
Tabs (icons; selected in a Macaw-blue outlined tile): Learn (house), Leaderboards (shield), Quests (chest), Profile (face). Opens on Learn: no splash, onboarding, login, paywall or permission prompt. Top bar: Spanish flag, orange flame "27", gem "505", pink energy battery with a bolt "25".
SCREENS
1. Learn: a green unit banner "SECTION 1, UNIT 2" / "Order food and drinks" with a "GUIDEBOOK" button; a winding path of round 3D nodes: 3 done (gold), node 4 current (green star) with a bouncing "START" bubble, locked grey nodes, a chest and a trophy; Duo stands beside the path and waves. Node 4 opens a popover "Order food" / "Lesson 2 of 4" / "START +10 XP".
2. Lesson (full screen): X, a green progress bar that steps with a white shine (Fox orange with sparkles after 3 right in a row), energy at the right dropping 1 per CHECK. Seven exercises:
a) "Select the correct image": a blue speaker button + "el café"; 2x2 picture cards café, té, agua, leche (selected = Macaw border, #DDF4FF fill).
b) "Translate this sentence": Duo beside a speech bubble (blue speaker icon, dotted underlines) "Un café con leche, por favor."; two ruled answer lines; bank: A, coffee, with, milk, please, tea, the, water.
c) "Tap the matching pairs": café/coffee, té/tea, agua/water, pan/bread, leche/milk.
d) "Complete the sentence": "Yo ___ un café." quiero / quieres / quiere.
e) "Select the correct image": "la manzana" (apple, bread, cheese, orange).
f) "Translate this sentence": "Quiero un café, por favor." = I want a coffee, please (bank adds tea, the, milk, water).
g) "Translate this sentence": "Me gusta el café." = I like coffee (bank adds tea, you, milk).
Chips: white, 2 pt Swan border, 4 pt bottom edge, 19 pt text, 48 pt tall; a tapped chip flies to the line (matchedGeometryEffect spring), leaving a grey slot; tap it to send it back. CHECK (full width, Feather Green) is grey until there is an answer. Right: a #D7FFB8 banner slides up with a white round check, praise ("Nice job!", "Amazing!", "Great job!") and a green CONTINUE. Wrong: a #FFDFE0 banner, "Correct solution:" and the answer, a red GOT IT; the picked card shakes.
3. Lesson complete: Duo jumps in confetti, "Lesson complete!", three stat boxes (coloured header, white body): TOTAL XP 15 (gold), AMAZING 86% (green), SPEEDY 2:14 (blue), CLAIM XP. Then the streak: a big flame with Duo, the orange number rolls 27 to 28 over "day streak", a Su Mo Tu We Th Fr Sa row whose orange check circles fill in turn up to today, today last, Duo's bubble "Keep it up! I'm off to brag about your streak.", CONTINUE back to Learn with node 4 done and node 5 current.
4. Leaderboards: "Ruby League", a row of league shields, "Top 10 advance to the next league", "3 days"; 30 learners (initial avatars, XP), PROMOTION ZONE and DEMOTION ZONE dividers, Sam 6th. After a lesson Sam's row slides up past two rows: "You moved up to 4th place!".
5. Quests: "Daily Quests" (Earn 30 XP 15/30, Get 10 in a row 3/10, Score 90% or higher in 2 lessons 1/2) with chests; a lesson updates them and full chests pop open.
6. Profile: "Sam Rivera", "SamRivera927", "Joined March 2025", Statistics (Day streak 27, Total XP 4,120, Ruby, 2 top 3 finishes), Achievements Wildfire 27/30, Sage 4,120/5,000, Scholar 214/250.
HOOK (the video's first 3 seconds)
- HOOK MODE: tapping an invisible 44x44 pt area at the top right, just below the status bar, on every screen, plays this run through the real lesson code, identical every time (seconds from the tap): 0.0 close everything and open the lesson at exercise f, 5 of 7 done, 4 in a row (orange bar), energy 21, "I want a" already on the line, held still; 0.40 "coffee," flies; 0.62 "please" flies; 1.00 CHECK; 1.05 "Nice job!"; 1.40 CONTINUE: the banner drops and g slides in from the right over 0.25 s; 1.75, 1.88, 2.01 "I", "like", "coffee" fly; 2.32 CHECK; 2.37 "Amazing!", the bar fills to 100% with a shine; 2.75 CONTINUE: Lesson complete, XP counts 0 to 15; 3.30 CLAIM XP: the flame ignites, 27 rolls to 28 by 3.75; the circles fill 3.75 to 4.10, today last with a pop.
- Holds use these times, never the app's normal delays. Every screen is fully drawn on its first frame (no whole-screen fades); only its contents animate. A chip stays visible through its whole flight; praise holds at full opacity until CONTINUE. Flashes at most 0.12 s at 35%. Motion stays in the middle 80% of the screen. Warm up haptics at launch.
LOOK
White; text #4B4B4B; Feather Green #58CC02 (edge #58A700), #89E219, Macaw #1CB0F6, red #FF4B4B (#EA2B2B text), gold #FFC800, Fox #FF9600, energy #FF86CD, borders #E5E5E5, #F7F7F7. SF Pro Rounded, heavy for titles and numbers. Buttons and nodes have a 4 pt darker bottom edge that sinks when pressed.
RULES
- Native SwiftUI, iOS 26 (keep the template's target), iPhone portrait; standard TabView, NavigationStack and sheets, so it also runs on iPhone Duo.
- Deterministic fixtures. No backend, login, permissions, analytics or network calls. No persistence: delete the SwiftData starter, no UserDefaults or files, so every launch starts the same.
- Picture cards: emoji first; once the app runs, flat gpt-image-1.5 illustrations (run env; $OPENAI_BASE_URL/images/generations with the project's OPENAI_API_KEY; white background, no text), curl-checked, never reviewed by eye, decoded off the main thread.
- Springs under 350 ms, haptics on key taps, pressed states, no dead buttons.
- Files under 300 lines, big bodies split into subviews, no long chained expressions.
- Keep every file inside /home/user/workspace (/tmp is denied).
REMIX-READY
Brand.swift (name, Duo views, a Copy enum with every word), Theme.swift (role colours, fonts; no colour literals elsewhere), Fixtures.swift (course, lessons, exercises, league, quests, profile), DemoScript.swift (HOOK MODE run and timings). Codable models; exercise kinds as an enum with one view each; one AppDataSource protocol (FixtureDataSource) behind an @Observable store; views never read Fixtures. Feature folders. README.md under 80 lines: file map; how to rename, recolour, swap the course; 3 one-prompt remixes ("Duolingo for X"). "Read README.md first." atop CLAUDE.md and ios/AGENTS.md; replace ios/CLAUDE.md's structure block with this app's files. No scratch folders.
FILMING
Long-press the top bar's flag to reset everything to launch.
BUILD
Theme, Brand, Fixtures, then each screen in small files, a one-line status per screen; launch in the simulator every two or three files. Images only after the app runs. Walk each flow once and fix what breaks; no pixel measuring or debug modes. Deliver the whole app, not a plan. Do not publish.
Prompt 2, one round of fixes after we watched it at 30 fps:
The Duolingo clone works end to end. A 30 fps screen recording shows 3 problems. Fix them and keep everything else exactly as it is, including every HOOK MODE time.
1. Word chips don't fly. At 30 fps a tapped chip disappears from the bank and is on the answer line in the very next frame (HOOK MODE's "coffee," and "please" and real taps alike); tapping it back is the same. A chip must visibly travel: over 0.30 s it moves from its bank slot to its place on the line (and back again when tapped), drawn above everything else in the lesson, so about 9 frames at 30 fps show it in transit, and its bank slot turns grey as it leaves. Use one floating copy in an overlay at the lesson's root that animates between the two measured positions (or one matchedGeometryEffect namespace shared by both containers with the change inside withAnimation), on every path including HOOK MODE.
2. CONTINUE between exercises garbles. At 30 fps the answer chips vanish from the line one frame before anything moves, then the old and new exercises overlap in place for about 6 frames (the two "Translate this sentence" headers and the two speech bubbles draw over each other and bank chips float loose), and the "Nice job!" banner is still visible under the new CHECK for about 0.4 s. It must be one clean page slide: the whole old exercise (header, Duo, bubble, its answer still on the line, its bank) moves left off screen as one piece while the whole new exercise comes in from the right as one piece, both over 0.25 s ease-in-out, with nothing fading, overlapping or re-laying out. The banner slides down and is gone within 0.18 s of the tap. The top bar (X, progress bar, energy) stays still.
3. Learn: the START bubble is hidden behind the gold done node above the current node (only "ART" shows). It must be fully visible, centred above the green current node, drawn above every node and the path, with enough room that it never overlaps another node.
Build, then check the chip flight and the CONTINUE slide with screenshots about 100 ms apart (no screen recordings), and run HOOK MODE once.
And the +1 prompt that made it Duolingo for brainrot:
Make this Duolingo for brainrot. Keep every screen, animation and HOOK MODE timing. The course becomes Brainrot (a 💀 flag): its lessons teach Gen Alpha slang (cooked, rizz, aura, mid, mog, tuff, 6 7) under the header "Translate this brainrot", and XP is called aura. HOOK MODE still opens on the one Spanish exercise kept from this app exactly as it is ("Translate this sentence", "Quiero un café, por favor.", "Nice job!"); then g is Duo saying "bro is cooked 💀" = He is doomed, its banner slides up like "Nice job!" and reads "+1000 aura", TOTAL AURA counts to 1000, and the streak rolls 66 to 67.
Vibecode retweeted
This plate picker is so satisfying.
Had to see if I could build it myself.
2 prompts on @vibecodeapp
Vibecode retweeted
Club Penguin had 200 million accounts. Disney shut it down in 2017.
So we rebuilt it in 3D, with no strangers, no ads and no membership. 3 prompts on @vibecodeapp
Remix it: vibecodeapp.com/s/cmvf8n3bd0…
❤️❤️ @vibecodeapp
Claude Duet is still in waitlist.
So I used @orgo, @composio, and @vibecodeapp to clone it.
It has morning briefs, background tasks, email approvals, live dashboards, and its own cloud computer.
Vibecode retweeted
The Tesla app on the iPhone Duo is so clean.
Couldn’t wait for my Duo so I built it myself.
1 prompt on @vibecodeapp
Vibecode retweeted
Claude Duet is still in waitlist.
So I used @orgo, @composio, and @vibecodeapp to clone it.
It has morning briefs, background tasks, email approvals, live dashboards, and its own cloud computer.
Lots of people want to build a game like Candy Crush.
This one has cascades, color bombs, levels, and unlimited lives.
All made in 2 prompts.
Remix on @vibecodeapp and make it your own today
Remix it here: vibecodeapp.com/s/cmvgxytzo0…
Prompt 1, the full build:
Build a polished native iOS clone of Candy Crush Saga in SwiftUI and SpriteKit: the real name, logo look, candies, words, board and map, with one change. Lives never run out, and there are no ads.
Home screen name "Candy Crush". Logo (SwiftUI): "Candy" over "Crush" in chunky rounded candy letters, orange-to-yellow, thick chocolate outline, white gloss, a pink heart and a pink "SAGA" tag. Where lives would be, a glossy pink heart with a white "∞". No lives count, timers, gold bars, boosters for sale, shop or ads anywhere.
SCREENS
1. Play (opens here: no splash, login or prompts). Pink HUD: left "6 | ♥ ∞" over the moves left, a big crimson italic "10"; centre a star bar (3 stars, one lit) over the hot-pink goal pill, a red jelly bean and "12" counting down to a green check; right a round badge with the big ∞ heart, 70 pt. A 7x9 board of translucent navy tiles on the candy-land backdrop. Pause (bottom left): Resume, Restart, Map.
Candy Crush rules: swap neighbours (no match slides back); 4 in a line make a Striped Candy, an L or T a Wrapped Candy, 5 in a row a Colour Bomb; Colour Bomb + Striped Candy turns every candy of that colour striped and fires them all. Chains repeat; a move counts when its chain settles. Praise by chain: 2 "Sweet!", 3 "Tasty!", 4 "Delicious!", 5+ or any Colour Bomb combo "Divine!"; floating score numbers in candy colours.
2. Level end: "Sugar Crush!": each move left flies from the moves number onto a candy as a Striped Candy and fires, 0.12 s apart. Then "Level 6 complete!", three stars pop in turn, the score rolls up, "Next".
3. Map: a candy-land valley (generated art); a pink-and-white candy-cane path through 15 glossy round pink level buttons: 1-5 with gold stars (3, 3, 2, 3, 1), 6 current with a bobbing ∞ heart marker, 7-15 locked. Top: "♥ ∞" pill, the logo, "★ 12". After a win the stars pop and the marker hops on.
4. Level card (from a node): "Level 7", "Collect 30" with a green gumdrop, "22 moves", empty stars, a glossy magenta "Play", "♥ ∞ lives", and "Tip: Colour Bomb + Striped Candy clears lines!"
5. Out of moves: "Out of moves!", a big glossy "∞" over "lives left", "Play again" (straight back in) and "Map". No out-of-lives screen, +5 moves offer or timer, ever.
Fixtures: 15 levels (7x9, 18-30 moves, goal colour and count, star scores, seed); Level 6 is the HOOK board, 10 moves, collect 12 red.
SIGNATURE MOMENTS (filmed)
- Swaps slide in 0.18 s; pops burst into sparkles; falls squash and bounce.
- The combo: lightning arcs from the Colour Bomb, white beams from each Striped Candy, wrapped candies blowing with a pink shockwave.
- "Divine!" and "Sugar Crush!" in big glossy candy letters, springing 0.4x to 1.15x to 1.0x; counters roll with numericText.
HOOK (the video's first 3 seconds)
- HOOK MODE: tapping an invisible 44x44 pt area at the top right, just below the status bar, plays a scripted 4-second run through the real swap and match code, identical every time. At 0.0 it resets Level 6 to this board, rows top to bottom (R red, O orange, Y yellow, G green, B blue, P purple, X Colour Bomb, r red Striped Candy (horizontal), v wrapped yellow, w wrapped blue): OGYRPGO ORYvBRO BPGYPYY YPGOROB OOXrPYG GRBRBOG RBYGPPB RGRBwGB PBYPROR; moves 10, goal 12. 0.6: a soft white touch circle drags the Colour Bomb (row 5, column 3) right into the Striped Candy over 0.4 s, lifted 1.3x with a glow and a short trail. 1.0: it lands. 1.1-1.5: arcs to the 11 other reds, which turn striped, alternating vertical and horizontal in reading order, starting vertical. 1.65: all 12 fire in reading order, 0.05 s apart; both wrapped candies go off; all 63 cells clear. 2.3: "Divine!" and the refill, rows top to bottom: PPYBBRR RPRYYBY OOYOGBB YGPRYOY OPYOBBG GGBRPGO GBBGGPR ORYGOPO GRPPYRB; goal check, three stars; moves 10 to 9 at 3.1; "Sugar Crush!" at 3.8.
- "Divine!" replaces any earlier word and holds 1.3 s at full opacity; nothing starts until it fades. Flashes at most 0.12 s at 35% white. Specials are the size of other candies. Motion stays in the middle 80% of the screen.
LOOK
Sky-blue candy-land backdrop #6DD4F7 (generated art). HUD pink #F9C9E1 to #FAA8D3 with white stripes; goal pill #F880C0; moves #C8235E; star bar blue #30BCE4 on pink #F960A6; stars #FFD23F. Magenta pill buttons. Candies, glossy and jelly-like (gpt-image-1, transparent): red jelly bean #E8202A, orange lozenge #F19105, yellow lemon drop #FAE80C, green square gumdrop #43BB01, blue lollipop-head sphere #4F96FE, purple flower #C602FC; a wrapped one of each (twisted cellophane); the Colour Bomb, a chocolate ball with rainbow sprinkles. Stripes drawn in SpriteKit: white bands clipped to the candy's shape.
RULES
- Native SwiftUI + SpriteKit at 60 fps, iOS 26 (keep the template's target), iPhone portrait; it must also run on iPhone Duo.
- Deterministic fixtures. No backend, login, permissions, analytics or network calls. No persistence: delete the SwiftData starter, no UserDefaults or files, so every launch starts the same.
- Art: run env, then gpt-image-1 with the project's OPENAI_API_KEY at $OPENAI_BASE_URL/images/generations, into the asset catalog; curl-check files, never review them by eye. No characters, people or logos in images.
- Preload textures off the main thread and warm up haptics at launch.
- Springs under 350 ms, haptics on swaps, no dead buttons.
- Files under 300 lines, big bodies split into subviews, no long chained expressions.
- Keep every file inside /home/user/workspace (/tmp is denied).
REMIX-READY
Brand.swift (name, logo, Copy enum with every word), Theme.swift (colours, fonts; no colour literals elsewhere), Fixtures.swift (levels), DemoScript.swift (HOOK board, refill, timings). Codable models behind a LevelSource protocol feeding one @Observable GameStore; candy kinds as an enum. README.md under 80 lines: file map; rename, recolour, add a level or candy; 3 one-prompt remixes that re-niche it. "Read README.md first." atop CLAUDE.md and ios/AGENTS.md; replace ios/CLAUDE.md's structure block with this app's files. No scratch folders.
FILMING
Long-press the map's logo to reset to launch. Long-press the moves number to set moves to 1.
BUILD
Theme, Brand, Fixtures, then the board engine and each screen in small files, a one-line status per screen; launch in the simulator every two or three files. Art only after the app runs. Check the HOOK board with a quick script. Walk each flow once and fix what breaks; no pixel measuring. Deliver the whole app, not a plan. Do not publish.
Prompt 2, one fix round after we checked the motion frame by frame:
Everything works: the HOOK run, "Divine!", Sugar Crush, "Level 6 complete!", the map, the Level 7 card, out of moves and Play again. 5 fixes, keep everything else exactly as it is:
1. HOOK drag: the Colour Bomb stays about cell-sized while it's dragged, so the swap is hard to see at video size. Lift it to 1.45x for the whole 0.4 s drag, with a soft drop shadow, a brighter glow and a 3-ghost trail behind it; it settles back to 1.0x with a squash as it lands. Keep the touch circle as it is.
2. Striped Candy beams: each beam is a thin white line about 6 pt wide that nearly vanishes on video. Make every beam a bright glowing band as tall as a cell (white core, the candy's colour at the edges), shooting out from the candy to both board edges in 0.12 s and fading over 0.2 s. Same for Sugar Crush's beams.
3. Floating score numbers: they're about 22 pt tall and stay up for about a second, so ten of them still cover the empty board and "Divine!". Make them 60% of that size, rising about 24 pt and fading out within 0.6 s.
4. Praise words: "Divine!" spans about 59% of the board's width. Make "Sweet!", "Tasty!", "Delicious!" and "Divine!" about 85% of the board's width; keep the springs and timings.
5. Star bar: Level 7 (and Play again) starts with the bar about 40% full and its first star lit. Every level starts at 0 with no star lit; only HOOK MODE's Level 6 setup starts with one star.
Build, then run HOOK MODE through to the Level 6 card, and Level 7 from Play to "Out of moves!", in the simulator.
Vibecode retweeted
Claude Duet's onboarding is beautiful.
So I asked Claude to clone it.
2 prompts on @vibecodeapp
Vibecode retweeted
Duet is already cloned…
Lots of people want to build camera apps.
This one has face-tracking Lenses, Snapstreaks, Send To and Snap Map.
The simulator doesn't even have a camera.
All made in 2 prompts.
Remix on @vibecodeapp and make it your own today
Remix it here: vibecodeapp.com/s/cmvgxytdy0…
Prompt 1, the full build:
Build a polished native iOS clone of Snapchat in SwiftUI: the Dog Lens snaps onto a selfie and drops its tongue when he opens his mouth, then the snap goes out through Send To and a Snapstreak ticks 247🔥 to 248🔥. The simulator has no camera, so the camera is a bundled real selfie video and the Lenses track it live.
IDENTITY
It is Snapchat: the name, Snapchat yellow #FFFC00, the ghost logo drawn in SwiftUI (white, black outline, on yellow) for the app icon and the Snapcode on Sam's profile (tap his Bitmoji), and Snapchat's own words throughout. The user is Sam Rivera (@samriv), the man in the clip.
SHELL
Opens straight on Camera with the clip playing: no splash, onboarding, login or permission prompt. Snapchat's black bottom bar (custom, not the glass tab bar), outline icons Map, Chat, Camera, Stories, Spotlight; the selected one in its colour (green #3CC28A, blue #0EADFF, yellow, purple #A05DCD, red #F23C57) with a dot under it.
SCREENS
1. Camera. curl v3b.fal.media/files/b/0aaf01… once into the app as camera.mp4 (a Pexels selfie of a man talking; 7.6 s loop, 1080x1920, 30 fps). Loop it muted and seamless (AVPlayerLooper), aspect fill, not mirrored, above the bar with 24 pt bottom corners. Never ask for camera access.
Chrome: top-left Sam's Bitmoji and search; top-right add-friend and a dark glass column (flip, flash, more); under the avatar the Lens pill "ⓘ Dog ›". The 80 pt white capture ring; 56 pt Lens bubbles (None, Flower Crown, Dog, Rainbow, Heart Eyes) scroll and snap, the centred one inside the ring; tapping the ring or the centred bubble captures: the ring squeezes to 0.88, a white flash peaks at 35% and is gone in 0.12 s, then Preview.
FaceTracker: Vision runs on the CPU, off the main thread, on AVPlayerItemVideoOutput frames (every looped item), mapped through the aspect-fill transform. Landmarks are noise in the simulator: run VNDetectFaceRectanglesRequest every frame and place features in the box at offsets measured on this clip: eyes 32% and 69% across, 29% down; nose 47% down; mouth 69% down; rotated by the box's roll. Mouth open, from pixels: a strip 18% of the box wide, 55-83% down, 9 columns x 56 rows; per column, find the pale teeth (luma > 0.58, channel spread < 70), skip up to 2 rows, count the run of dark (luma < 0.18) or deep-red pixels. He talks, so: open on the first frame with a median run of 3+ rows, stay open 0.4 s or more, close after 2 closed frames (open at 1.27-1.80 s and 4.27-4.80 s).
Lenses, SwiftUI shapes sized from the eye distance, rotated with roll, springing on from 0.4x: Dog (floppy brown ears at the sides of the head that bounce, a glossy black nose, a pink tongue while the mouth is open), Flower Crown (7 pastel flowers on the hairline), Rainbow (a 6-band rainbow pours from the open mouth and keeps pouring 1.5 s after it closes), Heart Eyes (pulsing red hearts over the eyes).
2. Preview: the frozen frame with its Lens; X; Snapchat's right tool column (T, pencil, sticker, scissors, music). Tap the photo for the caption: a full-width black strip at 50%, white text, 40% down. The yellow "Send To ▶" capsule bottom-right, black bold text.
3. Send To (full screen, white): search, My Story, Best Friends: Jordan Lee 247🔥, Maya Chen 112🔥, Theo Park 58🔥, Priya Shah 31🔥, Leo Martins 9⌛; Recents: 3 more. Rows: Bitmoji, bold 18 pt name and Snapstreak, select circle. Selecting fills it blue with a white check and raises the blue send bar (names + arrow). Send: each picked Snapstreak rolls up one (numericText) as its 🔥 pulses (1.35x, glow), holds 1.2 s, then Preview and Send To close together and Chat slides in.
4. Chat: 9 rows: Bitmoji, bold name, Snapchat's status icons and words (red filled square "New Snap", hollow red "Opened", blue "New Chat", red arrow "Delivered"), "· 2m", Snapstreak. A sent snap puts that friend on top, "Delivered · just now". Maya's New Snap opens full screen with the 10 s circular timer; then "Opened".
5. Chat with Jordan: ME in red, JORDAN in blue, each message after a thin bar of its colour; "Send a Chat" composer; on open Jordan sends "wait you got the Dog Lens??".
6. Snap Map: MapKit over Williamsburg, Brooklyn; 8 Bitmoji pins (MapKit's own selection) with "Jordan · 2m" labels over a soft heat glow; tap one: zoom and a card with "Chat".
7. Stories: ringed Bitmoji opening 3-photo stories, 4 Discover tiles. Spotlight pages the same photos.
HOOK (the first 3 seconds of the video)
- HOOK MODE: an invisible 44x44 pt area at the top centre, just below the status bar, runs a scripted 4.5 s hook through the same code paths as real touches, identical every time. t=0 (once a seek to 1.00 s lands): carousel mid-scroll, Dog 35% into the ring, no Lens on; 0.1 Dog snaps on; ~0.3 his mouth opens, the tongue drops (tracked live); 0.7 capture; 0.75 flash; 0.9 Preview; 1.0-1.3 "omw 🐶" types in; 1.6 Send To; 2.2 Jordan selected; 2.5 send; 2.6-3.0 247🔥 to 248🔥, held to 3.8; then Chat.
- Filmed: screens and sheets spring, never pop in one frame.
LOOK
White icons on dark glass over the camera; white pages, ink #000, grey #8A8D91; yellow only for Send To, the Camera icon and the logo. Avenir Next, Bold for names and numbers.
RULES
- Native SwiftUI, iOS 26 (the template's target), iPhone portrait first; it must also run on iPhone Duo (standard NavigationStack and sheets).
- Deterministic fixtures; no backend, login, permissions, analytics or network calls; no persistence (delete the SwiftData starter, no UserDefaults or files), so every launch starts the same.
- Images: gpt-image-1 through the project's proxy (run env; POST $OPENAI_BASE_URL/images/generations with $CODEX_API_KEY): 9 Bitmoji-style 3D cartoon avatars (Sam: curly dark hair, short beard, cream jacket) and 8 story photos (places, food, a dog), decoded off the main thread. No real people or celebrities.
- Polish: springs under 350 ms, haptics on key taps, pressed states, no dead buttons, nothing hidden under the bar.
- Files under 300 lines, big bodies split into subviews, no long chained expressions.
- Keep every file inside /home/user/workspace (/tmp is denied).
REMIX-READY
Theme/Brand.swift (name, ghost logo, a Copy enum of every product word), Theme/Theme.swift (role colours, fonts), Data/Fixtures.swift (content), Data/DemoScript.swift (HOOK MODE). Codable models behind one AppDataSource and one @Observable AppStore. Lens is an enum, one overlay view per case. Features/<Screen>/ folders. README.md (file map, how to rebrand, add a Lens, swap the clip, 3 remix prompts that re-niche it), linked from CLAUDE.md and ios/AGENTS.md; replace the <structure> block in ios/CLAUDE.md with this app's files.
FILMING
Each signature moment replays when its screen appears. Holding Sam's Bitmoji on Camera for 0.6 s resets everything to the launch state; a tap opens his profile.
BUILD
Theme, Brand, Fixtures, models, AppStore; then the bar and each screen in small files with a dark placeholder camera, launching the simulator every 2-3 files until the shell runs. Then the clip, FaceTracker and Lenses, then HOOK MODE. Images last (curl-check each, never review them by eye). Walk each flow once; no pixel measuring. Deliver the whole app, not a plan. Do not publish.
Prompt 2, one fix round after we checked the motion frame by frame:
The Snapchat clone runs well: HOOK MODE, the Dog Lens tongue, Send To with 247🔥 to 248🔥, Chat, Maya's snap, Jordan's chat, Snap Map and Stories all work. 2 fixes; keep everything else exactly as it is:
1. Status bar: on Camera, Chat, Snap Map and Stories the top inset is a solid black band with no clock (only the snap viewer shows the time). Show the status bar everywhere, like Snapchat: on Camera the selfie video runs full bleed under it with white status text, and the top buttons stay just below it; white screens fill the inset with their own white background and use dark status text.
2. End of a send (HOOK MODE at 3.8 s, and a manual send): as Send To closes, the frozen Preview reappears behind it and cross-fades with Chat for about half a second, and a "Send To" header lingers at the bottom edge. Make it one move: Preview and Send To leave together in one transaction, the frozen snap never shows again, and Chat slides in clean.
Build, then run HOOK MODE twice and check the hand-off frame by frame in a screen recording, and check the clock on Camera, Chat and Snap Map.
Vibecode retweeted
People asked if you could slam the iPhone Duo shut to hang up.
So we turned it into a 2004 RAZR. 2 prompts on @vibecodeapp
Remix it: vibecodeapp.com/s/cmvf8n21s0…










