Useful comparison, especially the point that the pipeline matters more than the database. One thing worth adding for anyone copying this setup: the "Keeping the index in sync" step gets much cheaper if you store a content hash per chunk as payload/metadata. On each deploy, re-chunk the pages, hash each chunk (heading path + text), and only upsert chunks whose hash changed, then delete IDs that no longer exist. Using a deterministic ID like hash(url + heading) means re-runs are idempotent, so you never end up with duplicate vectors. On Upstash that also keeps you far below the daily write cap, since a typical edit touches two or three chunks rather than the whole site. I'd also log every question that returns a low top score; that list is the best guide to which pages need rewriting or extra chunks.