# Word Naija
A culturally localized, offline-first word puzzle game built with Expo + React Native.
Word Naija blends familiar word-game mechanics with Nigerian English and Pidgin vocabulary. Players swipe letters to form words, fill a crossword-style grid, unlock levels, and earn coins through level completion and bonus words.
## Highlights
- Offline-first gameplay with local dictionary and generated levels
- Nigerian/Pidgin flavored vocabulary and themed level titles
- Swipe-based letter selection with backtrack support
- Crossword grid with animated reveals and completion effects
- Bonus extra-word system with coin reward milestones
- Onboarding (FTUE), coach marks, haptics, and synthesized audio cues
- Progress persistence via AsyncStorage
## Tech Stack
- Expo SDK 54
- React 19 + React Native 0.81
- TypeScript
- `expo-audio`, `expo-asset`, `expo-file-system/legacy`, `expo-haptics`, `expo-linear-gradient`, `expo-blur`
- `@react-native-async-storage/async-storage`
## Quick Start
### Prerequisites
- Node.js 18+
- npm
- Expo CLI via `npx expo`
- Android Studio emulator or physical device with Expo Go/Dev build
### Install
```bash
npm install
```
### Run
```bash
npm run start
```
Useful variants:
```bash
npm run android
npm run ios
npm run web
```
If Metro cache issues appear:
```bash
npx expo start -c
```
## Scripts
- `npm run start`: Start Expo Metro server
- `npm run android`: Launch Android target via Expo
- `npm run ios`: Launch iOS target via Expo
- `npm run web`: Launch web target via Expo
- `npm run validate:levels`: Generate/validate all configured levels using `tools/validate_levels.ts`
## Project Structure
```text
.
|- App.tsx # App root: providers, font loading, navigator shell
|- index.ts # Expo root registration
|- components/ # UI screens and reusable game components
| |- HomeScreen.tsx
| |- GameBoard.tsx
| |- Grid.tsx
| |- LetterCircle.tsx
| |- Toolbar.tsx
| |- LevelComp …