A clean, testable SwiftUI base that lets you move.
MVVM, CompositionRoot DI, protocol-oriented design, and async/await, with Supabase, RevenueCat, and OpenRouter ready on day one.
Why developers pick it
- Testable architecture with view models that have no UIKit dependencies
- CompositionRoot dependency injection, no global singletons
- Protocol-oriented, easy to mock and swap implementations
- Design tokens and themes for consistent UI
- Streaming AI via OpenRouter with typed clients
Architecture and testing
Every module follows MVVM with protocol-based dependencies. View models are testable without UIKit. The CompositionRoot handles wiring at startup. Networking, storage, and AI clients are swappable through protocols.
Networking module
protocol NetworkClient {
func request<T>(...) async throws -> T
}
class ProductionNetworkClient: NetworkClient {
// Real implementation
}
View full docs →Architecture overview
// CompositionRoot.swift
struct Dependencies {
let networkClient: NetworkClient
let authService: AuthService
let storageManager: StorageManager
}
View full docs →Minutes to first run
1
Clone and open
Git clone, open in Xcode, pods install if needed.
2
Add your keys
Set Supabase, RevenueCat, and OpenRouter credentials in config.
3
Build and run
Hit Cmd+R. Auth, chat, and subscriptions work immediately.
Production-ready screens

MVVM structure

Typed AI client

Protocol-based
Ready to build on a solid foundation?
Start with testable architecture, protocol-based design, and integrations that work.
Get the boilerplate