// Overview

Restok is a comprehensive bilingual recipe management platform (English/Romanian) that centralizes all aspects of home cooking - from recipe discovery to meal planning to grocery shopping.

Import recipes automatically from 400+ cooking websites, get instant translations between languages, plan your weekly meals, and generate smart shopping lists based on what you already have in your pantry.

// Architecture

Next.js Frontend
FastAPI Backend
PostgreSQL
Recipe Scraper
LibreTranslate
SQLAlchemy
|
WebSocket Sync
|
Docker

A decoupled frontend/backend architecture with Next.js handling SSR and client routing while FastAPI provides a high-performance Python API. Real-time sync between family members uses WebSocket connections for instant shopping list and meal plan updates.

// Recipe Management

  • Import recipes from major cooking sites via recipe-scrapers
  • Automatic English-Romanian translation using LibreTranslate
  • Manual recipe creation with ingredients and instructions
  • Collections for organizing recipes by category
  • Favorites and ratings system
  • Smart filtering by category, cook time, and rating

// Planning & Shopping

  • Weekly meal planner with drag-and-drop interface
  • Automatic shopping list generation from meal plans
  • Multiple shopping lists with real-time sync
  • Smart suggestions based on pantry inventory
  • Category grouping with custom store layouts

// Inventory & Collaboration

  • Pantry tracking with storage locations (fridge, freezer, pantry)
  • Expiration alerts for items expiring within 7 days
  • Price tracking across stores with trend visualization
  • Family creation and member invitations
  • Shared recipes, meal plans, and shopping lists
  • Real-time synchronization across all family members

// Challenges & Solutions

Challenge: Importing recipes from 400+ different websites with inconsistent HTML structures and schema formats.

Solution: Leveraged the recipe-scrapers Python library with custom fallback extractors. When structured data (JSON-LD, Microdata) is missing, the system uses heuristic parsing of common recipe page patterns to extract ingredients and instructions.

Challenge: Generating accurate, natural-sounding translations between English and Romanian for cooking-specific terminology.

Solution: Used LibreTranslate with a custom glossary of cooking terms that override generic translations. Ingredient quantities and units are parsed separately and converted to local measurement standards rather than translated literally.

// What I'd Improve

  • Add nutritional information calculation per recipe and meal plan
  • Implement OCR for importing handwritten family recipes
  • Add voice-controlled cooking mode for hands-free instructions
  • Build integration with grocery delivery services