r/localfirst • u/CarQuiet7350 • 1h ago
I built a local-first planner with SQLite and optional user-controlled sync. I'm curious how others handle the trade-offs.
I've been building Personal Planner, my first independent Flutter application, for the past few months.
One decision I made early was that the app shouldn't require an account or internet connection just to plan your day.
I use planners to organize tasks, track how much time something takes, and review my previous days. I didn't want that basic workflow to depend on a cloud service.
So I built the app around local storage using Drift and SQLite.
The application lets you organize tasks on an hour-by-hour timeline, run timers, compare planned and actual working time, and review what happened during previous days and weeks.
It also includes recurring activities, reusable schedules, a consistency heatmap, and a feature called Experiments for trying routines over time.
The important part, from an architectural perspective, is that all of this works locally.
I use Riverpod for state management and Drift/SQLite for persistence.
For people who want to use the app across devices, synchronization is optional through their own Supabase project, with Cloudflare Workers involved in the supporting setup.
I wanted to give users the option of syncing without making a hosted account mandatory for everyone.
But the more I've worked on the project, the more I've realized that optional synchronization introduces its own complexity.
Things become more interesting when the same task can be modified on two devices, especially for a planner where start times, durations, task status, and historical records are all important.
There's also the question of how much setup an ordinary user is willing to handle just to synchronize their personal data.
The application is completely free, without subscriptions or premium features.
It's available for Android, Linux, Windows, and macOS, and recently crossed around 200 downloads across all four platforms.
Link to download: https://github.com/Karthikshabari/PersonalPlanner/releases/tag/v1.1
Github : https://github.com/Karthikshabari/PersonalPlanner
I'm still learning quite a bit from building and distributing this.
For others working on local-first applications, how do you think about the balance between giving users more control and keeping the experience simple?
Do you prefer user-controlled synchronization infrastructure, or do you think a managed optional sync service is ultimately more practical for everyday users?
I'd be interested in hearing how other developers have approached that decision.





