WellNuo/CLAUDE.md
Sergei d0c4930d38 Update API, invitations, beneficiaries and UI components
- Enhanced invitations system with role management
- Updated beneficiaries routes and screens
- Improved activate, purchase and profile flows
- Added Maestro E2E tests
- Added web invite acceptance page
- Database migration for roles update
2026-01-03 13:02:10 -08:00

94 lines
3.6 KiB
Markdown

# WellNuo - Project Architecture
## API-First Architecture
**IMPORTANT: This project uses an API-first approach. NO local storage for business data!**
### Key Principles
1. **All beneficiary data comes from the remote API only**
- No AsyncStorage for beneficiaries
- No local caching of beneficiary lists
- Every CRUD operation goes through the WellNuo API
2. **Single Source of Truth: WellNuo Backend**
- All beneficiary data is stored in Supabase via the backend
- Changes are immediately persisted to the server
- App always fetches fresh data on screen focus
### API Endpoints
#### WellNuo API (Primary)
Base URL: `https://wellnuo.smartlaunchhub.com/api`
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/me/beneficiaries` | List all beneficiaries for current user |
| GET | `/me/beneficiaries/:id` | Get single beneficiary details |
| POST | `/me/beneficiaries` | Create new beneficiary |
| PATCH | `/me/beneficiaries/:id` | Update beneficiary |
| DELETE | `/me/beneficiaries/:id` | Remove beneficiary access |
| GET | `/me/profile` | Get current user profile |
| PATCH | `/me/profile` | Update user profile (firstName, lastName, phone) |
Authentication: Bearer token (JWT from `/auth/login`)
#### Legacy API (WebView Dashboard)
Base URL: `https://eluxnetworks.net/function/well-api/api`
Used only for:
- Developer Mode / WebView dashboard
- Real sensor data visualization (from NDK devices)
### Data Flow
```
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ React App │ ──▶ │ WellNuo Backend │ ──▶ │ Supabase │
│ (Expo) │ ◀── │ (Express.js) │ ◀── │ (Postgres) │
└─────────────┘ └──────────────────┘ └─────────────┘
```
### Database Schema
- `users` - User accounts (email, password hash)
- `person_details` - Beneficiary profiles (firstName, lastName, avatar, etc.)
- `user_access` - Links accessor_id → beneficiary_id with role (owner/viewer)
- `subscriptions` - Subscription status for beneficiaries
- `devices` - IoT devices linked to beneficiaries
### What NOT to do
- ❌ Don't use `localBeneficiaries` from BeneficiaryContext for actual data
- ❌ Don't save beneficiary data to AsyncStorage
- ❌ Don't cache API responses locally for offline use
- ❌ Don't assume data is available without API call
- ❌ Don't save user profile data (name, phone) to SecureStore
- ❌ Don't use `userName` from SecureStore - it's legacy!
### What TO do
- ✅ Always fetch fresh data via `api.getAllBeneficiaries()` or `api.getWellNuoBeneficiary(id)`
- ✅ Get user profile via `api.getProfile()`, update via `api.updateProfile()`
- ✅ Use `useFocusEffect` to reload data when screen gains focus
- ✅ Handle loading and error states for all API calls
- ✅ Show appropriate feedback on successful operations
- ✅ Only store in SecureStore: `accessToken`, `userId`, `userEmail` (technical auth data)
## Development
### Server Location
- Production: `root@91.98.205.156:/var/www/wellnuo-api/`
- PM2 process: `wellnuo-api`
### Key Files
- `services/api.ts` - All API methods
- `contexts/BeneficiaryContext.tsx` - Beneficiary state management (current selection only)
- `app/(tabs)/beneficiaries/` - Beneficiary screens
### Running Locally
```bash
# Start Expo on port 8081 with iPhone 16 Pro Max
IOS_SIMULATOR_UDID=6BB240A2-0F2F-41E4-B568-9FFAF9B7FBA2 npx expo start --port 8081 --ios
```