I shipped a small side project this year: sweepbase.net , a comparison site for crypto debit and credit cards. 139 cards, no DB, the whole dataset is one CSV file in the repo.
Here are the things I'd actually tell another dev about it.
CSV beats a DB more often than people admit
The whole catalog is data.csv , parsed at boot, validated with Zod. Reads outnumber writes by something like 10,000 to 1, and most "writes" are me fixing a number once a month.
For that load profile, a database is theatre. CSV in a public repo gives me:
One source of truth, version controlled
Diff-able commits when I change a number
No admin UI to build
An auditable timeline anybody can inspect
When somebody asks "why did you change Crypto.com APY", I link the commit. That answer is more reassuring than any dashboard.
Zod earns its rent
Zod's schema does double duty: it validates at boot, and it generates the TypeScript type via z.infer .…