Taleka is a mobile platform for preserving and learning endangered indigenous languages, starting with Semai in Malaysia.
Taleka connects community elders and language learners in one learning flow:
- Elders record and review spoken language.
- The system transcribes recordings and checks them against a curated lexicon.
- Verified recordings can become illustrated stories.
- Learners study vocabulary, read stories, practice games, and use the AI Coach.
Semai is an Aslian language spoken by approximately 30,000 people in Peninsular Malaysia. It has limited digital presence and limited support in commercial AI and natural-language tools.
Taleka provides dedicated infrastructure for recording, verifying, organizing, and learning Semai content. The project is designed to support additional indigenous languages as suitable corpora and language tools become available.
Semai has the complete dictionary, transcription, translation, and coaching flow in the current version.
The interface also includes seven additional indigenous ASEAN languages as placeholders for future corpus and model integration:
- Tandia
- Mlabri
- Chong
- Arta
- Arem
- Kristang
- Moken
- Record spoken language with waveform feedback
- Generate a transcription through the OmniASR ensemble
- Review and verify the transcription against the Semai lexicon
- Publish verified recordings as illustrated stories
- Browse the community sound archive
- Select a learning language and complete onboarding
- Practice vocabulary with spaced repetition
- Read community stories with scene-level translations
- Use learning games and quizzes
- Ask the AI Coach for language guidance
- Track progress, XP, and weekly activity
Voice recording and transcription for community elders. Recordings are processed through a multi-language OmniASR ensemble, then reviewed against the Semai lexicon before they become part of the learning experience.
Verified recordings can be published as illustrated stories. The story flow creates scenes from verified transcription and translation text, then generates cover and background images.
Vocabulary is organized by category and practiced through spaced repetition. Learning progress is stored in Supabase and reflected in the learner profile.
The AI Coach combines deterministic rules with model providers. Known words and common language requests are handled through verified language data before model generation is used.
The translation flow prioritizes verified glossary matches and sentence examples, then uses constrained model generation and a word-level fallback when necessary.
- VocabMaster for flashcard practice
- WordleGame for daily word guessing
- QuizGame for category and comprehension practice
Role-based navigation, onboarding, avatars, XP, progress tracking, and a weekly leaderboard are supported for learners and elders.
flowchart LR
App[Ionic mobile app] --> Auth[Supabase Auth]
App --> DB[(Supabase database and storage)]
App --> Helper[Local transcription proxy]
Helper --> ASR[OmniASR ensemble]
App --> Functions[Supabase Edge Functions]
Functions --> Coach[AI Coach]
Functions --> Translate[Translation]
Functions --> Stories[Story generation]
Stories --> Image[Image generation provider]
The client uses Ionic, React, and Capacitor. Supabase provides authentication, database access, storage, and edge functions. The local helper handles the transcription flow and candidate scoring.
| Area | Tools |
|---|---|
| Mobile app | Ionic, React, Capacitor, Vite |
| State and UI | Zustand, Tailwind CSS |
| Data and auth | Supabase Postgres, Auth, Storage |
| Speech | OmniASR ensemble |
| AI Coach | Claude Agent SDK, Gemini |
| Translation | Cerebras, SEA-LION integration |
| Image generation | OpenRouter, GPT Image 2 |
| Testing | Vitest, Testing Library |
| Local services | Node.js transcription proxy |
.
|-- src/
| |-- components/ # Shared UI components
| |-- lib/ # Auth, AI, storage, and domain helpers
| |-- navigation/ # Auth and role-based routing
| |-- pages/ # Application screens
| |-- stores/ # Zustand stores
| |-- types/ # Application and database types
| |-- utils/ # Validation and progress helpers
|-- ai-helper/ # Local transcription proxy
|-- supabase/
| |-- migrations/ # Database schema
| |-- functions/ # Edge functions
|-- assets/ # Flags and landing-page assets
|-- docs/ # Supporting project documentation
- Node.js 22 or newer
- A Supabase project
- Supabase CLI
- Optional Hugging Face access for transcription
git clone https://github.com/pablonification/taleka.git
cd taleka
npm install
cp .env.example .envConfigure the Supabase URL and public key in the environment file. Keep provider credentials in Supabase secrets or local environment files, and never commit them.
npm run devThe Vite development server runs on port 5173.
npm run ai-helper:devThe helper runs on port 8787 and is required for the Elder Studio transcription flow.
Apply migrations and deploy the functions needed by your environment:
npx supabase db push
npx supabase functions deploy ai-coach
npx supabase functions deploy ai-translate
npx supabase functions deploy generate-story-cover
npx supabase functions deploy seed-wordsProvider secrets are configured in Supabase. The services may require credentials for:
- Gemini or Claude Agent SDK for the AI Coach
- Cerebras or SEA-LION for translation
- OpenRouter for story image generation
- Hugging Face or the configured OmniASR service for transcription
Common development commands:
npm run dev
npm run ai-helper:dev
npm run typecheck
npm run lint
npm run test
npm run test:run
npm run checkMobile builds require the relevant iOS or Android platform toolchain.
- Semai is the only language with a complete content and model flow.
- Additional language options require suitable corpora and language-specific tooling.
- Transcription requires the local helper and its configured model providers.
- Story generation requires the configured image-generation provider.
- Mobile builds require the platform toolchain for the target device.
MIT. See LICENSE.