## Summary Complete Jetpack Compose Android frontend for Pantree Phase 1 MVP. ### Architecture - MVVM + Repository pattern with Hilt DI - Room local cache with Flow-based observation - Retrofit + OkHttp with JWT auth interceptor - EncryptedSharedPreferences token storage - ConnectivityObserver for offline detection ### Screens & ViewModels - Auth: SignIn, SignUp, ForgotPassword, AccountRestore - Pantry: list, add/edit/delete items, duplicate conflict handling - Recipes: browse with filter chips (All/Can Make/Partial), search, detail with scale (1×/2×/3×) - Shopping Lists: list index, detail with check-off, add items, swipe-to-delete - Settings: profile card, sync now, sign out, delete account ### State coverage — every screen handles all four states - Loading: CircularProgressIndicator with contextual message - Error: ErrorState with retry, inline error banners with dismiss - Empty: EmptyState with icon, title, subtitle, optional CTA - Success: full content with pull-to-refresh ### Components (CommonComponents.kt) - LoadingState, InlineLoading - ErrorState (full-screen with retry) - EmptyState (icon + title + subtitle + optional action) - OfflineBanner (read-only mode indicator) - SyncingIndicator (animated, non-blocking) - PantreeSnackbarHost - ConfirmDeleteDialog (human-readable copy) - SectionHeader ### Data layer - ApiModels.kt: all request/response DTOs - NetworkResult<T>: sealed Success/Error/Loading wrapper - safeApiCall: maps network exceptions to friendly errors - Repositories: Auth, Pantry, Recipe, Shopping, Sync - Room entities + DAOs for offline cache - SyncRepository: full + delta sync with tombstone support ### Navigation - Screen.kt: sealed class route definitions - NavGraph.kt: PantreeNavHost (auth/main split) + MainScaffold (bottom nav) - Bottom navigation: Pantry, Recipes, Lists, Settings ### Theme - PantreeTheme: warm earthy palette (green primary, orange secondary) - Light + dark color schemes - Custom typography scale ### Tests - AuthViewModelTest: signup, signin, duplicate, pending-deletion, password reset, clearError - PantryViewModelTest: CRUD, duplicate conflict, offline snackbar vs error - RecipesViewModelTest: filters, search, detail load, 404 handling, clearDetail
pantree
Description
Languages
Kotlin
60.6%
TypeScript
39.2%
JavaScript
0.2%