Stack
The technologies we ship
Each part of the stack has a job. The page is the same shape for every one: what it is, and where it sits in the system we ship.
Next.js
App Router
The product surface. We fix server and client boundaries, caching, and the data that should never reach the browser bundle.
Talk about Next.jsReact
Server and client
Interfaces that hydrate cleanly. State stays where the user needs it, and the server render matches the client.
Talk about ReactNode.js
APIs and workers
HTTP APIs, webhook receivers, and background workers. Retries are explicit, and a slow job does not live inside the request.
Talk about Node.jsNestJS
Node framework
Modular APIs when the service needs a clear boundary: controllers, guards, and queues instead of a single growing file.
Talk about NestJSTypeScript
Strict types
One type for the API, the form, and the database row. The build fails when a field the client sends is not the field the server expects.
Talk about TypeScriptPython
Workers and AI
FastAPI services and workers for reconciliation, retrieval, and AI calls. The web app stays in Next.js. The long job runs here.
Talk about Python.NET
ASP.NET Core
ASP.NET Core when the organization already runs .NET. Policies, background services, and the database stay on the server.
Talk about .NETStrapi
CMS or custom
Strapi when editors need listings, pages, and profiles. A custom CMS when the content model is the product and a generic admin is the wrong shape.
Talk about StrapiPostgreSQL
Relational
The default relational store. Tenant checks, indexes, and a query plan we can read before the page goes live.
Talk about PostgreSQLMySQL
Relational
Relational data for systems that already run MySQL. Schemas, transactions, and the same rule: the UI reads the database, it does not invent a balance.
Talk about MySQLMongoDB
Document
Documents when the record is a document. Access is checked in the query, not only in the screen that renders it.
Talk about MongoDBSupabase
Auth and data
Auth, row-level security, and storage next to PostgreSQL. The service-role key stays on the server.
Talk about Supabase