A lovely timer for creative worker.
First, it's my own problem, the idea was actually to combine bullet journaling and pomodoro technique, two techniques that significantly help increase my productivity, yet I couldn’t find any good app for this.
But my audience didn't seem click with "journaling", so I focus on building focus timer.
Second, there is competition, which means there is demand for this kind of tool.
Goodbye loneliness! even if you work from home, you'll feel you have friends around you working together with Leaderboard feature.
See how you're going today, this will help you become more mindful by looking at how you spend your hours of the day.
With streak, you'll be more motivated to keep going everyday.
Collect stamps by meeting specific criterias, for example working early in the morning will get you early riser stamp.
You can see how your week is going, see how you perform day to day, also you can see what tasks you spend the most during the week.
Move all undone tasks from yesterday to focus on today. You can also pick individual task to move.
Allocate how many sessions you want for each task. You will be able to see how many tasks you can handle for the day.
Mindful Day is currently available to small group of users in Indonesia. I plan to launch in international market soon. For now, you can access it here https://bisakerjaremote.com/mindfulday/welcome
Mindful Day is built using https://create.t3.gg, it provides good boilerplates to start with. Typescript, Trpc.io, Auth, Prisma, etc
Instead of using Prisma, it uses kysely for interacting with database. Prisma is only used as dev tool to manage migrations.
I pick kysely because it is resembles using raw SQL query which is more flexible than most ORM, but with the power of type safety.
To be performant, Mindful Day leverage local-first approach by storing user's data to IndexedDB and syncing it to MySQL database on the server. Any user's request to data will be first served by local data while checking if there is any latest changes from the server.
In order to simplify all those synchronization, I built local-first sync system using OOP paradigm and using MobX since it is the most OOP-friendly state management in React ecosystem.
Not only that, but also by using OOP and MobX allows the logic code to be separated from UI / component code. This result in a simple code to maintain and allow rapid feature development.