launch-quickly

Install

From a license key to a running application.

npx create-launch-quickly my-app

It asks for your license key, downloads the template, installs dependencies, and then runs lq check against what it just wrote. If that check fails, the command exits non-zero — you keep the project, but you also get a bug report to send us rather than discovering the problem yourself an hour later.

Your key is never written to disk. If you would rather keep it out of shell history, set LQ_LICENSE_KEY instead of passing --key.

Requirements

  • Node 22 or newer.
  • pnpm. The project's dependencies are wired up with pnpm-specific fields, so npm and yarn will not resolve them. corepack enable is the least effort way to get it.
  • Postgres 15 or newer. Row-level security is load-bearing here, so this is not portable to MySQL or SQLite — see Tenancy.

After it finishes

Everything is documented in .env.local, which the installer creates for you from .env.example. Two variables are required and the rest are optional:

DATABASE_URL=        # the app role — must NOT own the tables
DATABASE_ADMIN_URL=  # the owner — migrations and system jobs only

Those being two different roles is the whole tenancy design rather than an optimisation. A table's owner bypasses its own row-level security policies, so an app connecting as the owner has no enforcement at all — it would pass every test you write and leak the first time a query forgot its where clause.

If you put a connection pooler in front of Postgres, it must run in transaction mode. Tenancy uses SET LOCAL, which is scoped to a transaction; session-mode pooling leaks one request's tenant into the next.

Then:

pnpm db:migrate
pnpm dev

What to read first

CLAUDE.md, in the project root. It is about 130 lines and it is the file that keeps generated and hand-written code the same shape. If you point an agent at this codebase without it, you get an agent inventing its own architecture inside one that already has one.

On this page