Webová aplikace (Progressive Web App), která pomáhá uživatelům optimalizovat nákupní seznam. Porovnává položky v košíku s aktuálními slevami v supermarketech a vypočítá nejvýhodnější kombinaci nákupu.
Fáze: Funkční MVP (Minimum Viable Product) s hybridním modelem dat.
Aplikace má kompletní UI, fungující nákupní košík s perzistencí dat a napojení na živou databázi slev. Hlavní výzvou je nyní kvalita a normalizace dat (jednotky, balení), na které závisí přesnost optimalizátoru.
- Frontend: React 18, TypeScript, Vite
- Styling: Tailwind CSS v4 (Mobile First design)
- Backend / DB: Supabase (PostgreSQL)
- State Management: React Hooks + LocalStorage (bez nutnosti loginu)
- Logika: Vlastní skórovací algoritmus pro párování produktů (
ceny.ts)
- Našeptávač: Uživatel vybírá produkty z centrální databáze (
global_productsv Supabase). - Vlastní položky: Pokud produkt neexistuje, uživatel ho vytvoří -> systém to zaloguje do
user_suggestionspro budoucí schválení. - Perzistence: Košík se ukládá do
localStorage, takže nákup nezmizí ani po zavření prohlížeče. - Editace: Možnost měnit množství, jednotky a přidávat upřesňující štítky (např. "3vrstvý").
Jádro aplikace. Nejde jen o prosté vyhledávání, ale o Hybridní Cenotvorbu:
- Hledání slev (Supabase):
- Algoritmus stáhne aktuální akční letáky z tabulky
products. - Používá Scoring System: Boduje shodu názvu a štítků (např. hledám "Toaletní papír" + štítek "3vrstvý" -> produkt s "3vrstvý" v názvu dostane +100 bodů).
- Algoritmus stáhne aktuální akční letáky z tabulky
- Fallback (Záchranná síť):
- Pokud položka není v akci, algoritmus sáhne do lokálního souboru
bezne_ceny.ts(statická mapa průměrných tržních cen). - Výsledek: Uživatel vidí reálný odhad ceny nákupu, ne chybu nebo nulu.
- Pokud položka není v akci, algoritmus sáhne do lokálního souboru
- Zobrazení TOP obchodů seřazených podle celkové ceny nákupu.
- Detekce chybějících položek (penalizace v algoritmu).
- Detailní rozpad nákupu (která položka je v akci a která za běžnou cenu).
Aktuálně největší brzdou je Kvalita Dat (Data Engineering).
- Jednotky a Balení: Algoritmus občas selhává v přepočtu kusových položek vs. balení (např. Toaletní papír 8ks vs 1ks).
- Příčina: V databázi často chybí explicitní sloupce
amount(počet v balení) aunit. - Řešení: Nutnost zlepšit parser dat v Python scraperu nebo ručně dočistit data v Supabase.
- Příčina: V databázi často chybí explicitní sloupce
- Fuzzy Matching: Vyhledávání spoléhá na shodu stringů (s normalizací). Uživatel musí zadat "Rajče", ne "Rajcata" (pokud není v synonymech).
- Crowdsourcing: Umožnit uživatelům nahlásit chybnou cenu přímo v aplikaci.
- UI/UX: Přidat filtrování obchodů (např. "Chci vidět jen Lidl a Kaufland").
- Backend: Automatizace stahování letáků do Supabase (cron job).
/src/pages/Nakup- Logika nákupního seznamu (vstup dat)./src/pages/Optimum- Výsledky, žebříček obchodů, stahování dat./src/utils/ceny.ts- Mozek aplikace (výpočetní a párovací logika)./src/data/bezne_ceny.ts- Fallback ceník pro zboží mimo akci.
- Nainstalovat závislosti:
npm install
- Spustit lokální server:
npm run dev