Moves the mobile app from a connectivity scaffold to a real Phase 1 app: - Migrate off Expo Go onto a local custom dev client (expo-dev-client, built via expo prebuild + expo run:android against the local Android SDK — no EAS account needed). Needed because react-native-mmkv requires native code Expo Go doesn't ship. - Persisted, MMKV-backed TanStack Query cache (PersistQueryClientProvider) plus expo-image, so a relaunch renders the last-known feed/pets/ notifications instantly instead of a blank screen while refetching. - ActivePetContext: every pet-scoped procedure requires an explicit petId server-side (no server-side "current pet"), ported from web's ActivePetContext, MMKV-backed instead of localStorage. - Bottom Tabs (Feed/Explore/Notifications/Pets) mirroring the web app's actual mobile nav, with Messages as a header button rather than a tab (matches web). Feed, PostCard, PawButton reactions, pet discovery grid, notifications list, and a conversations list are all wired to the real backend and verified against the live database. - Design tokens/components extended with PostCard/PawButton/PetAvatar/ PetIdentityBadges, all styled from the existing src/theme/tokens.ts. - Fixed a react/react-dom version mismatch surfaced along the way, and handle Clerk's needs_client_trust (Device Trust) sign-in status with an email-code step. Verified end-to-end in the Android emulator against pawfeed.org: feed scrolls and paginates with real posts/images, paw reactions toggle optimistically and persist, pet switching updates every screen, and notifications/explore show live data.
45 lines
1.3 KiB
JSON
45 lines
1.3 KiB
JSON
{
|
|
"name": "pawfeed-mobile",
|
|
"version": "1.0.0",
|
|
"main": "expo-router/entry",
|
|
"dependencies": {
|
|
"@clerk/expo": "^4.6.1",
|
|
"@expo-google-fonts/inter": "^0.4.2",
|
|
"@tanstack/query-sync-storage-persister": "^5.102.8",
|
|
"@tanstack/react-query": "5.102.8",
|
|
"@tanstack/react-query-persist-client": "^5.102.8",
|
|
"@trpc/client": "11.17.0",
|
|
"@trpc/tanstack-react-query": "11.17.0",
|
|
"expo": "~57.0.18",
|
|
"expo-constants": "~57.0.16",
|
|
"expo-dev-client": "~57.0.18",
|
|
"expo-font": "~57.0.3",
|
|
"expo-image": "~57.0.4",
|
|
"expo-linking": "~57.0.8",
|
|
"expo-router": "^5.1.11",
|
|
"expo-secure-store": "~57.0.2",
|
|
"expo-status-bar": "~57.0.1",
|
|
"expo-system-ui": "~57.0.3",
|
|
"lucide-react-native": "^1.41.0",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"react-native": "0.86.3",
|
|
"react-native-mmkv": "^4.3.2",
|
|
"react-native-nitro-modules": "^0.37.1",
|
|
"react-native-safe-area-context": "~5.7.0",
|
|
"react-native-screens": "~4.26.0",
|
|
"react-native-svg": "15.15.4"
|
|
},
|
|
"devDependencies": {
|
|
"@types/react": "~19.2.2",
|
|
"typescript": "~6.0.3"
|
|
},
|
|
"scripts": {
|
|
"start": "expo start --dev-client",
|
|
"android": "expo run:android",
|
|
"ios": "expo run:ios",
|
|
"web": "expo start --web"
|
|
},
|
|
"private": true
|
|
}
|