A Local-First Case Study
Jake Lazaroff developed Waypoint, a local-first web app for trip planning, featuring a dual-panel interface, real-time collaboration, offline access, and document synchronization, emphasizing user control and seamless planning.
Read original articleJake Lazaroff shares insights from his experience creating Waypoint, a local-first web app designed for trip planning. Frustrated with existing tools that either lacked flexibility or were overly complex, he developed Waypoint to address specific shortcomings in data entry and visualization. The app features a dual-panel interface with a text editor and a map, allowing users to quickly jot down notes and visualize locations. Unlike traditional apps, Waypoint uses a local-first architecture, storing data on the client side with a Conflict-free Replicated Data Type (CRDT) system, ensuring real-time collaboration without a centralized server. This design allows for instantaneous editing and offline access, making it user-friendly and reliable. Waypoint also incorporates a synchronization mechanism via Y-Sweet, enabling users to share documents easily. While still in development and not production-ready, Waypoint serves as a case study in local-first application design, emphasizing user control over data and the importance of a seamless planning experience.
- Waypoint is a local-first web app for trip planning, created to address limitations of existing tools.
- The app features a dual-panel interface for easy note-taking and location visualization.
- It uses a CRDT system for data storage, allowing for real-time collaboration and offline access.
- Y-Sweet provides synchronization for document sharing without relying on a centralized server.
- Waypoint is not yet production-ready but serves as a valuable case study in local-first software design.
Related
My weekend project turned into a 3 years journey
Anthony's note-taking app journey spans 3 years, evolving from a secure Markdown tool to a complex Electron/React project with code execution capabilities. Facing challenges in store publishing, he prioritizes user feedback and simplicity, opting for a custom online deployment solution.
Software Possession for Personal Use
Users are frustrated with the shift from desktop to cloud software, sacrificing privacy and control. Alternatives like local-first and personal software are advocated for tailored, user-centric solutions.
Software possession for personal use
The article highlights user frustrations with cloud software, advocating for local-first and personal software to regain privacy and control. It emphasizes simplicity and accessibility in user-centric software development.
How we built Townie – an app that generates fullstack apps
Townie is a beta app that generates full-stack applications using large language models, simplifying software development for non-programmers with instant deployment and features like code editing and multiple application generation.
Mapping with Leaflet
Raymond Camden highlights the Leaflet JavaScript library for mapping, noting its simplicity, quick setup, and flexibility for integrating data sources, while emphasizing the utility of GeoJSON for mapping data.
We opt for the central server as a super-peer and use the Yjs differential update system to avoid loading docs in memory for too long. While there are many things about local-first that are a huge pain in the ass, the UX benefits are pretty huge. The DX can be nice too! Getting to focus on product and not on data transit (once you've got a robust sync system) is pretty sweet. The first 4 weeks of launching our Yjs-based system was rough though; lots of bugs that virally replicated between peers. It requires a really paranoid eye for defensive coding; after several years, we have multiple layers of self-healing and validation on the client.
I get that there is networking and integration that a modern application will typically need to do (depending on its core purpose), and syncing state to and from servers is a special concern (especially if conflict management is necessary) that native desktop applications rarely had to do in years past.
But at the end of the day, it sure does feel like we've come full circle. For a long time, every single application was "local first" by default. And now we're writing research papers and doing side POCs (I'm speaking generally, nothing to do with the author or their article) trying to figure out how to implement these things.
I had thought that the advantage of CRDTs was you do not need a centralized server and that if you do have a central server Operational Transforms are easier. Am I missing why CRDTs are used here?
I got confused by this comment though:
> To determine when to re-render, “reactive” frameworks like Svelte and Solid track property access using Proxies, whereas “immutable” frameworks like React rely on object identity.
I thought React was just as reactive as all the other JS frameworks, and that the state/setState code would look similar.We also use a hub and spoke model, but we still rely on a central server (pocketbase) for management user flows like authorization and billing.
Obsidian is such a fantastic editor, and it fits so naturally with local-first collaboration.
Change my view!
Jake makes creating a local-first multiplayer app seem so simple.
I'm currently looking into TinyBase to make working with high latency decentralised services more bearable.
Would be cool if there were a better comparison of the different solutions for storage and sync, with features, good use-cases, etc.
I love that it's document stored in S3, and it's probably going to be way cheaper than if hosted elsewhere in a database. Can't wait to try it out soon
Related
My weekend project turned into a 3 years journey
Anthony's note-taking app journey spans 3 years, evolving from a secure Markdown tool to a complex Electron/React project with code execution capabilities. Facing challenges in store publishing, he prioritizes user feedback and simplicity, opting for a custom online deployment solution.
Software Possession for Personal Use
Users are frustrated with the shift from desktop to cloud software, sacrificing privacy and control. Alternatives like local-first and personal software are advocated for tailored, user-centric solutions.
Software possession for personal use
The article highlights user frustrations with cloud software, advocating for local-first and personal software to regain privacy and control. It emphasizes simplicity and accessibility in user-centric software development.
How we built Townie – an app that generates fullstack apps
Townie is a beta app that generates full-stack applications using large language models, simplifying software development for non-programmers with instant deployment and features like code editing and multiple application generation.
Mapping with Leaflet
Raymond Camden highlights the Leaflet JavaScript library for mapping, noting its simplicity, quick setup, and flexibility for integrating data sources, while emphasizing the utility of GeoJSON for mapping data.