Inspiration

I naturally took inspiration from Eitan's project brief, but it particularly resonated with me because this is similar to many iterations of ideas I have heard from friends and family for years. The demand is clearly there, and nobody I spoke to could think of an app that fulfilled this need, yet it was clear there was a want for it.

My main inspiration was to make cooking simple and personalized. I follow a similar process at home of inputting ingredients I have in my fridge into google / chatGPT and seeing what comes up vs. what I know how to make. Likewise I ultimately end up finding recipes, cooking them once, and forgetting about them.

This solves two problems: building a library of recipes, and being able to search through them by ingredient.

What it does

Recipient's main functionality is the ability to share recipes directly from YouTube into the app. When you're browsing YouTube, you can hit the share button, tap on recipient, and it will automatically be imported into your library.

Once in your library, the video is analyzed using the transcript to create a text based version of the ingredients and steps to create the dish. You can sort your library a variety of ways, and you can remove items that you aren't resonating with anymore. You can also change the title of a recipe to something more useful, since often times youtube videos use catchy, algorithm friendly titles rather than what is useful to you.

Finally, you can head to the search tab, and enter a list of ingredients. The app will then show you a list of recipes that include those ingredients, colour coded and displaying how many of your searched ingredients are in the dish. You can also switch it to "All" mode from the default "Any" mode - this will ensure that only recipes that contain all of the ingredients you searched show up, rather than any match.

To cater to an international audience, or maybe what tools you have, you can also toggle between imperial and metric units.

How we built it

The first thing I built was the API. I wanted to have a rock solid, scaleable API. Often times in early development everything works great on one VM but once you have a few users it all falls apart. I wanted to be able to scale and support a large user base from the start.

I built a simple architecture:

• One container app (Express + Node) • One service worker (Express + BullMQ) • One Job Queue (Redis) • One Database (Postgres)

I made sure the API was able to run entirely headless so I could be sure it would work when the app was using it. The main routes were: create a recipe, get a recipe, get all recipes, get a user, update a user, query job status. Eventually I added more but that was the backbone of a working app.

Next was integration with an LLM. I would need to generate a system that would take a youtube URL, extract the transcript, and feed it into an LLM in order to create a Recipe from it. I chose OpenAI for the LLM for the ease of use and I already had experience with it. The main trick here was to use OpenAI JSON schema feature to ensure I had structured, machine friendly code. Once I was able to get the work flow of: Send the API a URL, Get the Transcript, Extract Recipe and Ingredients, Format them, and Store in Database, I could safely say the API was ready for developing the app.

At this point, I built a configuration for the app using Terraform for Google Cloud Platform. I chose GCP since I was already a Google Workspace user and it was minimal configuration to get a new app in the cloud. This ensured that as I moved forward, the Infrastructure would be repeatable, scalable, and production ready

I then moved on to making the App. I wrote it using Expo and React Native. I find the tooling of Expo and EAS to be very user friendly and takes a lot of the difficulties out of deploying to Apple, specifically around certificates, identifiers, etc. It also doesn't hurt that I have over 10 years of experience with React.

This was fairly straightforward - I set up a lot of patterns and strategies I've learned from my career to create a baseline for how the app should be built. From here I iterated with Claude Code, prompting it to follow my patterns I've set and design some basic layouts with simple black and white boxes to make sure everything was laid out right.

After that I went in by hand. At this point, I started designing logos. After deciding on a logo, I imported it into Figma, and began to trace over it to vectorize it. After vectorizing, I coloured it to decide upon the apps colour scheme. Once I had a colour scheme, it was giving kind of a cute / playful vibe, so I moved forward with that theme.

I designed final versions of all the components, and wired it up to the backend. I then did a few rounds of testing with close friends to get feedback, and implemented their UX suggestions. After the UX/UI was feeling polished, I felt my sad little logo (I'm not an artist) was the weakest part of the app, so I fed it into ChatGPT as a source, and told it to polish the logo and make it more professional, but also cute. The final logo was perfect - it captured what I wanted - some film and a recipe boiling in a pot :)

After that I did the usual set up with the App Store to get all my distribution in order, shipped it to the App Store for test flight approval - et voilà ready for judging

Challenges we ran into

By far my biggest challenges were in deployment. Terraform & GCP is a labyrinth of permissions, user roles, access roles, etc. As I haven't had much exposure to this in the past, I found it challenging to learn the lay of the land. Ultimately, it was very rewarding - where in the past I would be pulling git from a Virtual Machine to deploy and running into a myriad of issues, once I had this working, it worked every time flawlessly.

My second biggest challenge was with structuring the data. Its costly to process recipes, and I have a hunch many people view the same recipes. So I wanted to create a way where if another user had processed a recipe already, you could re-use the data, but add your own titles and notes to it. This proved to be challenging for a variety of reasons (most of all it's been a long time since I've hand written SQL and wrote clever indexes)

The third biggest challenge was just getting the Sharing feature to work. I'll cover this more in accomplishments I'm proud of, but this feature isn't even out yet in Expo. Navigating an experimental feature from a canary branch of expo and making it work with legacy dependencies that didn't want to work with it was a headache, but I felt this would be the deciding factor in this app so I pushed forward

Accomplishments that we're proud of

Coming off the challenges, each ultimately turned into an accomplishment. I'm incredibly proud of myself for pushing through to get the sharing menu function working on iOS. This would make things so much easier for the user in terms of getting recipes in the app. I knew this would make the biggest UX difference so I did everything I could to make this work and I'm proud that I did.

The same could be said about Terraform and GCP. I am not a cloud engineer by trade, but I knew this would make a massive difference when it came to scaling and repeatability. I'm super proud of the deployment scripts I built that make it dead easy to change the infrastructure as demand for the app fluctuates.

Finally I'm most happy with just pushing through to the end. It feels great to have an idea and fully execute it and budget my time well so I'm not burnt out. I feel charged up and ready to do more now that I have a great rhythm going.

What we learned

I'd say I learned the most about what I'm capable of. I have had very radical changes in my personal life the last year that have completely changed the way I live and what I can physically do which has been extremely challenging. It's made me quite down on myself, and it was massively confidence boosting and was the highlight of my year to actually prove to myself I can still make something, and I can still find value in the world for my work.

On a technical level, I learned so much about the power of good infrastructure. I have had so many projects in the past where I am logging into remote machines debugging the 500 services I have running on one box to save money and inefficient systems because of it. Now, I can change one sentence, and scale my apps from 100 to 100000 flawlessly. I don't think there is any going back at this point !

I'd say one other thing I learned was where to draw the line between pre-built and hand-built. I tried using component libraries for my front end to save time, but they were too opinionated and out-of-the-box feeling. I'd rather do my own (mediocre) design and have character than use something that looks like a factory pressed app. And those libraries don't really make things easier ! It was a headache.

What's next for recipient

• Get a real designer involved for a polished, pro UI and logo • Integrate with TikTok and Instagram for more recipe coverage • Integrate with Apple sign in for easier account creation and sign in • Play the videos in-app • Add OCR image processing so real, physical cook book recipes can also be added easily, or, if my app becomes wildly successful, integrate with ebook companies and import the whole cookbook or create a way for users to purchase digital cookbooks in the app from creators like Eitan. • Deploy to the masses !

Built With

Share this project:

Updates