Developing a PWA Reminders App (In Rust)
Before I get into the meat of this blog post, I should mention that I’m writing this blog post over SSH to my server, using the Fresh Editor. It’s actually very impressive, and I wouldn’t normally give this type of project the time of day, because it’s written with very generous help of AI (This particular flavor being Claude), but it’s genuinely a very impressive project, and it covers a lot of what I wanted in a terminal-based text editor. See Helix is my main editor, and Recent PRs and Other Work blog posts for my gripes on all the current options.
Normally, I’d be using VSCode’s remote SSH functionality to write blogs on my server, but I wanted to give Fresh a try.
Hello folks, hope your February has been awesome!
Most of my programming bandwidth in the last year and a half or so has been dedicated to my job, I’d say around 90%. From there, a remaining 5% might be dedicated towards the maintainership of the Fedora COSMIC Spin, where I am the sole packager (I do get help from people in the form of patches occasionally when something breaks and I don’t have time to fix it).
The final 5% is all for me, and I cherish that 5%. I don’t very often have the time to code for myself, but when I do, I’m usually building something that benefits my personal experience. Most of that is Linux stuff, but sometimes it’s more general needs that I have.
For the longest time, I’ve wished that I could have a reminder app could set reminders that recur only after completion. For example, let’s say I need to get a haircut every 6 weeks, and I set a reminder that recurs every 6 weeks in the reminders app. If I complete the reminder after 7 weeks, then the next reminder will come up in 5 weeks. I’d like that reminder to instead recur 6 weeks after I completed the last reminder.
After researching far and wide, it looks like the reminder apps on iOS all either:
- Are free to use
- Have the feature, but are paid
What is up with that?? Reminder apps seem like they’re pretty easy to make.
If anyone knows of a reminder app that fits these needs (preferably open-source), please reach out to me on Mastodon.
Because of this need, I’ve mulled over making a reminder app for a while, but I never had the time nor the motivation to build one, because after work I’m pretty tired and I have just been coding all day.
Sometimes I get the kick to do some home coding again, and I end up code binging in a way, and this was one of those times. I decided that if I’m going to make a reminder app, I need to do it in the easiest way possible before my code binge wanes.
The easiest way to build a cross-platform app where I don’t have to worry about the quirks of different app stores (looking at you iOS) is to make a PWA, so naturally I did just that.
I also wanted to explore Rust and WASM, and so I chose to write the web app in Rust (Using the Leptos framework). I figured I’d be able to onboard easier as it’s been many years since I made a TypeScript project, but building Rust web apps is much more complicated than TypeScript, so in hindsight that may not have been the best idea.
Nevertheless, here I am with a basic proof-of-concept Web reminder app that I named ReminderBox: https://ryanabx.github.io/ReminderBox.
You can install it on your devices, as it’s PWA compatible, but it’s REALLY barebones at the moment.
- You can create reminders
- You can delete reminders (by erasing all the text on the reminder)
- You can edit reminder metadata (like the date, time, notes, etc)
Not much more than that though.
Where is this going in the future?
Here are the things I’m planning on adding in the future:
- Push notifications using the Web notifications API
- Recurring reminders
- Recurring reminders after completion
- A way to back up reminders (so you don’t accidentally clear your web data and lose your reminders)
- Potential reminder server support (you can connect to your own reminder server and sync reminders, handle push notifications, etc.)
- More polishing (I’m not a UI designer, bear with me :///)
Limitations of the Web platform
There are a few limitations that web apps have to deal with at the moment
- On iOS, the OSK does not shrink the viewport: https://stackoverflow.com/a/55671366
- Web push notifications cannot be sent while the app is closed, UNLESS you have a push server. This is a sad reality when making a reminder app that is intended to be run offline.
- The widget experience won’t ever be up to par with native widgets in whatever platform you run.
There are more quirks I’ve probably forgotten about, but whatever!
Go give it a try at https://ryanabx.github.io/ReminderBox. I’ll be updating it every so often until I feel like I can daily drive it.