company-logo

Snap Chef

Take a photo with the app and get recipe ideas generated by Google's AI: Google Gemini.

Diets? Allergies? Covered. The app focuses on delivering fulfilling meals tailored to your dietary needs and preferences.

Get it on Google Play
illustration

Features

Unique selling points are the most important thing when we start a project. This app allows you to specify dietary restrictions and allergies, then suggests recipes based on a photo of your pantry.

  • Get recipe suggestions from a photo
  • Personalized results based on dietary needs
  • Allergy considerations are factored in
  • Select preferred cuisines
  • Discover local specialties based on your location

Roles & Responsibilities

This is a personal project. From ideation to deployment, I handled everything myself.

  • Setting up the development environment and tools
  • Writing the application code
  • Applying Material Design as a solid foundation
  • Implementing and maintaining test coverage
  • Configuring GitHub Actions for unit tests and Firebase Test Lab integration
  • Managing Google integrations
  • Overseeing deployment processes
  • Cost analysis & monitoring (covering GitHub Actions, Firebase Test Lab, and Gemini API expenses)
  • Ensuring compliance with US/EU regulations
illustration

Used Technologies

This app serves as a demonstration of my technical expertise, incorporating various technologies:

  • Google Gemini (aka Vertex AI API)
  • Firebase Remote Config
  • Firebase Test Lab
  • Firebase App Check (Google Play Integrity)
  • Firebase Crashlytics
  • Firebase Performance Monitoring
  • Google Analytics
  • GitHub Actions for unit tests and Firebase Test Lab integration

Considerations & Solutions

The project follows a "serverless" approach, meaning the app communicates directly with the AI API. This halves the problems to be solved, but it increases the risk of misusing the app. I offer the app for free, but I need to pay for using the AI. As far as there is no malicious user, these costs are negligible.

To protect against overuse, I implemented two safeguards: Google login prevents excessive usage by humans, while Firebase App Check deters automated abuse.

Even though I do not change the AI model (gemini-1.5-flash), the behavior of it changes over time. Sometimes significantly, making the app fail to serve recipes. The way the application communicates with the AI is not hard‑coded. I use Firebase Remote Config to adjust the AI communication on the fly without deploying a new app version.

Latest trends propose using Jetpack Compose, but I decided not to. This is because based on my experiences, using the classic layout solution allow us to easily co‑operate with UI/UX developers, meanwhile Jetpack Compose mixes code with UI. This can lead to merge conflicts and other issues.

What Would I Do Differently?

  • Implement dependency injection from the first pull request
  • Setting up Android instrumented tests ASAP
  • It took me a lot of work to separate async code from UI code. I should not repeat this mistake.

My Personal Opinion

I am very proud for implementing Firebase Remote Config at the heart of the application. Firebase Crashlytics warns me if it detects failure patterns in the app. Then in Remote Config I can fix/workaround it ASAP. Once fixed, in less than an hour every app on the world fetches the fix, and the life can go on.

This project is fully on me. Architecting the app, working on UX, writing the code, applying UI, configuring integrations, deploying, monitoring. It is a mesmerizing feeling to hear that mom likes the app.

Future

My work style is agile coding. As of this moment I do not see anything important to do. I am monitoring the app.

I want to work with Android/coding/UI/UX. If you have a project, feel free to contact me.