Indie product · Flutter · shipping

Loom

A tactile, private-first notes app built around a chronological card pile instead of folders, docs, or dashboards.

RoleCo-founder, designer, partner
StackFlutter · Riverpod · Isar (local-first) · Flutter Secure Storage · Firebase Crashlytics
StatusBuilt and tested · App Store / Play Store links coming soon

Problem

Notes apps default to folders, tags, dashboards, sync, and stock Material chrome — all of which add cognitive overhead before you even type a sentence. The activation energy to capture a thought has crept up to the point that people use the wrong tool, or no tool, instead.

Insight

Handling a stack of printed note cards is calming. It’s also the model people actually use when they’re thinking — chronological pile, oldest at the bottom, newest just on top. If we kept that as the literal interface and let structure emerge from language (hashtags) rather than from manual filing, the app would stay out of the way.

Solution

A vertical deck of notes that compresses, lands, stacks, and rebounds with weighted motion and haptics. Paper, ink, letterpress, and risograph-inspired surfaces instead of stock Material. Hashtags can be typed directly, suggested while editing, or created retroactively from search — pulling older matching notes into the same emergent feed.

The Loom card pile — a vertical stack of notes with the newest settling on top, paper texture and letterpress ink visible.
The pile in motion: a vertical deck where notes compress, land, stack, and rebound with weighted physics.

What makes it Loom

Notes live in a vertical deck, not a flat list. The pile can be flung in either direction. Newest sits nearest the bottom.

Cards have weight. Custom scroll physics, weighted settle springs, per-card stack-landing haptics, separate top-stack and bottom-stack impact behavior.

Delete is intentional. Long-press a card, move it into the fire target, and get a burn/countdown affordance with undo. We’re not letting you tap-tap-gone.

Search isn’t just filtering. Search matches both standalone words and mid-string text, but only standalone matches can be turned into a hashtag feed — preserving the integrity of the tag system.

Editing hides the timestamp. Opening an existing note hides its timestamp while editing; unchanged notes close back into the stack with their original timestamp, while saved edits return with an updated edit timestamp.

Stateful FAB. The global editor floating action button shows x on existing notes until content changes, then switches to check. First-note creation stays on check because saving is the only valid exit.

The visual system

Printmaking-inspired, not stock-material.

A shared LoomTheme provides substrate, ink, accent, deboss, and shadow tokens. A LetterpressCard primitive handles the tactile surface treatment. PaperTextureBackground and texture overlays add controlled paper noise and registration character.

Pixel-snapping is used on high-motion surfaces to keep edges and text containers crisp during animation — motion that intentionally avoids generic app-store cadences.

Local-first, on purpose

Your notes stay on your device.

Loom launches as a local-only product: notes stay on device and there is no cloud sync at launch. Storage, editing, hashtag extraction, search, feed filtering, pile interactions, and haptics all run locally.

Encryption-at-rest of the Isar database is a known future hardening task; Crashlytics is wired for release visibility; release signing is explicitly required for release builds. We won’t ship a broad Android release until a real release artifact has been tested on physical hardware and the release checklist has been completed.

Close-up of a Loom note card showing letterpress and risograph-inspired ink, paper substrate, and the deboss treatment around the timestamp.
Tactile surface: paper, ink, letterpress, and risograph-inspired tokens — substrate, ink, accent, deboss, and shadow — instead of stock Material chrome.

Get it

Loom is shipping. App Store and Play Store links will be added shortly.

← Back to all work