A React Native app for building word datasets for Mandinka, Wolof, Jola, and Fula languages through AI-powered translation generation and user verification.
- 🇬🇧 English (source language)
- 🇬🇲 Mandinka - Gambia, Senegal, Guinea
- 🇸🇳 Wolof - Senegal, Gambia, Mauritania
- 🇸🇳 Jola (Joola) - Senegal, Gambia, Guinea-Bissau
- 🇬🇳 Fula (Fulfulde) - West Africa
- Translation Generation: Generate translations using AI models (OpenAI, custom APIs)
- User Verification: Verify, correct, and submit translations with notes
- Batch Processing: Generate multiple translations at once
- Dataset Management: Track statistics and export verified data
- Category Support: Organize words by categories (greetings, food, etc.)
- Install dependencies:
npm install-
Set up Supabase (Required for backend):
- Create a new project at supabase.com
- Go to SQL Editor and run the migration script from
supabase_migration.sql - Get your Supabase URL and anon key from Settings > API
- Create a
.envfile in the root directory:EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key EXPO_PUBLIC_USE_BACKEND=true
- See
SUPABASE_SCHEMA.mdfor detailed setup instructions
-
Add your translation data (Optional - for local fallback):
- Add JSON files to
/data/directory:mandinka_lang.json✅ (already added)wolof_lang.json(empty - add your data)fula_lang.json(empty - add your data)jola_lang.json(empty - add your data)
- Add JSON files to
-
Start the app:
npm startThen press a for Android, i for iOS, or w for Web.
The app now uses Supabase as the primary backend database. All translations are stored in Supabase and synced across devices.
- Primary Storage: Supabase PostgreSQL database
- Local Cache: AsyncStorage (for offline support and fallback)
- Setup: See
SUPABASE_SCHEMA.mdfor database schema and setup instructions
Your JSON files should follow this structure:
[
{
"english": "hello",
"mandinka": "salaam",
"wolof": "nanga def",
"fula": "jam",
"jola": "kasumay"
},
{
"english": "goodbye",
"mandinka": "fo dii",
"wolof": "ba beneen yoon",
"fula": "sellam",
"jola": "kasumay"
}
]Current Status:
- ✅ Mandinka: ~28,000+ translations loaded
⚠️ Wolof: No data (add todata/wolof_lang.json)⚠️ Fula: No data (add todata/fula_lang.json)⚠️ Jola: No data (add todata/jola_lang.json)
src/
├── config/
│ └── languages.ts # Language definitions
├── screens/
│ ├── HomeScreen.tsx
│ ├── TranslationVerificationScreen.tsx
│ └── DatasetManagementScreen.tsx
├── services/
│ ├── TranslationService.ts
│ └── StorageService.ts
└── types/
└── index.ts # TypeScript interfaces
- Select Language: Choose Mandinka, Wolof, Jola, or Fula from home screen
- Review Translation: App shows random English word with AI translation
- Edit if Needed: Modify the translation if it's incorrect
- Submit or Skip: Save verified translation or skip to next word
- Track Progress: View statistics and export dataset anytime
Each language has its own screen where you:
- Get a random English word
- See OpenAI-generated translation
- Edit the translation if needed
- Submit (saves to dataset) or Skip (moves to next word)
- Track your progress in real-time
The app uses Supabase (PostgreSQL) for data storage. See SUPABASE_SCHEMA.md for:
- Database schema documentation
- SQL migration scripts
- Security policies (RLS)
- Setup instructions
- ✅
Set up backend sync for collaborative dataset building(Done - using Supabase) - Add audio recording/playback for pronunciation verification
- Implement CSV/JSON batch import
- Add user authentication
- Integrate speech-to-text for audio transcription
This is an Expo project using file-based routing.