Skip to main content

Node.js development

TypeScript from the browser to the job queue.

Acasa Labs is a Node.js development company. We build APIs, workers, and job systems in TypeScript on Node, often in the same codebase as a Next.js frontend. Kraftr's AI catalog studio runs on it: seven BullMQ queues on Redis, workers that report a heartbeat every 10 seconds, and Postgres through Drizzle.

The problem

One language everywhere is great, until the queue backs up.

A Node backend next to a Next.js app means one language, shared types, and one team. The trouble shows up with work that does not fit in a request: image generation, batch jobs, calls to slow third-party APIs. Run it inside the web server and one busy hour takes the site down with it. Run it on a queue without heartbeats or retries and jobs disappear without anyone noticing until a customer asks. The fix is a job system that expects failure from the first day.

What we build with Node.js

  1. 01

    APIs in TypeScript

    REST endpoints and server actions with types shared between server and client, and input validated with Zod before it reaches your logic.

  2. 02

    Job queues and workers

    BullMQ on Redis, a queue for each kind of work, retries with backoff, and workers that report they are alive so a stuck one is visible.

  3. 03

    Provider adapters

    AI models, storage, email, and payments behind small interfaces, so changing a vendor is a config change and not a rewrite.

  4. 04

    Billing and webhooks

    Payment webhooks verified and processed once, credit packs and balances, and plans priced in more than one currency.

From production

How Kraftr's Node backend is built.

  • A queue per kind of work

    Kraftr

    Kraftr runs seven BullMQ queues on Redis, for generation, model builds, scene builds, jewelry libraries, video, and batch polling. Each kind of work has its own line, instead of one queue where a long video waits in front of a single image.

  • Workers that say they are alive

    Kraftr

    Every worker writes a heartbeat every 10 seconds, and the admin shows a liveness view built from them. A stuck worker shows up on a screen before it shows up in a support ticket.

  • Vendors behind config

    Kraftr

    Image generation providers and storage (Google Cloud Storage, Cloudflare R2, or local disk) are pluggable, so either one can be swapped by config.

  • URLs that caches can keep

    Kraftr

    Signed image URLs stay byte-identical within a day, so browsers and CDNs actually cache them instead of fetching the same 4K image again on every visit.

  • A cheaper path for big drops

    Kraftr

    Brands can queue a whole drop on an overnight batch path that runs at half the credit cost and lands within a day, polled by a queue of its own.

Honest trade-offs

When we would not pick Node

If the backend is mostly AI, data, or computer vision, Python has the libraries, and we use FastAPI: NoteTube's AI service and Acasa Sentinel's video pipeline are both Python. If the product is records, roles, and an admin, Django gives you more on day one. And for small endpoints that should run close to users, Cloudflare Workers can replace a server entirely. NoteTube's remote MCP server runs there.

What we reach for

  • Node.js, TypeScript
  • BullMQ, Redis
  • Postgres, Drizzle ORM
  • Next.js server actions
  • Zod
  • Cloudflare R2, Google Cloud Storage
  • Razorpay, Resend

Proof

Shipped, not pitched.

  1. 01Our product

    Kraftr

    One flat-lay photo becomes catalog-ready 4K on-model imagery.

    An AI catalog studio for fashion and jewelry brands. Upload one flat-lay or hanger shot per SKU and get on-model imagery at up to 4K, in ten aspect ratios, sized for Amazon, Myntra, Flipkart, and Shopify.

    Web · iOS · Android

Questions

Node.js questions we get asked.

Node.js or Python for our backend?

Node when your team writes TypeScript, the frontend is Next.js, and the backend is mostly APIs, jobs, and integrations. Python when it is mostly AI, data, or vision work. We run both in production and will say which fits your product.

How do you run background jobs in Node?

On BullMQ and Redis, with a queue for each kind of work, retries with backoff, and a heartbeat from every worker. Kraftr runs seven queues this way, with a liveness view in its admin.

Can you take over our Express or NestJS codebase?

Yes. We start with an audit of the structure, dependencies, tests, and deployment, fix what is risky, and then ship features. You get the written findings first.

Do you write Node in TypeScript?

Yes, on every project. Types shared between the API and the frontend catch a whole class of bugs before they ship, and they make the code easier for your team to pick up later.

Where do you deploy Node backends?

In your cloud account: containers on Google Cloud Run or a similar service for APIs and workers, with managed Redis and Postgres, or Cloudflare Workers for small edge endpoints.

Can Node handle AI workloads?

Node is good at running the work around the model: calling providers, queueing jobs, retrying, and storing results. Kraftr's Node backend queues and tracks every generation, while the image models themselves sit behind pluggable providers.

Node.js development

A Node backend that keeps up with the product.

A free 30-minute review of your Node backend or job system, or the one you are planning. You leave with what we would change first.

Book a Node.js review

No pitch deck. You own the code from day one.

contact@acasalabs.com