๐Ÿงต The tech stack behind Caresse โ€” and why we made these calls

byโ€ข
  1. Frontend: Kotlin Multiplatform + Compose Multiplatform, shared UI across iOS/Android.
    Kotlin was hard to love at first โ€” the module/folder hierarchy fights you early on. But once it clicks, KMP is a banger on almost every level: the IDE, the language itself, and the ability to drop down to native when you actually need to.

  2. We went full Compose Multiplatform for the UI... except one screen: the audio player.
    Native audio APIs on iOS/Android are just too different (and too finicky) to abstract cleanly, so that one component is native on each platform. Everything else โ€” one codebase.

  3. Backend: .NET 10, hosted on Azure Container Apps.
    Why .NET over Java or Go? Best perf/productivity tradeoff out there right now. C# is more expressive than Go, and the ecosystem is lighter than Java's (minimal APIs, EF Core, native DI = way less boilerplate). vs Go specifically: we keep strong typing and better abstractions as the codebase grows, without giving up performance โ€” .NET 10 is now neck and neck with Go in benchmarks.

  4. Why Azure specifically: it's the only cloud that gives you a free Postgres DB with basically no limits to get started. For a bootstrapped build, that's a big deal โ€” real Postgres, zero cost, day one.

  5. Dev setup: Rider on Apple Silicon. Excellent tooling, natively optimized for ARM, no Rosetta tax.

  6. TL;DR: shared UI via KMP + Compose (native only where it truly matters), a .NET 10 backend that punches above its weight, and Azure Container Apps + free Postgres to keep costs at zero while we validate.

    Building in public โ€” questions/roasts welcome ๐Ÿ‘‡

5 views

Add a comment

Replies

Be the first to comment