Recipe Realm Android App (Download from Google PlayStore - https://play.google.com/store/apps/details?id=com.arun.myrecipeapplication)
Welcome to the repository of my latest Android application -> Recipe Realm, where modern design meets seamless functionality. This project is a testament to the best practices in software development, featuring Clean Code, Clean Architecture, and adherence to SOLID principles.
This app has been passionately crafted to demonstrate the full spectrum of my development skills. It is built using Kotlin and leverages Kotlin Coroutines for efficient background processing, implementing State, Flow, and Dispatchers to handle API calls and data management with finesse.
- Clean Architecture: The codebase is structured on Clean Architecture principles, ensuring scalability, maintainability, and a clear separation of concerns.
- SOLID Principles: Every module within this application adheres to SOLID principles, promoting a robust and adaptable codebase.
- Modern UI: Utilizing Jetpack Compose, the app presents a modern UI that is both performant and aesthetically pleasing.
- Kotlin Coroutines & Flow: For asynchronous tasks and real-time data updates, Kotlin Coroutines and Flow are employed effectively.
- State Management: Reactive state management is implemented, ensuring that the UI is always in sync with the underlying data.
- Fetch a list of Recipe from a WEB API and display it in the UI
- Leveraged use of Kotlin Coroutines, StateFlow for passing of data back to View
- Used Jetpack Compose to Populate list of data into the composable UI screen
- Make UI screen load horizontal, vertical and grid of recipe list
- Added Room Database caching, now the user can view the list in offline mode also
- Added search functionality to search based on recipe name in AppBar
- Enable User to Add a Recipe to Cart and show SnackBar once added to Cart
- Enable user to Select/Unselect a Recipe from List
- Added Floating Action Button and onClick of it open a BottomSheet with my Intro;)
- Show error Snackbar if App is opened when no internet available
- Added No Internet Error screen with a Retry button to load recipe
- Host A set of questions in Firebase Firestore DB and fetch the same into the app (API implementation Done, working on UI)
- Implement Open AI API 3.5gpt to best suggest cooking tips/help to user (Limit to 3 questions per user) - In Progress
- A lot of Jetpack design implementation
- Room DB for caching
- More features such as Recipe Detail screen, Difficulty level of recipe, Refer to youtube link, Select/Unselect a Recipe, Multiple Select/Unselect just like in other food apps
- Unit Testing using Junit5 and Mockk
VERTICAL LIST OF RECIPE CARDS

RECIPE CARDS IN GRID LAYOUT
HOME SCREEN WITH BOTH ROW AND COLUMN

Screen_Recording_20240304_142839_Recipe.mp4
LIST POPULATED AS A SIMPLE VERTICAL SCROLL
Screen_Recording_20240302_200323_Arun.Recipe.App.mp4
LIST POPULATED AS A GRID
Screen.Recording.2024-03-03.at.12.21.17.PM.mov
MENU OPTION TO POPULATE EITHER AS A VERTICAL LIST OR GRID LIST

Screen.Recording.2024-03-03.at.6.33.36.PM.mov
A FLOATING ACTION BUTTON, ON CLICK OPEN A BOTTOMSHEET
Screen.Recording.2024-03-03.at.6.32.56.PM.mov
ADD A RECIPE TO CART, AND SHOW SNACKBAR
Screen.Recording.2024-03-03.at.11.38.44.PM.mov
SELECT/UNSELECT A RECIPE FROM LIST
Screen.Recording.2024-03-03.at.11.55.37.PM.mov
A SEARCH FUNCTIONALITY TO SEARCH THE LIST OF RECIPES AVAILABLE
Screen.Recording.2024-03-03.at.6.36.20.PM.mov
NO INTERNET SCREEN AND RETRY BUTTON

Screen.Recording.2024-03-03.at.7.16.21.PM.mov
The project is built with the latest tools and libraries in the Android ecosystem:
- Kotlin: The whole application is written in Kotlin for its conciseness and reliability.
- Jetpack Compose: Leveraged for building native UI, showcasing my UI developmental skills.
- Kotlin Coroutines: To handle asynchronous tasks and provide a smooth user experience.
- Retrofit: For networking, making API requests and handling responses.
- Hilt: For dependency injection, simplifying the architecture and making testing easier.
- Room: For persistence of Recipe and offline laoding.
- Coil: For image loading, making use of Kotlin's Coroutines for efficiency.
- AndroidX & Material Components: For the latest UI components that adhere to Material Design principles.
To build this project, clone the repo and import it into Android Studio. Make sure you have the latest version of Android Studio and the Kotlin plugin installed.