parkingpage-comingsoon is a ready-to-customize coming soon page for product launches, waitlists, and early-access campaigns.
It ships with a glass-style content panel, animated WebGL background, draggable physics typography, and an optional waitlist form.
- Coming soon page - A complete first screen for a launch or waitlist.
- Static deployment - Builds to plain files in
dist/. - Easy branding - Change copy, metadata, favicons, logos, and the mosaic word from one brand config plus brand assets.
- Waitlist ready - Connects to any hosted form endpoint through
VITE_FORM_ENDPOINT. - Accessible fallback - Keeps readable DOM content and supports reduced-motion users.
Note
The included Your Brand content is demo content. Replace it with your own brand, copy, assets, and form endpoint before publishing.
git clone https://github.com/One-Simon/parkingpage-comingsoon.git
cd parkingpage-comingsoonUse Node.js 24 LTS and npm.
npm cinpm run devOpen the local URL printed by Vite, usually:
http://localhost:5173
Copy the example env file:
cp .env.example .envSet your hosted form endpoint:
VITE_FORM_ENDPOINT=https://formspree.io/f/your-idTip
If VITE_FORM_ENDPOINT is empty, the page still runs, but the waitlist form is disabled. This is useful while you are still working on the visual design.
npm run buildThe production output is written to:
dist/
Most day-to-day brand changes are in these files:
| File | What To Change |
|---|---|
src/brand/siteConfig.ts |
Brand name, browser title, meta description, mosaic word, visible copy, and asset paths |
public/brand/favicon.png and public/brand/favicon.svg |
Browser icon, card logo, and background glyph |
src/style.css |
Layout, spacing, colors, and responsive panel styling |
Important
VITE_* environment variables are inlined at build time. After changing VITE_FORM_ENDPOINT, build and deploy again.
Create a Render static site or Blueprint from this repository.
| Setting | Value |
|---|---|
| Repository | One-Simon/parkingpage-comingsoon or your fork |
| Branch | main |
| Runtime | Static |
| Build command | npm ci && npm run build |
| Publish directory | dist |
Required environment variables:
| Variable | Value |
|---|---|
NODE_VERSION |
24.16.0 |
VITE_FORM_ENDPOINT |
Your waitlist form endpoint, or leave empty to disable the form |
The included render.yaml mirrors these settings for Blueprint-based setup.
Tip
You can deploy the built dist/ folder anywhere that serves static files, including Netlify, Vercel, Cloudflare Pages, GitHub Pages, S3, or your own server.
This repository is intended to be usable as an upstream template for branded downstream apps.
Upstream-owned files include shared app code, rendering, tests, package manifests, Vite config, and the generic default brand config shape.
Downstream branded repos should keep company-specific identity in:
src/brand/siteConfig.tspublic/brand/**- deployment docs/config such as
README.md,LICENSE, andrender.yaml
Avoid editing shared implementation files for company names, copy, mosaic text, favicons, or logos. This keeps upstream sync PRs small and prevents recurring merge conflicts.
| Command | What It Does |
|---|---|
npm run dev |
Starts the local Vite dev server |
npm run build |
Runs TypeScript and creates the production build |
npm run preview |
Serves the production build locally |
npm run lint |
Runs ESLint with zero warnings allowed |
npm run typecheck |
Runs TypeScript without emitting files |
npm run format |
Checks formatting in src/ |
npm run format:fix |
Applies formatting in src/ |
The default page is intentionally simple:
src/brand/siteConfig.tsexports all brand metadata, visible panel copy, asset paths, and mosaic text.src/overlay.tsrenders the copy into the DOM.src/forms/waitlist.tsbinds the form toVITE_FORM_ENDPOINT.src/simulation.tsstarts the Pixi/Matter background.
Note
The animated canvas is decorative. The main copy and waitlist form are plain DOM content.
VITE_FORM_ENDPOINT is probably empty.
Set it locally in .env and in your host's environment variables, then rebuild/redeploy.
Vite inlines VITE_* values at build time.
After changing VITE_FORM_ENDPOINT, run a new build or trigger a new deploy.
Run a production build locally:
npm run build
npm run previewIf the static panel works but animation does not, check browser console errors and CSP settings.
Tip
Reduced-motion settings intentionally disable the animated canvas and show a static fallback.
Search for the old brand name and update these files first:
rg "Your Brand|YourOldBrand"The usual places are src/brand/siteConfig.ts and public/brand/**.
Issues and pull requests are welcome. Please read CONTRIBUTING.md before opening a PR.
MIT. See LICENSE.