FitVis Nutrition - cesta k postupné změně stravovacích návyků

FitVis Nutrition je projekt zaměřený na analýzu stravy a dlouhodobé zlepšování stravovacích návyků. Nechceme ale vytvořit další aplikaci, která člověku pouze zobrazí tabulku hodnot a řekne mu, co všechno dělá špatně.

Hlavním cílem FitVis je pomoci lidem měnit jejich stravování postupně a nenásilnou cestou.

Proč postupná změna?

Představme si například člověka, který dlouhodobě přijímá příliš málo vlákniny. Pokud zjistí, že doporučený denní příjem je výrazně vyšší než jeho současný příjem, může se pokusit začít doporučené množství přijímat okamžitě.

To ale nemusí být ideální přístup. Příliš rychlé zvýšení příjmu vlákniny může vést k zažívacím problémům, zejména pokud na něj člověk není zvyklý.

FitVis proto nechce pouze říct: „Máš málo vlákniny. Jez jí více.“

Místo toho se snaží změnu rozložit v čase. Pokud aplikace zjistí dlouhodobý nedostatek, může například doporučit postupné navyšování příjmu po menších krocích. Cílem není dosáhnout ideální hodnoty během jednoho dne, ale vybudovat nový stravovací návyk, který člověk dokáže dlouhodobě udržet.

Stejný princip chceme postupně aplikovat i na další oblasti stravování.

Sledování stravy

Základem aplikace je samotné sledování jídelníčku. Uživatel si může zapisovat potraviny, sledovat jejich nutriční hodnoty a získávat přehled o tom, jak jeho strava vypadá v průběhu času.

FitVis pracuje s databází potravin a snaží se celý proces zapisování co nejvíce zjednodušit.

Součástí aplikace je také skenování potravin pomocí fotoaparátu. Uživatel tak nemusí nutriční hodnoty a další informace přepisovat ručně.

Analýza jídelníčku

Pouhé zaznamenávání potravin ale není hlavním cílem. Z nasbíraných dat se FitVis snaží vytvořit užitečný kontext.

Aplikace může například sledovat:

Důležitá je především kombinace těchto informací. Člověk tak nemusí sledovat pouze jednotlivé hodnoty, ale může postupně pochopit, jak jeho celkový jídelníček funguje.

Energie během dne

Jednou z pokročilejších částí FitVis je práce s energií během dne.

Na základě zaznamenané stravy a dalších dostupných údajů aplikace využívá predikční model, který se snaží odhadnout, kdy může u člověka přibližně docházet k poklesu energie.

Nejde o lékařskou predikci ani o přesné určení okamžiku, kdy člověk začne být unavený. Cílem je spíše vytvořit další vrstvu informací, která může uživateli pomoci lépe pochopit souvislosti mezi jeho stravou a tím, jak se během dne cítí.

Kdy si dané jídlo dát?

FitVis se nezaměřuje pouze na otázku „co jíst“, ale také na otázku „kdy to jíst“.

Aplikace může analyzovat jednotlivá jídla a jejich vhodnost v různých částech dne. To může být užitečné například při plánování jídel před fyzickou aktivitou, během pracovního dne nebo večer.

Cílem opět není uživateli vytvořit rigidní jídelníček, ale dát mu informace, podle kterých se může lépe rozhodovat.

Plánování jídelníčku

Další částí aplikace je plánování stravy dopředu.

Uživatel si může naplánovat, co bude v následujících dnech jíst, místo aby každé jídlo vybíral až v okamžiku, kdy má hlad.

FitVis tak může při plánování zohledňovat nejen jednotlivá jídla, ale také celkový příjem živin a dlouhodobější cíle.

Součástí aplikace jsou také sekce s doporučenými potravinami a často konzumovanými potravinami, které mají celý proces plánování urychlit.

Hydratace, kofein a hmotnost

FitVis se nesoustředí pouze na pevnou stravu.

Aplikace umožňuje sledovat také příjem tekutin a kofeinu a zapisovat tělesnou hmotnost. Tyto údaje je možné následně používat společně s informacemi o stravě.

Smyslem je postupně vytvořit komplexnější obraz životního stylu uživatele, nikoliv pouze seznam jednotlivých potravin.

Sdílení s přáteli a experty

FitVis počítá také se sociální a expertní částí.

Uživatel bude mít možnost sdílet své údaje s dalšími lidmi, například s přáteli nebo odborníky. To může být užitečné například v situaci, kdy chce člověk svůj jídelníček konzultovat nebo potřebuje podporu při dlouhodobé změně návyků.

Technické řešení

Z technického hlediska je FitVis již poměrně rozsáhlý projekt. Nejde pouze o jednu mobilní aplikaci, ale o celý systém skládající se z několika samostatných částí.

Mobilní aplikace je vytvořena ve Flutteru a Dartu. Flutter byl zvolen především kvůli možnosti sdílet velkou část kódu mezi platformami. Framework jsem navíc mírně upravil tak, aby aplikace mohla fungovat také na webu.

Kromě samotné aplikace existuje také prezentační web vytvořený pomocí Next.js.

Databáze a vyhledávání

Datová vrstva využívá kombinaci MongoDB a PostgreSQL. Každá z databází má v architektuře své místo podle typu dat a způsobu, jakým s nimi aplikace pracuje.

Pro vyhledávání používáme Elasticsearch, který umožňuje efektivně pracovat s rozsáhlou databází potravin.

Součástí infrastruktury je také Redis, který využíváme pro cache a zrychlení opakovaně používaných operací.

Vektorové vyhledávání potravin

Jednou z techničtějších částí projektu je vyhledávání a párování potravin.

Pro potraviny využíváme vektorové reprezentace a FAISS, který umožňuje rychlé vyhledávání podobných položek ve vektorovém prostoru. Vektorové reprezentace jsou následně využívány pro efektivní párování potravin.

To je důležité například při zpracování vstupu od uživatele, kdy nemusí být jeho zápis přesný nebo se může lišit od názvu uloženého v databázi.

Systém tak může hledat významově podobné potraviny a následně využívat další logiku a AI pro vyhodnocení výsledku.

AI a automatizované zpracování

AI v projektu není použita jako náhrada celé aplikace. Je využívána především tam, kde může pomoci se zpracováním a interpretací dat.

Kombinujeme proto klasické databázové vyhledávání, vektorové vyhledávání, vlastní logiku a externí AI API.

Cílem je rozdělit jednotlivé úlohy podle toho, která technologie je pro ně nejvhodnější. Jednoduché operace není potřeba posílat do AI, zatímco složitější interpretace může být zpracována pomocí modelu.

Storage a autentizace

Pro ukládání souborů a obrázků používáme Cloudflare R2.

Autentizace je řešena vlastním systémem společně s přihlašováním přes Google a Apple.

Celý projekt je provozován pomocí Dockeru, což umožňuje jednotlivé části systému oddělit a konzistentně provozovat v různých prostředích.

Administrace a expertní rozhraní

FitVis má také vlastní administrátorské rozhraní vytvořené v ASP.NET Core.

Pro experty vzniká samostatný dashboard postavený na Next.js, Reactu, TypeScriptu a Tailwind CSS.

Díky tomu může mít běžný uživatel jednoduché prostředí mobilní aplikace, zatímco administrátoři a experti mohou pracovat s rozsáhlejším rozhraním přizpůsobeným jejich potřebám.

Interní dokumentace a další služby

Celý projekt je plánován a dokumentován v Notionu, kde máme interní databázi informací souvisejících s vývojem aplikace.

Pro transakční a systémové e-maily používáme externí službu Resend.

Jednotlivé části systému jsou tak rozdělené podle své odpovědnosti a FitVis není závislý na jednom monolitickém řešení.

Současný stav

FitVis Nutrition je v současnosti v interním testování. Funkční verze existuje pro iOS, Android i web a postupně probíhá testování jednotlivých funkcí a celého systému.

Projekt se tak nachází ve fázi, kdy už nejde pouze o prototyp nebo koncept. Základní infrastruktura, aplikace i jednotlivé podpůrné systémy jsou již vytvořené a další vývoj se soustředí především na jejich zdokonalování, testování a propojování.

Kam FitVis směřuje

Dlouhodobým cílem není vytvořit další aplikaci, která uživateli pouze ukáže, kolik kalorií nebo živin za den přijal.

FitVis chceme postavit jako nástroj, který člověku pomůže pochopit vlastní stravování a postupně ho zlepšovat.

Místo okamžitého nucení do perfektního jídelníčku chceme pracovat s malými změnami, které se mohou postupně stát přirozenou součástí každodenního života.

Právě kombinace sledování stravy, analýzy, predikcí, plánování a postupných doporučení je podle nás to, co může FitVis odlišit od běžných aplikací pro počítání kalorií.

ShareTitle