cat ~/projects/companion/README
Companion
Osobista aplikacja local-first do planowania dnia: zamiast długiej listy zadań pokazuje, co zrobić teraz, i synchronizuje się z API ariku.pl, kiedy jest sieć.
Cel
Ograniczyć wybór do bieżącej decyzji („co robić teraz”), pozwolić zamienić zadanie zależnie od energii i czasu i nie zgubić rozpoczętych wątków. Telefon ma działać także wtedy, gdy serwer w domu jest niedostępny.
Rozwiązanie
Aplikacja Android z widokiem „TERAZ” (zadania sztywne i elastyczne, akcje: zagraj, zamień, później, porzuć), widżetem na ekranie głównym, powiadomieniami i notatkami. Lokalny silnik decyzyjny liczy rekomendacje, a w tle WorkManager synchronizuje stan z serwerem.
Architektura
- Room jako lokalna baza zadań, stanu i notatek; aplikacja działa w pełni bez sieci.
- Silnik decyzyjny na urządzeniu liczy rekomendacje i postęp.
- WorkManager synchronizuje zdarzenia z serwerem i odświeża widżet.
- Kontrakt API po stronie ariku.pl: stan „teraz”, przyjmowanie raportów, podział zadań na kroki, podpowiedzi.
Decyzje techniczne
- Local-first
- Awaria serwera w domu nie blokuje telefonu. Zdarzenia czekają w Room i wysyłają się po powrocie połączenia.
- Na serwer tylko kontekst zagregowany
- Surowe położenie, nagrania i tytuły aplikacji zostają na telefonie; serwer dostaje tylko zagregowany kontekst i czas trwania.
Problemy i rozwiązania
- Niestabilne testy Robolectric w pełnym pakiecie
- Klasy testowe dzieliły wątki i zasoby. Każda klasa testowa działa teraz w osobnym procesie (forkEvery = 1).