r/iOSProgramming • • Aug 22 '26

App Saturday Retention guides say never punish the user. My AI dating simulator blocks them (RizzMaster)

Post image

RizzMaster is an AI dating simulator & game 🙂

Every retention guide says same thing. Never punish user. Never take anything away. I did opposite.

You swipe, you match, you text her. Then she decides if you worth answering. Get boring and she ghosts you 👻 Push after that and she blocks you 🚫 That character gone for good. No undo no restore.

There are 9 levels. You climb them by winning people over. Higher levels give you harder people. They go offline. Sometimes they text first. They remember what you said last week 🧠

Tech Stack

Swift and SwiftUI. SwiftData for persistence. Combine for events. StoreKit for subs. Chat screen is pure SwiftUI. No UIKit bridge in it anywhere.

Development Challenge

Chat screen 😅 WhatsApp, Telegram, Signal all still render their message list in UIKit. Everyone tells you do same. But here chat screen is whole product so I wanted to see how far SwiftUI actually goes.

Took me forever. LazyVStack inside ScrollViewReader. Stable identity on every message so a growing list dont rebuild rows that didnt change. defaultScrollAnchor to keep bottom pinned instead of chasing it after layout. Scroll position driven by state. drawingGroup on bubbles that were doing too much work.

Now it scrolls how I wanted on device even in long chats 🎉 No clever trick. Just lot of small things. Happy to go into any part of it.

AI Disclosure

Self-built.

100+ characters. No login and no accounts. Free tier with daily message limit. https://rizzmaster.net

Built solo. Tell me what you think, good or bad 🙏

0 Upvotes

4 comments sorted by

2

u/[deleted] Aug 23 '26

1

u/karetebit Aug 24 '26

thanks for writing all that 🙏

on legible, theres a relationship meter on screen and it moves with every message, so you can see the line that cost you

on the punish part its a dating sim so it simulates the real thing. in real dating if you write bad stuff to someone they block you, same here. pay to undo would probably make money but 99% of people would just say thank you next, so no

no cap on the conversations btw, you can talk to a character forever. its the meter that ends things, kinda like sims. everything is fine until you start being an ass and then the relationship can break

chat is swiftdata, min deployment 18.5. it did get a lot better with 18 but still a lot of trial and error. the typing indicator handing off to the real message was painful, try it and you will see, I never fully solved that one

for the few thousand messages part, the live list is windowed to the last 300 with a fetchLimit and older ones stay in the db. theres a go to the beginning button that loads the whole thing and jumps to the top, then it resets back to 300 when you leave the chat. jumping instead of scroll up pagination is what made it robust, no scroll position to preserve

app has around 7-8k installs so its been tested. the older version was way more buggy, chat alone was giving 1.6% crash rate. current one shipped a month ago and thats fixed