O Oskar Karpiński
Archiwalny open source

LibrePass

Menedżer haseł do samodzielnego hostowania, zbudowany jako pełne studium produktu: od szyfrowania po Androida, backend, synchronizację i wdrożenie.

Opis

LibrePass był samodzielnie zaprojektowanym projektem open-source obejmującym aplikację mobilną, backend API, model danych, dokumentację, konteneryzację i synchronizację.

Najważniejszym założeniem była separacja odpowiedzialności między klientem a serwerem. Aplikacja Android odpowiada za doświadczenie użytkownika, lokalną pracę offline, biometrię i operacje na sejfie, a backend Spring Boot przyjmuje tylko dane potrzebne do uwierzytelnienia, synchronizacji i przechowywania zaszyfrowanych wpisów.

Projekt wymagał połączenia decyzji produktowych z technicznymi: od wygodnego tworzenia konta, dodawania haseł i generatora, przez walidację żądań i tokeny, po obsługę kolejkowania zmian offline oraz konfliktów podczas ponownej synchronizacji.

  • Self-hosted sejf haseł z szyfrowaniem end-to-end przed wysłaniem danych na serwer
  • Kompletna aplikacja Android w Kotlinie, Jetpack Compose, Material 3 i z odblokowaniem biometrycznym
  • Backend Spring Boot z REST API, tokenami przechowywanymi w bazie, walidacją żądań i rate limitingiem
  • Przechowywanie zaszyfrowanych danych w PostgreSQL lub MySQL oraz logi synchronizacji do obsługi zmian
  • Tryb offline w aplikacji mobilnej z lokalną kolejką zmian wysyłanych po powrocie połączenia
  • Nieukończony klient webowy w Svelte, dokumentacja techniczna i kod na licencji AGPL-3.0

Czego mnie nauczył

Najważniejsze lekcje z LibrePass

LibrePass był jednym z tych projektów, które zmuszają do myślenia o całym systemie naraz: UX, bezpieczeństwie, modelu danych, synchronizacji, API, wdrożeniu i ograniczeniach czasu.

Bezpieczeństwo jako proces

Praca nad menedżerem haseł pokazała mi, że bezpieczeństwo nie jest jedną funkcją. To suma decyzji o szyfrowaniu, hashowaniu, tokenach, walidacji, automatycznym blokowaniu sejfu i tym, czego serwer nigdy nie powinien widzieć.

E2E encryptionToken authValidation

Synchronizacja jest produktem

Tryb offline i synchronizacja zmian nauczyły mnie projektowania przepływów, które muszą działać mimo braku sieci, wielu urządzeń i potencjalnych konfliktów danych.

Offline-firstSync logsConflict handling

Mobile wymaga architektury

Androidowy klient pomógł mi przećwiczyć Compose, Material 3, biometrię, lokalny stan aplikacji i podział odpowiedzialności tak, żeby UI nie był połączony bezpośrednio z logiką synchronizacji.

Jetpack ComposeMaterial 3Biometrics

Backend musi znać swoje granice

Backend był odpowiedzialny za API, autoryzację, limity, bazę danych i synchronizację, ale nie za odszyfrowywanie danych użytkownika. To była dobra lekcja projektowania usług o jasno określonym zaufaniu.

Spring BootREST APIData model

Dokumentacja skaluje projekt

Osobna dokumentacja i instrukcje wdrożenia pokazały mi, jak ważne jest zapisywanie decyzji technicznych, konfiguracji i przepływów zanim projekt stanie się trudny do odtworzenia.

DocsDockerDeployment

Zakres trzeba zamykać świadomie

Nieukończony klient webowy był praktyczną lekcją zarządzania zakresem. Projekt nauczył mnie odróżniać wartościowy rdzeń produktu od funkcji, które lepiej zostawić jako referencję niż rozwijać bez końca.

ScopeProduct thinkingTrade-offs

Aplikacja Android

Ekrany mobilnego menedżera haseł

Aplikacja Android była głównym i najbardziej dopracowanym klientem LibrePass. Została zbudowana natywnie w Kotlinie i Jetpack Compose, dzięki czemu mogła być szybka, lekka, responsywna i dobrze dopasowana do platformy: od płynnego UI, przez Material 3, po lokalny stan aplikacji, biometrię i pracę offline.

Ekran powitalny LibrePass Android dla self-hosted menedżera haseł
Ekran powitalny
Ekran tworzenia konta w aplikacji LibrePass Android
Tworzenie konta
Ekran dodawania wpisu hasła w LibrePass Android
Dodawanie wpisu
Ekran szczegółów zaszyfrowanego wpisu w LibrePass Android
Szczegóły wpisu
Ekran generatora haseł w LibrePass Android
Generator haseł

Wersja desktopowa

Niedokończony klient na większy ekran

Desktopowy widok był kierunkiem rozwoju LibrePass poza aplikacją mobilną. Miał dawać wygodniejszą pracę z sejfem na większym ekranie: szybkie przeglądanie wpisów, zarządzanie danymi logowania i korzystanie z menedżera haseł w codziennym desktopowym workflow.

Ta część projektu nie została doprowadzona do pełnej, produkcyjnej wersji. Została jako prototyp i materiał referencyjny pokazujący planowany kierunek interfejsu oraz to, jak LibrePass mógłby wyglądać poza natywną aplikacją Android.

Podgląd niedokończonej desktopowej wersji LibrePass z listą wpisów menedżera haseł