Skip to content
All projects

Mobile product · AI · Learning

AI Dictionary for Android

A native Android app for learning English words, built on my own: capture a word from any app, get an AI-written article with translations, then learn it with spaced repetition and AI-generated exams.

My role
Independent product: idea, specification, Android architecture, AI integration and development.
Stack
  • Kotlin
  • Jetpack Compose
  • Hilt
  • Room
  • Ktor
  • WorkManager
  • Gemini API
  • Anthropic API

The problem

Unknown words appear everywhere — in browsers, chats, screenshots — and copying them into a dictionary breaks the flow. Plain translations are also forgotten quickly without practice.

Architecture

AI Dictionary for Android — Architecture diagramCaptureselect · shareCompose UIViewModelsDomainuse cases · SRSAiClientAnthropic · GeminiRoomwords · examsWorkManageroffline queue
A Kotlin app with a Jetpack Compose UI, ViewModels and a domain layer of use cases and repository interfaces; Hilt wires the data layer: Room for words, progress and exams, an AiClient with Gemini (default) and Anthropic implementations over Ktor, WorkManager for the offline queue, EncryptedSharedPreferences for the API key and a foreground service that watches for new screenshots.

Key decisions

  1. 01One AiClient interface, two providers

    Why
    The app talks to the model only through a domain interface. Gemini and Anthropic are interchangeable implementations — switching providers is a one-line change in dependency injection, and the rest of the app doesn't know which one is used.
  2. 02Strict JSON from the model, parsed defensively

    Why
    Every response must be JSON; the parser strips code fences, retries once on a parse error and then returns a typed error the UI can show — the app never crashes on a bad model answer.
  3. 03No AccessibilityService

    Why
    Capturing words uses only the text-selection menu, image sharing and screenshots, so the app works without the most sensitive Android permission.
    Trade-off
    Words can't be picked up from screens automatically; the user has to select, share or screenshot.

What I built

  • Capture words from anywhere: text-selection menu in any app, shared images with crop and AI OCR, and a screenshot watcher with a floating bubble
  • AI word articles — explanation, Russian and Turkmen translations, examples — with text-to-speech
  • AI behind one interface with Gemini (default) and Anthropic implementations; the user's own API key is stored encrypted
  • Leitner spaced repetition, five local quiz types, AI-generated exams and checking of open answers
  • Offline queue: words added without a network are processed by WorkManager later
  • Room database with tested migrations, backup export/import, UI in English, Russian and Turkmen