Skip to content

Startup Waitlist

A pre-launch site in violet: one email field, a blog to keep the list warm, and no pricing to be held to. The smallest honest thing to put in front of a product that does not exist yet.

4 routes4 pages · 13 blocks28 files · 2,719 lineslucide-reactAdded 2 Sept 2026

What's included

  • app/blog/[slug]/page.tsx
  • app/blog/page.tsx
  • app/globals.css
  • app/layout.tsx
  • app/not-found.tsx
  • app/page.tsx
  • and 8 more files
  • 4 pages it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab init startup-waitlist ./my-app

Or over MCP, from your editor's agent — no account needed.

License

Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.

Was this useful?

Every screen

Your calendar, minus the negotiation

Orbit reads the meeting out of the thread and books it, in the gap everyone can actually make. No polls, no back-and-forth, no third message asking about Tuesday.

Free for the first cohort. No card, and no marketing list.

4,820 already waiting

Engineers on the list work at

  • Northwind
  • Contoso
  • Lumon
  • Vandelay
  • Initech
4,820
on the waitlist
Since the first demo, 9 March
120
per cohort
Small enough that we answer every email
Q4
general availability
Cohorts open monthly until then

Three things, done properly

Not a feature list — the three decisions the product is built around. Everything else follows from them.

  • It reads the thread

    Forward the mail and Orbit works out who needs to be there, how long it should run, and which week you actually meant. You confirm; you do not fill anything in.

  • It defends the gaps

    Focus blocks are real appointments, not a colour. Orbit will move a meeting before it splits an afternoon, and tells the other side why in a sentence you can edit.

  • It leaves no residue

    Cancel and every hold disappears from every calendar it touched. No orphaned invites, no ghost blocks a month later, no cleanup task nobody owns.

“We ran the beta across a 40-person engineering org for six weeks. The scheduling threads didn't get shorter — they stopped happening.”

Dana OkonkwoVP Engineering, Northwind
in private beta
6 weeks
in private beta
scheduling messages
−71%
scheduling messages
returned per person, per week
3.5 hrs
returned per person, per week

Trusted by support teams at

  • Meridian
  • Coastline Health
  • Fieldstone

What people ask before they sign up

The four we get most, answered the way we would answer them in a reply.

Something we have not covered?

Mail the founders directly. Both of us read it, and one of us replies the same day.

hello@orbit.example
When do I actually get in?

Cohorts open monthly, 120 people each, in signup order. You will get a date rather than a "soon" — and if you are more than one cohort away we say so in the first mail rather than at the end.

What will it cost when it launches?

The first cohort is free permanently, not free for a trial. After that we expect to charge per seat per month, in the range you would expect for a calendar tool. We are not naming a number we might have to walk back.

What do you do with my calendar data?

Read the events, write the ones you confirm, and nothing else. It is not training data, it is not sold, and it is deleted within 30 days of you leaving. The data-processing agreement is available before you connect anything.

Does it work with Outlook, or only Google?

Both at launch. The beta is Google-first because that is what the first cohort ran; Outlook support is in the second. If you are Outlook-only, say so when you sign up and we will slot you accordingly.

Get in before the cohort fills

120 places a month, in signup order. It takes an email address and about four seconds.

  • Free for the first cohort, permanently
  • No card, no sales call
  • One email when your cohort opens — that is all

Live components in your current theme — switch routes, or the phone icon to check the mobile layout. Colours are this template’s Ultraviolet palette, which ships in app/globals.css. Saturated violet on a cool near-white. Reads as pre-launch, consumer, slightly loud — which is what a waitlist wants.

Get it

28 files · .zip · nothing to configure

then

cd startup-waitlist
npm install
npm run dev

The archive contains the whole project — routes, blocks, theme tokens, Tailwind and PostCSS config, tsconfig and a .gitignore. One runtime dependency, and no Hoverlab dependency at all: it is your code from the moment it unzips.

For AI

The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.

See the prompt

Routes

PathPageFile
/Waitlist Landing Pageapp/page.tsx
/blogBlog Indexapp/blog/page.tsx
/blog/[slug]Article Pageapp/blog/[slug]/page.tsx
404404 Pageapp/not-found.tsx

What you get

project root(8 files)

  • GETTING-STARTED.md
  • gitignore
  • next.config.ts
  • package.json
  • postcss.config.mjs
  • README.md
  • tailwind.config.ts
  • tsconfig.json

app/(6 files)

  • blog/[slug]/page.tsx
  • blog/page.tsx
  • globals.css
  • layout.tsx
  • not-found.tsx
  • page.tsx

components/(14 files)

  • article-header.tsx
  • blog-post-grid.tsx
  • cta-split-panel.tsx
  • faq-two-column.tsx
  • feature-icon-grid.tsx
  • footer-minimal.tsx
  • hero-waitlist.tsx
  • logo-strip.tsx
  • navbar-simple.tsx
  • newsletter-signup.tsx
  • not-found-404.tsx
  • stats-band.tsx
  • testimonial-spotlight.tsx
  • theme-provider.tsx

Every file is listed. The 13 files in components/ are the blocks the pages import — each one has its own page if you want to read it on its own.

Project files

Everything except the blocks. Opens on app/globals.css — the file that makes the rest look right, since every block styles itself with bg-card and text-muted-foreground rather than literal colours.

app/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

/**
 * Design tokens — the Ultraviolet palette.
 *
 * Saturated violet on a cool near-white. Reads as pre-launch, consumer, slightly loud — which is what a waitlist wants.
 *
 * This file is the reason a pasted block looks right. Every block and page
 * styles itself with semantic classes — `bg-card`, `text-muted-foreground`,
 * `border-border` — rather than literal colours, so they inherit whatever
 * you define here instead of fighting it. Change a value below and every
 * section in the project moves with it. Change the hue on `--primary` and
 * `--ring` together and you have rebranded the site.
 *
 * Values are bare HSL channels, not `hsl(...)` calls. That is what lets
 * Tailwind compose them with an alpha suffix: `bg-primary/10` expands to
 * `hsl(var(--primary) / 0.1)`, which is impossible if the variable already
 * carries its own function wrapper.
 *
 * Every foreground/background pair below clears WCAG AA (4.5:1) in both
 * themes. If you retune one, check the pair rather than trusting the eye —
 * mid-lightness accents are the ones that fail.
 */

@layer base {
  :root {
    --background: 270 40% 99%;
    --foreground: 265 45% 9%;
    --card: 0 0% 100%;
    --card-foreground: 265 45% 9%;
    --popover: 0 0% 100%;
    --popover-foreground: 265 45% 9%;
    --primary: 265 80% 52%;
    --primary-foreground: 0 0% 100%;
    --secondary: 265 40% 96%;
    --secondary-foreground: 265 40% 20%;
    --muted: 265 30% 96%;
    --muted-foreground: 265 12% 42%;
    --accent: 288 60% 95%;
    --accent-foreground: 288 50% 22%;
    --destructive: 0 72% 48%;
    --destructive-foreground: 0 0% 100%;
    --border: 265 25% 90%;
    --input: 265 25% 90%;
    --ring: 265 80% 52%;

    --radius: 1rem;
  }

  .dark {
    --background: 265 40% 5%;
    --foreground: 265 15% 97%;
    --card: 265 32% 8%;
    --card-foreground: 265 15% 97%;
    --popover: 265 32% 8%;
    --popover-foreground: 265 15% 97%;
    --primary: 265 90% 76%;
    --primary-foreground: 265 45% 8%;
    --secondary: 265 25% 15%;
    --secondary-foreground: 265 15% 97%;
    --muted: 265 25% 15%;
    --muted-foreground: 265 12% 68%;
    --accent: 288 30% 18%;
    --accent-foreground: 288 40% 92%;
    --destructive: 0 62% 52%;
    --destructive-foreground: 0 0% 100%;
    --border: 265 22% 19%;
    --input: 265 22% 19%;
    --ring: 265 90% 76%;
  }
}

@layer base {
  * {
    @apply border-border;
  }

  body {
    @apply bg-background text-foreground antialiased;
  }

  /**
   * Global motion opt-out.
   *
   * Blocks guard their own animations with Tailwind's `motion-safe:`, but
   * third-party CSS and anything you add later will not. This is the
   * backstop: it neutralises every animation and transition on the page
   * for users who have asked the OS for reduced motion, rather than
   * relying on each author to remember.
   */
  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
  }
}

More Landing Pages

Pro
Open the full page for this template

Developer Tool

The terminal hero, typing the install

Near-black buttons, square corners and a terminal-green accent. Install command above the fold, real code before any prose, docs and changelog behind it.

5 routes5 pages17 blocksGraphite
Pro
Open the full page for this template

Mobile App

The store-badge download hero

Emerald and 16px corners, built around one conversion: the store install. Badges and the App Store rating above the fold, a single price, and an account area for the subscription.

5 routes5 pages18 blocksSignal
Pro
Open the full page for this template

Agency Studio

Case studies that name the constraint

Terracotta on warm paper, with no blue in it anywhere. Full-bleed hero, client list, the actual team, a journal and a careers page — and no pricing, on purpose.

5 routes5 pages15 blocksSandstone
Pro
Open the full page for this template

Local Service

Hours, address and phone above the fold

Deep teal, for a business people let into their house. A booking widget above the fold, every price published, and a compliance footer with the registrations a regulated trade has to show.

4 routes4 pages14 blocksHarbour
Pro
Open the full page for this template

Marketplace

Both sides of the market on one page

Dark olive on warm off-white, built for two audiences at once: search and real listings for buyers, the seller economics below the fold, and a browse route behind it.

5 routes5 pages19 blocksMoss
Pro
Open the full page for this template

Enterprise

The security posture band

Burgundy and square corners — the register of things bought in a boardroom. Numbers in the hero, a comparison table that concedes rows, and published prices instead of a sales wall.

5 routes5 pages18 blocksClaret
Pro
Open the full page for this template

Integration Platform

The integration grid, sorted by depth

High-chroma blue. The connector names in the hero, a catalogue with honest live/beta/planned status, four SDK languages and a dated roadmap for everyone who is not on the list.

4 routes4 pages14 blocksCobalt
Pro
Open the full page for this template

Creator Course

The curriculum, module by module

Magenta-plum with the softest corners in the set, for one person selling one thing. A student testimonial as the hero, a long instructor section, one price and the refund policy on the page.

5 routes5 pages15 blocksPlum
Open the full page for this template

Newsletter

The archive, above the testimonials

One decision, made from the archive: a hero with the field in it, the back issues as the actual argument, and the three worries about handing over an address answered as content.

6 routes6 pages22 blocksTideline