By far the hardest part of the app was the calendar functionality. Wappler's FullCalendar integration is a little basic if you want to go the route of implementing repeat events on a basis other than weekly because RRule isn't implemented, and you can't hook into the Wappler instance if you add it to the page.
I had to redo the logic about 3 times to get it correctly functional, and ended up settling on using rrule within RunJS on the server connect side. There are still a couple bugs to iron out, but I have an update to push in the next couple of days that fixes all the remaining ones.
The PWA aspect was actually pretty simple. I considered using progressier, but as someone who self-hosts everything and anything, I had a hard time accepting a monthly subscription and more importantly, relying on another external service so ended up taking the time to implement it myself all from scratch, except for the pwa-install poup which uses pwa-install
Aside from Wappler, the stack and components used are:
- Redis (along with Bull)
- MariaDB
- kutt (for the link shortening service, self-hosted. Might end up just implementing my own service in the future.)
- [Wappler Ext] web-push (a slightly modified version)
- [Wappler Ext] GeoIP-Lite
- [Wappler Ext] User Agent Parser
- [Wappler Ext] RunJS (Used a LOT in place of creating custom extensions)
- [Wappler Ext] Sanitize HTML
- [Wappler Ext] Create/Write/Append Files (Used for data exports)
Plus a couple more I'm sure I'm missing, and a good few custom extensions I haven't yet published.
I do plan on publishing the PWA to app stores. For Android, PWA's wrapped in bubblewrap already support handling push notifications so there really isn't much more that's needed to do, but on the IOS side, it doesn't, and I'll need to implement push notifications via firebase.
There's a good bit of polishing that I need to finish before officially launching the app outside of beta, especially with push notifications to get things running a bit smoother. If people are interested, I could create a more detailed post going into exactly how I got around a lot of issues I found along with how I'm hosting everything.