Cairn

A local-first planner for tasks, projects and notes, with Google Calendar, Drive and Gmail alongside. Still in development.

Role
Design and build
Scope
Mobile app, 2026
Stack
Flutter, Dart, Drift, SQLite, Riverpod
Cairn Today screen: overdue banner, all-day events and a timeline of calendar events and tasks
Cairn Inbox screen: task capture field and tasks waiting to be planned
Cairn Inbox Mail tab: Gmail threads grouped under Primary, with starred messages
Cairn Calendar screen: month grid with calendar filters and the selected day agenda

Cairn Today screen: overdue banner, all-day events and a timeline of calendar events and tasks

Overview

Cairn is a local-first planner built with Flutter. It holds tasks, projects and notes in one place, with a Today view for the day’s agenda. It is still in development, with an early Android build and Google Calendar, Drive and Gmail linked in.

Who it’s for

Someone who wants one quiet place for what to do, what it’s for and what they’ve written down, that keeps working offline.

The problem

Tasks, project plans and notes usually live in three different apps, and none of them know about the calendar. Cairn puts tasks, projects and notes in one local database so a day's agenda can show them side by side.

How it's built

Today, Inbox, Projects, NotesData accessDrift / SQLiteGoogle Calendar and Drive

Select a part to see what it does.

  • Today, Inbox, Projects, NotesThe app's main screens, built on a shared shell (features/).→ Data access
  • Data accessOne DAO per area: tasks, projects, notes, tags, calendar and links (data/daos).→ Drift / SQLite
  • Drift / SQLiteLocal source of truth; synced tables share id, timestamps and soft delete (data/tables.dart).→ Google Calendar and Drive
  • Google Calendar and DriveRead-only calendar cache for the Today agenda, plus Drive and Gmail links on tasks and notes.

What I'd change

Cairn is still in development. An early Android build works offline for tasks, projects, notes and the Today agenda, and Google Calendar, Drive and Gmail connect on top. Next I'd tighten sync and conflict handling, since that's where a local-first app earns its keep.

What this means for your project

Cairn is a personal project, not a client job, still in development with an early signed Android build. It shows how I'd approach an app that has to work offline now and sync later: a local database first, with the data model shaped for sync from day one.