React and Next.js
Fast websites and web apps in React, Next.js, and TypeScript — with typed data, a well-considered design system, and tests that make change safe.

Tools and frameworks we use
- React 19
- Next.js App Router
- TypeScript
- TanStack Query and Form
- Zod
- Tailwind CSS
- shadcn/ui and Radix
- next-intl
- Redis
- Storybook
- Style Dictionary
- Vitest and Testing Library
- MSW
- Playwright
- Astro
Web development with React and Next.js
A good web app loads quickly, works with a keyboard and a screen reader, and is easy to keep developing. We build with React 19 and the Next.js App Router in TypeScript, using TanStack Query for data fetching, TanStack Form and Zod for forms and validation, and Tailwind CSS with shadcn/ui and Radix for accessible components.
The web frontend of our own open-source project Canary is built with Next.js 16, React 19, and Tailwind CSS 4. At Sector Alarm, we worked in a development organisation with separate teams for iOS, Android, and React, where sharing knowledge across teams was an important part of the work.
Next.js, plain React, or Astro — how we choose a framework
Next.js is not always the right answer. We choose based on what the website or app actually needs to do:
- Next.js when the solution has sign-in, dynamic data, many page types, or a need for strong search visibility. With the App Router and React Server Components, much of the work can render on the server, so less JavaScript is sent to the browser.
- Plain React as a client app when the solution lives behind sign-in, does not need search visibility, and talks to an existing API. A separate server layer then adds more complexity than benefit.
- Astro for content-driven websites where most of the content is static. Pages are fast by default, and React components can still be used where interactivity is needed. This website is built that way.
The boundary between server and client is the most important architectural decision in a Next.js app. We keep client components small and clearly scoped, and let TanStack Query own data that must update in the browser. Whatever the framework, we use the same building blocks — TypeScript, Zod, and a shared design system — so components and the data layer can carry over if the needs change.
Multi-brand websites and design systems
When several brands need their own websites, sharing code pays off. We have built websites where several brands share components, a data layer, and build setup, while each brand keeps its own content, language, and visual identity. Design tokens are pulled from Figma and turned into CSS variables and a Tailwind theme with Style Dictionary, so a design change can be rolled out to every site in a controlled way.
Typical engagements
A new web app or website
We build with the Next.js App Router and React Server Components, with performance, accessibility, and search visibility in place from the first version.
Several brands from one codebase
We build websites where several brands share components and logic, while content, language, and visual identity are managed per brand.
Design system and component library
We pull design tokens from Figma with Style Dictionary and build components in Storybook that designers and developers can both work from.
Senior frontend capacity in your team
Experienced developers who help the team with architecture, data handling, testing, and upgrades to new versions of React and Next.js.
Relevant experience
Projects and open-source work where the technology has been used in practice.

Canary: alerts when bitcoin in cold storage moves
We built Canary, a self-hostable and hosted bitcoin monitoring service with a Rust backend and a Next.js frontend, sending alerts via ntfy, Nostr, email, and SMS.

Enogtjue: bitcoin trading volume in Norway, collected every day
We built the platform behind enogtjue.no: Go services that collect and aggregate trading data from Norwegian bitcoin exchanges, a Fiber API, PostgreSQL, and a bilingual Next.js website.
Open source
- canary
Bitcoin monitoring with notifications; Rust backend and Next.js frontend.
Frequently asked questions
When do you choose Next.js, and when something else?
Next.js suits web apps and websites with dynamic content, sign-in, or many pages. For simple, content-driven sites, Astro can be a lighter choice — this website is built with Astro.
Can you upgrade an existing React app?
Yes. We map dependencies and risks, upgrade in small steps, and make sure tests cover the most important flows before we change anything.
How do you ensure quality?
We use TypeScript and Zod for typed data, Vitest and Testing Library for components, MSW to mock APIs, and Playwright for end-to-end tests.
Do you help with multilingual websites?
Yes. We use next-intl for translations and localised routes, and set up metadata and links so search engines understand the language versions.
Can you work with our existing design system?
Yes. We can build on an existing design system, or set up tokens and components from Figma so design and code stay in step.
Related technologies
Part of the service: Web and app development
iOS development
Native iOS and tvOS apps in Swift and SwiftUI, from new products to the continued development of established apps with millions of users.
Read moreAndroid development
Native Android apps in Kotlin and Jetpack Compose, from new products to the continued development of established apps and multi-brand apps from one codebase.
Read moreNeed help with React and Next.js?
Tell us briefly about the product, the team, or the system. We will respond with a practical suggestion for the next step — a complete delivery, senior capacity in your team, or technical advice.
- Phone
- +47 920 50 946
- Location
- Oslo, Norway