3 ms·
I've been really happy with CouchDB + PouchDB at https://financier.io https://financier.io You can do unique things like offer a trial period without syncing (
by hardcopy 4y ago
I've been really happy with CouchDB + PouchDB at https://financier.io https://financier.io
You can do unique things like offer a trial period without syncing (database wholly in browser), which allows for ridiculously quick onboarding. And then when the user signs up for a paid plan, you just hook up CouchDB and the data syncs right on over.
The sync mechanism works so damn well. It's really cool how easy it is to implement a Google Docs-like sync mechanism with conflict resolution baked in.
- locustous 4y agoI use this model as well. It is a hidden gem for quickly building an awesome local first web app. I'm really surprised more companies don't pick this stack.
- inportb 4y agoIt works so damn well until it finds itself in a Firefox private window :) PouchDB does have rather expensive adapters that use memory or LocalStorage. Almost twice the size as the base package (minified).
- jbjorge 4y agoI used the stack on a side project. Wrote an adapter for websocket sync and a wrapper for Vue that allowed streaming queries. I really liked it, but the typical pattern of one-db-per-user with internal replication on the server was a bit difficult plan/orchestrate for shared data. I'm patiently waiting for the couchdb PR for document level access control. These days I use supabase with row level security and a Vue-wrapper that can cache queries locally and update the result as the network request finishes. Works as good as pouch + couch (but naturally comes up short for queries that rely on Date.now())
- xyzzy4747 4y agoI also love CouchDB/PouchDB, but it’s quite clunky to configure the security settings on a per user basis, and many times I want to additionally transform the data before bringing it to the client. I also don’t like to be locked into directly blasting a database with requests (sometimes it’s better to use caching). So for those reasons I keep it behind an API layer.