Guides
Use and adapt 3nan
Use and adapt 3nan: An Expo application with Arabic and English layouts, Convex data, and Better Auth sign-in.
Use the documented interfaces and source layout for 3nan. The sections below retain the README’s examples and configuration details.
🚀 Setup
- Runtime: Node 18+
- Package manager: Bun
bun install
bun run start📜 Scripts
| Command | Description |
|---|---|
bun run start | Start Expo dev server |
bun run ios | Run on iOS simulator |
bun run android | Run on Android emulator |
✨ Features
- i18n: Arabic and English via
react-i18next; translations insrc/locales/ - RTL/LTR: Layout direction follows app language (Arabic = RTL). Use
useIsRTL()oruseLayoutDirection()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.Protectedfor private/public screens and RTL-aware slide animations; see.cursor/rules/performance.mdcfor patterns - Haptics:
useHapticFeedback()hook and ButtonhapticTypefor tap feedback (e.g. selection on iOS) - No toasts: Auth errors shown as inline labels; language restart uses Alert
- TOON:
@toon-format/toonis used for Token-Oriented Object Notation (TOON) encoding/decoding of LLM prompt responses into avatar motion timelines (token-efficient format)
Commands in the root manifest
The captured package.json declares the following scripts. Run them from the directory containing that manifest.
| Command | Script |
|---|---|
npm run start | expo start |
npm run android | expo run:android |
npm run ios | expo run:ios |
npm run web | expo start --web |
Troubleshoot a local change
- Reproduce the smallest example from the quick-start guide.
- Compare required configuration and dependency versions with the README.
- Check the linked issue tracker for the same error. Include the command, runtime version, and relevant error when reporting a problem; omit credentials.
Source and help
Source captured: 2026-10-11
