For Cursor devs

You shipped the features.
The agent skipped the ops layer.

With Cursor, the feature velocity is real: routes, screens, and CRUD land as fast as you can describe them. What doesn't land is the operational substrate — idempotent webhook handling, queues with retries, revocable sessions, observability, an E2E gate — because agents generate the average of public code, and the average includes the bugs. useDeploy is a DDD backend where that layer is already engineered, covered by 450+ tests, and lint-enforced so your agent keeps shipping fast without eroding the foundation.

Agents average the training set — and the average has known bugs

Security reviews of agent-generated SaaS code keep finding the same three failures: sessions that survive a password change — you reset your password, but the old login token still works — Stripe webhook handlers that aren't idempotent, so a provider resending the same event charges or credits the user twice, and row-level security gaps leaking data across users. Zoom out and it compounds: Uplevel's research measured developers using AI assistants shipping roughly 41% more bugs, and the arc is familiar — month one feels electric; by month six teams are slower than before adopting AI tooling. The fix isn't prompting harder. It's giving the agent a codebase where the dangerous invariants are already encoded — in types, lint rules, and tests it can't merge past.

The operational layer your agent never built right

Idempotent payment webhooks

Deliveries deduplicated by externalOrderId before any state mutation — the double-charge class of bug is closed structurally, not by handler discipline.

Durable side effects

An outbox event bus persists effects before executing them; a crash mid-handler means retry, not silent loss.

Queues with real semantics

BullMQ with schedulers and retries — not a setTimeout buried in a route handler.

Sessions that die on password change

The exact bug agents keep regenerating is handled in the auth layer, with revocation wired through.

Tenant isolation below the use case

Org-scoped repositories plus a Prisma query guard: cross-org reads 404 at the data layer even if a controller forgets to check.

Observability as config, not a sprint

Structured Pino logs, OpenTelemetry, Sentry, and a Prometheus /metrics endpoint — each a no-op until an env var enables it.

The harness your agent runs inside

The repo is built as what the harness-engineering discourse calls “an execution environment for agents” (zeyu2001 on dev.to): DDD layer boundaries enforced by ESLint — domain can't import express or Prisma — an OpenAPI contract regenerated from the server with a CI freshness gate, and a Playwright golden path that walks register → org → invite → billing in a real browser on every change. Your agent iterates freely; the harness rejects anything that would erode the architecture.

CI — main gate
 1  $ bun run lint          # DDD boundaries enforced
 2  $ bun run typecheck     # end-to-end typed contract
 3  $ bun run test          # 450+ unit + integration
 4  $ bun run test:e2e      # golden path, real browser
 5  ✓ api-types-fresh: openapi.json matches server
 6  ✓ all gates passed — merge allowed

Engineered once, so the agent doesn't have to guess

Bounded contexts, enforced

iam, tenancy, billing, webhooks, storage — domain/application/infrastructure/interfaces layering that ESLint makes structural, not aspirational.

One payment port, three providers

IPaymentProvider abstracts Stripe, MercadoPago preapproval subscriptions, and Polar — provider quirks stay in adapters.

Contracts as source of truth

Shared Zod schemas in @app/contracts; the client's types are generated from the server's OpenAPI. Payload drift fails CI, not production.

RBAC and API keys

Permission strings flow through the OpenAPI surface; orgs, roles, invitations, and keys are modeled, not improvised.

Boot discipline

Zod-validated env with four required vars; every optional adapter — Redis, S3, Sentry, OTel — degrades to a no-op.

Deploy artifacts in-repo

Dockerfile, docker-compose, Railway, and Dokploy configs, with Prisma migrations applied at boot.

Your migration path from a Cursor-built codebase

You're a developer, so here's the honest framing: this is a port, not a merge. The features you shipped with Cursor are the valuable part; the improvised infrastructure around them is the liability. Move features one bounded context at a time — entities and invariants into domain/, orchestration into application use cases, Prisma repositories in infrastructure/, thin Express controllers with Zod schemas at the edge — then run bun run generate:api and let the typed client pull the new surface into the frontend. Your existing tests port as use-case tests; the golden-path E2E covers integration. From there, Cursor works better than it did before: the repo's conventions and enforced boundaries are context your agent reads on every task — which is exactly the setup that keeps month six as fast as month one.

Cursor questions, answered

Why a standalone Express backend instead of Next.js API routes?+
Past a few dozen endpoints, route-handler backends lose separation of concerns and agents accelerate the decay. A DDD Express service with lint-enforced layers gives the agent unambiguous placement rules — and the frontend still gets full type safety through the generated contract.
What stops my agent from breaking the architecture?+
Three mechanical gates: ESLint boundary rules (domain can't import express or @prisma/client), the OpenAPI freshness check (stale types fail CI), and the test suite with the Playwright golden path. Violations fail the build — no reviewer vigilance required.
How real is the E2E gate?+
A Playwright suite runs the golden path — register, create org, invite, subscribe — against a real browser and database in CI on every change, with a fuller suite nightly. It's a merge gate, not a smoke test.
Can I swap parts of the stack?+
Within the ports, yes: payments, storage, email, and observability sit behind interfaces with multiple adapters shipped. The core (Bun + Express + Prisma + Next.js) is the opinionated part — and that opinionation is what makes the agent guardrails enforceable.

One license. Two ways to own it.

CORE

Founder

$99one-time

A frozen snapshot of UseDeploy. Yours forever, no updates.

  • Frozen-version zip download
  • Full source, commercial use, unlimited projects
  • All 800+ tests · all docs pages
  • 14-day refund
RECOMMENDED

LATEST + UPDATES

Lifetime

$199$249one-time

Always the latest UseDeploy. Re-download every release, free.

  • Latest-version zip — re-downloadable forever
  • Every future release at no extra charge
  • Priority Discord support
  • All 800+ tests · all docs pages
  • 14-day refund

Give your agent a base it can't break

Keep the velocity. Add the operational layer — idempotency, outbox, queues, observability, E2E gates — engineered and enforced before your next prompt.