← wróć do projektów
aidziała
LifeOS — samodzielnie hostowany asystent AI
#ai#llm#self-hosted#automation
Osobisty asystent AI, który buduję dla siebie: backend w FastAPI za botem na Telegramie i małą aplikacją webową w React, przełączający się między lokalnym modelem Ollama a OpenRouter w zależności od zadania.
- ›Obsługuje cele, kalendarz i budżet przez rozmowę, z wejściem/wyjściem głosowym i integracją z Google Calendar.
- ›Samodzielnie hostowany na klastrze k3s w Oracle Cloud, przygotowanym w Terraformie, z CI/CD wdrażającym przy każdym pushu do main — zaczęło się jako skrzynka WSL2 w domu, teraz działa jako cold-standby na wypadek rollbacku, zamiast być wyłączona.
- ›Własna domena (lifeos.michalzawadzki.dev) oparta na rekordzie DNS w Cloudflare zarządzanym przez Terraform — zaimportowanym z ręcznie utworzonego wpisu do IaC zamiast zostawiać go nieudokumentowanym, DNS-only/bez proxy, żeby wyzwanie HTTP-01 cert-managera i streaming SSE/głosowy aplikacji nie przechodziły przez dodatkową warstwę proxy.
- ›Wybiera model per żądanie, nie per rozmowa: lokalny model Ollama obsługuje transakcyjne wywołania narzędzi (wydatki, kalendarz, wpisy zdrowotne), a zbudowana od zera bramka anonimizacji usuwa imiona domowników, zanim cokolwiek naprawdę otwartego trafi do modelu w chmurze.
- ›90 testów pytest i CI w GitHub Actions pokrywają tabelę wywołań narzędzi, klientów finansów/kalendarza/zdrowia (mockowanych na realnych odpowiedziach API) i cały interfejs sesji — złapały prawdziwe błędy zanim trafiły na produkcję, w tym pomyłkę w jednostkach, która zawyżyła dzienny licznik kalorii siedmiokrotnie.
- ›Dane zdrowotne synchronizują się same: automatyzacja na iPhonie (Health Auto Export) wysyła payload JSON do endpointu zabezpieczonego tokenem bearer za każdym razem, gdy pojawią się nowe dane, sparsowane do dziennych metryk i treningów, żeby model mógł je wykorzystać w porannym/wieczornym podsumowaniu albo odpowiedzieć na pytanie "jak minął tydzień" — bez ręcznego eksportu.
- ›Bezpieczeństwo jest świadomie zawężone, nie doklejone na końcu: Google OAuth za allow-listą e-maili z podpisanym ciasteczkiem sesji, porównanie tokena bearer w czasie stałym zabezpieczające jedyny webhook wystawiony publicznie przez tunel (endpoint synchronizacji zdrowia powyżej), bramka anonimizacji z własnym zestawem testów oraz UI administracyjne bazy (Adminer) związane wyłącznie z localhost, nigdy nie routowane przez tunel.
Zrzuty ekranu
Desktop
Telefon
Pracujesz nad czymś podobnym? Chętnie posłucham
kontakt →