The metrics
Why Keepio exists
Keepio started from a simple observation: we all get ideas at random moments, and we systematically lose them. The app lets you capture an idea in seconds, organize it into collections, and develop it over time.
The interface is designed to be fast and intuitive: no friction, no complicated setup. You open it, you note, you close. And thanks to CloudKit, everything is synced across your Apple devices.
It's my first real solopreneur project, and the one that taught me the most about product design, app marketing, and the full App Store release cycle.
Behind the scenes
The problem solved
My tasks lived in one app, my timer in another, and my projects nowhere at all. Nothing tied the hours I put in to what was actually moving forward — I could run session after session without knowing whether a project had advanced. Keepio starts from the project rather than the task. A clear list, one goal at a time. The Pomodoro is built in, so every session counts towards a specific project and leaves a trace behind it. Progress reads at a glance, deadlines stay in the calendar instead of becoming one more notification. Everything syncs across iPhone, iPad and Mac with no account to create.
Behind the scenes
A year of solo development, and two structural decisions I would make again exactly the same way. The first: no SPM modularisation. A single target, organised through enum namespaces — App.Project.Views.Editor, App.Todo.UseCases. The usual advice is to split into modules; on a solo project, the cost of managing those dependencies outweighed the benefit. Two external dependencies in total, one of which I wrote myself. The second: freezing schema versions rather than tidying them away. Fourteen frozen versions, V1 through V14, every one a lightweight migration, none ever deleted. When CloudKit-synced data lives on real people's devices, removing a past version means breaking the update for anyone who skipped a couple of releases. The part that hurt was cutting project sharing from the scope. The feature was built; I pulled it out of the interface to ship the release, keeping the data layer dormant and the whole implementation on a branch. Deciding to stop something that already works is harder than writing it. The business model pivoted along the way too, from a subscription to a one-off lifetime purchase, with existing subscribers keeping what they had paid for.
Lessons learned
- 01A solo project does not need the architecture of a ten-person team.
- 02You never delete a schema version: someone out there is still on the old one.
- 03Cutting a finished feature to ship is a decision, not a failure.
- 04Swift 6 strict concurrency is expensive to adopt and pays you back in bugs never written.
- 05Design tokens, no hardcoded values: that is what makes a visual redesign possible at all.
- 06A business model is tested like a feature, and corrected the same way.
Under the hood
The technologies that power Keepio and why I chose them.
SwiftLanguageApple's native language, performant and type-safe.
SwiftUIInterfaceDeclarative framework for native, reactive UI.
SwiftDataPersistenceThe successor to Core Data, natively integrated with SwiftUI.
CloudKitSyncAutomatic iCloud sync across all Apple devices.
Apple Sign InAuthenticationFast, secure sign-in with an Apple account, no password required.
XcodeIDEApple's official development environment.
WidgetKitWidgetsiOS widgets for quick access to ideas from the home screen.
FoundationModelsAISoonSmart suggestions based on your ideas and projects.
App IntentsRaccourcis & IASoonPermettre aux utilisateurs d'utiliser Keepio en dehors de l'application
I also write about it
ios
safeAreaInset vs safeAreaBar en SwiftUI
safeAreaInset et safeAreaBar épinglent du contenu fixe en bord d'écran. Différences visuelles, pièges et guide pour choisir le bon modifier SwiftUI.
Read article→ios
Ajouter du tracking à Keepio sans trahir ses utilisateurs
Comment j'ai instrumenté Keepio avec Sentry et TelemetryDeck en respectant la vie privée : façade, Adapters, enum exhaustive et opt-in/opt-out différencié.
Read article→ios
Post-mortem : un an de Keepio
Bilan technique, business et humain d'une app iOS indie après 12 mois de développement solo.
Read article→ios
Abonnement vs achat unique : pourquoi j'ai changé le business model de mon app iOS
Pourquoi l'abonnement n'a pas marché sur Keepio, et comment elle est passée à un achat à vie à 9,99€.
Read article→Want to try Keepio?
Download the app and share your feedback.
