1b. Big seeds — batched writes (2.5k entries per chunk)
Streaming build + batched update(). Each chunk ~2.5k entries.
Mobile-crash boundary confirmed at 1.75M ✓ / 2M ✗.
1c. Stress sizes
Heads up:
Seed times: 3M ≈ 8 min, 5M ≈ 14 min, 7M ≈ 19 min (with 2.5k batch).
Storage: 3M ≈ 384 MB, 5M ≈ 640 MB, 7M ≈ 896 MB (near 1 GB free-tier cap).
Mobile Safari crashes during Load All at 2M+.
2. Load corpus from RTDB (cold boot)
No corpus loaded
Single get() on /snagFeed. This simulates the
first-time-ever load on a new device.
2b. IndexedDB persistence (warm boot)
IDB corpus: not checked
Save: writes cachedCorpus to the
snag-cache IndexedDB database as a single record.
Load: reads from IDB into cachedCorpus without
touching RTDB. This is the warm-boot measurement — what
inspectors experience on every visit after the first.
Clear corpus: deletes the snag-cache database
only (leaves Firebase's internal IDBs alone).
3. Run searches (local filter, zero network)
4. Cleanup
Clear All Snags: wipes /snagFeed on RTDB. Chunked. Slow at 1M+. Clear ALL IndexedDB: deletes every IDB database on this origin
including Firebase Auth and the corpus cache. Page reload recommended. Storage Report: full breakdown to log.
Ready. Open browser DevTools console for parallel logs.