114 lines
5.5 KiB
Markdown
114 lines
5.5 KiB
Markdown
# 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.
|
|
|