Improve feed/profile cache logs and add Expo app agent notes
This commit is contained in:
113
Agent.md
Normal file
113
Agent.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# EMI Expo App Agent Notes
|
||||
|
||||
This file summarizes the current `/Users/adolforeyna/Projects/EMI/expoApp` codebase so future work can start with context.
|
||||
|
||||
## What This App Is
|
||||
|
||||
- Expo React Native app for EMI Fellowship social network (iOS + Android + limited web support).
|
||||
- Main features: auth, feed/posts/comments, profile pages, groups, courses, invite flow, notifications, media playback/upload.
|
||||
- Backend is expected to be the EMI API and cookie-authenticated.
|
||||
|
||||
## Run + Build Basics
|
||||
|
||||
- Install: `npm install`
|
||||
- Start dev server: `npm start`
|
||||
- Device targets: `npm run ios`, `npm run android`
|
||||
- Expo config: `/Users/adolforeyna/Projects/EMI/expoApp/app.json`
|
||||
- EAS config: `/Users/adolforeyna/Projects/EMI/expoApp/eas.json`
|
||||
|
||||
## High-Level Architecture
|
||||
|
||||
- App entry + navigation: `/Users/adolforeyna/Projects/EMI/expoApp/App.js`
|
||||
- API abstraction layer: `/Users/adolforeyna/Projects/EMI/expoApp/API.js`
|
||||
- Global state (Valtio proxy): `/Users/adolforeyna/Projects/EMI/expoApp/contexts/GlobalState.js`
|
||||
- Screen modules: `/Users/adolforeyna/Projects/EMI/expoApp/Views/*`
|
||||
- Reusable UI pieces: `/Users/adolforeyna/Projects/EMI/expoApp/components/*`
|
||||
|
||||
### Navigation Shape
|
||||
|
||||
- Root stack (`createNativeStackNavigator`) contains:
|
||||
- `MainNavigation` (bottom tabs)
|
||||
- Details/screens like `Profile`, `SinglePost`, `Search`, `Menu`, `Notifications`, `ProfileSettings`, etc.
|
||||
- Bottom tabs (`createBottomTabNavigator`) inside `MainNavigation`:
|
||||
- `Feed`, `Groups`, `NewPost`, `Courses`, `MyProfile`
|
||||
- Custom header in `App.js` provides menu/search/notifications shortcuts globally.
|
||||
|
||||
## State + Data Flow
|
||||
|
||||
- Server source of truth via `API.js`.
|
||||
- `GlobalState.me` stores active viewer profile and is refreshed:
|
||||
- on Feed load
|
||||
- periodically in `MainNavigation` (30s interval)
|
||||
- on profile switch in Menu
|
||||
- Local caching with `AsyncStorage`:
|
||||
- feed cache
|
||||
- profile post cache
|
||||
- courses cache
|
||||
- profile/name cache in card/name components
|
||||
- `API.js` has defensive networking:
|
||||
- fallback responses on non-OK and invalid JSON
|
||||
- request error cooldown logging
|
||||
- profile failure cooldown cache to avoid repeated failing calls
|
||||
|
||||
## API Layer Notes
|
||||
|
||||
- Base URL default in `/Users/adolforeyna/Projects/EMI/expoApp/API.js`:
|
||||
- `https://emiapi.reynafamily.com`
|
||||
- can be overridden with `global.baseUrl`
|
||||
- Uses `fetch(..., { credentials: 'include' })`, so backend cookie/CORS config must be correct.
|
||||
- Covers endpoints for:
|
||||
- auth/session
|
||||
- posts/comments/reactions/bookmarks
|
||||
- profiles/follow/change profile
|
||||
- groups/courses
|
||||
- invites
|
||||
- payments
|
||||
- notifications token registration
|
||||
|
||||
## Feature Map (Key Files)
|
||||
|
||||
- Login/register UI: `/Users/adolforeyna/Projects/EMI/expoApp/Views/Login.js`, `/Users/adolforeyna/Projects/EMI/expoApp/components/Login.js`, `/Users/adolforeyna/Projects/EMI/expoApp/components/Register.js`
|
||||
- Feed: `/Users/adolforeyna/Projects/EMI/expoApp/Views/Feed.js`
|
||||
- Post rendering/interactions: `/Users/adolforeyna/Projects/EMI/expoApp/components/Post.js`
|
||||
- Media parser/player/slideshow handoff: `/Users/adolforeyna/Projects/EMI/expoApp/components/Media.js`
|
||||
- Profile page + tagged profile posts: `/Users/adolforeyna/Projects/EMI/expoApp/Views/Profile.js`
|
||||
- Create post + image uploads: `/Users/adolforeyna/Projects/EMI/expoApp/Views/NewPost.js`
|
||||
- Groups + courses browsing: `/Users/adolforeyna/Projects/EMI/expoApp/Views/Groups.js`, `/Users/adolforeyna/Projects/EMI/expoApp/Views/Courses.js`
|
||||
- Profile settings and invite flow: `/Users/adolforeyna/Projects/EMI/expoApp/Views/ProfileSettings.js`, `/Users/adolforeyna/Projects/EMI/expoApp/Views/Invite.js`
|
||||
|
||||
## Integrations In Use
|
||||
|
||||
- Expo Notifications (`expo-notifications`) including push token registration.
|
||||
- Expo Updates (`expo-updates`) check/fetch/reload in Feed (disabled in `__DEV__`).
|
||||
- PostHog analytics:
|
||||
- setup in `/Users/adolforeyna/Projects/EMI/expoApp/PostHog.js`
|
||||
- provider in `/Users/adolforeyna/Projects/EMI/expoApp/App.js`
|
||||
- Media upload currently points to `https://social.emmint.com/upload.php` in multiple places.
|
||||
|
||||
## Known Risks / Footguns (Current Code)
|
||||
|
||||
- Missing imports likely to crash at runtime:
|
||||
- `AsyncStorage` used but not imported in `/Users/adolforeyna/Projects/EMI/expoApp/Views/Courses.js`
|
||||
- `Platform` used but not imported in `/Users/adolforeyna/Projects/EMI/expoApp/Views/ProfileSettings.js`
|
||||
- `Platform` used but not imported in `/Users/adolforeyna/Projects/EMI/expoApp/components/NewPost.js`
|
||||
- A few typos are intentionally present in route/prop names and work only because both sides share the typo:
|
||||
- `intialContent`, `ceatedAt`, `skiptOnPress`, `skiptVideo`
|
||||
- `Store.js` appears unused and stale (`easy-peasy` store not wired into app).
|
||||
- `Views/NewGroup.js` is mostly scaffolded (UI shell, no creation flow yet).
|
||||
|
||||
## Debugging Checklist (Most Common Production Issues)
|
||||
|
||||
1. Confirm API base URL in `/Users/adolforeyna/Projects/EMI/expoApp/API.js` (or `global.baseUrl`) targets intended backend.
|
||||
2. Validate backend session cookie/CORS behavior for current environment.
|
||||
3. If login/feed fails, verify `API.isLoggedIn()` response shape and cookie persistence.
|
||||
4. For phone testing against local backend, never use `localhost`; use machine LAN IP.
|
||||
5. If feed/profile seems stale, clear AsyncStorage caches and re-open app.
|
||||
|
||||
## Recommended Working Style For This Repo
|
||||
|
||||
- Prefer small defensive changes over broad refactors.
|
||||
- Preserve API response guards and null-safe rendering patterns.
|
||||
- When touching profile/post rendering, test both cached and fresh-network paths.
|
||||
- Keep changes isolated by feature screen/component; this code relies on many implicit shared assumptions.
|
||||
|
||||
Reference in New Issue
Block a user