--- title: "Launchkiln: a prelaunch marketing site for an invoicing startup" author: "@chris" author_url: https://elements.dev/u/chris published: 2026-09-30T20:53:23.029Z url: https://elements.dev/demos/01a0f417-e8ad-7900-b01b-5aee50c6ca2f kind: post format: article --- # Launchkiln: a prelaunch marketing site for an invoicing startup by [@chris](https://elements.dev/u/chris) ยท 2026-09-30 ## Description A home page with pricing and FAQ, a blog, and a waitlist where referral links move people up the list live, plus an admin for posts, plans and CSV export. Launchkiln needed a waitlist where every referral reorders the line and each signup watches their own place move, a blog with cover images, and admin pages for posts, pricing and the FAQ. Each of those is a part of Elements, so the agent spent its 23 minutes on the launch site itself. **What Elements gave the app** - **Live waitlist positions.** Signups are a LiveTable. Each referral reorders the line in the database, and only the signups whose place changed hear about it, so a status page shows its own position and referral count moving as friends join. - **A live signup count.** A channel carries the total, so the home page and every status page show the list growing as people join. - **Server calls as function calls.** Joining the waitlist is one `@rpc` call that returns the referral link, and an email already on the list gets its existing link back. The admin saves posts, pricing plans and FAQ entries the same way, with the cover image sent along in the same call. - **Covers and export.** Blog covers are stored in the database and served at addresses browsers keep for a year, and the admin downloads the waitlist as a CSV. - **Data from SQL files.** Migrations define the site, load three pricing plans and six FAQ entries everywhere, and seed the admin, four posts with drawn covers and 200 signups, about a third of them referred. - **Sessions and roles.** Every admin page, server call and the export share one guard on the admin role. **What the project server gave the agent** The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building. **What shipped** The app type-checks with zero errors and all 52 tests pass. Every page works on desktop and phone.