Sergei 184ecbbfcf Add Auth Store with Zustand state management
Implemented a modern, performant auth store using Zustand to replace
the existing AuthContext. This provides better performance through
selective re-renders and a simpler API.

Features:
- Full OTP authentication flow (checkEmail, requestOtp, verifyOtp)
- Automatic session checking on app start
- Unauthorized callback handling (auto-logout on 401)
- User profile management with local state updates
- Optimized selector hooks for granular subscriptions

Benefits over Context API:
- No unnecessary re-renders (only components using specific values update)
- Simpler API with direct store access
- Better TypeScript support with proper type inference
- Easier testing (no provider wrapper needed)
- Can be used outside React components

Testing:
- 23 comprehensive unit tests covering all functionality
- Tests for authentication flow, error handling, and edge cases
- 100% code coverage for core auth operations

Usage:
import { useAuthStore, initAuthStore } from '@/stores/authStore';

// In app/_layout.tsx
initAuthStore();

// In components
const { user, isAuthenticated, logout } = useAuthStore();

// Or use selectors for optimized re-renders
const user = useAuthUser();
const isAuthenticated = useIsAuthenticated();

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-31 17:30:02 -08:00
2026-01-31 16:40:36 -08:00
2026-01-31 16:40:36 -08:00
2026-01-31 16:40:36 -08:00
WellNuoLite @ 9f12830850
2026-01-31 15:55:24 -08:00
2026-01-31 16:49:15 -08:00

WellNuo - Caregiving App

WellNuo is a React Native/Expo app for monitoring and caring for loved ones (beneficiaries).

Tech Stack

  • React Native with Expo SDK 54
  • Expo Router for file-based navigation
  • TypeScript

Get started

  1. Install dependencies

    npm install
    
  2. Start the app

    npx expo start
    

Authentication Flow

The app uses email-based OTP authentication with two distinct paths:

Existing User (Login)

login.tsx -> Enter email -> welcome-back.tsx -> verify-otp.tsx -> Main App
  1. User enters email on login screen
  2. System checks if email exists in database
  3. If exists: navigates to "Welcome Back" screen, sends OTP
  4. User enters OTP code
  5. After verification: navigates to main app (tabs)

New User (Registration)

login.tsx -> Enter email -> verify-email.tsx (auto-sends OTP) -> verify-otp.tsx -> enter-name.tsx -> add-loved-one.tsx -> Main App
  1. User enters email on login screen
  2. System checks if email exists in database
  3. If NOT exists: navigates to "Verify Email" screen
  4. OTP is automatically sent when screen loads
  5. User can optionally enter a partner/referral code (6-digit numeric)
  6. User proceeds to OTP verification
  7. After verification: enters their name
  8. Then adds their first beneficiary (or skips)
  9. Finally navigates to main app

Partner/Referral Code

Partner codes are 6-digit numeric codes for marketing/referrals:

  • Only available during NEW user registration (verify-email screen)
  • NOT shown for existing users logging in
  • Visual: 6 separate cells with hidden TextInput for keyboard
  • Only accepts digits (non-numeric characters are filtered out)
  • Test code "123456" available for development

Key Files

Authentication

  • app/(auth)/login.tsx - Email entry screen
  • app/(auth)/verify-email.tsx - OTP sending for new users + partner code
  • app/(auth)/welcome-back.tsx - OTP sending for existing users
  • app/(auth)/verify-otp.tsx - OTP verification
  • app/(auth)/enter-name.tsx - Name entry for new users
  • app/(auth)/add-loved-one.tsx - Add first beneficiary

Main App

  • app/(tabs)/index.tsx - Beneficiary list (home)
  • app/(tabs)/voice.tsx - Voice assistant
  • app/(tabs)/account.tsx - Account settings

Services

  • services/api.ts - API service
  • services/sherpaTTS.ts - Text-to-Speech (stub for Expo Go)
  • contexts/AuthContext.tsx - Authentication context
  • contexts/BeneficiaryContext.tsx - Beneficiary context

Development Notes

Expo Go Limitations

Some features are stubbed when running in Expo Go:

  • expo-speech-recognition - Uses Alert fallback instead of native speech
  • sherpa-onnx-tts - Uses expo-speech instead of native TTS

Running on Simulators

Use specific UDID for each port:

IOS_SIMULATOR_UDID=FCED72EF-3ADE-47D5-AC67-5C9B0DE59D7E npx expo start --port 8082 --ios

See ~/Desktop/dev instructions/SIMULATORS.md for full port-to-UDID mapping.

Description
WellNuo project repository
Readme 283 MiB
Languages
JavaScript 49.7%
HTML 39.1%
TypeScript 10.9%
Python 0.1%