Skip to content

Releases: Alaa91H/SPREVA

Spreva v0.1.0-alpha03 — Phase 3: Repository Bootstrap

Choose a tag to compare

@Alaa91H Alaa91H released this 18 Sep 10:09

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, 12 core:*, 3 domain:*, 6 features (each with api/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 + assembleDebug on every PR/push to main
  • 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.room3 maven group/package; the legacy androidx.room 2.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_US on the Gradle daemon
  • @Composable signatures cannot cross pure-JVM module boundaries: feature api modules 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-catalog is 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 with apksigner before installing. A signing workflow with a real upload keystore lands before any Play-track distribution.