↓ APK
Android App · Open Source
Zwrotka
ZWROTKA Voucher Wallet · v2

PortfelVoucherów.

Ile razy zapomniałeś o voucherze zanim wygasł? Zwrotka pilnuje Twoich kodów — skanuj, śledź, używaj w odpowiednim momencie.

01 Zwrotka dashboard
/ dashboard
02 Zwrotka historia
/ historia
Biedronka
Lidl
Kaufland
CODE128
QR Code
Offline First
Zero Ads
Open Source
Dark Mode
Android 8.0+
Biedronka
Lidl
Kaufland
CODE128
QR Code
Offline First
Zero Ads
Open Source
Dark Mode
Android 8.0+

CO ROBI ZWROTKA

Sześć funkcji, które rozwiązują jeden konkretny problem — żeby żaden voucher nie wygasł niezauważony.

01
📷
SKANUJ VOUCHER

Jeden klik aparatem — kod dodany. Obsługa barcode i QR, automatyczne rozpoznawanie formatu. Zero ręcznego wpisywania.

Expo Camera
02
⚠️
ALERTY WYGASANIA

Status "Wygasa jutro" wyraźnie oznaczony kolorami i ikoną. Żaden kod nie przepadnie przez nieuwagę.

SQLite · Zustand
03
📊
STATYSTYKI

Ile zaoszczędziłeś łącznie? W którym sklepie najczęściej? Ranking sieci, historia, kwoty per sklep.

Reanimated · Zustand
04
🖥️
PEŁNY EKRAN NA KASIE

Tryb pełnoekranowy z maksymalną jasnością — kod gotowy do zeskanowania przez kasę bez żadnych przeszkód.

Fullscreen · Brightness API
05
🔒
PRYWATNOŚĆ — OFFLINE

Wszystkie dane lokalne. Zero serwera, zero chmury, zero rejestracji. Twoje kody zostają na Twoim telefonie.

Local-first · No Backend
06
HISTORIA I ARCHIWUM

Vouchery użyte i wygasłe trafiają do archiwum z pełnym filtrowaniem — porządek w portfelu, historia nie ginie.

Expo Router · Zustand
Ekrany aplikacji

Przejrzysty UI
bez zbędnych
dekoracji.

  • Historia z filtrami — aktywne / użyte / wygasłe jednym tapem
  • Barcode detail view — pełne info o voucherze + podgląd kodu gotowy do kasy
  • Ranking sklepów — kwota per sieć, ilość voucherów, łączne oszczędności
  • Oznacz jako użyty — jeden przycisk, porządek w portfelu
03 voucher detail
/ voucher detail
04 statystyki
/ statystyki

ZACZNIJ OSZCZĘDZAĆ.

APK dostępne za darmo z GitHub Releases. Android 8.0+. Bez konta, bez subskrypcji, bez danych w chmurze.

Dokumentacja Techniczna · v2

ARCHITEKTURA& STACK.

Zbudowana na React Native + Expo,
zarządzanie stanem w Zustand,
dane lokalne w SQLite (Expo SQLite).
Zero backendu. Offline-first. Open source.

// warstwy architektury
UI Layer

React Native

Deklaratywny UI w TypeScript. Każdy ekran to komponent funkcyjny reagujący na stan ze store'a Zustand.

ExpoTSXExpo RouterSafe AreaReanimated
Logic Layer

Zustand Store

Centralne zarządzanie stanem. Logika biznesowa i operacje na danych wyseparowane do store'ów. Reaktywność out-of-the-box.

ZustandActionsSelectorsHydration
Data Layer

Expo SQLite

Relacyjna baza danych SQLite na urządzeniu. Dane nie opuszczają telefonu. Repository pattern dla czystego API.

SQLiteRepositoryMigrationsAsync/Await
Scanning

Expo Camera

Obsługa aparatu i skanowania kodów bezpośrednio przez moduł Expo. Natywna wydajność i szybkość detekcji.

Expo CameraBarcodesCODE128QREAN
Routing

Expo Router

File-based routing — struktura folderów definiuje nawigację aplikacji. Type-safe links i obsługa deep-linków.

File-basedStacksTabsModals
Development

EAS + TypeScript

Zautomatyzowany proces budowania (EAS Build) i pełne typowanie kodu. Szybka iteracja dzięki Expo Go.

TypeScriptEAS BuildExpo GoESLint
// 01 · UI & State

React Native +
Zustand

Nowoczesny UI oparty o komponenty funkcyjne i hooki. Stan zarządzany przez Zustand z automatyczną persystencją i selektorami dla optymalnej wydajności.

  • Expo Router — routing oparty o system plików
  • Custom Design Tokens — spójny wygląd (theme)
  • Reanimated — płynne animacje interfejsu
  • Safe Area handling dla wszystkich urządzeń
  • Dark Mode wspierany natywnie
// 02 · Persystencja

SQLite +
Repository

Lokalna baza danych SQLite (przez Expo SQLite). Warstwa repository abstrahuje operacje na bazie, udostępniając czyste async API dla store'ów.

  • Relacyjna struktura danych dla voucherów
  • Async/Await pattern dla wszystkich operacji
  • Automatyczne wygaszanie starych voucherów
  • Zero zbędnych zapytań — optymalizacja I/O
  • Łatwa migracja schematu bazy
// 03 · Skanowanie

Expo Camera +
BarcodeScanner

Integracja z aparatem urządzenia. Szybka detekcja kodów kreskowych (CODE128, EAN) oraz kodów QR bezpośrednio w klatkach obrazu.

  • Obsługa wielu formatów kodów naraz
  • Haptic feedback po udanym skanie
  • Obsługa uprawnień systemowych
  • Manual entry mode jako fallback
// 04 · Narzędzia

Expo SDK +
EAS Build

Wykorzystanie ekosystemu Expo do szybkiego rozwoju i stabilnych buildów. EAS Build pozwala na generowanie plików APK bezpośrednio w chmurze.

  • Expo Brightness — max jasność przy kasie
  • Expo Clipboard — kopiowanie kodów
  • Asset optimization (splash, ikony)
  • Wsparcie dla Androida 8.0 i nowszych
// przepływ danych · użytkownik skanuje voucher
01
KAMERA

CameraX przekazuje klatki do ImageAnalysis pipeline

02
EXPO CAMERA

Natywny moduł rozpoznaje kod kreskowy / QR

03
ZUSTAND

Akcja addVoucher() aktualizuje stan w pamięci

04
SQLITE

Repository zapisuje voucher w lokalnej bazie danych

05
REACT UI

Komponenty rerenderują się automatycznie (Zustand hook)

// 05 · Struktura projektu

CLEAN PACKAGE STRUCTURE

Kod podzielony feature-by-feature. Każdy feature ma własne UI, ViewModel i Domain. Łatwe dodawanie nowych funkcji bez ruszania reszty kodu.

  • Feature-first package organization
  • Singleton Repository injected by Hilt
  • Shared UI components w /core/ui
  • Theme i designsystem oddzielone
zwrotka-v2/
├── src/
│   ├── app/            ← routing (expo-router)
│   │   ├── (tabs)/    ← główne ekrany
│   │   │   ├── index.tsx
│   │   │   └── historia.tsx
│   │   ├── scan.tsx    ← skaner kamery
│   │   └── _layout.tsx
│   ├── db/             ← sqlite & repository
│   │   ├── database.ts
│   │   └── voucherRepository.ts
│   ├── store/          ← zustand state
│   │   └── voucherStore.ts
│   ├── theme/          ← design tokens
│   └── utils/
├── app.json         ← konfiguracja expo
├── package.json
└── tsconfig.json
// repozytorium

ZWROTKA V2

React Native · Expo · TypeScript · Zustand · SQLite