
Why we store translations in a JSON column, not a translations table
The shadow-table pattern is the default advice for multilingual content. For a marketing site it costs you a join on every read and buys you almost nothing.

From the team
Practical writing from the engineers and marketers doing the work. Not a content mill, so it is occasional rather than daily.

The shadow-table pattern is the default advice for multilingual content. For a marketing site it costs you a join on every read and buys you almost nothing.

If a component can hardcode a hex value, you do not have a design system. You have a colour palette and some good intentions.

You do not have to choose between a fast site and a good-looking one. You have to choose what renders on the server.

A short, unglamorous list from projects we have shipped, rather than a forecast about the next decade.

A fixed-price discovery that produces a scope, a real estimate and permission to walk away.

App review is not the risky part. Not being able to turn a feature off is.