# Features

- **i18n:** Arabic and English via `react-i18next`; translations in `src/locales/`
- **RTL/LTR:** Layout direction follows app language (Arabic = RTL). Use `useIsRTL()` or `useLayoutDirection()` in components
- **Language switch:** Stored in AsyncStorage; a native Alert prompts the user to restart the app when direction changes (required on iOS)
- **Auth:** Better Auth with Convex; email/password and optional social sign-in. Session-based routing: index redirects to (main) when signed in, (auth) when not; (main) is protected, (auth) is public
- **Navigation:** Expo Router with `Stack.Protected` for private/public screens and RTL-aware slide animations; see `.cursor/rules/performance.mdc` for patterns
- **Haptics:** `useHapticFeedback()` hook and Button `hapticType` for tap feedback (e.g. selection on iOS)
- **No toasts:** Auth errors shown as inline labels; language restart uses Alert
- **TOON:** `@toon-format/toon` is used for Token-Oriented Object Notation (TOON) encoding/decoding of LLM prompt responses into avatar motion timelines (token-efficient format)