Matuto • Maglaro • Magtagumpay
Empowering education through mother tongue learning for elementary students in Basilan, Philippines.
Getting Started • Features • Tech Stack • Architecture • Contributing
LearnBasilan is a mobile learning application designed for elementary students in Basilan, Philippines. The app provides an offline-first learning experience with support for 5 languages: Filipino, Chavacano, Yakan, Tausug, and English.
The platform enables students to learn subjects, take quizzes, track progress, and earn achievements — all without requiring internet connectivity. Teachers can create content, generate QR codes for lesson distribution, and collect student progress reports via QR scanning.
Key Principle: No internet? No problem. Every feature works offline.
- Multi-Language Support — Learn in Filipino, Chavacano, Yakan, Tausug, or English
- Interactive Lessons — Read through structured lessons with images and examples
- Quizzes & Assessment — Test knowledge with multiple-choice questions
- Progress Tracking — Monitor completed lessons, quiz scores, and learning streaks
- Achievements & Badges — Earn rewards for completing milestones
- XP & Leveling System — Gain experience points and level up
- QR Code Import — Receive lessons, quizzes, and content from teachers via QR codes
- Progress Sharing — Generate QR codes to share progress with teachers
- Text-to-Speech — Listen to lessons read aloud (Filipino & English)
- Content Creator — Create and edit lessons and quizzes directly in the app
- QR Distribution — Generate QR codes for lessons, quizzes, and subjects
- Progress Scanner — Scan student QR codes to import progress reports
- Dashboard Analytics — View student performance, averages, and identify struggling students
- Multi-Language Content — Create content in any supported language
| Category | Technology |
|---|---|
| Mobile Framework | React Native 0.76.9 |
| Runtime | Expo SDK 52 |
| Language | TypeScript 5.3 |
| Database | expo-sqlite (SQLite) |
| State Management | Zustand |
| Forms | React Hook Form + Zod |
| Localization | i18next + react-i18next |
| QR Code | react-native-qrcode-svg + expo-barcode-scanner |
| Speech | expo-speech |
| Secure Storage | expo-crypto (SHA-256 hashing) |
| Local Storage | AsyncStorage |
Offline-Learning-App/
├── App.tsx # Root component with screen flow
├── app.json # Expo configuration
├── eas.json # EAS Build profiles
├── package.json # Dependencies
├── src/
│ ├── components/ # Reusable UI components
│ │ └── AvatarPicker.tsx
│ ├── screens/ # 13 app screens
│ │ ├── SplashScreen.tsx # App loading
│ │ ├── LanguageScreen.tsx # Language selection
│ │ ├── OnboardingScreen.tsx # First-time user onboarding
│ │ ├── LoginScreen.tsx # Student/Teacher login
│ │ ├── RegisterScreen.tsx # New account registration
│ │ ├── HomeScreen.tsx # Student dashboard
│ │ ├── SubjectDetailScreen.tsx # Subject chapters & lessons
│ │ ├── LessonViewerScreen.tsx # Lesson content reader
│ │ ├── QuizEngineScreen.tsx # Quiz taking interface
│ │ ├── QRScannerScreen.tsx # QR code scanner
│ │ ├── QRGeneratorScreen.tsx # QR code generator
│ │ ├── TeacherDashboardScreen.tsx # Teacher analytics
│ │ └── TeacherLessonCreatorScreen.tsx # Content creation
│ ├── services/ # Business logic & data
│ │ ├── database.ts # SQLite schema & initialization
│ │ ├── auth.ts # Authentication (SHA-256)
│ │ ├── progress.ts # Progress tracking & badges
│ │ └── contentStore.ts # Imported content management
│ ├── types/ # TypeScript type definitions
│ │ └── qr.ts # QR payload types
│ ├── utils/ # Utility functions
│ │ └── qr/ # QR transfer system
│ │ ├── compress.ts # Pako compression + base64
│ │ ├── chunk.ts # Multi-QR chunking
│ │ ├── crc32.ts # Integrity verification
│ │ ├── package.ts # High-level API
│ │ └── index.ts # Public exports
│ ├── theme/ # Design system
│ │ └── colors.ts # Color palette & shadows
│ └── translations/ # i18n localization
│ ├── en.json # English (479 keys - complete)
│ ├── fil.json # Filipino (479 keys - complete)
│ ├── chavacano.json # Chavacano (placeholder)
│ ├── yakan.json # Yakan (placeholder)
│ ├── tausug.json # Tausug (placeholder)
│ ├── TRANSLATION_TEMPLATE.csv # Translator spreadsheet
│ ├── csv_to_json.py # CSV → JSON converter
│ └── TRANSLATOR_GUIDE.md # Translation instructions
| Table | Purpose |
|---|---|
users |
Student & teacher accounts |
subjects |
Mathematics, Science, English, Filipino, Araling Panlipunan |
lessons |
Lesson content with language and chapter ordering |
quizzes |
Multiple-choice questions linked to lessons |
progress |
Student lesson completion and scores |
user_stats |
XP, level, and streak tracking |
earned_badges |
Achievement badges earned by students |
imported_content |
Content imported via QR codes |
The QR ecosystem is the primary method for distributing educational content offline.
Architecture:
Compress Chunk CRC32 QR Code ✅ Done- Compression — Pako (deflate level 9) + base64 encoding (60-96% size reduction)
- Chunking — Splits data into ≤1800 character chunks for safe QR scanning
- Integrity — CRC32 checksums verify data wasn't corrupted during transfer
- Reconstruction — Automatic reassembly when all chunks are scanned
Supported QR Content Types:
- Lessons (with images, examples, translations)
- Quizzes (questions, choices, explanations)
- Subjects (metadata and structure)
- Progress Reports (student performance data)
- Translation Packages (vocabulary lists)
- Node.js v18 or later
- Expo CLI
- EAS CLI (for building)
- Android Studio or physical Android device (for testing)
# Clone the repository
git clone https://github.com/LikeNmuFF/Novu.git
cd Offline-Learning-App
# Install dependencies
npm install
# Start the development server
npx expo start# Android (requires Android Studio or connected device)
npx expo start --android
# iOS (requires macOS and Xcode)
npx expo start --ios# Build APK for Android
eas build --platform android --profile preview
# Build for production
eas build --platform android --profile productionSplash Screen
↓
Language Selection (Filipino / Chavacano / Yakan / Tausug / English)
↓
Onboarding (first-time users)
↓
Login / Register
↓
Student App Teacher Dashboard
├── Home ├── Dashboard Overview
├── Subjects & Lessons ├── Content Creator
├── Quizzes ├── QR Distribution Center
├── Progress Tracking ├── Student Progress Import
├── Rewards & Badges └── Analytics
└── Profile
| Action | XP |
|---|---|
| Lesson Completed | +10 XP |
| Quiz Passed | +50 XP |
| Perfect Quiz Score | +100 XP |
| Level | XP Required |
|---|---|
| 1 | 0 |
| 2 | 100 |
| 3 | 250 |
| 4 | 500 |
| ... | Scaling |
- First Lesson Completed
- First Quiz Passed
- Perfect Score
- 5-Day Streak
- 10 Lessons Completed
- 100 XP Earned
- And more...
| Language | Status |
|---|---|
| English | Complete (479 UI keys) |
| Filipino | Complete (479 UI keys) |
| Chavacano | Pending translation |
| Yakan | Pending translation |
| Tausug | Pending translation |
See TRANSLATOR_GUIDE.md for instructions on contributing translations.
# Convert completed CSV translations to JSON
python src/translations/csv_to_json.py- Coral — Primary actions, headers
- Teal — Science, success states
- Gold — Achievements, rewards
- Green — Progress, completion
- Ocean — Text, backgrounds
- Child-friendly, gamified interface
- Rounded cards and large touch targets
- Bright, engaging colors
- Progress animations and celebrations
- Minimum 16px text for readability
- High contrast for accessibility
| Profile | Purpose | Channel |
|---|---|---|
development |
Development builds with dev tools | development |
preview |
Testing and QA | preview |
production |
Production release | production |
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"android": {
"buildType": "apk"
}
},
"production": {}
}
}- QR Transfer Architecture (compression, chunking, CRC32)
- SQLite database schema
- Authentication system (SHA-256 password hashing)
- 13 React Native screens
- i18n translation system (English complete)
- Translation workflow (CSV template + converter)
- Design token system
- EAS Build configuration
- i18next integration
- Tab navigation wiring
- Phase 2 development (Subjects, Lessons, Quizzes)
- Full i18n translations (Filipino, Chavacano, Yakan, Tausug)
- Teacher Dashboard analytics
- Advanced gamification
- Accessibility improvements
- Dark mode support
See Project Status.md for detailed development tracking.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript strict mode
- Use
StyleSheet.create()for styling - All UI text must use i18n translation keys (never hardcode)
- Test on physical devices when possible
- Follow the existing code structure and patterns
This project is licensed under the MIT License - see the LICENSE file for details.
We appreciate all the contributions made to LearnBasilan! Whether it's code, translations, bug fixes, or suggestions — every contribution helps empower education through mother tongue learning.
|
@C000KED — Lead Developer |
@LikeNmuFF — Assistant Developer |
- Built with Expo
- QR code generation with react-native-qrcode-svg
- Inspired by Duolingo, Khan Academy Kids, and Google Classroom
- Designed for the students and teachers of Basilan, Philippines
- Special thanks to all contributors who help make this project better