40M
Migrating 40 million comments without losing one
A full migration of the comment platform behind a high-traffic publisher, with instant rollback.
- typescript
- nextjs
- kubernetes
- stripe
Next.js is worth choosing for one reason above the rest: it makes the default answer server-rendered HTML, and it makes shipping JavaScript an explicit decision rather than an accident. Everything else about it follows from that.
The decision that matters on any real project is where each piece of work
lives. Data access and business rules belong on the server, where they cannot
be inspected or bypassed from a console and where a second client cannot drift
from the first. Interactivity is marked as client code and kept to small
islands, because a component marked client for the sake of one useState
turns every module it imports into shipped bytes.
The rest is disciplined routine. Static rendering where the content allows it and explicit revalidation where it does not. Images served in the format and size the device asks for. Canonicals, hreflang and sitemaps generated from a single route definition, so the metadata cannot contradict the routing. A performance budget enforced in CI, so the improvement survives the next feature.
The framework moves quickly, and that is a real cost: conventions that were correct two releases ago are not always correct now. Keeping up with it is part of the work, and it is why the documentation shipped with the installed version is the reference used here rather than whatever was true last year.
The part that shows in production is not the rendering, it is where the rules live. A price calculated in the browser is a suggestion anyone can rewrite from the developer tools; the same calculation performed on the server is a rule. Next.js makes it easy to put each thing in the right place, but it does not make the decision: what gets resolved before the HTML is sent, and what genuinely needs JavaScript in the client, is still a design call. Drawn in the wrong place it produces the worst of both, a page that is slow to paint and can be bypassed anyway.
The specifics
40M
A full migration of the comment platform behind a high-traffic publisher, with instant rollback.
30,000
A production training game preparing an entire workforce on a new product, 13 days before it went public.
Native
A native application for Windows, macOS and Linux from a single codebase, with the tax data on the user machine rather than on a server.
30,000
Search, communications and peer recognition inside a large employer internal platform.
24M
Frontend, performance and production reliability on a real-time pricing platform.
Stripe
A SaaS ticketing platform built end to end, with Stripe payments and seat allocation that holds under concurrency.
How we work
The same process on a three-week engagement and on a two-year platform.
One session to understand the business process, not to show templates. We leave with priorities and a phased price.
Data model, integrations and a performance budget before the first screen is written.
Weekly releases to an environment you can visit. What gets approved gets deployed, it does not pile up.
Monitoring, verified backups and deployments anyone on the team can run.
No. This site runs as a Node application under Passenger on a standard cPanel server, using the standalone output Next produces for exactly that purpose. Vercel makes deployment easier and is a reasonable choice on many projects, but assuming it ties a project to one provider without anyone having decided to.
Often, yes. For five pages that rarely change, a static site generator is simpler to keep alive. Next.js starts paying for itself when there is dynamic content, more than one language, forms that touch the server, or genuinely interactive parts sitting alongside pages that must stay fast and crawlable.
As scoped work, not as a one-line change. The framework moves quickly and conventions that were correct two releases ago are not always correct now, so the reference used here is the documentation shipped with the installed version rather than whatever was true last year.
Next step
We reply within one business day with a phased scope proposal, or with the reason we are not the right studio for it.