Node.js backend development

Long-running APIs with NestJS, serverless functions on AWS Lambda: the server side of our live products is written in TypeScript.

We build Node.js back ends with NestJS, Express and AWS Lambda. The Hippotenus API and the Rigel and LydiaVault servers run on it.

Last updated:

What we have built with it

All of them are live; store pages and details are on the Products page.

Hippotenus

Platform for education institutions

NestJS and Prisma on PostgreSQL; messaging and notifications over Socket.IO, weekly reports and calendar sync on Redis queues, payments through iyzico.

See the product

Rigel

AI video app

TypeScript functions on AWS Lambda with MongoDB; notifications and emails go out through SQS queues with dead-letter queues.

See the product

LydiaVault

AI budgeting coach

TypeScript functions on AWS Lambda with MongoDB; the bank account connection and the OpenAI-powered budgeting assistant live on this server.

See the product

SoruVerse

Campus Q&A and community app

Express on Firebase Cloud Functions; files go to Cloudflare R2 through time-limited signed links.

See the product

Where Node.js stands out

Node.js runs JavaScript and TypeScript on the server. Its strength is handling many connections at once without blocking: while a database query, a payment provider or an email service is answering, it keeps serving other requests. That makes it a natural choice for APIs, live messaging and integration services that talk to other systems. We write the web and mobile side in TypeScript too, so the server speaks the same language as its clients.

Where Node.js fits well

  • You need a REST API that a web dashboard and a mobile app both talk to
  • There will be messaging, live notifications or screens that update in real time
  • You need integrations with many outside services such as payments, SMS, calendars and email
  • You want one team to run the front end and the back end in one language

Where we would suggest another language

  • The core of the work is heavy data processing, document parsing or scientific computing (we suggest Python here)
  • Your company’s infrastructure and team are built on .NET
  • Long, CPU-heavy calculations have to happen inside the request

NestJS or serverless functions

We use Node.js in two ways. For a platform like Hippotenus, with many modules, constant uptime and live connections, we write a single API with NestJS. In Rigel and LydiaVault each endpoint is its own function on AWS Lambda, with the infrastructure defined as code in an AWS SAM template. In SoruVerse, the few server tasks the mobile app needs sit in a small Express app on Firebase Cloud Functions.

NestJS APIAWS Lambda (SAM)Firebase Cloud Functions
How it runsOne long-running serverFunctions that run when a request arrivesFunctions tied to Firebase events and requests
Real-time connectionsDirectly with Socket.IOThrough queues and schedulesThrough Firestore triggers
Good fit forMulti-module platforms, one API for dashboard and mobileMobile app back ends, uneven trafficServer tasks added to apps that already use Firebase
Our exampleHippotenusRigel, LydiaVaultSoruVerse

Inside the Hippotenus API

The Hippotenus server is a NestJS application that runs everything from student tracking to payments. On an education platform much of the work happens outside the request, so we paid particular attention to background jobs and live connections:

  • Messaging runs on its own Socket.IO channel: sending, the “typing” indicator and read receipts arrive instantly, and the connection is verified with the same JWT key as the HTTP side.
  • Weekly report emails, Google Calendar sync and mobile notifications are processed in Bull queues on Redis, so the user’s request never waits for them.
  • Scheduled tasks prepare the weekly reports, update study plans and, after a waiting period, anonymise the personal data of users who deleted their accounts.
  • A middleware layer that adds the institution ID to Prisma queries was written to keep each institution’s data apart from the others.
  • Payments and subscriptions are taken through iyzico; the payment provider sits behind an interface, so the business rules do not depend on it.
  • The API’s response format and auth types live in shared TypeScript packages, which the mobile app we are developing uses.

We built a similar setup in a client project: in a learning management system written with NestJS and MongoDB, live quizzes and project boards run on separate channels of a single Socket.IO server, and notifications reach the browser through web push.

What we use alongside Node.js

NestJS

Modules, dependency injection, access control and validation come built in. We wrote the Hippotenus API and a client project’s server with it.

Prisma

Type-safe database access and migrations for schema changes. We use it with PostgreSQL in Hippotenus.

Socket.IO

For instant messaging, live notifications and shared screens. We use it in Hippotenus and in a client project.

Redis and Bull

To run work such as email, calendar sync and notifications in a queue, outside the request. We use it in Hippotenus.

AWS Lambda and SAM

Serverless functions, SQS queues and scheduled tasks, all defined in one template. We use it in Rigel and LydiaVault.

Swagger / OpenAPI

Every endpoint of the API is documented and can be tried from the browser. We use it in the Hippotenus API.

How a Node.js project runs

  1. 01

    Free scoping call

    30 min

    We talk about which apps the server will serve, which systems it has to talk to and the budget you have in mind.

  2. 02

    Written scope and quote

    We write down the data model, the endpoints, the integrations and the choice between NestJS and a serverless setup.

  3. 03

    Weekly releases

    Every week we deliver a working build; you can try the endpoints yourself through the API documentation.

  4. 04

    Testing and release

    A senior QA tests the build before release; then we take the server live.

  5. 05

    The 30 days after launch

    30 days

    We fix the bugs that surface in this period free of charge; after that you can continue with monthly maintenance.

Timelines and budget ranges are published on our web application development and pricing pages; this page relies on the same figures.

Questions about Node.js

Why NestJS? Isn’t Express enough?

NestJS already runs on Express; it adds a module structure, access control, input validation and API documentation on top. On a platform with many modules that order keeps the code readable. For a small service of a few endpoints, plain Express is enough, as in SoruVerse.

Can Node.js handle heavy workloads?

It is very efficient at work that is mostly waiting, such as database and outside-service calls. We do not run long jobs, or anything that would keep the user waiting, inside the request: in Hippotenus they go to a Redis queue, and in Rigel notifications and emails go through SQS. For projects centred on document and data processing we prefer Python.

Do you provide API documentation?

Yes. As in the Hippotenus API, every endpoint is documented with OpenAPI and can be tried from the browser; that document is enough for another team or system to connect.

What do I keep when the project ends?

A perpetual licence to use the software, and its documentation. If you want the source code handed over to you, the extra fee is stated separately in the quote.

Related services

Web applicationCustom softwareERP, CRM & integrationMVP
Contact

Let’s talk about your Node.js back end

In a free 30-minute scoping call we work out the server’s scope and the choice between NestJS and a serverless setup together.