Week #6

Week #6 #

  • Deployment: @cookcookhnyabot
  • API Docs: http://10.90.137.177:8080/docs

Final deliverables #

Project Overview #

CookCookhNya is a smart cooking assistant that helps people find recipes based on what they already have at home. It solves a simple but common problem: when you open your fridge and don’t know what to cook.

What It Does #

  • Shows you recipes you can make right now with your available ingredients
  • Creates shopping lists for missing items when you pick a recipe
  • Lets you save your own recipes and share them with others
  • Works for households - multiple people can use the same storage

Main Features #

  1. Your Kitchen Storage

    • Add or remove ingredients you have
    • See everything you’ve got in one place
  2. Smart Recipe Finder

    • Gets recipe ideas based on what’s in your kitchen
    • Works with multiple people’s storages combined
  3. Shopping Lists

    • Automatically shows what to buy for recipes you choose
    • Saves time and reduces food waste
  4. Custom ingredients

    • Unmentioned in our database ingredient? Add it by yourself!
  5. Your Recipes

    • Create your custom recipes and share them

We made CookCookhNya to make cooking simpler and help people use what they already have. It’s perfect for students, families, or anyone who cooks at home.

Features #

  • Creating and deleting storages
  • Viewing storages` members and ingredients
  • Adding ingredients to storages
  • Adding another users to storages
  • Offering a user list of recipes based on ingredient in one or multiple storages
  • Generating a shopping list for user based on missing ingrediens for chosen recipe
  • Personal profile with ability to create custom ingredients and recipes, and even publishing them to public

Tech stack #

Backend #

  • Scala
  • PostgreSQL
  • zio - effect system
  • tapir - endpoint definition
  • quill & magnum - database management
  • circe - json serialization
  • zio-test - testing

Frontend #

  • C++
  • Telegram
  • TgBotStater ( https://github.com/Makcal/TgBotStater) - main framework, used for Telegram bot development
  • Boost - for working with JSON and UUID
  • cpp-httplib - for communication with backend

Devops #

  • Docker, Docker Compose - containerisation and orchestration
  • GitHub Actions - CI/CD
  • Loki, Promtail - log scapping and storing
  • Cadvisor, postgres-exporter, Prometheus - metric scrapper
  • Grafana - visualisation
  • Nginx - reverse proxy (for webhook setup)

Setup instructions #

  1. Create a new directory;
  2. Clone repo with
git clone git@github.com:Endpool/CookCookhNya.git
  1. Run
git submodule init && git submodule update
  1. Create a bot at @BotFather (don’t forget to enable inline mode in settings)
  2. Create .env specifying your BOT_TOKEN in the same directory
cp .env.example .env
  1. Run
docker compose up --build

Weekly commitments #

Individual contribution of each participant #

Team memberContribution
Maxim Fomin (lead + frontend)
  • Migration to UUID - PR
  • Big refactor - PR
  • Webhooks - PR
  • Improved logging and webhook support in TgBotStater - Changes
  • Shopping list improvement - PR
Ilia Kliantsevich (frontend)
  • Custom recipe connection to backend CRUD - PR
  • Big refactor - PR
  • Shopping list refactor- PR
  • Pagination for ingredient search in storage - PR
Amirkhan Kurbanov (frontend)
  • API refactor - PR
  • Big refactor - PR
Daniel Gevorgyan (UI/UX + backend)
  • Recipes tests - PR
  • Migrate some of database layer from Magnum to Quill - PR
  • Personal recipes crud - PR
  • Authorize get suggested recipes endpoint - PR
  • Custom recipes - PR
  • Filter for /ingredients search - PR
  • Custom recipes ingredients Add and Delete operations - PR
  • Add DELETE /recipes/:recipeId endpoint - PR
Vadim Ksenofontov (backend)
  • Moderator Interface - PR
Aleksandr Gorbanev (backend)
  • Ingredient creation fix - PR
  • Ingredient publication req - PR
  • Change models - PR
  • Buy products - PR
  • Search for recipe - PR
  • Storage Ingredietns pagination - PR
  • Shopping list pagination - PR
Rashid Badamshin (DevOps)
  • Configured metrics endpoint for observability purposes - PR
  • Congiifured Prometheus to scrapping /metrics
  • Visualised handlers response time in grafana
  • Setup nginx reverse proxy service with self-assigned authority for webhooks integration

Plan for Next Week #

  • DB normalisation
  • Refactor
  • Perfomance optimisation
  • Moderation of custom ingredients and recipes
  • Suggest spend products after cooking a recipe

Confirmation of the code’s operability #

We confirm that the code in the main branch:

  • [+] In working condition.
  • [+] Run via docker-compose (or another alternative described in the README.md).