3.9 KiB
Food Tracer
Aplikace pro evidenci snědených jídel a útraty za jídlo. Ke každému jídlu se dá vedle názvu a zdroje uložit i cena a kalorie, takže jde zpětně zjistit, kolik člověk za jídlo utratil za den, měsíc nebo rok.
Umí naimportovat měsíční přehled vyexportovaný ze stránky statistik Luncheru — ve formátu XLSX, CSV i JSON.
Struktura
types/ → Sdílené TypeScript typy generované z OpenAPI (zdroj pravdy: types/api.yml)
server/ → Express 5 backend (Node.js 22, ts-node)
client/ → React 19 frontend (Vite 7, React Bootstrap)
Package manager: Yarn Classic. Každá složka má vlastní package.json.
Rozjetí
cd types && yarn install && yarn openapi-ts # typy je nutné vygenerovat první
cd ../server && yarn install
cd ../client && yarn install
Do server/.env.development patří JWT_SECRET o délce alespoň 32 znaků
(šablona je v server/.env.template).
Vývoj
./run_dev.sh # vše naráz v tmuxu (Linux/macOS)
.\run_dev.ps1 # dvě PowerShell okna (Windows)
Nebo ručně ve dvou terminálech:
cd server && NODE_ENV=development yarn startReload # port 3001
cd client && yarn start # port 3000, proxy /api → 3001
Testy a build
cd server && yarn test # Jest, in-memory úložiště
cd server && yarn build # tsc → server/dist
cd client && yarn build # tsc --noEmit + vite build → client/dist
Nasazení
JWT_SECRET=... docker compose up --build
Produkčně běží aplikace nad Redisem, ve vývoji nad JSON souborem
(server/data/db.json). Viz server/.env.template.
Den: příjem a výdej
Přehled dne má dvě záložky:
- Příjem — co jste snědli, s cenou, gramáží a kaloriemi.
- Výdej — pohyb. Kroky, minuty, kilometry nebo opakování; z množství a spotřeby na 100 jednotek se dopočtou spálené kalorie (10 000 kroků ≈ 400 kcal).
Opakované tréninky se dají uložit jako šablonu — Workout day 1 pak stačí jedním kliknutím založit do dne celý, místo zadávání cviku po cviku. Založené položky jsou samostatné, takže je jde doupravit, aniž by se změnila šablona.
Nahoře je bilance dne: příjem − (klidový výdej + pohyb). Klidový výdej
(bazální metabolismus) se nastavuje v Nastavení — bez něj se porovnává jen
jídlo proti pohybu a nejde o skutečný deficit, na což aplikace upozorní.
Kalorie a gramáž
Ke každému jídlu jde vyplnit cenu za 100 g a z ní se dopočítá gramáž (u TechToweru typicky 44 Kč/100 g). Gramáž jde kdykoli přepsat ručně a každá položka má vlastní sazbu — hlavní jídlo a salát s jiným cenováním se nepletou. Sazby podniků se nastavují v Nastavení a při výběru zdroje se předvyplní.
Z gramáže a energie na 100 g se pak dopočítají kalorie. Hodnotu nabídne tlačítko Najít kalorie:
- z vlastní knihovny — co jste jednou zadali, aplikace si pamatuje pod názvem jídla a příště nabídne sama,
- z Open Food Facts (otevřená databáze, bez klíče),
- odkazem na KalorickéTabulky.cz, které veřejné API nemají — otevřou se v novém panelu a název jídla se zkopíruje do schránky, hodnotu opíšete ručně.
Když je externí databáze nedostupná, hledání nespadne — zůstane vlastní knihovna.
Import z Luncheru
Na stránce Statistiky je tlačítko Import z Luncheru. Stačí nahrát soubor stažený ze statistik Luncheru:
- Záznamy se rozdělí do dnů, ke kterým patří (export je typicky za celý měsíc).
- Zakládají se jako oběd, protože Luncher řeší výběr obědů. Chod jde při importu změnit a jednotlivá jídla pak upravit v přehledu dne.
- Před uložením se ukáže náhled toho, co se založí.
- Opakovaný import stejného měsíce data nezduplikuje.