Aplikacja mobilna do zarządzania przepisami, planowania posiłków i tworzenia list zakupów
FoodBook App to kompleksowa aplikacja mobilna stworzona w technologii .NET MAUI, która pomaga użytkownikom w:
- Zarządzaniu bazą przepisów kulinarnych
- Organizowaniu składników z informacjami odżywczymi
- Planowaniu posiłków na wybrane dni
- Automatycznym generowaniu list zakupów
- Importowaniu przepisów z internetu
- Synchronizacji danych z chmurą Supabase
- Przegląd najważniejszych informacji
- Szybki dostęp do wszystkich funkcji aplikacji
- Dodawanie nowych przepisów (ręcznie lub import z URL)
- Edytowanie istniejących przepisów
- Usuwanie i archiwizowanie przepisów
- Automatyczny import przepisów ze stron internetowych (scraping HTML)
- Automatyczne obliczanie wartości odżywczych
- Organizowanie przepisów w foldery
- Oznaczanie przepisów etykietami (labels)
- Filtrowanie i sortowanie listy przepisów
- Rozbudowana baza składników z wartościami odżywczymi
- Dodawanie własnych składników
- Edytowanie parametrów składników
- Wyszukiwanie składników
- Wyświetlanie kalorii, białka, tłuszczów i węglowodanów
- Planowanie posiłków na wybrane dni
- Konfiguracja liczby posiłków dziennie
- Wybór przepisów z bazy danych
- Ustalanie liczby porcji dla każdego posiłku
- Elastyczny zakres dat (od-do)
- Zarządzanie wieloma planami żywieniowymi
- Automatyczne generowanie list zakupów na podstawie planera
- Zaznaczanie zakupionych produktów
- Edycja ilości i jednostek w locie
- Usuwanie niepotrzebnych pozycji
- Intuicyjny interfejs do zarządzania zakupami
- Przenoszenie przepisów do archiwum zamiast trwałego usuwania
- Przeglądanie i przywracanie zarchiwizowanych przepisów
- Tworzenie lokalnych kopii zapasowych bazy danych (eksport do archiwum)
- Przywracanie danych z wybranego archiwum
- Przeglądanie i zarządzanie listą kopii zapasowych
- Nadawanie własnych nazw plikom archiwum
- Rejestracja i logowanie przez e-mail i hasło (Supabase Auth)
- Automatyczne przywracanie sesji po ponownym uruchomieniu aplikacji
- Włączanie/wyłączanie synchronizacji danych z chmurą
- Ręczne wymuszanie synchronizacji (Force Sync)
- Synchronizacja w tle z powiadomieniem o postępie
- Pobieranie preferencji użytkownika z chmury
- Wybór języka interfejsu (Polski, English, Deutsch, Français, Español, 한국어)
- Wybór motywu kolorystycznego (12 wariantów: Default, Nature, Forest, Autumn, Warm, Sunset, Vibrant, Monochrome, Navy, Mint, Sky, Bubblegum)
- Przełączanie trybu jasny / ciemny
- Wybór czcionki spośród 18 dostępnych krojów pisma
- Regulacja rozmiaru czcionki
- Kreator pierwszego uruchomienia (Setup Wizard)
Aplikacja integruje się z platformą Supabase jako backendem chmurowym.
SupabaseAuthService– zarządzanie rejestracją, logowaniem i wylogowywaniemSecureStorageAuthTokenStore– bezpieczne przechowywanie tokenów JWT w pamięci urządzeniaBearerTokenHandler– automatyczne dołączanie tokenów do żądań HTTPJwtValidator– lokalna walidacja tokenów bez zależności od ASP.NET Core- Automatyczne odświeżanie tokenów (
AutoRefreshToken)
SupabaseSyncService– zarządzanie kolejką synchronizacji i przetwarzaniem przyrostowych zmianSupabaseCrudService– pełny CRUD dla wszystkich encji (przepisy, składniki, plany, etykiety, foldery, listy zakupów)SupabaseRestClient– bezpośredni klient REST do Supabase PostgREST API z obsługą nagłówków autoryzacyjnych- Synchronizacja partii danych (batch upsert) dla szybkiego pierwszego importu
- Obsługa błędów fatalnych (RLS/auth) z automatycznym zatrzymaniem synchronizacji
- Synchronizacja preferencji użytkownika z chmurą
DeduplicationService– wykrywanie i usuwanie duplikatów podczas synchronizacji- Tryb Cloud-First: dane z chmury nadpisują lokalne (ID z chmury wygrywa)
- Tryb Local-First: dane lokalne nadpisują chmurę (duplikaty w chmurze są usuwane przed wysyłką)
- Dopasowanie składników: nazwa + kalorie + białko + tłuszcze + węglowodany (tolerancja 0.1)
- Dopasowanie przepisów: nazwa + makro + liczba składników + nazwy składników
- Przepisy (
Recipe) i ich składniki - Składniki (
Ingredient) - Foldery (
Folder) - Etykiety (
RecipeLabel) - Plany posiłków (
Plan,PlannedMeal) - Pozycje listy zakupów (
ShoppingListItem) - Preferencje użytkownika (
UserPreferences)
- Framework: .NET MAUI (Multi-platform App UI)
- Wersja .NET: 9.0
- Lokalna baza danych: SQLite z Entity Framework Core
- Backend chmurowy: Supabase (Auth + PostgREST)
- Wzorce: MVVM (Model-View-ViewModel)
- DI: Wbudowany Dependency Injection
- UI: XAML z Material Design
Aplikacja wykorzystuje wzorzec MVVM z:
- Models: Klasy reprezentujące dane (
Recipe,Ingredient,Plan,Folder,RecipeLabel, …) - Views: Widoki XAML definiujące interfejs użytkownika
- ViewModels: Logika prezentacji i wiązanie danych
- SQLite: Lokalna baza danych na urządzeniu
- Entity Framework Core: ORM do zarządzania danymi
- Migracje: Automatyczne tworzenie i aktualizacja schematu
- Seed Data: Automatyczne wypełnianie przykładowymi danymi przy pierwszym uruchomieniu
- Visual Studio 2022 (17.8+) lub Visual Studio Code
- .NET 9.0 SDK
- Workloads dla .NET MAUI:
- Android
- iOS (opcjonalnie)
- Windows (opcjonalnie)
- macOS (opcjonalnie)
-
Sklonuj repozytorium
git clone https://github.com/[twoja-nazwa]/FoodBookApp.git cd FoodBookApp -
Przywróć pakiety NuGet
dotnet restore
-
Zbuduj projekt
dotnet build
-
Uruchom aplikację
# Android dotnet run --framework net9.0-android # Windows dotnet run --framework net9.0-windows10.0.19041.0
- Przy pierwszym uruchomieniu baza danych zostanie automatycznie utworzona
- Aplikacja załaduje przykładowe składniki z pliku
ingredients.json - Zostanie uruchomiony kreator konfiguracji (Setup Wizard)
- Opcjonalnie: zaloguj się lub zarejestruj konto Supabase, aby włączyć synchronizację w chmurze
- Przejdź do zakładki "Składniki"
- Naciśnij "Dodaj składnik"
- Wypełnij formularz z wartościami odżywczymi
- Zapisz składnik
- Przejdź do zakładki "Przepisy"
- Naciśnij "Dodaj przepis"
- Wybierz tryb:
- Ręczny: Wprowadź dane samodzielnie
- Import: Podaj URL strony z przepisem
- Dodaj składniki i ich ilości
- Opcjonalnie: przypisz folder lub etykiety
- Zapisz przepis
- Przejdź do zakładki "Planer"
- Wybierz zakres dat (od-do)
- Ustaw liczbę posiłków dziennie
- Dla każdego dnia:
- Wybierz przepisy z listy
- Ustaw liczbę porcji przyciskami +/-
- Dodaj lub usuń posiłki
- Zapisz plan
- Utwórz plan posiłków w Planerze
- Przejdź do "Listy zakupów"
- Otwórz wygenerowaną listę
- Podczas zakupów:
- Zaznaczaj kupione produkty
- Edytuj ilości jeśli potrzeba
- Usuwaj niepotrzebne pozycje
- Przejdź do zakładki "Profil"
- Wprowadź e-mail i hasło, a następnie naciśnij "Zaloguj" (lub "Zarejestruj" dla nowego konta)
- Po zalogowaniu włącz przełącznik "Włącz synchronizację z chmurą"
- Naciśnij "Wymuś synchronizację", aby natychmiast zsynchronizować dane
- Możesz wybrać synchronizację w tle, aby kontynuować korzystanie z aplikacji podczas syncu
- Przejdź do ustawień → "Archiwizacja danych"
- Podaj opcjonalną nazwę dla archiwum
- Naciśnij "Utwórz archiwum"
- Aby przywrócić dane: wybierz archiwum z listy i naciśnij ikonę przywracania
Dostępne 12 motywów kolorystycznych: Default, Nature, Forest, Autumn, Warm, Sunset, Vibrant, Monochrome, Navy, Mint, Sky, Bubblegum.
Aplikacja obsługuje jasny i ciemny motyw, automatycznie dostosowując się do ustawień systemu lub według preferencji użytkownika.
Dostępnych 18 krojów pisma, m.in.: OpenSans, Barlow Condensed, DynaPuff, Cherry Bomb One, Kalam, Yellowtail, Poiret One i inne.
Możliwość regulacji rozmiaru tekstu w całej aplikacji.
Obsługiwane języki: Polski, English, Deutsch, Français, Español, 한국어.
Interfejs automatycznie dostosowuje się do różnych rozmiarów ekranów i orientacji urządzenia.
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference Include="HtmlAgilityPack" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" />
<PackageReference Include="CommunityToolkit.Maui" />
<PackageReference Include="Supabase" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" />
<PackageReference Include="Sharpnado.CollectionView" />- Nowy model: Dodaj klasę w folderze
Models/ - Nowy serwis: Utwórz interfejs i implementację w
Services/ - Nowy widok: Dodaj XAML i code-behind w
Views/ - Nowy ViewModel: Utwórz klasę w
ViewModels/ - Rejestracja: Dodaj do DI w
MauiProgram.cs
# Dodanie nowej migracji
dotnet ef migrations add NazwaMigracji
# Aktualizacja bazy danych
dotnet ef database update