Building Tagine
I’ve had a lot of fun building Tagine, my first proper exploration into app development using React Native. I played around with Expo back in 2017 to build a toy app, and it was amazing to see how much the platform has matured since.
The Problem
I love to cook. Other than programming, it’s probably the only other legit hobby I have. Something I’ve inherited from my mum’s way of cooking is to always try new recipes and make them my own. I find this far more engaging than making the same cookie-cutter recipes week after week.
This means I’m often on the hunt for new recipes and amazingly frustrated every time I see a huge wall of text on recipe blogs before the actual recipe card. I understand why recipe writers do this; it allows them to build a connection with the reader, like Nagi posting updates about her dog Dozer (which I find adorable, btw). However, more often than not, the ulterior motive is to increase the surface area for advertising.
I’d rather support recipe authors by buying their cookbook (and have several times) than giving them a few cents over the lifetime of visiting their blog. That’s why I built Tagine.
Why Tagine works
Tagine is able to magically extract recipes from most blogs regardless of how the recipe is presented to the user. At first, this sounds like a parsing nightmare with me having to maintain hundreds of site-specific parsers. Luckily, Google has kinda solved this problem for me! They incentivise recipe blogs to include their recipe as metadata to be pulled up the Google rankings and be presented to users as a shiny card.
This metadata is included in the JSON-LD format with an easily parseable recipe schema. This means I only need to look at the <head />
of a recipe post and yoink the <script />
with the metadata to have the recipe. I can then present it to the user however I’d like!
Keeping things simple
There are a fair few apps already that parse recipes in this way. Unfortunately, they also come with a tonne of bloat that I (and I believe most people who’ve been cooking for a while) don’t care for. I don’t need an app to meal plan for me, automatically organise my shopping list, push social hooks to keep me engaged and end up showing me ads anyway.
My goal with Tagine was to keep things simple. Think letter opener rather than Swiss Army knife. It doesn’t require you to log-in, makes no assumptions about how you’d like to organise your recipes or what you’d like to cook tonight. It doesn’t have ads, and it’ll be free forever since I have no associated costs. It simply tries its best to parse the recipe you shared with it and stores a local history of all of the recipes you’ve parsed.
To accomplish this goal (and actually ship something), the technology side had to follow suite with this notion of simplicity. There are only two screens (recipe list and detail), and the most complicated bit is the parser. For everything else, I opted for known/boring web technology like Nativewind to allow me to move fast and reduce frustration while building my first app.
The Future
I don’t have much else planned for Tagine for now. I might come back and improve the recipe detail view to make it more usable while cooking. For now, I’m more interested in building other small/niche apps that address a particular frustration or pain.