Apps
CivicaPR
Puerto Rico's civic and legislative record is public but not navigable.
- stack
- Next.js · Supabase · Stripe · Vercel
- verified
- 2026-08-19
Live, trademarked, and taking payment through Stripe. The record it indexes was already public — the work is making it something a person can actually move through.
What the caching bought
The directory hubs were reading 58,500 rows per request and rendering the whole set to show a page of it. They now read roughly 975, and the business-directory route went from about 5.0 seconds to 0.4.
The number that mattered more was not the latency but the sharing: under a probe of 24 concurrent requests, all 24 hit one cache entry rather than 24 separate renders. That is the difference between a cache that helps a single user and one that holds up under traffic, and it is not visible from a single-request timing.
How those were measured, so you can weigh them: row counts from the query plan, timings from repeated requests against the production deployment on 2026-08-23, and the concurrency figure from a 24-way parallel probe against a cold cache entry on the same day. They are R21's own measurements on a private repository — this entry links a live URL and no benchmark artifact, so treat them as reported rather than independently reproducible. The site's build guards enforce attribution and link-checking; they cannot verify a number R21 measured about its own system, and it would be dishonest to let the surrounding rigour imply otherwise.
The failure worth naming
A scheduled sync silently truncated for days while every status check stayed green. It sorted newest-first and re-fetched the same newest page on every run, so each run genuinely succeeded — it just never advanced. The job reported success, the row count grew slowly enough to look plausible, and nothing in the monitoring was asking the one question that would have caught it.
Fixed by resuming from a stored watermark rather than re-sorting, which makes "where did the last run stop" a value on disk instead of an assumption about ordering. The general lesson is the one R21 keeps relearning: a green check proves a run finished, not that it did anything.