Programy

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.