A family task and rewards app: parents assign and review tasks, kids complete them, earn points and redeem them for rewards. It also has a section of 23 mini-games and a subscription with plans and a free trial.
Clients
Server
Data and external services
Hover over a block or tap it to see what it does and what it is connected to.
Parents struggle to get kids into chores and regular practice, and kids quickly abandon ordinary to-do lists. The product had to serve two roles at once: a game with clear rewards for the child, and control without extra routine for the parent.
A parent adds children, creates tasks and reviews photo proofs. If a review is missed, the task is accepted automatically after 24 hours so the child never waits. A child's phone joins the family with a QR code or a 6-digit code, with no separate account or password, and parent mode on a shared phone is protected by a PIN.
I designed the points and rewards logic myself. A completed task pays base coins right away and a bonus once the parent approves it. Mini-game levels, daily sign-ins, day streaks and achievements pay coins too; they are spent in the reward shop on backgrounds, sounds, fonts and effects. The section of memory, attention and logic mini-games (23 so far) is still growing, and the parent sets a daily limit on game time.
The app is built with React Native without Expo, with native iOS and Android projects; the back end uses NestJS with Prisma and PostgreSQL. In the React and Vite admin panel the team manages a media library of images and sounds, the reward shop, coin rules, texts in three languages, plans and push campaigns, with four roles that have different permissions. Plans, the free trial and renewal reminders already work on the server, while online card payment is still being connected: a plan is chosen on the website, where the app takes the parent through a one-time link, without a password.
Only the server counts coins. Every award and purchase is a ledger row with a unique operation key, so a repeated request never pays twice, and a task pays once however many times it is redone. Level results come from the phone, so only progress pays: replays and skipped levels earn nothing, and game earnings have a daily cap that can be changed in the admin panel without an app release.
The app does not sign the family out unexpectedly: a refresh token is renewed in a single request even when several screens wait for it. Offline, photo proofs and completed tasks go into a queue and reach the server once the connection is back. Data lives in one Zustand store that loads instantly from the device and then reconciles with the server.
Images for photo games such as "Find the difference" are generated in advance on a separate Python GPU worker (FastAPI on RunPod): FLUX models draw the scenes and redraw objects, and SAM builds their masks. A person approves every level in the admin panel, and the phone only downloads finished images. PostgreSQL and media delivery from object storage run in Docker, and the server is updated by a single script that checks the API responds after the restart.
The mobile app, the API with the admin panel, the Next.js website and the GPU worker work together; the interface is in Armenian, Russian and English, with Apple and Google sign-in, and push notifications and crash reports through Firebase. The project is in development: tasks, coins, rewards and 23 games already work, while online subscription payment is still being connected.