Finally found time to return to my project. I slightly refined the UI and added a Command Palette to quickly access frequently used contextual actions. By default, if no object is selected, it includes search and some basic actions and settings.
I think I know why I love working with maps. It's the feeling that you're observing everything from above and can move to any point in just a few seconds.
It turns out that creating a convenient real-time cache invalidation mechanism for clients is far from a trivial task. It all started with react-query and cache invalidation after mutations + periodic updates at intervals.
It ended with a custom aggressive cache and a react hook for smart batching on the client side, a change queue, and web sockets in combination with LISTEN/NOTIFY at the database level. By the time I got to this, I had the chance to try logical replication and wal2json.
It almost works well, but I'm left with more questions than confidence that I understand how it works. I've gone back to classic triggers and a change log table.
WIP: just dropped new command menu
WIP: markers and cards refactored
Prototyping route optimization 🚴♂️
Which side are you on?
WIP
NewProfilePic
TIL: Hologram and Freematics
Got access to the public beta of Mapbox Optimization API. Excited to compare it with OR-Tools, VROOM, and jsprit 🐇
New object explorer
Implementing real-time UIs in not about WebSockets and protocols, it's mostly about state management and cache invalidation. Moreover, WebSockets and pg LISTEN/NOTIFY introduce a new level of complexity and problems. Proper events and polling make the problem almost trivial.
Just dropped a new task filter. The courier_id field on the task table was a bad idea so introduced a new entity called run to model task sequences.
The first preview of a new last-mile delivery platform. There's still so much to do 🚀