Educational Android app with courses, quizzes, AI-assisted features, and real-time capabilities.
Tache-Lik is an educational mobile application built with Kotlin and Jetpack Compose. It provides a modern learning experience with:
- Student learning flows (explore courses, watch content, take quizzes)
- Teacher tooling (course content management, analytics)
- Admin operations (user/request management)
- Real-time features (Socket.IO-based session handling + chat)
- AI-assisted features (quiz generation, reel generation)
Purpose: provide a single mobile experience that combines learning content, assessment (quizzes), interaction, and teacher/admin workflows.
Target users:
- 🎓 Students
- 🧑🏫 Teachers
- 🛡️ Admins
iOS client: see TacheLik iOS
- 🔐 Authentication (sign in / sign up)
- ✅ Email verification flow
- 🔁 Password reset flow
- 🧑🎓 Student home & course browsing
- 🧪 Quizzes + attempts + results
- 🏅 Badges + leaderboard
- 💬 Chat (list + detail)
- 🧑🏫 Teacher dashboard + analytics
- 🛡️ Admin dashboard
- 🌓 Dark mode (theme state stored and applied globally)
- 🧠 AI features (quiz generation, reels generation)
⚠️ Session termination handling (multi-device login)
| Category | Choice |
|---|---|
| Language | Kotlin |
| UI | Jetpack Compose + Material 3 |
| Architecture | MVVM (View → ViewModel → Repository) |
| DI | Hilt |
| Navigation | Navigation Compose |
| Networking | Retrofit + OkHttp |
| Real-time | Socket.IO client |
| Local storage | DataStore (JWT token) + local cache (user) |
| Images | Coil |
| Video | Media3 (ExoPlayer) |
| Testing | JUnit + AndroidX test (basic unit + instrumented tests) |
The project follows an MVVM structure with a clear separation of responsibilities:
UI (Jetpack Compose Screens)
↓ user actions
ViewModels (StateFlow, business/UI state)
↓ calls
Repositories (orchestrate API calls, caching, sockets)
↓
Data sources (Retrofit API, DataStore, local cache)
Key implementation details:
- Hilt provides dependencies (Retrofit/OkHttp, repositories, data sources).
- OkHttp interceptor injects
Authorization: Bearer <token>automatically for authenticated calls. - Auto-login runs at startup: token → decode JWT → fetch user → route based on role.
- Global session handler listens for multi-session termination and forces logout + navigation reset.
The main app module lives under app/src/main/java/tn/tachelik/tachelik_androidapp/.
Common folders you’ll work with:
view/→ Jetpack Compose screens + navigation graphviewmodel/→ state holders + UI logic (StateFlow)repository/→ data orchestration (API + cache + socket)model/→ Retrofit DTOs, domain-ish models, managers (token/socket)di/→ Hilt modules (network, singletons)util/→ helpers (validators, JWT decoder, network monitoring, error formatting)ui/theme/→ Material 3 theme, colors, typography
- Android Studio (latest stable recommended)
- JDK 11 (the project is configured with Java 11 compatibility)
- Android SDK (Compile SDK 36)
- Clone the repository
- Open
TacheLik_androidApp/in Android Studio
This project reads runtime endpoints from local.properties (ignored by git).
- Create or edit
local.propertiesat the root ofTacheLik_androidApp/ - Add:
# Backend API (must end with /api/)
BASE_URL=http://10.0.2.2:3001/api/
# Socket.IO server base (no /api/)
SOCKET_URL=http://10.0.2.2:3001Notes:
- Emulator loopback uses
10.0.2.2. - On a physical device, replace with your computer’s LAN IP.
- Gradle Sync
- Run the
appconfiguration on an emulator/device
A complete documentation system is available in the docs/ folder.
Recommended reading order:
docs/README.mddocs/01-project-overview.mddocs/02-requirements-and-setup.md- Then continue sequentially (
03-...→21-...)
These standards are documented in more detail in docs/README.md and docs/20-contribution-guide.md.
- Documentation: one feature = one doc update; keep docs versioned with code changes.
- Naming: consistent, descriptive, and avoid abbreviations.
- Commit messages: Conventional Commits recommended (e.g.,
feat: add quiz attempt screen). - Branching:
main(stable) + feature branches (feature/<topic>). - Code readability: prefer small composables, pure UI functions, and explicit UI state.
- Scalability: keep networking and data logic out of composables; repositories are the boundary.
Links are intentionally set as replaceable placeholders so you can fill in real profiles later. This README contains no raw URLs. Update the link targets in the “Link Targets” section below.
- Karim Feki — Developer — 👉 LinkedIn Profile | GitHub Profile | Email
- Nesrine Derouiche — Developer — 👉 LinkedIn Profile | GitHub Profile | Email
- Mohamed Abidi — Developer — 👉 LinkedIn Profile | GitHub Profile | Email
- Oussema Issaoui — Developer — 👉 LinkedIn Profile | GitHub Profile | Email
Special thanks to our mentor Fakhreddine Ghalleb for guiding the project’s architecture, best practices, and engineering standards.
👉 Mentor Fakhreddine Ghalleb's GitHub Profile
This project is released under the MIT License. See LICENSE.
