LaunchKit Waitlist / Landing Page Kit

Marketing & Sales

A one-page landing page with its own waitlist backend: `docker compose up` brings it up in one step, email addresses go into your own SQLite file, and CSV export is protected by a token.

SubscriptionUS$49 per month
Last run2026-11-02
In practice
Readiness5 / 5
What you need
Few changes needed4 / 5

Who it is for

Independent developers and small teams who want to collect an email waitlist before a product launches: they do not want a coming-soon page tied to an external service such as Mailchimp, EmailOctopus or Notion, or a monthly fee for one, and want the whole thing to run on their own VPS from a single compose file.

How to start

$ scripts/init-env.sh
$ docker compose up -d --build

Browse the files

Files in the product repository at the pinned commit. A few house files are left out of the zip.

File overview69 paths
▸public1
vite.svg
▸scripts1
init-env.sh
▸server1
server.js
▸src44
App.css
App.tsx
assets/
components/
config/
index.css
lib/
main.tsx
vite-env.d.ts
▫ATTRIBUTION.md
▫Dockerfile
▫LICENSE
▫LICENSE-99LL
▫PRODUCT.md
▫QUICKSTART.md
▫README.md
▫SECURITY.md
▫components.json
▫compose.yaml
▫delivery-manifest.txt
▫index.html
▫package-lock.json
▫package.json
▫postcss.config.js
▫tailwind.config.js
▫tsconfig.json
▫tsconfig.node.json
▫vite.config.ts
▫Config and hidden files 3

Latest passing run

Clone → Checkout → Toolchain → Build → Run live

Pre-purchase Disclosure

What you are buying

A one-page product landing page with a built-in waitlist backend: a visitor leaves an email address on the page, it is stored in a SQLite file on your own machine, and an admin token lets you export it as CSV. It starts with docker compose up.

A derivative build on top of an MIT-licensed open-source landing page template: the containerisation, the waitlist backend, making the content configurable and the Traditional Chinese documentation are ours. Delivery is a frozen snapshot: one zip file, taken from the product repository at revision e71d94a.

Known limitations

  • The kit listens on a single HTTP port; putting it online means bringing your own domain, host and TLS
  • The submission endpoint has no rate limiting
  • The list lives in a Docker volume, and docker compose down -v deletes the list along with it
  • The first start fetches from the network (pulling the base image, installing npm dependencies); it cannot be built offline
  • Demo avatars and preview images hot-link third parties (i.pravatar.cc, github.com, res.cloudinary.com)
  • Pinned to the delivered snapshot; it does not follow upstream.

The liability cap, the scope of what is promised and the statutory floor are governed by the Terms of Service.

Vetting record

Everything below was checked against the pinned commit ae3716d. Every verdict carries its full reasoning, an evidence link and the checker; failures are published, not hidden — do not take our word for it, verify it yourself.

4 PASS1 WARN0 FAIL

Source ReviewPASS

src/ and server/server.js were scanned file by file: the only network call is the front end's same-origin fetch to /api/waitlist (which we added); there is no eval, new Function, child_process or dangerouslySetInnerHTML; the demo content (Team/Testimonials) hot-links external images (i.pravatar.cc and github.com avatars), which are display placeholders. The backend has no npm dependencies and uses Node's built-in module for SQLite.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-017-waitlist-launch-page-kit/tree/df3d8343e86d3f4c66d509f4e5f6ae04f07f4760Checked in 2026Checked by claude-code build-product session A
Script SafetyPASS

The scripts in package.json are only dev/build/lint/preview (vite/tsc/eslint), with no install hooks such as postinstall or prepare; scripts/init-env.sh writes a local .env only when the buyer runs it explicitly, and makes no outbound connections.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-017-waitlist-launch-page-kit/blob/df3d8343e86d3f4c66d509f4e5f6ae04f07f4760/package.jsonChecked in 2026Checked by claude-code build-product session A
RecencyWARN

Upstream leoMirandaa/shadcn-landing-page was last pushed in 2024. For a pure front-end template the external drift surface is small; the derived repository is maintained by us and its lockfile was regenerated (upstream's existing bug, where the lock file and package.json were out of sync, is fixed).

Evidence ↗Checked in 2026Checked by claude-code build-product session A
LicensePASS

SPDX:LicenseRef-99LL-Product

Upstream is MIT: the LICENSE file itself at pinned commit ae3716dbce5c8a26815222bb743994b5717938f1 was read word for word (the standard MIT text, Copyright 2024 Leopoldo Miranda), and the root LICENSE is kept verbatim; our sale terms are LICENSE-99LL (the 99LL product licence template v1).

Evidence ↗Checked in 2026Checked by claude-code build-product session A
Dependency LicensesPASS

The dependencies in package.json (the radix-ui family, react, react-dom, the tailwind family, vite, lucide-react, clsx, cva and others); the backend has no npm dependencies (node:http / node:sqlite are built in). The runtime image is node:24-alpine (the base image carries MIT/BSD/GPL system components, distributed with the image under their own licences; they are not in the buyer's zip — what the zip delivers is a source tree).

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-017-waitlist-launch-page-kit/blob/df3d8343e86d3f4c66d509f4e5f6ae04f07f4760/package.jsonChecked in 2026Checked by claude-code build-product session A
HEALTH VERIFIED

Last verified passing: 2026-11-02

Subscribe for everything
US$49/ monthwas US$99

A subscription unlocks the whole catalogue; you do not buy this one separately.See what is included

Sign in with Google first; if you are signed out you will be sent to the sign-in page. Your subscription is billed to that same email address.

Already subscribed? This downloads straight away. Otherwise you are sent to the pricing page, or to sign in first.