Server rendering and SEO
Public pages arrive as complete HTML, so search engines and link previews see real content and users see it sooner. Static generation serves pages that rarely change straight from a CDN.
React is the most widely used library for building interactive web interfaces, and Next.js is the framework that adds routing, server rendering and a production build around it. Together they are BBR’s default for web applications and SaaS front ends. For some sites they are more machinery than the job needs, and we say which.
React handles the interface as a tree of components. Next.js decides where and when each page is rendered: at build time, on the server per request, or in the browser.
Public pages arrive as complete HTML, so search engines and link previews see real content and users see it sooner. Static generation serves pages that rarely change straight from a CDN.
Typed components, typed API calls and typed forms. Errors appear in the editor instead of in production, and the code explains itself to whoever maintains it next.
Buttons, inputs, tables, dialogs and layouts built once as accessible, reusable components, usually with Tailwind CSS. New screens are assembled rather than designed from zero each time.
Marketing pages, documentation, the logged-in application and light server endpoints can share a repository, a design system and a deployment.
JavaScript and TypeScript with React and Next.js are part of BBR’s core stack, alongside Tailwind for styling, Node.js and PostgreSQL on the back end, and Docker for deployment to a client’s own VPS or cloud account. This is what we propose by default for web application and SaaS projects.
The reasons are practical. React has the largest hiring pool of any front-end technology, so a team you hire later is likely to know it. Next.js is widely adopted and well documented, so the project structure is familiar to engineers who have never seen your code. React knowledge also carries over to mobile through React Native.
Not everything BBR ships uses React. Grow.io, our published Android game, is an HTML5 canvas game written in vanilla JavaScript and wrapped with Capacitor, because a component framework adds nothing to a canvas game. We mention it because it illustrates the point of the next section: the stack should follow the product.
React is a tool for complex interactive interfaces. Used on a site with none, it adds build tooling, JavaScript weight and maintenance with no benefit.
| Option | Strength | Trade-off | Choose it when |
|---|---|---|---|
| Next.js (React) | Server rendering, static generation and app in one; very large community | More concepts to learn; the framework changes quickly between major versions | Public pages and an application share a product |
| React single-page app (e.g. Vite) | Simple mental model; static hosting | No server rendering; weak for SEO | Everything is behind a login |
| Vue / Nuxt | Gentle learning curve; comparable capabilities | Smaller hiring pool in most markets; no React Native equivalent of the same maturity | Your team already works in Vue |
| Svelte / SvelteKit | Small bundles, little boilerplate | Smaller library and hiring pool | A performance-sensitive project with a team that knows it |
| Angular | Complete, opinionated framework; common in large enterprises | Heavier; less suited to content sites | An enterprise team standardized on it |
| Server-rendered framework (Rails, Laravel, Django) with light JavaScript | Very productive for form-and-table applications; one codebase | Rich client-side interaction takes more effort | A CRUD-heavy product with a small team in that language |
| Static site generator | Fastest, cheapest, most secure for content | Not for applications | A content or marketing site |
BBR builds with the first two rows. The others are listed so the comparison is fair; if one of them is the right answer for your project, you should work with a team that specializes in it. For choosing a stack as a whole, see our guides to the SaaS tech stack and the stack for an MVP.
If the whole application sits behind a login and search engines never see it, a client-side React app built with a tool such as Vite is simpler and works well. Next.js earns its place when public pages need to rank and load fast, when you want server rendering or static generation, or when you would like marketing pages, the app and light API routes in one codebase.
It removes the main technical obstacle. Pages are rendered to HTML on the server or at build time, so crawlers receive complete content without executing JavaScript, and metadata, canonical URLs, sitemaps and structured data can be controlled per page. Ranking still depends on the content and the site's authority. A framework cannot supply those.
No. Vercel develops Next.js and offers the most convenient hosting for it, but a Next.js app runs as a standard Node.js server and can be deployed in a Docker container to a VPS or any major cloud. A few platform-specific conveniences need alternatives when self-hosting. We raise that at the start so the hosting choice is deliberate.
Yes. BBR can join or take over existing codebases. We start with a short review of structure, dependencies, tests and build setup and share the findings before quoting, so you know what state the code is in.
Types catch a class of errors before the code runs, make refactoring safer, and document the shape of data for the next engineer. When the back end is also TypeScript, request and response types can be shared so the two sides cannot drift apart unnoticed. The cost is a little more upfront effort, which is repaid early in any project that lives longer than a few weeks.
Tell us what the product does, who uses it and whether search traffic matters. We will suggest a stack that fits, even if it is a simpler one.
Discuss your web app ↗