My Mini Cafe
A one-thumb 3D management game where you physically walk around your cafe. A joystick appears wherever you touch; there is no tap-to-interact anywhere. Coffee brews itself, cups stack visibly on your tray, walking up to a customer serves them, and the coins buy a shop full of machines, seats, paint and lighting.
The game plays — an Android build has been produced and run on a device. Progress does not yet survive a restart, there is no audio, and monetisation is designed but not implemented.
- Platforms1 surfaces
- Features8 documented
- Architecture4 decisions
- Stack6 technologies
[In the box]
What it actually does
- One-thumb 3D play with a joystick that appears wherever you touch
- Cups auto-brew and stack visibly on a tray with a real capacity limit
- Customers walk in, claim a seat, and lose patience after 20 seconds
- A shop built at runtime from data files — a new upgrade needs no code
- Sixteen upgrades across seven effect types, from tray size to lighting
- A 1,600-line headless integration test that drives the real joystick
By the numbers
- Status
- Playable vertical slice
- Game code
- 2,559 lines GDScript
- Dev tooling
- 4,261 lines
- Scenes
- 8
- Upgrades
- 16 across 7 effect types
- Products
- 6
- Headless checks
- 244 call sites
- Android build
- 28 MB, device-verified
- Audio
- None yet
- Persistence
- Not implemented
[Features]
Inside My Mini Cafe
Every item below is implemented in the codebase, not planned for a future release.
Auto-brew stations
A brew cycle fills a cup into a station buffer, and walking over picks it up. A second brewer and an espresso machine arrive as upgrades.
Customer arrivals with patience
A spawner fills free seats only. Customers walk in, sit, wait twenty seconds, then leave if ignored — that timer is the only pressure in the game.
Proximity serving and payout
Walk into a seated customer and the cup serves itself, paying out with a floating +N. Value travels on the cup, so a soda genuinely pays more than a coffee.
Sixteen data-driven upgrades
Tray capacity, brewing speed, product lines, extra seating, floor paint and lighting — a closed set of seven effect types, each defined as a resource file.
A shop built at load time
The entire shop grid is generated from data files at startup with three card states: affordable, owned and locked. No bespoke UI per item.
Eighteen distinct characters
Characters share one animation set, audited by a script that confirms every character only plays clips it actually has.
Room dressing and lighting
Wainscot, skirting, warm overhead light and placed props with auto-centred origins, so decorating your room is part of the progression.
Modal shop handling that actually works
Opening the shop disables the joystick outright, because on a narrow viewport a stick appearing in either margin would otherwise steer you around behind the open panel.
[Architecture]
How it is built.
The decisions that shaped the codebase, and what each one buys.
A closed vocabulary of effects
UpgradeDef.Effect is a seven-value enum, and one match statement is the only place that knows how to realise an effect. The payoff: a new upgrade is a data file, and a malformed one cannot compile.
The shop is modal by state, not by geometry
Rather than trusting hit-testing, opening the shop disables the joystick and force-releases any held input. A dynamic stick in the side margins would otherwise steer the player behind the panel.
The exporter has a bug that only a device finds
The shop worked in every headless test and every desktop capture, because those run from source. Only running the exported APK revealed it — the exporter renames .tres files, so the catalog silently came back empty and nothing warned.
Scope guardrails as a feature
No tutorial, no game-over, no weather, no story, no multiplayer, no second floor. The rule on record is that adding any of them is a regression, not a feature.
[Who it is for]
Built for
- Casual players of the idle management genre
- Mobile players who want a ten-second time-to-fun with no tutorial
- Anyone who prefers a warm low-poly cafe to a spreadsheet
[Non-negotiables]
The rules we held
- Teach by layout, never by text — there is no tutorial and no text in-game
- Ten seconds from opening to serving your first customer
- Adding an upgrade must require only a data file, never code
- Scope is a feature: no story, weather, multiplayer or second floor
[Stack]
Built with
Delivered
- 3D cafe with generated collision and a virtual joystick
- Auto-brew, visible carry stack with an enforced capacity limit
- Customer arrivals, seating, patience timer and proximity serving
- Per-product payout with floating +N feedback
- Runtime shop generated from 16 upgrade resources
- Six product definitions, four station types
- Room dressing, props, lighting and paint upgrades
- 1,600-line headless integration test driving the real joystick
Not done yet
Listed rather than hidden.
- Save and load — coins are currently held in memory and lost on restart
- Staff and automation, so the loop keeps running while you are away
- Monetisation: rewarded ads, interstitials and a remove-ads purchase
- Audio — music and sound effects are entirely absent
- Release signing and a store listing; the launcher icon is not configured
[Timeline]
How it got here.
Where this came from, in order.
Thesis
Walk, do not tap
The design rule was that you physically move your character, with no tap-to-interact anywhere. Everything else in the game follows from that one decision.
Build
The core loop, proven headlessly
Brewing, carrying, seating, serving and paying out were built first and verified by a 1,600-line integration test driving the real joystick, not a mock.
Hardening
A device-only bug
The shop had never worked in an exported build. Every automated test ran from source, where data files keep their extension, so the catalog came back empty in the APK and nothing complained.
Now
Phase four of ten
Progression and the shop are largely in place and verified on a device. Persistence, staff, audio and monetisation are all still ahead.
[FAQ]
Common questions.
The questions we would expect to be asked.
Can I play it now?
Not yet — there is no store listing. An Android build has been produced and run on a device, and the game is playable, but progress does not survive a restart because save and load is not implemented yet.
Does it have ads or in-app purchases?
Not yet, though both are designed for. The ad and purchase vendors are chosen and every call is meant to go through a single service layer, so the rest of the game never has to know which platform it is on. None of it is wired into the current build yet.
The rest of the catalogue
[Get in touch]
Questions about My Mini Cafe?
Want to know more about My Mini Cafe — timelines, availability or how it works under the hood? Send us a note.
Taking on select projects for 2026