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 productAll of them are live; store pages and details are on the Products page.
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 productAI video app
TypeScript functions on AWS Lambda with MongoDB; notifications and emails go out through SQS queues with dead-letter queues.
See the productAI 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 productCampus Q&A and community app
Express on Firebase Cloud Functions; files go to Cloudflare R2 through time-limited signed links.
See the productNode.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.
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 API | AWS Lambda (SAM) | Firebase Cloud Functions | |
|---|---|---|---|
| How it runs | One long-running server | Functions that run when a request arrives | Functions tied to Firebase events and requests |
| Real-time connections | Directly with Socket.IO | Through queues and schedules | Through Firestore triggers |
| Good fit for | Multi-module platforms, one API for dashboard and mobile | Mobile app back ends, uneven traffic | Server tasks added to apps that already use Firebase |
| Our example | Hippotenus | Rigel, LydiaVault | SoruVerse |
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:
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.
Modules, dependency injection, access control and validation come built in. We wrote the Hippotenus API and a client project’s server with it.
Type-safe database access and migrations for schema changes. We use it with PostgreSQL in Hippotenus.
For instant messaging, live notifications and shared screens. We use it in Hippotenus and in a client project.
To run work such as email, calendar sync and notifications in a queue, outside the request. We use it in Hippotenus.
Serverless functions, SQS queues and scheduled tasks, all defined in one template. We use it in Rigel and LydiaVault.
Every endpoint of the API is documented and can be tried from the browser. We use it in the Hippotenus API.
We talk about which apps the server will serve, which systems it has to talk to and the budget you have in mind.
We write down the data model, the endpoints, the integrations and the choice between NestJS and a serverless setup.
Every week we deliver a working build; you can try the endpoints yourself through the API documentation.
A senior QA tests the build before release; then we take the server live.
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.
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.
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.
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.
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.
In a free 30-minute scoping call we work out the server’s scope and the choice between NestJS and a serverless setup together.