Skip to content
Root Element

Custom web application development

Web applications built from the root up

We build web applications for working with a lot of data: tables, dashboards and maps. We write the interface and the server behind it. We also take over existing code and make it safe to change.

<App /><Header /><List /><Button />1280720
Fig. 1 An interface made of components under one root.

Web development

What we build: React and Node.js web applications

  1. 01

    Tables, dashboards and maps

    We build interfaces for large amounts of data: paginated tables with row virtualization, filters kept in the URL, dashboards and map views. Aggregation and filtering run on the server, and the browser renders only the page the user is looking at.

    Stack

    • React
    • TanStack Table
    • TanStack Virtual
    • React Query
    • Google Maps
  2. 02

    Backend, APIs and databases

    We write the server side in Node.js: the API, the data model and the PostgreSQL queries. We also connect other systems, such as accounting software or background file processing.

    Stack

    • Node.js
    • NestJS
    • Fastify
    • Prisma
    • PostgreSQL
  3. 03

    Taking over existing code

    We take over an application that another team or an AI tool built fast, and improve it in small steps as part of regular tasks. We add tests, lint rules and CI that checks types and the build on every change.

    Stack

    • TypeScript
    • Jest
    • Playwright
    • ESLint
    • GitHub Actions
  4. 04

    Accessibility to WCAG

    We make the application work with a keyboard and a screen reader and bring it to WCAG 2.1 AA. Automated axe checks and screenshot tests watch every change, so the look does not shift by accident.

    Stack

    • React
    • Playwright
    • axe-core
nodeGET /apiPOST /api200 OKdbext
Fig. 2 A request from the interface through the API to the database and back.

Process

How we work with code

  1. No rewrites from scratch

    We improve the code bit by bit inside the tasks already in progress. New features keep shipping.

  2. A safety net first

    Before we move any code, we write end-to-end or screenshot tests. They show us when something changes that we did not mean to change.

  3. The server does the heavy lifting

    We aggregate and filter data on the server and load the next page of a table in advance. Dashboard modules load and fail independently, so one slow query does not block the whole page.

Experience

Applications we have worked on

We don't name clients. Each entry gives the type of product and our work on it.

  1. 01

    911 call analytics, US

    The analytics module of a 911 platform: large data tables with server-side aggregation and row virtualization, dashboards and map views. One page built end to end, from the Postgres and Databricks queries to the interface.

    Stack

    • React
    • TypeScript
    • Google Maps
    • PostgreSQL
    • Databricks
  2. 02

    Legal e‑billing, US

    Full stack on Next.js, NestJS and PostgreSQL. We took over the AI assistant: its tools run as the signed-in user and load only when the model asks for them, which cut the fixed context per request by an estimated 60%. Also unit tests and CI for the web app.

    Stack

    • Next.js
    • NestJS
    • PostgreSQL
    • Vercel AI SDK
    • Gemini
  3. 03

    Enterprise headless CMS

    Accessibility of the whole product to WCAG 2.1 AA, as part of a team of frontend engineers, with axe checks and visual tests in Playwright.

    Stack

    • React
    • Playwright
    • axe-core
  4. 04

    Grammar-checking SaaS

    Most of the application, backend included: an API on Fastify, Prisma and PostgreSQL, a Crawlee crawler, and checks routed by language to LanguageTool or GPT-4o-mini.

    Stack

    • Fastify
    • Prisma
    • PostgreSQL
    • Crawlee
  5. 05

    Pharmatech

    A new React frontend structure, code moved over in small steps, and end-to-end tests.

    Stack

    • React
    • TypeScript

Frequently asked questions

Can you take over an app another team or an AI tool wrote?

Yes. We take over an application that another team or an AI tool built fast, and improve it in small steps as part of regular tasks. We add tests, lint rules and CI that checks types and the build on every change.

Will you rewrite the application from scratch?

No. We improve the code bit by bit inside the tasks already in progress, so new features keep shipping. Before we move any code, we write end-to-end or screenshot tests that show us when something changes that we did not mean to change.

Which technologies do you build with?

We build interfaces in React and the server side in Node.js with NestJS or Fastify, with data in PostgreSQL through Prisma. For large tables we use TanStack Table and TanStack Virtual, and we test with Jest and Playwright.

Can you bring our application up to WCAG?

Yes. We make the application work with a keyboard and a screen reader and bring it to WCAG 2.1 AA. Automated axe checks and screenshot tests watch every change, so the look does not shift by accident.

Technologies

Interface
React, TanStack Table, TanStack Virtual, React Query, Google Maps
Server and data
Node.js, NestJS, Fastify, Prisma, PostgreSQL
Quality and tests
TypeScript, Jest, Playwright, ESLint, GitHub Actions, axe-core

We also work on AI integration for applications and Shopify development.

Contact

Let's talk about your application

Write to us, tell us what the application does and what needs to change, and we will agree on the next step.

What to put in the message

  • What you want to build or change.
  • The systems and data you already have.
  • Constraints, such as a deadline and who will maintain it.
Write to us