Jak to celé funguje — toky dat
Podrobnější pohled na vnitřní fungování systému — co se děje od chvíle, kdy pošleš zprávu, až po proaktivní upozornění.
Celkový obraz
┌─────────────────────────────────────────────────────────────────────┐
│ VSTUPY VÝSTUPY │
│ ─────── ──────── │
│ Telegram (text / hlas / foto) ──► Odpovědi na dotazy │
│ Obsidian vault (noty, deník) ──► Proaktivní upozornění │
│ Garmin hodinky ──► Ranní brief │
│ Penízky (příjmy, výdaje) ──► Kauzální analýza (Layer B) │
│ Google Calendar Zdravotní alerty │
│ RAW Projekty (úkoly, klienti) Hodnocení jídla / váhy │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ brain.rawfuture.cz │ ← vlastní VPS (Hetzner) │
│ │ │ │
│ │ PostgreSQL + pgvec │ ← vše trvalé │
│ │ Redis │ ← kontext konverzace │
│ │ Gemini Flash (LLM) │ ← "mozek" │
│ │ APScheduler │ ← automatické úlohy │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Tok 1: Zpráva → odpověď
Jak zpráva cestuje od tebe k odpovědi:
Ty (Telegram)
│ "Zapsal jsem večeři — sledové filety 18:42"
▼
[Telegram bot]
│ ověří whitelist — jen ty smíš psát
▼
[Směrovač]
├─ pravidla / klíčová slova → rychlá cesta (milisekundy)
└─ nejasné → LLM rozhodne → vybere nástroj
▼
[Agent — tool-calling loop]
│ volá log_meal() s textem + časem jídla
│ → LLM odhadne makra, rating, feedback
│ → zapíše do JSON souboru + vault
▼
[Odpověď]
"🍽 VEČEŘE — rating 8/10
kcal 420 · B 34g · S 12g · T 22g
Solidní volba. Přidej zítra trochu vlákniny."
▼
Ty (Telegram) ← typicky do 3 vteřin
Vstupní formáty — systém rozumí všemu přirozeně česky:
| Typ vstupu | Příklad | Co se stane |
|---|---|---|
| Text | "Zapsal jsem 70.2 kg" | log_body_metrics(weight=70.2) |
| Text + čas | "Večeře 18:42 — sledové filety" | Uloží i čas snědení |
| Hlasová zpráva | [nahrávka] | Přepis → stejný tok jako text |
| Foto jídla s popisem | "Oběd:" + foto etikety | OCR etikety + log_meal() |
| Foto bez kontextu | [jakékoliv foto] | OCR + uložení do inboxu |
Tok 2: Dotaz → odpověď
Při otázce na historická data probíhá třívrstvé vyhledávání:
Dotaz: "Jak jsem spal minulý měsíc?"
▼
[Hybridní search — 3 vrstvy paralelně]
Vrstva 1 — Strukturovaná data
─────────────────────────────
SQL: SELECT AVG(sleep_h) FROM garmin_records
WHERE record_date BETWEEN ... AND ...
→ přesná čísla: "průměr 7.2 h za 28 dní"
Vrstva 2 — Fulltextové noty
────────────────────────────
pg_trgm ILIKE na Obsidian vault
→ deník, retrospektivy, poznámky
Vrstva 3 — Sémantické vyhledávání
───────────────────────────────────
pgvector cosine similarity (768-dim embeddingy)
→ tematicky podobný obsah i bez shodných slov
▼
[RRF — sloučení výsledků ze všech 3 vrstev]
▼
[LLM syntéza] → srozumitelná odpověď
▼
"Průměrně 7.2 h. Nejhorší týden byl 13.–19. května (6.1 h)."
Co která vrstva umí:
| Vrstva | Silná stránka | Příklad |
|---|---|---|
| SQL / strukturovaná | Přesná čísla, součty, průměry | "kolik jsem utratil v květnu" |
| Fulltextové noty | Hledání v textu deníku | "kdy jsem psal o únava na projektu" |
| Sémantická (vektory) | Tematická blízkost bez klíčových slov | "jak jsem se cítil po závodě" |
Tok 3: Automatické proaktivní akce
Systém sleduje data a píše sám — bez toho aby ses ptal.
Ranní brief (7:30–9:00)
APScheduler → morning_brief()
├─ Garmin: HRV + spánek + RHR z dnešní noci
├─ Počasí: OpenWeatherMap API
├─ Kalendář: Google Calendar — dnešní eventy
├─ Úkoly: RAW Projekty — prioritní úkoly dne
└─ Finance: Penízky — měsíční přehled
▼
LLM sestaví brief → Telegram zpráva
Zdravotní monitoring (10:00 každý den)
Kontroluje čtyři oblasti. Každý alert se odešle maximálně jednou za 24 h.
| Alert | Podmínka spuštění | Co pošle |
|---|---|---|
| RHR spike | Klidová TF dnes > 7d průměr + 3 bpm | Upozornění + analýza příčin (stres, km, spánek) |
| HRV drop | HRV dnes < 7d průměr − 3 ms | Upozornění + doporučení na dnes |
| Vysoký stres | Stres včera ≥ 35 AND ≥ 7 nad 7d průměrem | Analýza příčin (spánek, HRV, trénink — vše jako delta od průměru, ne absolutní prahy) |
| Špatná výživa | Kcal / protein / vláknina mimo cíl, nebo pozdní večeře | Plán korekce na dnešní den |
Váha (okamžitě při zápisu)
Jakmile zadáš váhu, systém okamžitě vyhodnotí:
- Trajektorii (trend posledních dní)
- Aktuální fázi (deficit / surplus / udržovací)
- Doporučení kalorického cíle na dnes
Layer A — Wikilink ontologie
Vault obsahuje tisíce Markdown souborů propojených [[wikilinky]]. Layer A tuto síť mapuje a prohledává.
Jak to funguje
Při každém uložení poznámky:
│
├─ extrahuj všechny [[wikilinks]] z textu
├─ ulož do tabulky note_links:
│ source_path │ target_slug
│ projekt-x.md │ klient-abc
│ projekt-x.md │ meeting-2026-05
└─ smaž stale linky (co byly, ale teď nejsou)
BFS traversal — prohledání sítě do hloubky
Při dotazu "co vím o projektu X?" systém nepřečte jen jednu notu — projde celou síť:
projekt-x (hloubka 1)
├── klient-abc → jeho profil, projekty, platby
├── meeting-2026-05 → zápisky z meetingu
└── smlouva-2024 → podmínky, termíny
klient-abc (hloubka 2)
├── komunikace-email
└── invoice-2025-12
Výsledek: AI dostane kontext celé sítě kolem tématu — ne jen jednu notu, ale celý graf propojených informací.
| Parametr | Možnosti |
|---|---|
| Hloubka | 1–3 skoky |
| Směr | backlinks (co odkazuje na X), outlinks (co X odkazuje), obojí |
Layer B — Kauzální analýza
Systém průběžně hledá statistické vztahy mezi 25 proměnnými tvých zdravotních, nutričních a finančních dat.
Proměnné (DayData)
| Kategorie | Proměnné |
|---|---|
| Spánek | sleep_h, deep_sleep_pct, rem_sleep_pct |
| Fitness | hrv, stress, rhr, steps, run_km, active_kcal |
| Výživa | kcal, protein, carbs, fat, fiber, nut_rating, last_meal_h |
| Finance | daily_spend |
| Odvozené | recovery (HRV+spánek+stres composite), hrv_deficit (vs. 7d průměr), run_load_7d, caloric_surplus, sleep_debt_3d (3-denní spánkový dluh), training_debt (objem × HRV deficit), dow (den týdne) |
Analytická vrstva 1 — Pairwise korelace
Pearson r pro všechny kombinace 25 proměnných při 6 časových posunech (lazích):
| Lag | Typ vztahu | Příklad |
|---|---|---|
| 0 dní | Současné | HRV ↔ spánek dnes |
| +1 den | Přímý efekt | Trénink dnes → HRV zítra |
| +2–3 dny | Odložený efekt | Stres → výživa za 2 dny |
| +5, +7 dní | Kumulativní | Tréninkový dluh → únava za týden |
Celkem ~3 700 kombinací. Filtruje se na |r| ≥ 0.13, zobrazí top 6 per proměnná.
Analytická vrstva 2 — Parciální korelace (automatické hledání konfoundrů)
Hledá trojice X→Y kde třetí proměnná Z věc vysvětluje nebo zprostředkovává.
Příklad:
r(kroky, nálada) = 0.45 ← zdánlivý vztah
r(kroky, nálada | spánek) = 0.08 ← mizí po kontrole spánku
→ Spánek způsobuje obojí.
Kroky nejsou příčinou lepší nálady.
| Nález | Interpretace |
|---|---|
| r klesne po kontrole Z | Z je konfounder (způsobuje obojí) |
| r klesne a Z koreluje s Y | Z je mediátor (X působí skrz Z) |
Systém automaticky projde všechny trojice a vrátí top 8 nejzajímavějších.
Analytická vrstva 3 — Interakční vzory (16 patterns)
Podmíněná analýza — co se děje při kombinaci více faktorů najednou:
| # | Vzor | Co hledá |
|---|---|---|
| 1 | Běh + protein → HRV | Jak jídlo po tréninku ovlivňuje regeneraci |
| 2 | Regenerace → příští běh | Dovolí ti dobrá recovery výkonnostní trénink? |
| 3 | Pozdní jídlo + stres → spánek + HRV | Trojice, která ničí noc |
| 4 | Kumulativní stres (3+ dny) → HRV propad | Akumulace zátěže přes dny |
| 5 | HRV deficit → trénink + stres | Co se děje v podprůměrných dnech |
| 6 | Vláknina + tuk → hluboký spánek | Mikrobiom–spánková osa |
| 7 | Výdaje → stres příští den | Finance → psychická zátěž |
| 8 | Tréninkový objem 7d → klidová TF | Chronická adaptace vs. přetížení |
| 9 | Kalorický deficit → trénink příští den | Energetická dostupnost |
| 10 | Spánek ≥8h → stres + HRV příští den | Obnova přes spánek |
| 11 | Spánek × stres × protein → HRV | Trojice (s nutricí nebo bez) |
| 12 | Trénink × spánek → regenerace | Při vysokém objemu rozhoduje spánek |
| 13 | Finance → stres → spánek (řetěz) | Kaskáda přes mediánový split |
| 14 | Stres → kvalita stravy příští den | Emoční jídlo |
| 15 | RED-S riziko (deficit + objem) | Energetická dostupnost v tréninku |
| 16 | Recovery arc +1 až +5 dní | HRV deficit trajektorie po náročném dni |
Jak výsledky vidíš: Napiš "jak trénink ovlivňuje moje HRV" nebo "spusť kauzální analýzu".
Individuální thresholdy — proč nejsou pevné meze
Systém nepoužívá obecné normy z internetu. Každý alert je relativní vůči tvým vlastním průměrům:
Tvůj 7denní rolling průměr = tvůj "normál"
│
├─ HRV: průměr 63 ms → alert při poklesu o ≥ 3 ms (= < 60)
├─ RHR: průměr 47 bpm → alert při vzrůstu o ≥ 3 bpm (= > 50)
└─ Stres: průměr 32 → alert při ≥ 35 AND ≥ 7 nad průměrem
Pokud procházíš stresovým obdobím a tvůj průměr stresu vzroste na 45, práh se posune — nebudeš dostávat falešné alarmy kvůli přirozenému bazálu.
Proaktivní persony
Tři "hlasy" systému, každý sleduje jinou oblast a píše sám:
| Persona | Oblast | Kdy se ozve |
|---|---|---|
| Eva | Zdraví, spánek, výživa, stres | Zdravotní alerty, nutriční feedback |
| Emil | Sport, trénink, regenerace | Výkonnostní tipy, recovery varování |
| Elon | Finance, projekty, prokrastinace | Finanční přehledy, upozornění na prodlení |
Kde jsou data fyzicky
| Typ dat | Úložiště | Sync / záloha |
|---|---|---|
| Markdown noty, deník, projekty | /srv/vault/ (VPS) |
Dropbox ↔ VPS automaticky |
| Garmin, výživa, finance | PostgreSQL tabulky | VPS snapshot |
| Vektorové embeddingy (RAG) | PostgreSQL + pgvector | VPS snapshot |
| Nutriční log (JSON/den) | /srv/vault/00_meta/nutrition-days/ |
Dropbox sync |
| Kontext konverzace | Redis (TTL 10 min) | záměrně bez zálohy |
| Secrets (API klíče, hesla) | /srv/brain-secrets/brain.env |
mimo repozitář |
Vault na VPS ↔ Dropbox se synchronizuje automaticky. Nové/upravené soubory jsou reindexovány (embeddingy) do 5 minut od změny.
Bezpečnost a soukromí
| Ochrana | Jak funguje |
|---|---|
| Whitelist | Bot odmítne zprávy od kohokoliv jiného než tebe |
| Sensitive blok | Noty s #sensitive nebo ve složce private/ nejdou do Gemini API |
| Self-hosted | Žádná osobní data nejdou do komerčních cloudů (jen AI inference přes Gemini API) |
| HTTPS | Veškerá komunikace šifrována, Caddy + Let's Encrypt |
| OAuth | Garmin, Google, Penízky — přístup jen přes tokeny, ne plaintext hesla |
Dostupné nástroje (co agent umí zapsat / smazat)
| Nástroj | Akce | Příklad hlášky |
|---|---|---|
log_meal |
Zápis jídla + analýza | "Oběd — rýže s lososem" |
delete_meal |
Smazat jídlo ze záznamu | "Smaž tu večeři, je špatně" |
log_body_metrics |
Zápis váhy, tuku %, svalů… | "70.2 kg dnes ráno" |
delete_body_metric |
Smazat poslední zápis metriky | "Oprav tu váhu" |
save_note |
Uložit poznámku do inboxu | Jakýkoliv volný text |
delete_note |
Smazat poznámku z vaultu | "Smaž tu poznámku co jsi uložil" |
add_task |
Přidat úkol do RAW Projektů | "Zapiš úkol: faktura do pátku" |
complete_task |
Označit úkol jako hotový | "Splněno: faktura" |
delete_task |
Smazat špatně přidaný úkol | "Smaž ten úkol o faktuře" |
add_penizky_transaction |
Zapsat výdaj / příjem | "Zaplatil jsem 450 Kč za oběd" |
query_nutrition |
Výpis jídel s makry per slot | "Kolik kalorií měla večeře?" |
query_garmin |
Dotaz na Garmin data | "Kolik jsem naběhal tento týden?" |
analyze_patterns |
Layer B — kauzální analýza | "Spusť kauzální analýzu" |
follow_links |
Layer A — prohledat wikilink síť | "Co vím o projektu X?" |