Skip to content
Swift IdeasStart a build
Swift Ideas
Start a build

Games & interactive 3D

Mobile games that play the same on every phone, with a release gate.

We build stylised 3D games for iOS and Android: custom physics, generated levels that are identical for every player, daily challenges, friend matches and a store economy. Astro Golf, our own space-golf game, runs on Expo and three.js, and we rebuilt it in the Godot 4 game engine on the same Supabase backend. Both taught us the same thing: the hard part is keeping every device in agreement.

What clients arrive with

  • Our prototype is fun, but it runs badly on a two-year-old phone.
  • Two players with the same seed see different holes or different shots.
  • We want leaderboards and friend matches without running our own game servers.
  • Purchases and progress keep getting lost between versions.
  • We cannot tell when the game is actually ready to submit.

What you get

Deterministic custom physics
Ball flight and collisions run in our own simulation, not a general physics engine, so the same input produces the same result on every device and in every engine we port to.
Seeded procedural content with parity tests
Level generators driven by a small, portable PRNG. For the Godot port we dumped reference trajectories and hole geometry from the TypeScript game and tested the GDScript version against them, so a daily challenge is the same hole on both.
Render tiers that never touch gameplay
Low, Balanced and High tiers chosen from device facts. Tiers change terrain detail, dressing and particles only; physics substeps, geometry, scoring and aim information stay identical.
Multiplayer and leaderboards on Supabase
Daily leaderboards, private friend rooms and matchmaking on Postgres, Realtime channels and Edge Functions, with database rules covered by pgTAP tests.
Economy and in-app purchases
RevenueCat purchases reconciled through a server-side ledger. Earned and purchased progress is treated as untouchable: no change may reset it.
Art pipeline
Stylised direction with original Blender models, toon shading, generated textures and a written art-direction document, judged on device captures rather than concept art.
Evidence-gated release
A release evidence file with certification rows for builds, devices, commerce and store listings. The validator reports NO-GO while any in-scope row is missing.

How the work runs

  1. Find the loop on a real phone

    The core interaction built first and played on target hardware, because feel on a laptop tells you little about feel on a phone.

  2. Lock determinism

    Physics and content generation are fixed, tested and made portable before the art and economy are built on top of them.

  3. Content, art and economy

    Levels, characters and progression added in waves, each with device captures and a check that no existing progress or purchase changes.

  4. Certify and submit

    Performance budgets per tier, commerce testing in store sandboxes and the evidence file completed. Submission happens when the validator says GO.

How engagements start

  • Vertical slice first: one playable level on target devices, with a performance read-out, before a full production commitment.
  • Production in waves, each ending with device captures and a playable build.
  • Release and live operations: store submission, remote configuration, telemetry and seasonal content.

Built with

  • three.js
  • React Three Fiber
  • Expo
  • Godot 4
  • GDScript
  • Blender
  • Supabase (Postgres, Realtime, Edge Functions)
  • Deno
  • RevenueCat
  • pgTAP
  • Jest
  • Maestro

Where each number comes from

Each figure names where it comes from.

commits on the Godot 4.7 native port of Astro Golf
733
Source: Astro Golf: the Godot rebuild's commit history, 17 to 25 July 2026
certification gates checked before an Astro Golf store build is GO
52
Source: Astro Golf: our release test record, 30 July 2026
graphics levels for different phones, with identical physics, scoring and aim information
3
Source: Astro Golf: our written performance budget for each level

The work behind it

Questions, answered

Something else on your mind? hello@swiftideas.com

Unity, Godot or three.js?

It depends on the game. three.js with Expo suits stylised games that share code with an app or website. Godot suits native mobile games that need skinned characters and a dedicated editor, with no royalties. We have built the same game in both, so we can show you the trade-offs in practice.

Do we need our own game servers?

Usually not for asynchronous and light real-time play. Leaderboards, friend rooms, matchmaking and progress run on Supabase Postgres, Realtime and Edge Functions, which is much cheaper to operate than a dedicated server fleet.

How do you make it run on older phones?

With a written performance budget per render tier: launch time, frame time, long-frame ratio, memory and a thermal soak. Older or unknown devices get a lighter tier, and the tiers never change how the game plays.

Do you do the art?

We handle stylised art direction, Blender models, shaders and generated textures. For large character rosters or hand-animated work, we plan the pipeline and work alongside your artists.

How do you know it is ready to ship?

The release evidence file decides. Each certification row, from signed builds to purchase restore to store listings, must be filled with evidence. A missing row is a blocker, never an assumed pass.

Bring the idea. We’ll build all of it.

Tell us what you want to exist and who it is for. The two people who reply are the two people who will build it.