The core flow
Each stone is one step. A step starts only when the one before it is approved, so nothing reaches children without a person saying yes.
-
1
StartAn idea for a small game next to the videos.
Designer + ClaudePlan the game with Claude
Shape the idea together: who it is for, what it teaches, how it plays.
- Age group, theme and learning goal
- Screens drawn at 1280 × 720
- 3 to 5 levels, each adding one new thing
- Checked against the house rules
Out: an agreed game design -
2Claude
Get the zip and the prompt
Ask Claude to pack the design for building.
- Design zip: screen PNGs + HTML + README
- Placeholder art and the list of art and sound slots
- A build prompt for Claude Code
Out:design/<game>/and the promptHand-offEverything a developer needs, in one folder.
-
3
BuildIn the durioo-games repo, on the shared game kit.
Claude CodeClaude builds the game
Plan first, then code, tests and a report, with two team decisions on the way.
- Plan with numbered decisions, wait for approval
- Code, unit tests and browser tests
- Report with screenshots
- Commit only after a yes
Out: a checked<game>-1.0.0.zip -
3
Inside step 3: how Claude Code builds
The dashed boxes are where the team decides. Claude never skips them.
- Read the designPNGs, HTML values, README
- PlanConflicts with the rules, then numbered decisions
- Team approves"Use your defaults and start building"
- BuildRound logic in TypeScript, scenes from the design
- TestUnit, web and mobile, pause, CDN, slow phone
- ReportChecks table, zip size, screenshots, placeholders
- Team says commitThen the zip is ready for the CMS
A failing test or a change request goes back to Build. The same checks the CMS runs are run here first (
pnpm validate,pnpm simulate:cms), so an upload never fails by surprise. -
4Team → CMS
Upload to the CMS
The Durioo+ CMS checks the zip before it takes it.
- Under 15 MB, only allowed files and paths
- A new, higher version every time
- No links to outside sites
- Published to the games CDN
- Status: draft → internal → beta → live, turned on per platform (iOS, Android, Web)
Out: a version on the CDN, not yet liveUploadSame checks as
pnpm validateran in step 3. -
Release gateStep 5 starts only after this.
-
Release gate: the team decides
A game can upload and play before these are done, but it is not set live until they are.
Ustaz reviewIslamic content, prayer movements and du'a lines are checked.Real voiceArabic is recorded by a person and reviewed; EN and MS use one consistent Duri voice. Games can ship with placeholder voice. Real recordings replace the files by name, with no rebuild needed.Final artDesigners replace the placeholder art slot by slot, by file name.Play testThe team plays it end to end on real phones, like on this preview site. -
5
LiveSet live per platform in the CMS.
Durioo+ appLive for children
The app opens the game next to the videos.
- Mobile app (WebView) and website (iframe)
- Messages: ready → started → completed or exit, plus pause and resume
- Level progress saved per child profile (on this device first, across devices later)
Out: children play 🎉
How games are grouped
Each game has one theme, one or two age groups, and an access level, the same fields as the Durioo+ CMS.
Age
A game can have both.
Access
Free games count toward 1 new game per day for free users.
Status
Set per game in the CMS; live is turned on per platform.
The tech stack, and why
Every game uses the same tools, so a new game is mostly design and content, not new plumbing.
Making the game
Fast 2D games in the browser, with touch, sound and scaling built in. Why: runs the same in the app's WebView and the website's iframe, and stays smooth on cheap Android phones. Pinned to one exact, settled version.
JavaScript with types. Why: mistakes in the messages to the app, level data or art names show up while coding, not in a child's hands.
Our own package every game builds on: app messages, start screen, level stones, stars, the demo hand, Duri, audio and saved progress. Why: every game follows the same rules for free, and a fix lands in all of them.
Each picture and sound has a fixed name and size. Why: the game uses a placeholder until the real file arrives, so art, voice and code move in parallel.
Small font files packed into each game. Why: Arabic letters are always correct glyphs, never pictures, and nothing loads from the internet.
Building and checking
Plans, writes the code and tests, and reports back. Why: many small games, produced fast, with several games built side by side in parallel sessions.
All games and the kit in one place. Why: one command builds, tests or checks any game, and they all share one kit version.
Instant reloads while building, and a small self-contained folder at the end. Why: the zip uses only its own files with relative paths, exactly what the CDN wants.
Tests for round logic and levels, without starting the game. Why: rules like "2 wrong tries gives a hint" are proven in milliseconds.
Plays each game in a real browser, the way the app would. Why: it checks the messages, pause and resume, that no outside network calls happen, the CDN headers, and the frame rate on a slowed-down CPU.
A page that acts like the Durioo+ app around the game. Why: test mobile and web, EN and MS, VIP and free, vocal only, before any app build.
One style, and common mistakes caught automatically. Why: code from many sessions reads as one codebase.
Shipping it
Takes the zip, runs its checks, and holds the status (draft, internal, beta, live) per platform. Why: a broken or unsafe game is stopped before it reaches the CDN; our pnpm validate runs the same checks first.
Serves each version from its own folder with strict security headers. Why: versions never overwrite each other, and loading is fast everywhere.
The mobile app opens the game in a WebView, the website in an iframe. Why: one game build works in both, talking to the app through one small message contract.
This preview site. It serves the same production builds that go to the CMS, plus a home button. Opened on their own, they play with default settings (English, VIP). They only accept the app's messages from duriooplus.com, so other sites cannot embed them. Why: the whole team can try every game on their own phone in seconds. Not used for release.
House rules every game keeps
Checked in the plan, in the tests and in the report.
- Ages 3–6: show, don't tell. Duri and the hand demonstrate.
- Ages 7–9: short text, 15 words or fewer per sentence.
- Little voice, lots of animation.
- Big touch targets (120 px).
- No timers that fail, no lives, no game over.
- 3 to 5 levels, each adding one new thing.
- No internet calls and no ads. The game sends nothing itself; the app records plays.
- Nothing personal is stored.
- No purchase screens in the game.
- Real-looking food, animals and objects; characters in the Durioo+ style (storybook-realistic for 7–9 story games).
- About 3 MB per game (more for voice-heavy games), zip always under 15 MB.
- Smooth on low-end phones.