A Kotlin Multiplatform app that is a mate to any chef in the kitchen managing recipes, grocery lists, and meal planning. It is available on Android, iOS, MacOS, Windows & Linux.
This is a Kotlin Multiplatform project. The client app targets Android, iOS (plus a watchOS companion), and Desktop (JVM), and is backed by Supabase. A separate admin dashboard targets Web (WASM) and Desktop. It aims to share as much code as possible in a modular way, so the general file structure of the project is as follows:
- client - all the shared client code and client application code
- composeApp - the compose multiplatform applications
- aichat - AI chat and recipe extraction flows
- auth - authentication data, UI, and use cases
- bottomnav - bottom navigation and tab ordering
- browser - in-app recipe browser and browser history
- cook - cook mode and active cooking sessions
- database - client database
- developer-settings - debug-only developer settings and test-user support
- family - family groups, roles, and member management
- featureflag - feature flag evaluation, overrides, and admin-facing data
- notifications - in-app notifications and invites
- onboarding - first-run onboarding flow (includes a standalone
demoapp) - profile - user profile management
- root - root BLoC (business logic component) to manage navigation of the whole app
- grocery - grocery data plus list and detail BLoCs
- meal - meal planning data and UI logic
- recipe - recipe data, list/detail flows, categories, import, and export
- recipebook - recipe book data and editing flows
- settings - settings root, app settings, and more menu flows
- shared - common client code
- subscription - premium subscription state and gating
- testing - common testing helpers
- text - shared text and resource helpers
- toast - app-wide toast/snackbar service
- ui - shared Compose UI components, theme, robots, and screenshot tests
- util - shared utility APIs and implementations
- admin - Compose Multiplatform admin app for managing feature flags
- iosApp - iOS application shell, share extension, and watchOS companion app
- supabase - Supabase migrations and backend configuration
- docs - architecture, deployment, deep linking, and feature documentation
- build-logic - all the convention plugins to share logic of modular libraries
- devkit - shared Gradle snippets for module conventions
- fastlane - store release automation
- packaging - desktop installer packaging assets
- scripts - local development and release helper scripts
./gradlew :client:composeApp:installDebug./gradlew :client:composeApp:runTo build and run the development version of the iOS app, use the run configuration from the run widget in your IDE’s toolbar or open the /iosApp directory in Xcode and run it from there.
- Architecture overview
- Build configuration (Supabase + Bugsnag)
- Developer settings (debug-only env switch + test-user login)
- Deployment (Android / iOS / Desktop)
- Version bumps (CI)
- Deep linking setup (Android / iOS / Desktop)
- Navigation deeplinks (supported URIs)
- Email verification
- Recipe browser architecture
- Recipe book collaboration
- Feature flags
- Feature flag admin dashboard
- Coroutines - asynchronous programming framework
- kotlinx.serialization - multiplatform serialization library
- kotlinx-datetime - multiplatform date time library
- kotlinx.collections.immutable - immutable collections for stable Compose state
- ktfmt - kotlin code formatting and linter
- Compose Multiplatform - shared UI for client
- SqlDelight - sqlite database
- Essenty - lifecycle, instance keeper, back handler, state keeper
- Decompose - navigation
- metro - dependency injection
- metro-extensions - assisted factory code generation for Metro
- kermit - logging
- Bugsnag - error logging
- multiplatform-settings - key value storage
- Ktor client - HTTP networking
- supabase-kt - Supabase auth, postgrest, realtime, storage, and edge functions client
- Coil - image loading
- Compose WebView Multiplatform - in-app recipe browser
- Ksoup - HTML parsing for recipe import and extraction
- Compose Rich Editor - rich text editing
- Multiplatform Markdown Renderer - markdown rendering for AI chat
- BuildKonfig - build-time configuration (Supabase keys, Bugsnag)
- Compose Hot Reload - live UI reload on desktop
- Kover - code coverage
- fastlane - store release automation
- Kotlin test - KMP testing framework
- Kotest - assertions
- multiplatform-settings-test - in-memory settings for tests
- Ktor MockEngine - HTTP client mocking
- Mokkery - mocking library
- Turbine - coroutines testing library
- Compose Preview Screenshot Testing - snapshot tests for
@Previewcomposables (seeclient/ui/screenshot-test/and.agents/seed.mdfor the workflow) - Compose testing - official KMP Compose UI testing docs