Releases: Alaa91H/SPREVA
Releases · Alaa91H/SPREVA
Release list
Spreva v0.1.0-alpha03 — Phase 3: Repository Bootstrap
Initial public bootstrap of Spreva — an offline-first Android app for learning German (Pre-A1 → C1) with first-class Arabic support. This release ships the complete Phase 3 foundation: a 32-module production architecture with a fully working demo lesson, review loop and local persistence.
Highlights
Architecture
- 32 modules:
app,app-catalog, 12core:*, 3domain:*, 6 features (each withapi/impl) - Vertical feature isolation: feature impls never depend on other impls — enforced by Gradle module boundaries
- Offline-first Room 3 single source of truth with an append-only learning event log (sync-shaped for the backend phase)
- Content-as-data: versioned JSON course schema with parser + validator (bundled demo now, downloadable packages later)
Toolchain (all stable, verified 2026-09-18)
| Component | Version |
|---|---|
| Kotlin | 2.4.20 |
| AGP | 9.4.0 (built-in Kotlin support) |
| Gradle | 9.6.0 |
| JDK | 17 |
| compileSdk / targetSdk | 37 (Android 17) |
| Compose BOM | 2026.09.00 (material3 1.4.0) |
| Navigation 3 | 1.1.7 |
Room 3 (androidx.room3) |
3.0.3 |
| DataStore | 1.2.1 |
| Hilt | 2.60.1 |
Features working end-to-end (offline, no backend)
- Onboarding: welcome → interface language (English/العربية) → goal
- Home: Daily-Coach card with next lesson and live due-review count
- Learn: CEFR path → level → lesson list with per-lesson status
- Lesson player: 5 activity types (text intro, vocabulary, multiple choice, cloze, summary) with grading, attempt recording and progress persistence
- Review session: reveal → Again/Hard/Good/Easy, scheduled by a versioned demo scheduler (FSRS-ready interface)
- Settings: theme (system/light/dark), dynamic color, live UI-language switch via per-app locales
- Full RTL + Arabic localization across all feature modules
Quality
- ✅ 16 JVM unit tests passing (parser/validator, scheduler determinism, CompleteLesson with fakes)
- ✅ CI green on GitHub Actions:
test+assembleDebugon every PR/push tomain - ✅
lintDebug: 0 errors - ✅ Release build verified with R8 minification + resource shrinking
- ✅ Verified on a physical device: zero-crash launch, live RTL lesson rendering, Room persistence confirmed via on-device sqlite
- 📸 Evidence:
docs/spreva_running.png,phase3-final-report.md
Documentation
- 5 ADRs (
docs/adr/): module architecture, Room 3 SSOT, Navigation 3 integration, convention plugins, demo scheduler - Dependency snapshot with verified versions and documented deviations (
docs/implementation/dependency-snapshot.md) - Phase 3 final report with an honest NOT-RUN checklist (
phase3-final-report.md) - Keep-a-Changelog format (
CHANGELOG.md)
Notable engineering findings (documented in ADRs)
- Room 3 ships under the new
androidx.room3maven group/package; the legacyandroidx.room2.8.5 compiler emits code that does not compile against Kotlin 2.4.20 - Room 3's codegen is locale-sensitive: on Arabic-locale machines it emits Arabic-Indic digits into generated Kotlin — fixed by forcing
en_USon the Gradle daemon @Composablesignatures cannot cross pure-JVM module boundaries: featureapimodules must be Android libraries with the Compose compiler; contracts use composable function-type properties
Known limitations
- Instrumented test suites (
connectedAndroidTest) not yet authored - Demo review scheduler uses fixed intervals (FSRS lands behind the same interface)
app-catalogis a shell until the screenshot-testing phase
Full changelog: CHANGELOG.md · Build: ./gradlew assembleDebug
Assets
Spreva-0.1.0-alpha03-debug.apk— debug build, installable directly (adb install).Spreva-0.1.0-alpha03-release-unsigned.apk— minified (R8) build, unsigned: sign it locally withapksignerbefore installing. A signing workflow with a real upload keystore lands before any Play-track distribution.