Programming

2025: Four Projects, Three Platforms, Countless Lessons

2025: Four Projects, Three Platforms, Countless Lessons

2025 was absolutely wild for me as an indie developer. I shipped four complete projects across three different platforms, and honestly, I'm still processing how much I learned. Let me walk you through the journey.


Daily Rosary: My First Hybrid Mobile App

Platform: iOS & Android
Tech Stack: Rails 8, Hotwire Native
Launch: June 2025
Link: dailyrosary.app

It started in June with Daily Rosary, a Catholic prayer companion app. What made this project special was discovering that I could deploy the same Rails codebase to both iOS and Android using Hotwire Native. One codebase, two app stores—it felt like magic.

The app includes rosary prayers, the Divine Mercy chaplet, St. Jude novena, and prayers to various saints. But what really made it special was integrating OpenAI's text-to-speech API for audio prayers in both English and Filipino. Combined with dark mode, smart prayer reminders, and a liturgical calendar that automatically knows which mystery to pray based on the day of the week, it became something I'm genuinely proud of.

Seeing it live on both app stores was surreal. This was my first real hybrid mobile app, and it proved that Rails could be a serious platform for mobile development.


Mystic Archipelago: Learning to Pivot

Platform: Steam (PC)
Tech Stack: RPG Maker MZ
Link: Mystic Archipelago

Mystic Archipelago started as a browser-based text RPG. I spent a few weeks building it before I realized the browser wasn't the right fit—I needed better tooling for complex RPG mechanics. That's when I discovered RPG Maker MZ.

Total pivot. And it was the right call.

I rebuilt it from scratch as an idle RPG where your party auto-battles through dungeons. The game features 20 unique enemies, boss battles, intelligent AI, and deep progression systems. But the real milestone was getting it published on Steam.

This project taught me an invaluable lesson: it's okay to change course when something isn't working. If I'd stubbornly stuck with the browser version, this game wouldn't exist.


Beacon Rest: The Power of Constraints

Platform: iOS
Tech Stack: Swift, SwiftUI, Rails API
Theme: Lighthouse keeper simulation

Beacon Rest was my biggest learning experience of the year. I originally wanted to make a 2D game in Godot, something like Stardew Valley or Graveyard Keeper. I spent weeks on it, but I kept hitting walls. The complexity was overwhelming.

So I made a bold pivot: forget 2D graphics, make it text-based instead.

I switched to Swift and SwiftUI for a native iOS app, taking inspiration from the minimalist brilliance of A Dark Room. And suddenly everything clicked. The game became about being a lighthouse keeper on a remote island, managing resources, time, and seasons across daily cycles.

I integrated AdMob but kept it ethical—maximum three ads per day, completely optional. There's an achievement system and the whole thing is backed by a Rails API for persistence.

The lesson: Sometimes you have to let go of your original vision to actually finish something. Constraints can be liberating, not limiting.


Forgotten Depths: Everything Comes Together

Platform: Browser
Tech Stack: Vanilla JavaScript, Node.js, Express
Status: In development, playable now

Now I'm working on Forgotten Depths, and it feels like everything I learned in 2025 came together. It's a text-based dungeon crawler, but this time I went back to the browser with a twist—vanilla JavaScript, Node and Express, no frameworks. Just pure code.

And it's probably the most sophisticated game I've built:

  • Light & decay mechanics: Five different light states that progressively decay in real-time
  • Turn-based combat: Status effects including poison, burn, freeze, and curse
  • Massive content: 50+ unique enemies across 10 biomes spanning 100 floors
  • Companion system: Full equipment management with 30+ weapons and armor pieces
  • Building & automation: 10 different building types, each with multiple upgrade levels that automate resource gathering
  • Offline progression: Resources keep accumulating even when you're not playing
  • Local storage persistence: Everything saves automatically

The irony isn't lost on me—no framework, no fancy build tools, yet it has deeper systems than games I've seen built with massive frameworks. Sometimes constraints force you to write better code.


What I Learned

Looking back at 2025, I shipped four complete projects:

  1. A hybrid mobile app with Hotwire Native
  2. An RPG on Steam built with RPG Maker
  3. A native iOS game in Swift
  4. A browser game with vanilla JavaScript

Three completely different platforms. Three different approaches to game design. And every single one taught me something crucial.

Lesson 1: Pivot When You Need To

Mystic Archipelago wouldn't exist if I'd stubbornly stuck with the browser version. Beacon Rest would still be half-finished in Godot if I hadn't switched to Swift. Being flexible with your approach doesn't mean you lack vision—it means you're practical.

Lesson 2: Finish What You Start

It's easy to jump between shiny new ideas. I could have abandoned any of these projects when they got hard. But pushing through is how you actually learn. Shipping teaches you more than starting ever will.

Lesson 3: Simple Can Be Sophisticated

Forgotten Depths has no framework, no fancy build tools. Just vanilla JavaScript. But it has deeper systems than games I've seen built with massive frameworks. Complexity isn't measured by your dependencies—it's measured by the elegance of your solutions.


What's Next for 2026?

Honestly, I'm not sure yet. But I know it'll involve building, shipping, and learning. That's what this journey is about.

Thanks for following along. Here's to another year of making things.


Christopher Lim
Indie Developer
January 2026

Christopher Lim

Christopher Lim

Rails developer and indie developer. Family man, lifelong learner, and builder turning ideas into polished applications. Passionate about quality software development and continuous improvement.

Back to All Posts
Reading time: 5 min read

Enjoyed this programming post?

Follow me for more insights on programming, Rails development, and software engineering excellence.