The container CMD ran `npm run start-docker`, i.e. `npm-run-all check-db
update-tracker start-server`. After the one-shot tasks exit, three Node VMs
stay resident for the container lifetime (npm -> npm-run-all -> npm ->
node server.js), each holding tens of MiB of anonymous memory for nothing.
Replace it with a small start script that runs the one-shot steps and then
`exec node server.js`, so the server becomes PID 1 and no launcher wrappers
remain. On a dev 3.2.0 build under realistic load the container RSS dropped
~28% (memory.stat anon 255 MiB -> 183 MiB); migrations still apply and
/api/heartbeat serves normally.
Some database providers, like supabase, provides two URLs to access the database. A main URL behind pgBouncer's for load balancing, and a direct separated URL to perform migrations (running DDL operations), as does not support
advisory locks or multi-statement DDL required by migrations.
Before v3.1.0, adding `directUrl` along with `url` to `prisma/schema.prisma` was enought. Now, I'm making a commit to use direct url when set
12 batch translation scripts covering all language families: East Asian, Romance,
Germanic, Nordic, Slavic, Other European, South/Southeast Asian, Tamil, Sinhala,
Urdu, and Burmese. Remaining untranslated keys are intentional loanwords (URL, UTM,
SMS, etc.) and en-GB which is intentionally identical to en-US.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrate i18n from react-intl to next-intl, eliminating the formatjs
compilation pipeline. Translation files now live as nested JSON in
public/intl/messages/ (single source of truth), removing the duplicated
src/lang/ directory and the copy/compile build steps. The useMessages()
hook API is preserved so all 195+ consumer components are unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a CLI tool to generate realistic analytics data for local development and testing.
Creates two demo websites with varying traffic patterns and realistic user behavior distributions.