The app helps Russian-speaking users search for Mari words and usage examples in existing online dictionaries, save their own phrase pairs together with source context, and study them as flashcards.
The project is being developed iteratively from reviewed OpenSpec changes. The first shared application flow now includes the provider-neutral dictionary search boundary and updateable JavaScript API, a persistent local card library, complete card editing, source attribution, and transient quick-study sessions.
The selected stack is Kotlin 2.4.10 and Compose Multiplatform 1.11.0, initially targeting Android and iOS while keeping the common runtime compatible with a future desktop application.
The product direction remains the first vertical flow:
search → create a card → preserve the source → study
English is the primary development language of this repository. Documentation, specifications, code identifiers, comments, commit messages, and agent-authored artifacts must be written in English unless a test fixture or user-facing product string specifically requires another language.
Russian and Mari remain product content languages and may appear in linguistic examples, test data, localized UI copy, and source material.
- Product definition
- Domain model and terminology
- Published collection format and publication
- Pinned dependencies
- JS API operations and releases
- Agent instructions
- OpenSpec configuration
Product changes are planned through OpenSpec. Current system behavior will live in openspec/specs/, while individual iterations will live in openspec/changes/.
Requirements: JDK 17 and an Android SDK with API 36. Build the debug APK:
./gradlew :android-app:assembleDebugOpen the repository in Android Studio and run the android-app configuration, or install the generated APK from android-app/build/outputs/apk/debug/ on an Android 7.0 (API 24) or newer device or emulator.
Requirements: macOS, Xcode, and an iOS simulator. Open iosApp/iosApp.xcodeproj, select the Tusto scheme and an arm64 simulator, then run the app. The Xcode build phase invokes Gradle and embeds the shared TustoApp framework automatically.
The equivalent unsigned command-line build is:
xcodebuild -project iosApp/iosApp.xcodeproj \
-scheme Tusto \
-configuration Debug \
-sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
CODE_SIGNING_ALLOWED=NO buildThe Xcode project excludes the x86_64 simulator architecture because the current Kotlin target matrix is arm64-only.
For native visual and accessibility checks with disposable cards and local search fixtures, use the separate UI verification host. It does not access the installed application's card store.
cd js-api && npm ci && npm test
./gradlew :collection-transfer:jvmTest :collection-transfer:iosSimulatorArm64Test
./gradlew :collection-transfer:catalogue -PcatalogueMode=check
./gradlew :domain:jvmTest
./gradlew :domain:iosSimulatorArm64Test
./gradlew :domain:compileAndroidMain :domain:compileKotlinIosArm64
./gradlew :search-runtime:jvmTest
./gradlew :search-runtime:iosSimulatorArm64Test
./gradlew :search-runtime:assembleAndroidDeviceTest
./gradlew :data-local:jvmTest :data-local:verifySqlDelightMigration
./gradlew :app-ui:jvmTest :app-ui:iosSimulatorArm64Test
./gradlew :android-app:assembleDebug