DryDock Kit
From purchase to production
The path every buyer follows, with the real commands. Each step names the page in the download that covers it in full: the documentation index is docs/README.md, with one page per subsystem.
1. Download
Checkout is run by Dodo Payments. Your receipt email has the download link for the edition you chose. When a new 1.x release ships, you get an email with its download at the same address. The version is in the ZIP's name and in package.json.
2. Install and run
You need Node.js 20.9 or newer (22.12 for TanStack Start), npm, Docker with Compose v2, and Git. No Stripe, Razorpay, SMTP or cloud account is needed to install, run or test it. From the unzipped folder (on Windows, use Git Bash or WSL):
npm ci
cp .env.example .env # then set AUTH_SECRET: openssl rand -base64 32
docker compose up -d # Postgres + Mailpit
npm run db:migrate
npm run db:generate # Prisma client
npm run saas:seed # demo@example.com / demo-password-123 (development only)
npm run dev # http://localhost:3000, emails at http://localhost:8025You're running when you can sign in as the demo user and see the Acme Inc organization on its Pro plan. For the admin console, run npm run saas:grant-admin -- demo@example.com. npm ci reports three high-severity advisories; SECURITY.md explains each one and why it's accepted. Don't run npm audit fix --force: it downgrades Prisma a major version and breaks the data layer.
In the download: README.md (quick start), docs/getting-started/installation.md.
3. Configure
Every environment variable is validated by one schema when the app starts, and it refuses to start on an invalid configuration. With only the four core variables set, it runs on the Free plan with emails logged to the console. Name, plans, limits and permissions are plain config files: src/config/app.ts, src/config/plans.ts, src/config/permissions.ts.
In the download: docs/getting-started/configuration.md (every variable, dev and production), docs/getting-started/first-steps.md.
4. Organizations and roles
Organizations are the tenants, and every organization-scoped query filters on one. Members are Owner, Admin or Member, from one permission catalogue checked in the service layer. Custom roles are supported in the data model and services; there's no screen to create them yet. Every user also gets a personal workspace.
In the download: docs/organizations.md, docs/rbac.md, docs/multi-tenancy.md.
5. Billing
Configure Stripe, Razorpay, Paddle, Polar, several, or none. Start in each provider's test mode and complete a checkout end to end. Subscription state changes only when a verified webhook arrives. If you sell per-seat or metered plans, schedule the billing job every 5–15 minutes: npm run billing:report-usage from cron, or POST /api/cron/billing with your CRON_SECRET.
In the download: docs/stripe.md, docs/billing/razorpay.md, docs/billing/paddle.md, docs/billing/polar.md, docs/billing/models.md, docs/webhooks.md.
6. Check
npm test # unit, integration and security suites on a real Postgres
npm run verify # lint + typecheck + test + build
npm run saas:check # your configuration: PASS / WARN / FAIL, with what to fixsaas:check is read-only, never prints a secret, and reports anything it can't verify (backups, DNS, webhook delivery) as a warning, never a pass.
7. Deploy
The documented and tested path is an Ubuntu server with Docker, and nginx (or CloudPanel) in front for HTTPS:
cp .env.production.example .env && chmod 600 .env # fill it in
./scripts/deploy.sh # build → saas:check → backup → migrate → reference data → start → health checkIt isn't zero-downtime: the swap to the new container takes a few seconds. There's no automatic rollback; the rollback guide says what to do instead.
In the download: docs/deployment/ (vps.md, docker.md, rollback.md, migrations.md, github-actions.md, cloudpanel.md).
8. Vercel and other hosts
Vercel and other serverless platforms aren't supported or tested. Live notifications hold a connection open for up to 15 minutes, each instance opens up to 10 database connections, per-seat and metered billing need a scheduled job, and one limit is kept in memory per instance. An EC2 or Lightsail Ubuntu instance is a VPS, so the VPS guide applies; container services can run the Docker image but aren't documented. Kubernetes isn't planned.
In the download: docs/deployment/hosting.md.
9. Updates
You'll change the code, so an update is a git merge, not a replacement. Keep every unmodified release on a vendor branch and merge it into yours; conflicts appear only where you and the release changed the same file. Each release's changelog lists any manual steps. Every 1.x release is included; a 2.0 may be a paid upgrade.
In the download: UPGRADING.md. What shipped and when: the changelog.
10. Troubleshooting and support
Start with docs/operations/troubleshooting.md (symptom, cause, fix), then npm run saas:check, whose output is safe to paste into a support request. Then email support@drydockkit.com using the matching template in docs/support/request-templates.md. What support covers: the support policy. What you may build: the license.