Crumbs

An Android app for collecting memories, wisdom and thoughts to pass on.

AndroidPrivate repository
Overview

Crumbs is an Android journal for the things you want your family and friends to still have later — stories, advice, small moments. Everything written is kept twice: once inside the app, and once as a plain Markdown file in a folder you choose. The folder is the part that matters, because it opens on any computer, with or without the app, in twenty years.

How it works

A notepad is already good at storing text — what actually stops people is deciding what to write. So Crumbs is three destinations over one archive, and answering a question files the answer automatically, so nothing asks you to pick a shelf before you write.

Today

One card holding one question. The writing surface is the back of the card that asked it, so there is nothing to choose before you start.

Trails

Threads of entries with an open question on the end. They assemble themselves from inline tags, and a trail you stop feeding quietly steps out of the list.

Everything

The whole archive in one list, ordered by when things actually happened rather than when they were typed.

A crumb doesn't have to be words: photos, voice recordings and arbitrary file attachments are copied into the app and mirrored into the folder beside the entry that names them. Tags are written into the entry's own text rather than a field next to it — the Markdown file is the whole truth about an entry, so a tag the file can't see would be a tag that stops existing the moment you open the folder without the app.

Markdown textPhotosVoice recordingsFile attachmentsInline tagsFuzzy dates

Highlights

  • Write-through Markdown mirror: every save immediately writes a human-readable file with YAML front matter into a user-picked folder, so the archive outlives the app.
  • Database as the single source of truth, with the folder as a one-way mirror — a deliberate decision to avoid a two-way sync problem Android gives no reliable way to solve.
  • Prompt-driven capture that self-files: the question knows which section and tags its answer belongs to.
  • Self-assembling trails from inline tags, with inactive trails ageing out instead of accumulating.
  • Fuzzy “occurred” dates (e.g. a month with no day) for backdating memories, since backdating is most of what a memory app records.
  • Photo, audio and file attachments mirrored alongside entries, with honest in-app limits stated up front rather than hidden.
  • Reproducible release pipeline: tag-derived version codes and a signed universal APK published for direct install via Obtainium.

Design

The interface has one job: make writing the easiest thing on screen. Everything else — filing, tagging, browsing — is either automatic or a step behind the writing surface, and the visual language is tuned to keep it that way.

Material 3 expressive, dynamic colour

Compose Material 3 with dynamic colour on Android 12+, so the palette is drawn from the user's own wallpaper and the app reads as part of their phone rather than a brand parked on it. A hand-tuned warm-neutral scheme is the fallback below 12 and the base for both light and dark.

Type sized for reading, not for chrome

Entry bodies use a 17sp serif-adjacent reading scale with generous line height; interface labels sit two steps down in the sans stack. The prompt on a Today card is the largest type in the app — the question is meant to outweigh the UI around it.

One accent, spent carefully

Colour marks a single thing per screen: the active prompt, the unanswered end of a trail, the save state. Tags, dates and attachment chips stay neutral, so a screen with twelve crumbs on it still has an obvious next action.

Card-back writing, thumb-first controls

Answering flips the card rather than pushing a new screen, which keeps the question visible next to the answer. Primary actions live in the bottom third; destructive ones never do.

Dark mode as a first-class surface

Both modes are designed against the same tonal palette rather than inverted late. Dark surfaces use elevation tints instead of pure black so photo attachments keep their edges.

Accessible by default

Minimum 4.5:1 contrast on body text, 48dp touch targets, full TalkBack labelling on cards and chips, and motion that respects the system reduce-animations setting.

The same restraint runs through the file format. Front matter carries only what a future reader needs — title, occurred date, tags, attachment names — because a Markdown file cluttered with app bookkeeping is a file nobody wants to open outside the app.

Snapshot

Status

v0.1 shipped · v0.2 in progress

Platform

Android (minSdk 26)

Design system

Material 3 · dynamic colour

Distribution

Signed APK via Obtainium

Built with

Kotlin · Jetpack Compose
Material 3 · Room · DataStore
Storage Access Framework
Gradle · GitHub Actions

Design language

Foundation

Material 3 expressive, dynamic colour on Android 12+

Type

17sp reading scale for entries · sans interface labels

Shape & motion

Rounded card surfaces · card-flip writing transition · honours reduce-animations

Accessibility

4.5:1 body contrast · 48dp targets · TalkBack labelled