Skip to main content
David Cruz Anaya

David Cruz Anaya

Ingeniero Senior de Android & Kotlin Multiplatform

  • Inicio
  • Acerca de
  • Portafolio
  • Libro
  • Charlas
  • Blog
  • Flashcards
  • Vida Nómada
  • Contacto
Visitar Tienda Vectencia

Sígueme

Política de Privacidad

2014 - 2026 © davthecoder opera como Vectencia Ltd.

davthecoder
  1. Inicio
  2. Portafolio
  3. KMP SaaS Kit | Production-Ready Kotlin Multiplatform Starter for iOS & Android

KMP SaaS Kit | Production-Ready Kotlin Multiplatform Starter for iOS & Android

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again. KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

KMPCMPKotlinSwift
Ver Demo en Vivo

Stop wiring up auth, payments, and navigation from scratch.

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again.

KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

Built by David Cruz Anaya, with 12 years of mobile engineering at Sky, Comcast, WWE, and BritBox. 10M+ users shipped.
This isn't a tutorial project.


WHAT'S INSIDE

Auth That Works Out of the Box Email sign-in/up with Supabase, Google OAuth via Credential Manager (Android), Apple Sign-In via ASAuthorization (iOS). Validation, error handling, password strength - all wired.

Subscriptions with RevenueCat Dynamic paywall that renders whatever offerings you configure in RevenueCat. No hardcoded tiers. Purchase, restore, premium status check - all connected. Remove the entire paywall feature by deleting one line.

4-Step Onboarding Flow Welcome screen with Canvas animation, profile setup, notification permissions (platform-native), and paywall. All skippable, all customisable.

Enterprise-Grade Security Tokens encrypted with Google Tink AES-256-GCM (Android Keystore) and iOS Keychain. Not SharedPreferences. Not plain text. Production-ready from day one.

Arrow-kt Functional Architecture Typed error handling with Either<DomainError, T> and Raise DSL. Circuit breaker + exponential backoff retry on every API call. In-memory caching with TTL. Generated optics for immutable state. This is how production apps are built.

Pluggable Feature Architecture Every feature (auth, onboarding, home, settings, paywall) registers via FeatureRegistry. Remove a feature: delete the package, remove one line. The app compiles and runs. No navigation graph surgery, no DI module hunting.

Native Screen Escape Hatch 100% shared Compose Multiplatform UI - plus a documented pattern for dropping into native SwiftUI when you need it. iOS Liquid Glass? Platform-specific settings? You're covered.


FULL FEATURE LIST

  • Auth Email, Google (Credential Manager), Apple (ASAuthorization), forgot password

  • Subscriptions RevenueCat KMP, dynamic offerings, purchase, restore, premium check

  • Onboarding 4-step flow: welcome, profile, notifications, paywall

  • Home Time-of-day greeting, premium banner, placeholder feature cards, pull-to-refresh

  • Settings:

    • theme picker (light/dark/system)

    • language

    • notifications

    • subscription management

    • sign-out

    • delete account

  • Security Tink AES-256-GCM + Android Keystore, iOS Keychain, SecureStorage expect/actual

  • Networking Ktor with Arrow Resilience (circuit breaker + retry) and a Supabase client

  • Database Room KMP (User + Subscription entities), offline caching

  • Caching Arrow cache4k with TTL (user 5 min, offerings 15 min, subscription 2 min)

  • Error handling: Arrow Either + DomainError sealed class, Raise DSL in use cases

  • State Management Arrow Optics @optics on all UiState classes, parZip parallel loading

  • Theme Material 3, deep purple seed, Outfit + DM Sans bundled fonts

  • Navigation: Compose Navigation with @Serializable type-safe routes

  • Dependency Injection: Koin 4.x with viewModel{} DSL

  • CI/CD GitHub Actions (CI + signed release AAB)

  • Documentation: 16 documentation files, architecture guide, customisation guide

  • Scripts Package rename script, environment setup script


TECH STACK

  • Kotlin 2.3.20

  • Compose Multiplatform 1.10.3

  • Arrow-kt 2.2.2.1

  • Ktor 3.4.2

  • Room 2.8.4

  • Koin 4.2.0

  • Supabase 3.5.0

  • RevenueCat KMP

  • Coil3 3.4.0

  • Tink 1.21.0

  • Kermit 2.1.0


WHAT MAKES THIS DIFFERENT

Others ship plain text token storage. KMP SaaS Kit uses Tink AES-256-GCM + iOS Keychain.

Others hardcode subscription tiers. KMP SaaS Kit uses dynamic RevenueCat offerings.

Others use monolithic architecture. KMP SaaS Kit uses FeatureRegistry – remove features in 2 steps.

Others return basic error strings. KMP SaaS Kit uses typed DomainError hierarchy with Either.

Others skip resilience patterns. KMP SaaS Kit includes a circuit breaker + exponential backoff on every call.

Others are Compose-only on iOS. KMP SaaS Kit includes a native SwiftUI escape hatch, documented.

Others include minimal docs. KMP SaaS Kit ships with 16 comprehensive docs + an architecture guide.


QUICK START

  • Download your customised ZIP file with all project from vectencia.com/gumroad-verification

  • Fill in your Supabase and RevenueCat keys

  • ./gradlew :composeApp:assembleDebug

WHAT DO YOU GET?

  • Complete source code (120+ Kotlin files)

  • 33+ passing unit tests

  • 16 documentation files CI/CD workflows (GitHub Actions)

  • Setup + package rename scripts Lifetime access to this version Material 3 theme with bundled Outfit + DM Sans fonts

  • Supports: Android minSdk 26 / iOS 16+

REQUIREMENTS

  • Android Studio Meerkat (or later)

  • Xcode 16+ (for iOS builds)

  • JDK 21 Supabase account (free tier works)

  • RevenueCat account (free tier works)

WHO IS THIS FOR?

  • Indie developers who want a ready-to-ship SaaS app template without rebuilding the same foundation for the tenth time.

  • Experienced mobile devs looking for a KMP architecture reference with Arrow-kt, Tink security, and production patterns.

  • Agencies and teams who need a production-grade starting point that cuts 6-8 weeks of boilerplate setup time.

ARCHITECTURE OVERVIEW

  • UI (Compose Multiplatform)

  • ViewModel (@optics state, parZip loading)

  • UseCase (either{} / Raise DSL)

  • Repository (Either<DomainError, T>)

  • DataSource (Supabase, Room, RevenueCat)

Each feature is a self-contained plugin:

features/auth/

  1. data/ Supabase auth, token storage, DTOs

  2. domain/ User entity, AuthRepository interface, use cases

  3. presentation/ AuthViewModel with Arrow Optics state

  4. ui/ Sign in, sign up, forgot password screens

  5. AuthFeature.kt One file: registers routes, DI, and navigation


DOCUMENTATION INCLUDED

  • GETTING_STARTED.md - Prerequisites, first build, common issues

  • ARCHITECTURE.md - Data flow, library rationale, adding features

  • CUSTOMIZATION.md - Rename app, change theme, add screens

  • THEMING.md - Colors, fonts, spacing, dark mode

  • BACKEND_SUPABASE.md - SQL tables, RLS policies, auth providers

  • CUSTOM_BACKEND.md - Interface contracts for swapping backends

  • REVENUECAT_SETUP.md - RevenueCat project + sandbox testing

  • IOS_SETUP.md - Xcode project, Swift entry point, capabilities

  • NATIVE_SCREENS.md - SwiftUI escape hatch pattern

  • CICD_SETUP.md - GitHub Secrets, keystore setup

    • 6 more docs covering Google Sign-In, static analysis, Fastlane, iOS CI


FAQ

Can I use Firebase instead of Supabase? Yes. The AuthRemoteSource and SubscriptionSource are interfaces. Implement Firebase and register it in Koin, and you're done. docs/CUSTOM_BACKEND.md has the full interface contracts and a Firebase skeleton.

Can I remove features I don't need?

  • Yes. Delete the feature package and remove one line from FeatureRegistry. The app compiles and runs.

Does it work on real iOS devices?

  • Yes. The Shared framework compiles for iosArm64 (devices) and iosSimulatorArm64 (simulator). See docs/IOS_SETUP.md for Xcode configuration.

What about push notifications?

  • The kit includes the NotificationPermission platform bridge (Android POST_NOTIFICATIONS + iOS UNUserNotificationCenter). Push notification delivery (FCM/APNs) is project-specific – add it to your Supabase or Firebase setup.


SUPPORT

This purchase includes priority email support. For help: support@vectencia.com Please include your purchase confirmation along with a description of your issue.


Built by Vectencia Ltd - vectencia.com | Production-grade mobile code, not tutorial work. 12+ years shipping real apps to 10M+ users.

Artículos Relacionados

The Unified Codebase: A Comprehensive Blueprint for Kotlin Multiplatform Clean Architecture

Master the art of building production-grade Kotlin Multiplatform applications with shared business logic across Android, iOS, and Next.js while maintaining native UI fidelity on each platform

AndroidKotlin

Lessons Learned Building Paglipat.com: KMP, Ktor, Supabase & Next.js from an Android Developer's Perspective

An Android developer's journey building a travel platform with Kotlin Multiplatform for shared business logic, Ktor for backend APIs, Supabase for auth/data, and Next.js for web including why Compose Multiplatform for Web was quickly discarded

KotlinKMP

5 Myths about a Software Developer job you should stop believing

In 2014 I had the huge privilege of starting my career in software development as a Junior Game Developer coming from a ZERO commercial…

AndroidMobile Development
Volver a todos los proyectos
Skip to main content
David Cruz Anaya

David Cruz Anaya

Ingeniero Senior de Android & Kotlin Multiplatform

  • Inicio
  • Acerca de
  • Portafolio
  • Libro
  • Charlas
  • Blog
  • Flashcards
  • Vida Nómada
  • Contacto
Visitar Tienda Vectencia

Sígueme

Política de Privacidad

2014 - 2026 © davthecoder opera como Vectencia Ltd.

davthecoder
  1. Inicio
  2. Portafolio
  3. KMP SaaS Kit | Production-Ready Kotlin Multiplatform Starter for iOS & Android

KMP SaaS Kit | Production-Ready Kotlin Multiplatform Starter for iOS & Android

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again. KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

KMPCMPKotlinSwift
Ver Demo en Vivo

Stop wiring up auth, payments, and navigation from scratch.

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again.

KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

Built by David Cruz Anaya, with 12 years of mobile engineering at Sky, Comcast, WWE, and BritBox. 10M+ users shipped.
This isn't a tutorial project.


WHAT'S INSIDE

Auth That Works Out of the Box Email sign-in/up with Supabase, Google OAuth via Credential Manager (Android), Apple Sign-In via ASAuthorization (iOS). Validation, error handling, password strength - all wired.

Subscriptions with RevenueCat Dynamic paywall that renders whatever offerings you configure in RevenueCat. No hardcoded tiers. Purchase, restore, premium status check - all connected. Remove the entire paywall feature by deleting one line.

4-Step Onboarding Flow Welcome screen with Canvas animation, profile setup, notification permissions (platform-native), and paywall. All skippable, all customisable.

Enterprise-Grade Security Tokens encrypted with Google Tink AES-256-GCM (Android Keystore) and iOS Keychain. Not SharedPreferences. Not plain text. Production-ready from day one.

Arrow-kt Functional Architecture Typed error handling with Either<DomainError, T> and Raise DSL. Circuit breaker + exponential backoff retry on every API call. In-memory caching with TTL. Generated optics for immutable state. This is how production apps are built.

Pluggable Feature Architecture Every feature (auth, onboarding, home, settings, paywall) registers via FeatureRegistry. Remove a feature: delete the package, remove one line. The app compiles and runs. No navigation graph surgery, no DI module hunting.

Native Screen Escape Hatch 100% shared Compose Multiplatform UI - plus a documented pattern for dropping into native SwiftUI when you need it. iOS Liquid Glass? Platform-specific settings? You're covered.


FULL FEATURE LIST

  • Auth Email, Google (Credential Manager), Apple (ASAuthorization), forgot password

  • Subscriptions RevenueCat KMP, dynamic offerings, purchase, restore, premium check

  • Onboarding 4-step flow: welcome, profile, notifications, paywall

  • Home Time-of-day greeting, premium banner, placeholder feature cards, pull-to-refresh

  • Settings:

    • theme picker (light/dark/system)

    • language

    • notifications

    • subscription management

    • sign-out

    • delete account

  • Security Tink AES-256-GCM + Android Keystore, iOS Keychain, SecureStorage expect/actual

  • Networking Ktor with Arrow Resilience (circuit breaker + retry) and a Supabase client

  • Database Room KMP (User + Subscription entities), offline caching

  • Caching Arrow cache4k with TTL (user 5 min, offerings 15 min, subscription 2 min)

  • Error handling: Arrow Either + DomainError sealed class, Raise DSL in use cases

  • State Management Arrow Optics @optics on all UiState classes, parZip parallel loading

  • Theme Material 3, deep purple seed, Outfit + DM Sans bundled fonts

  • Navigation: Compose Navigation with @Serializable type-safe routes

  • Dependency Injection: Koin 4.x with viewModel{} DSL

  • CI/CD GitHub Actions (CI + signed release AAB)

  • Documentation: 16 documentation files, architecture guide, customisation guide

  • Scripts Package rename script, environment setup script


TECH STACK

  • Kotlin 2.3.20

  • Compose Multiplatform 1.10.3

  • Arrow-kt 2.2.2.1

  • Ktor 3.4.2

  • Room 2.8.4

  • Koin 4.2.0

  • Supabase 3.5.0

  • RevenueCat KMP

  • Coil3 3.4.0

  • Tink 1.21.0

  • Kermit 2.1.0


WHAT MAKES THIS DIFFERENT

Others ship plain text token storage. KMP SaaS Kit uses Tink AES-256-GCM + iOS Keychain.

Others hardcode subscription tiers. KMP SaaS Kit uses dynamic RevenueCat offerings.

Others use monolithic architecture. KMP SaaS Kit uses FeatureRegistry – remove features in 2 steps.

Others return basic error strings. KMP SaaS Kit uses typed DomainError hierarchy with Either.

Others skip resilience patterns. KMP SaaS Kit includes a circuit breaker + exponential backoff on every call.

Others are Compose-only on iOS. KMP SaaS Kit includes a native SwiftUI escape hatch, documented.

Others include minimal docs. KMP SaaS Kit ships with 16 comprehensive docs + an architecture guide.


QUICK START

  • Download your customised ZIP file with all project from vectencia.com/gumroad-verification

  • Fill in your Supabase and RevenueCat keys

  • ./gradlew :composeApp:assembleDebug

WHAT DO YOU GET?

  • Complete source code (120+ Kotlin files)

  • 33+ passing unit tests

  • 16 documentation files CI/CD workflows (GitHub Actions)

  • Setup + package rename scripts Lifetime access to this version Material 3 theme with bundled Outfit + DM Sans fonts

  • Supports: Android minSdk 26 / iOS 16+

REQUIREMENTS

  • Android Studio Meerkat (or later)

  • Xcode 16+ (for iOS builds)

  • JDK 21 Supabase account (free tier works)

  • RevenueCat account (free tier works)

WHO IS THIS FOR?

  • Indie developers who want a ready-to-ship SaaS app template without rebuilding the same foundation for the tenth time.

  • Experienced mobile devs looking for a KMP architecture reference with Arrow-kt, Tink security, and production patterns.

  • Agencies and teams who need a production-grade starting point that cuts 6-8 weeks of boilerplate setup time.

ARCHITECTURE OVERVIEW

  • UI (Compose Multiplatform)

  • ViewModel (@optics state, parZip loading)

  • UseCase (either{} / Raise DSL)

  • Repository (Either<DomainError, T>)

  • DataSource (Supabase, Room, RevenueCat)

Each feature is a self-contained plugin:

features/auth/

  1. data/ Supabase auth, token storage, DTOs

  2. domain/ User entity, AuthRepository interface, use cases

  3. presentation/ AuthViewModel with Arrow Optics state

  4. ui/ Sign in, sign up, forgot password screens

  5. AuthFeature.kt One file: registers routes, DI, and navigation


DOCUMENTATION INCLUDED

  • GETTING_STARTED.md - Prerequisites, first build, common issues

  • ARCHITECTURE.md - Data flow, library rationale, adding features

  • CUSTOMIZATION.md - Rename app, change theme, add screens

  • THEMING.md - Colors, fonts, spacing, dark mode

  • BACKEND_SUPABASE.md - SQL tables, RLS policies, auth providers

  • CUSTOM_BACKEND.md - Interface contracts for swapping backends

  • REVENUECAT_SETUP.md - RevenueCat project + sandbox testing

  • IOS_SETUP.md - Xcode project, Swift entry point, capabilities

  • NATIVE_SCREENS.md - SwiftUI escape hatch pattern

  • CICD_SETUP.md - GitHub Secrets, keystore setup

    • 6 more docs covering Google Sign-In, static analysis, Fastlane, iOS CI


FAQ

Can I use Firebase instead of Supabase? Yes. The AuthRemoteSource and SubscriptionSource are interfaces. Implement Firebase and register it in Koin, and you're done. docs/CUSTOM_BACKEND.md has the full interface contracts and a Firebase skeleton.

Can I remove features I don't need?

  • Yes. Delete the feature package and remove one line from FeatureRegistry. The app compiles and runs.

Does it work on real iOS devices?

  • Yes. The Shared framework compiles for iosArm64 (devices) and iosSimulatorArm64 (simulator). See docs/IOS_SETUP.md for Xcode configuration.

What about push notifications?

  • The kit includes the NotificationPermission platform bridge (Android POST_NOTIFICATIONS + iOS UNUserNotificationCenter). Push notification delivery (FCM/APNs) is project-specific – add it to your Supabase or Firebase setup.


SUPPORT

This purchase includes priority email support. For help: support@vectencia.com Please include your purchase confirmation along with a description of your issue.


Built by Vectencia Ltd - vectencia.com | Production-grade mobile code, not tutorial work. 12+ years shipping real apps to 10M+ users.

Artículos Relacionados

The Unified Codebase: A Comprehensive Blueprint for Kotlin Multiplatform Clean Architecture

Master the art of building production-grade Kotlin Multiplatform applications with shared business logic across Android, iOS, and Next.js while maintaining native UI fidelity on each platform

AndroidKotlin

Lessons Learned Building Paglipat.com: KMP, Ktor, Supabase & Next.js from an Android Developer's Perspective

An Android developer's journey building a travel platform with Kotlin Multiplatform for shared business logic, Ktor for backend APIs, Supabase for auth/data, and Next.js for web including why Compose Multiplatform for Web was quickly discarded

KotlinKMP

5 Myths about a Software Developer job you should stop believing

In 2014 I had the huge privilege of starting my career in software development as a Junior Game Developer coming from a ZERO commercial…

AndroidMobile Development
Volver a todos los proyectos