What I've Learned (So Far) Building Online Mini Games with Elixir and Swift
24 May 2026<br>My most recent side project is a little social arcade called Migo Games. You can check it out on the App Store for Mac and iOS. You can also play one of the games on the web at migo.games.
It goes without saying that a lot has changed in the age of AI coding. I really can’t say I wrote any of the code. Keep in mind the date of publication of this post as well. Whatever I say about AI is likely to be out of date within weeks or months.
I do read the code, well, mostly. I certainly understand its design. I think that’s still really important with AI.
The tech stack of Migo Games is Elixir on Phoenix and Swift with SpriteKit. That’s really it. The back end runs on Fly.io. It’s got a managed Postgres database on Crunchy Bridge. One of the things I’m really proud of is the app’s lean binary size. At the time of writing it’s just a few megabytes. I think I added one Swift dependency so far, and that’s a Phoenix socket client library. I’m old enough to remember Nintendo 64. Mario 64 was like 8 MB, and I think most of it was music. My God is that amazing software. Anyway, I think AI reduces the need for so much bloat if one is mindful, and I think that’s really great.
Elixir has been awesome. It’s been so neat to have the core game unit, the room, exactly match the back-end process model. Talk about a good way to scale software. I remember reading a Cloudflare post about their Durable Objects that mentioned such an idea. I can’t easily find the link. Anyway, I’m confident the games could be fairly easily scaled because of this match. Then there are all the other benefits of Elixir such as the fault tolerance of this model. One room having a problem is not going to crash my whole system. I’m not really qualified to speak to all the cool parts of Elixir, but I’ll say I’ve been very happy with my decision to try it. If I need to add admin functionality or background tasks or anything else, I have all of the BEAM and Phoenix features right there waiting for me. I’m happy I didn’t just go with Node or Bun as would have been the default choice for a guy whose best language is TypeScript.
I could and maybe should say more about the architecture, but I’ll leave that for some other post.
Also, I would encourage others to target Mac in addition to iOS for a reason you might not expect: build times. The simulators and Xcode are really pretty slow. It’s all a lot faster if you’re targeting Mac.
In the times before AI, I probably would have principally targeted the web. But in truth, and this is especially true of the iPhone, the web has really disappointed me in terms of performance when compared to native. It’s always outdone by native. You can even try this yourself with Migo! Play Arrow on the web then go try it on the native iPhone version. The cute haptics, the full screen, the animations, it’s really just not close.
Really none of this would have been possible without AI, so really I’m pretty grateful to be building software in this era. There are things I miss about the before times. Coaching clankers isn’t as prone to flow as writing syntax yourself. Oh well.
This isn’t to say that AI has solved everything. All the hardest parts of making successful software are still here. One of them is of course finding users/distribution. The clanker can’t really match my software to people from my repo. Bummer. In fact, there’s so much more software being written now that this problem is actually harder! The Apple app count growth in the last year has posted incredible numbers.
That’s all for now I guess. Give the games a shot. Leave a nice review in the App Store if you’re up for it. Happy building. Discuss on HN if you’d like.
All Posts
What I've Learned (So Far) Building Online Mini Games with Elixir and Swift
Comparing Online Music Mastering Services (e-mastering)
Building Paper Audio with NestJS, Jovo, and React
The Things You Do Once Barely Matter, But That's a Good Thing
What I learned from building my first iOS app
Ember.js (Ember CLI) and Jekyll on GitHub Pages