ChefAI is a Kotlin-first Android app that allows users to manage their own recipe collection. It also provides a library of recipes for users to browse and save. The app can generate weekly meal plans based on user preferences like low-carb, vegan, or Mediterranean diets, and allows for customization of the meal plan. Additionally, ChefAI can export the list of ingredients needed for a meal plan to a grocery store for purchase or provide a simple grocery list.
Open with Android Studio.
This project is still under development.
See the docs folder
Below are a couple of the app screens to get an idea of how it looks.
| Home Screen | MyCollection Screen |
|---|---|
![]() |
![]() |
ChefAI follows a Clean Architecture with an offline-first design.
UI Layer – Jetpack Compose screens with ViewModels that interact only with domain use cases.
Domain Layer – Pure Kotlin business logic, entity models, and repository interfaces.
Data Layer – Dual-source repositories combining Room (SQLite) for local caching and a Ktor network client for backend access.
Sync – Planned: Background WorkManager will handle two-step sync (push local outbox → pull backend deltas). Not yet implemented.
IDs & Storage – All entities use client-generated, time-sortable UUIDv7 IDs; Room provides full-text search and ACID transactions.
Dependency Injection – Hilt modules wire DAOs, network clients, and repositories.
This structure keeps UI reactive, data consistent across devices, and the codebase modular, testable, and ready to scale.
Dependency Injection:
Data Base Layers:
Android UI:
Image Loading:
Networking:
- Ktor with CIO engine, content negotiation, and logging
- Kotlinx Serialization
Coroutines:
Utils:
You can use the enpoints hosted in this repo to test the backend: https://github.com/jmuci/ChATestAPI/tree/main?tab=readme-ov-file
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.


