Victor Gusev
← Projects

Proof

Full-stack recipe PWA with AI-assisted import and real-time cross-device timers.

Proof — figure

Year
2026
Category
software

Stack

ReactMongoDBCheerioGemini APISocket.iowebaipwafull-stack
Problem
Often, when I am trying to bake, I like to take photos of my food and make changes to recipes that I am making.
Approach
Full-stack progressive web app (PWA) with MongoDB/React.
Result
99 automated tests across 22 test files guard the app, which runs to 40 React components and roughly 9,000 lines across client and server, on 31 runtime dependencies.

How it works

Proof — import pipeline and cross-device syncA recipe URL is scraped with Cheerio, restructured by the Gemini API into typed recipe fields, and stored in MongoDB. Separately, timers started on one device are relayed by Socket.io through the server so a phone and a tablet in the same kitchen agree, with MongoDB as the shared store behind both paths.Import — a URL becomes structured dataRecipe URLCheerioscraperaw HTMLGemini APIrestructuretypedMongoDBrecipes + photosCooking — two devices, one timerPhonehands-freeSocket.ioserver relayTabletsame kitchenstart timertickpersistedA PWA, so the whole of this works from a home-screen icon with the oven already on.99 automated tests across 22 files guard roughly 9,000 lines and 40 components.
Import pipeline, and one timer across two devices
01

The problem

Often, when I am trying to bake, I like to take photos of my food and make changes to recipes that I am making. While other online recipe books do exist, they were either behind a paywall, or did not have features that I wanted like photo storage, 1-off recipe corrections, and ease-of-use features. I made this website to not only store my recipes, but also easily look at them while baking with hands-free features and sharing posts of baked goods I created.

02

Architecture

Full-stack progressive web app (PWA) with MongoDB/React. Real-time cross-device sync via Socket.io. Gemini API handles extracting and restructuring recipe data from scraped URLs.

03

What did not work

Originally, got too trigger happy with adding features without considering ease of use. While on computer using the app was fine, using the app on mobile (the intended usage) was very cramped and bloated, making it hard to work with. This required UI and feature revision to ensure that the app stays clean on mobile and computer.

04

Measured results

99 automated tests across 22 test files guard the app, which runs to 40 React components and roughly 9,000 lines across client and server, on 31 runtime dependencies.

Post-mortem

Still in progress, no post-mortem yet.