Spaced repetition Android app using the FSRS-4.5 algorithm.
Dory helps you remember anything by scheduling reviews based on the forgetting curve β the scientifically-observed pattern where memories decay exponentially over time. Unlike flashcard apps, Dory is item-based: you track things you want to remember (articles, concepts, skills) and periodically review them with a 4-point rating (Again, Hard, Good, Easy). The FSRS algorithm computes optimal review intervals, and items are color-coded by urgency (red/yellow/green) so you always know what needs attention.
| Component | Technology |
|---|---|
| Language | Kotlin |
| UI | Jetpack Compose, Material 3 |
| Navigation | Navigation Compose (type-safe routes via kotlinx.serialization) |
| Database | Room (SQLite) |
| Preferences | DataStore |
| Background work | WorkManager |
| Algorithm | FSRS-4.5 (pure Kotlin implementation) |
| DI | Manual (AppContainer) |
| Min SDK | 36 (Android 15) |
| Build | Gradle 9.0.1, Kotlin 2.0.21, KSP |
MVVM + Repository pattern in a single :app module.
UI (Compose Screens)
β observes StateFlow
ViewModels
β calls
Repositories (ItemRepository, ReviewRepository, CategoryRepository, SettingsRepository)
β reads/writes
Room Database + DataStore
The FSRS algorithm lives in algorithm/ as pure Kotlin with no Android dependencies, making it independently testable.
com.iamonzon.dory/
βββ algorithm/ FSRS-4.5 engine (Fsrs, FsrsParameters, Rating)
βββ data/
β βββ db/ Room database, DAOs, entities, type converters
β βββ model/ Domain models (Item, Review, Category, ReviewUrgency)
β βββ repository/ Business logic (Item, Review, Category, Settings repos)
β βββ mock/ Mock data for development (to be removed)
βββ navigation/ Route definitions and NavGraph
βββ notifications/ Daily digest worker, scheduler, notification channels
βββ ui/
β βββ dashboard/ Dashboard + Item Edit screens
β βββ creation/ Item creation flow
β βββ review/ Review + Review Session screens
β βββ profile/ Profile, Categories, Archived Items, Advanced Settings
β βββ onboarding/ First-launch onboarding screens
β βββ actionhub/ Action Hub dialog
β βββ components/ Shared UI components (ItemCard, UrgencyIndicator, TopAppBar)
β βββ theme/ Material 3 theme (colors, typography)
βββ AppContainer.kt Manual DI container
βββ DoryApplication.kt Application class
βββ MainActivity.kt Single activity entry point
Requires JDK 21 (for Gradle daemon) with Java 11 target compatibility.
# Set JAVA_HOME if needed
export JAVA_HOME=/path/to/jdk-21
# Debug build
./gradlew assembleDebug
# Run unit tests
./gradlew testThe spec/ directory contains the full project specification:
| File | Contents |
|---|---|
spec/README.md |
Index and quick reference |
spec/main-idea.md |
Vision, item model, navigation, review mechanics, color system |
spec/use-cases-and-nfr.md |
11 use cases (UC1-UC11), data model, edge cases, NFRs |
spec/algorithm.md |
FSRS-4.5 formulas, parameters, rating scale, per-category config |
spec/architecture.md |
MVVM + Repository pattern, package structure, data flow, DI |
spec/implementation-plan.md |
6-phase build order with progress tracking |
- Phases 1-3 (domain models, FSRS algorithm, UI shells, Room database, repositories): Complete
- Phases 4-6 (wire UI to real data, notifications, polish): In progress β ViewModels are created, but screens still use mock data. Integration (Stream 6) is the next step. See
docs/streams/stream-6-integration.mdfor details.