Skip to content
HANA PlatformHANARAD

Web & backend stack

A Next.js development company built on one proven stack

Next.js, NestJS, TypeScript and PostgreSQL — the same modern, open-source stack on every web project, so your software is fast, secure and maintainable by any engineer in our pool.

Overview

Why a Next.js development company should standardize

Most software problems that hurt a business — slow releases, fragile code, security gaps, nobody able to take over — come from inconsistency, not from a lack of clever technology. That is why every web and backend project we build uses the same carefully chosen stack and follows the same written engineering standards.

Each choice below is mainstream, actively maintained and backed by a large ecosystem. Together they give you TypeScript end-to-end, server-side rendering for search visibility, a structured backend for complex business rules and a database you can trust with years of data. And because 100+ developers in our pool are trained on exactly this stack, your project never depends on a single person.

The stack

Twelve layers, one deliberate choice each

What we use at every layer of a web application, and the one-line reason we chose it.

  • Monorepo

    Technology
    pnpm workspaces + Turborepo
    Why we chose it
    Web, API and shared code live in one repository, so a change to a data type is updated everywhere in one reviewed step, with cached, fast builds.
  • Frontend

    Technology
    Next.js (App Router) + TypeScript (strict)
    Why we chose it
    Server rendering gives fast, search-friendly pages, and strict typing catches mistakes before they reach your users.
  • UI

    Technology
    Tailwind CSS + shadcn/ui
    Why we chose it
    Accessible, consistent components that live in your codebase — no heavyweight UI kit to fight, license or replace later.
  • Client data

    Technology
    TanStack Query
    Why we chose it
    Caching, retries and background refresh handled the same way on every screen, so the app feels fast and data stays fresh.
  • Forms

    Technology
    React Hook Form + Zod
    Why we chose it
    Responsive forms that use the same validation rules the server enforces, so users get instant and accurate feedback.
  • Backend

    Technology
    NestJS + TypeScript (strict)
    Why we chose it
    Modules, dependency injection and guards keep large codebases organised and make security checks hard to forget.
  • Database

    Technology
    PostgreSQL + Prisma
    Why we chose it
    A proven relational database with type-safe, parameterized queries and versioned migrations for every schema change.
  • Cache / jobs

    Technology
    Redis + BullMQ
    Why we chose it
    Added only when there is a real need: shared sessions, caching with a clear expiry, and background jobs for emails, reports and imports.
  • File storage

    Technology
    S3-compatible storage
    Why we chose it
    Durable storage with pre-signed uploads, type and size checks, and user files never served from the application's own domain.
  • API

    Technology
    REST, versioned /v1, OpenAPI generated from code
    Why we chose it
    Predictable, documented endpoints and a generated client, so web and mobile apps never drift out of step with the API.
  • Testing

    Technology
    Vitest, Supertest, Playwright
    Why we chose it
    Unit, API and end-to-end tests for critical journeys run automatically in CI on every change.
  • Logging / errors

    Technology
    pino, Sentry
    Why we chose it
    Structured logs with a request ID on every line and real-time error alerts, so problems are found and fixed quickly.

Architecture

Simple to run today, ready to scale tomorrow

Every application follows the same architecture, so any developer can open any project and know where things live.

  • Modular monolith

    One NestJS application split into clear feature modules. You get simple deployment and debugging today, and clean seams to split out a module later if a real need appears — no premature microservices.

  • Stateless services

    No in-memory sessions or state. Anything shared lives in PostgreSQL or Redis, so every service can run as multiple instances and scale horizontally from day one.

  • One source of truth for types

    Request and response schemas are Zod schemas in a shared package. The API generates its OpenAPI specification from code and the frontend uses a generated client, so types never disagree.

  • Layered dependencies

    Controllers → services → repositories/Prisma. Controllers never touch the database and business logic never sits in the UI, which keeps code testable and easy for any developer to navigate.

Layered architecture of the HANARAD web and backend stackA Next.js web app, mobile apps and integrations call one versioned REST API. The API is a NestJS modular monolith, running as several stateless instances, where controllers call services and services call repositories built on Prisma. Data lives in PostgreSQL, with Redis and BullMQ for caching and background jobs. Shared Zod schemas are the single source of truth for types from the clients down to the controllers.Next.js web appMobile appsIntegrationsREST API · /v1 · OpenAPINestJS · modular monolith× N statelessUsersOrdersBillingControllersZod validation · RBAC guardsServicesAll business logic lives hereRepositories · PrismaParameterized queries onlyPostgreSQLMigrations-only schema changesRedis + BullMQCache · background jobsShared Zod schemas · one source of truthDependencies point inward: controllers → services → repositories

Security by default

Standards that are enforced, not optional

Server-side Zod validation on every input, RBAC guards with record-level checks on every endpoint, argon2 password hashing, secure cookie sessions, rate limiting, Helmet and a CORS allowlist, and secrets only from validated environment variables.

FAQ

Web and backend stack: frequently asked questions

Planning a web application?

Tell us what you need to build. In a free 30-minute consultation we will outline the architecture, the risks and a realistic delivery plan.