PWA + Mobile app helping African teachers create lesson plans, activities, and assessments using on-device AI (Gemma 4).
- App URL: https://karatuai-teachers-companion-25390365712.us-central1.run.app
- GitHub: https://github.com/JatoJay/teachers-digital-literacy
npm run dev- Start development servernpm run build- Build for productionnpm run lint- Run ESLintnpm run typecheck- Run TypeScript checknpm run preview- Preview production build./deploy.sh- Deploy to Google Cloud Run
npm run cap:add:android- Add Android platformnpm run cap:add:ios- Add iOS platformnpm run cap:sync- Sync web assets to nativenpm run cap:open:android- Open in Android Studionpm run cap:open:ios- Open in Xcode
- Framework: React 19 + TypeScript + Vite 8
- UI: Tailwind CSS 4 + DaisyUI 5
- Storage: IndexedDB via Dexie.js
- AI: Gemma 4 via MediaPipe LlmInference
- Mobile: Capacitor 8
- Project ID:
dolly-party-hrms - Region:
us-central1 - Cloud Run Service:
karatuai-teachers-companion - GCS Bucket:
gs://karatuai-models/ - AI Model URL:
https://storage.googleapis.com/karatuai-models/gemma-4-E2B-it-web.task(1.87 GB)
src/contexts/model-context.ts- Context definition for model statesrc/contexts/ModelContext.tsx- ModelProvider component (loads Gemma model on app start)src/hooks/useModel.ts- Hook to access model state and generate() functionsrc/components/ModelLoadingScreen.tsx- Loading UI during model download
src/lib/prompts/lesson-plan.ts- Prompt templates for lesson/activity/assessment generationsrc/hooks/useLessonGenerator.ts- Hook for lesson plan generation with streaming
src/pages/LessonPlannerPage.tsx- Create AI-generated lesson planssrc/pages/ActivitiesPage.tsx- Create classroom activitiessrc/pages/AssessmentsPage.tsx- Create quizzes and testssrc/pages/SettingsPage.tsx- App settings and model status
src/lib/db/index.ts- IndexedDB schema and operations via Dexie.js
src/components/ui/- Button, Card, Input, Select, TextAreasrc/components/layout/- Header, BottomNav, Layout
App.tsxwraps app in<ModelProvider>ModelProviderauto-initializes model on mountModelLoadingScreenshows progress overlay until model ready- Pages use
useModel()hook to accessgenerate()function
./deploy.shruns Cloud Build- Docker builds nginx container with static assets
- Deploys to Cloud Run with public access
- App fetches AI model from GCS on first load
- Large touch targets (48px minimum)
- Simple, clear language
- Works offline after model download
- Low bandwidth friendly (model cached in browser)
- Culturally relevant for African educators