TaskTree
Zadania i projekty dla małych zespołów, z AI, które dzieli pracę uczciwie. Własny produkt — założyciel i CEO, w przygotowaniu do publicznego wydania.
Problem
Małe zespoły nie mają narzędzia w swoim rozmiarze. Jira jest za ciężka, a lista zadań nie wie, że ktoś ma dziś wyjazd, jest na L4 albo wyszedł na urlop — więc zadania trafiają do kogoś, kto i tak ich nie zrobi. U nas praca dzieliła się czatem, Excelem i kilkoma innymi narzędziami naraz, a samo rozdzielanie zadań zabierało godziny tygodniowo.
Rozwiązanie
Aplikacja mobilna i desktopowa, jeden stan współdzielony w czasie rzeczywistym. Kalendarz zna blokery każdej osoby, a wykonawcę podpowiada AI — razem z uzasadnieniem, które da się przeczytać i podważyć. Projekt składa się z 25 typów kafli, od wyceny po raport dla klienta; z celu i terminu AI rozkłada datowane zadania. Rozdzielanie, które zabierało godziny tygodniowo, schodzi do minut, bo kontekst do decyzji zbiera się sam.
Co robi
- Workspace z rolami CEO, admin i członek; zaproszenia kodem, transfer roli CEO
- Zadania: wielu przypisanych, statusy, terminy, tagi, komentarze
- AI proponuje wykonawcę i pisze uzasadnienie wyboru
- Kalendarz zna blokery: spotkania, L4, urlop, wyjazd, i omija je przy przydziale
- Projekty z 25 typów kafli: opis, zadania, klient, rozmowy, wycena, płatności, ryzyka, raport
- Podgląd plików w aplikacji: PDF strona po stronie, Markdown, HTML, JSON, obrazy
- Obecność w czasie rzeczywistym: kto jest online, w jakim stanie ma aplikację, ile mu zostało baterii i która jest u niego godzina
- Klucze AI po stronie użytkownika, trzech dostawców, żadnego klucza zapasowego
Na czym zbudowane
- Klient: React Native 0.81 na Expo SDK 54, jeden kod na Androida, iOS i web
- Stan aplikacji w ośmiu magazynach Zustand, bez Reduxa i bez kontekstu na wszystko
- Nawigacja: własny automat stanów zamiast expo-router i react-navigation
- Dane: Firestore w regionie europe-west1, nasłuch onSnapshot zamiast odpytywania
- Logika serwerowa w 21 Cloud Functions v2 na Node 22, w tym samym TypeScripcie co klient — jeden język po obu stronach
- Uwierzytelnianie w Firebase Auth, powiadomienia push przez Firebase Cloud Messaging
- Desktop: ta sama aplikacja w Electronie 43 z automatyczną aktualizacją przez electron-updater
- Animacje i gesty w Reanimated 4, liczone na wątku UI — zajęty JavaScript nie zatrzymuje przewijania
- Klucze AI w expo-secure-store; model i klucz ustawiane per zespół, klucz zespołowy szyfrowany AES-256-GCM po stronie funkcji
Jak to wygląda
Na komputerze
Na telefonie
Co to zmieniło
- Raport dla klienta, na który schodziło 20 minut, wychodzi w 3
- Rozdzielanie zadań zeszło z godzin tygodniowo do minut — wcześniej szło to czatem, Excelem i kilkoma narzędziami naraz
- Trzy osoby pracują na tym na co dzień od roku
- Wydanie desktopowe 1.0.114 opublikowane 9 sierpnia 2026, instalator 220,02 MiB, kanał aktualizacji na GitHubie
- Pełny test aktualizacji 1.0.3 do 1.0.5 zaliczony, instalacja per-user potwierdzona na Windows 10 Pro
- Projekty v2: testy 4/4 i 2/2 na emulatorze Firestore, typecheck bez błędów, eksport web 1436 modułów
- Reguły bezpieczeństwa Firestore: 41 KB, wersjonowane i recenzowane ręcznie
Stack
- React Native 0.81
- Expo SDK 54
- TypeScript
- Zustand
- Firebase (Auth, Firestore, Functions)
- Electron
- Reanimated 4
Historia
Nawigacja jest własnym automatem stanów — bez expo-router i bez react-navigation. To była świadoma decyzja: aplikacja ma kilka trybów, które wchodzą na siebie, a gotowe routery wymuszały strukturę, której te tryby nie mają. Klucze do modeli AI trzyma użytkownik i nigdzie nie ma zapasowego klucza wspólnego — brak klucza znaczy brak funkcji AI, nie cichy rachunek u autora.