← Back to Home

Mimir

A pocket reading app for CS interview prep, covering DSA, OS, DBMS, CN, OOP, and more.
ACTIVE PROJECT
Project Information
Type Android Reading App
Status Active Development
Language Kotlin
Framework Jetpack Compose
License MIT
Repository GitHub
Download APK (Android)

Overview

Mimir is an Android app built for reading CS interview-prep notes, not quizzing on them. Instead of scattering theory across YouTube playlists, PDFs, and random websites, it pulls everything into one clean, offline-first reader.

Content and app are fully decoupled: notes live as plain Markdown files in a separate GitHub repository, and the app fetches and caches them at runtime. New topics can be added at any time with nothing more than a git push, with no rebuild and no reinstall.

Features

  • Clean, distraction-free Markdown reader for CS topics
  • Subject → category → topic navigation, three taps to any note
  • Full-text search across every topic in the index
  • Offline-first, reads from local cache after the first sync
  • Pull-to-refresh to manually re-sync new content
  • Adjustable text size and mark-as-read tracking per topic
  • Dark-first Material 3 theme

Requirements

  • Android 7.0 or higher
  • Internet connection for the initial content sync
  • A GitHub repository hosting the Markdown notes and index files
  • Android Studio (only if building from source)

Usage

  • Open the app, it syncs the topic index on first launch
  • Browse by subject, then category, then topic
  • Or tap search and jump straight to any topic by name
  • Pull down on the home screen anytime to check for new content

Content Format

The app expects two files at the root of the content repository:

  • index.json, the navigation tree (subjects → categories → topics), with each topic pointing to a relative Markdown file path
  • meta.json, containing { "version": N }, bumped on every content update, which the app checks to decide whether to re-sync

Setting a custom content source is a single line in Config.kt:

const val CONTENT_BASE_URL = "https://raw.githubusercontent.com/<user>/<repo>/main/"

Tech Stack

  • Kotlin + Jetpack Compose
  • Material 3 (dark-first theme)
  • Navigation Compose
  • OkHttp for fetching content
  • kotlinx.serialization for JSON
  • Markwon for Markdown rendering
  • DataStore for lightweight local state (read/unread tracking)

Known Limitations

Mimir favors simplicity over feature bloat. It is intentionally just a reader, not a quiz engine or a note-taking tool.

  • No in-app content editing, notes are written and pushed via GitHub
  • Sync is not real-time; it checks on launch and on pull-to-refresh
  • Relies on GitHub's raw content CDN, which can briefly serve a stale response for a few minutes right after a push
  • No account system, so read/unread progress does not sync across devices

Future Enhancements

  • Spaced-repetition based revision scheduling
  • Per-subject progress tracking
  • Custom app icon and branding
  • Public release with a starter content pack

Development Notes

Mimir started as a way to stop losing track of interview prep across a dozen scattered PDFs and playlists. The core design decision was keeping content completely separate from the app itself. GitHub acts as a free, versioned CMS, and the app is just a thin reader on top of it.

That split means adding a new topic is as fast as writing a Markdown file, and the app itself rarely needs to change once the reading experience is right.