Personal product · 2025
Slote
A notes app where typing and handwriting share one canvas.
- Role
- Design, engineering and product
- Timeline
- 14 months and counting
- Status
- In development
- Year
- 2025

01 / The idea
The idea
Most note apps make you choose something you should not have to. Apple Notes and Samsung Notes are excellent right up until you change phones. OneNote follows you everywhere but brings a filing cabinet along. Notion is genuinely powerful and has a learning curve most people never finish climbing. And nearly every app that handles handwriting properly assumes you own a stylus.
Slote is the app I wanted and could not buy: typed text and freehand ink sharing one canvas, the same notes on iOS, Android, Windows and macOS, and finger and mouse treated as first-class input rather than a degraded fallback for people without hardware.
02 / What has been built
What has been built
Roughly 245,000 lines of Dart across 1,054 files, organised into eight internal packages: a design system, a rich text engine, an ink and drawing layer, a zoom and pan viewport, and the shared plumbing underneath all of it.
Notes are written to local SQLite first and synced to Postgres after, so the app works on a plane and reconciles when it reconnects. Note content is encrypted on the client before it leaves the device. Sign-in uses native Google and Apple flows rather than a web redirect, because a browser bouncing you back into an app is the worst thirty seconds of any onboarding.
Ten server-side functions handle the things a client cannot be trusted with: billing webhooks, signed export URLs, share notifications, and garbage collection for orphaned images. Billing itself is split by platform because the platforms require it. In-app purchase covers iOS and Android; Stripe covers Windows and macOS.
03 / How it is built
How it is built
405 test files, and CI that runs on every push. A maintained launch-readiness document tracks every open issue by severity, and resolved rows stay in the table for two releases, so there is a written record of what broke and why.
Partway through, I removed the WebView-based editor the app started with and replaced it with a Flutter-native one. That is an expensive decision to make in the middle of a project. The WebView cost was visible on every keystroke on lower-end Android, so it was the right call, and it still shipped behind a tagged rollback point in case it was not.
Fonts are bundled as files instead of fetched at runtime, so the first frame never waits on a network request. Small decision, and exactly the kind that separates an app that feels fast from one that benchmarks fast.
04 / Where it stands
Where it stands
In development, heading toward a v1 store release. It has not launched, and this page will keep saying so until it has. What is left is the unglamorous part: the full suite green on every platform, static analysis clean, and a migration path for notes created in the old editor.
Get notified at launch
One email when Slote reaches the app stores. Nothing else, and no newsletter.
Stack
- 01Flutter: iOS, Android, Windows, macOS
- 02SQLite locally, Supabase Postgres for sync
- 03Client-side end-to-end encryption
- 04Native Google and Apple sign-in
- 05Stripe on desktop, in-app purchase on mobile
- 06Sentry, Firebase Cloud Messaging