Vue templateFree

Coming Soon

Vue 3 coming-soon and waitlist page with a live countdown, validated email capture and social links, drawn sky backdrop. Tailwind CSS, dark mode.

by Vueplayv1.0.0Updated 2 hours ago

Install
Full screen ↗

About this template

A pre-launch page that does one job well: tell people what's coming and collect their email. It has a live countdown to your launch date, a waitlist form with validation and a friendly confirmation state, a row of teaser features and social links.

The countdown is its own component: pass a Date as target and it ticks every second, cleans up its interval on unmount and emits done when time runs out. Screen readers get one readable summary instead of a number changing every second. The waitlist form emits join with the email; wire it to your mailing list provider or backend.

The backdrop is drawn with SVG and gradients: soft clouds in light mode, a field of stars in dark mode. Social icons are generic, so swap in your networks' official marks when you publish.

  • Live countdown component with a screen-reader summary
  • Waitlist email capture with validation and confirmation
  • Generic social links and launch teasers
  • Drawn clouds (light) and stars (dark) backdrop
  • Responsive from 390px to desktop

Code

13 files in the repo
<script setup lang="ts">
import { ref } from 'vue'
import CountdownTimer from './components/CountdownTimer.vue'
import WaitlistForm from './components/WaitlistForm.vue'
import SocialLinks from './components/SocialLinks.vue'

// Set your real launch date here, e.g. new Date('2026-11-03T09:00:00Z').
// The demo counts down to a date 23 days and 7 hours from when the page loads.
const launch = new Date(Date.now() + (23 * 24 + 7) * 3600 * 1000 + 42 * 60 * 1000)
const launched = ref(false)

const teasers = ['Offline-first notes', 'End-to-end encrypted', 'Handwriting search', 'Shared notebooks']
</script>

<template>
  <div class="relative isolate flex min-h-screen flex-col overflow-hidden bg-gradient-to-b from-sky-50 via-white to-white text-gray-900 dark:from-slate-950 dark:via-gray-950 dark:to-gray-950 dark:text-white">
    <!-- drawn sky: clouds in light mode, stars in dark mode -->
    <div aria-hidden="true" class="pointer-events-none absolute inset-0 -z-10">
      <div class="absolute -top-40 left-1/2 size-[44rem] -translate-x-1/2 rounded-full bg-sky-300/30 blur-3xl dark:bg-sky-500/15" />
      <div class="hidden sm:block dark:!hidden">
      <svg class="absolute left-[6%] top-28 w-56 text-white drop-shadow-sm" viewBox="0 0 200 80" fill="currentColor"><path d="M40 70a30 30 0 0 1 4-59 36 36 0 0 1 66-2 26 26 0 0 1 44 12 24 24 0 0 1 6 49z" /></svg>
      <svg class="absolute right-[4%] top-64 w-72 text-white/90 drop-shadow-sm" viewBox="0 0 200 80" fill="currentColor"><path d="M40 70a30 30 0 0 1 4-59 36 36 0 0 1 66-2 26 26 0 0 1 44 12 24 24 0 0 1 6 49z" /></svg>
      </div>
      <svg class="absolute inset-0 hidden size-full dark:block" preserveAspectRatio="none">
        <circle v-for="n in 60" :key="n" :cx="`${(n * 37) % 100}%`" :cy="`${(n * 53) % 70}%`" :r="n % 7 === 0 ? 1.6 : 0.9" class="fill-white" :opacity="0.2 + ((n * 13) % 10) / 16" />
      </svg>
    </div>

    <header class="mx-auto flex w-full max-w-5xl items-center justify-between px-5 py-6">
      <span class="flex items-center gap-2.5 text-lg font-semibold">
        <span class="grid size-9 place-items-center rounded-xl bg-sky-600 text-white shadow-md shadow-sky-600/30" aria-hidden="true">
          <svg viewBox="0 0 24 24" class="size-5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 18a4 4 0 0 1-.5-8A6 6 0 0 1 18 9a4.5 4.5 0 0 1-.5 9z" /></svg>
        </span>
        Cirrus
      </span>
      <SocialLinks class="hidden sm:flex" />
    </header>

    <main class="mx-auto flex w-full max-w-2xl flex-1 flex-col items-center justify-center px-5 pb-16 pt-6 text-center sm:pt-10">
      <p class="inline-flex items-center gap-2 rounded-full border border-sky-200 bg-white/70 px-3 py-1 text-xs font-semibold text-sky-700 dark:border-sky-400/30 dark:bg-sky-400/10 dark:text-sky-300">
        <span class="relative flex size-2"><span class="absolute inline-flex size-full animate-ping rounded-full bg-sky-400 opacity-75 motion-reduce:hidden" /><span class="relative inline-flex size-2 rounded-full bg-sky-500" /></span>
        Private beta · opening soon
      </p>
      <h1 class="mt-6 text-4xl font-bold tracking-tight text-balance sm:text-6xl">
        Notes that feel as light as <span class="text-sky-600 dark:text-sky-400">thinking</span>
      </h1>
      <p class="mt-5 max-w-lg text-lg text-pretty text-gray-600 dark:text-gray-300">
        Cirrus is a fast, private notebook that works offline and syncs everywhere. Join the waitlist to get early access and founder pricing.
      </p>

      <div class="mt-10 w-full">
        <p v-if="launched" class="text-2xl font-bold text-sky-600 dark:text-sky-400" role="status">We're live! Check your inbox.</p>
        <CountdownTimer v-else :target="launch" @done="launched = true" />
      </div>

      <div class="mt-10 w-full max-w-lg">
        <WaitlistForm />
      </div>

      <ul class="mt-10 flex flex-wrap justify-center gap-2" aria-label="Coming at launch">
        <li v-for="t in teasers" :key="t" class="rounded-full bg-white/70 px-3 py-1.5 text-xs font-medium text-gray-700 ring-1 ring-gray-200 dark:bg-white/5 dark:text-gray-300 dark:ring-white/10">{{ t }}</li>
      </ul>
    </main>

    <footer class="mx-auto flex w-full max-w-5xl flex-col items-center gap-4 border-t border-gray-200/70 px-5 py-6 sm:flex-row sm:justify-between dark:border-white/10">
      <p class="text-sm text-gray-500 dark:text-gray-400">© {{ new Date().getFullYear() }} Cirrus Labs · a fictional company</p>
      <SocialLinks class="sm:hidden" />
      <a href="#" class="text-sm text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white">Press &amp; partnerships</a>
    </footer>
  </div>
</template>
All marketing pages →
Preview of Pricing PageFree

Template · Marketing pages

Pricing Page

Full Vue 3 pricing page: four tiers with a monthly/yearly toggle, a responsive feature comparison table, FAQ and an enterprise CTA. Tailwind CSS.

by Vueplay
Preview of 404 Not Found PageFree

Template · Error pages

404 Not Found Page

Friendly Vue 3 404 page with a drawn compass illustration, live search suggestions and helpful links, plus a compact 500 error variant. Tailwind CSS.

by Vueplay
Preview of Admin Dashboard$29

Template · Dashboards

Admin Dashboard

A complete Vue 3 admin dashboard template with a collapsible sidebar, hand-drawn SVG charts, a sortable customers table and settings. Tailwind CSS, dark mode.

by Vueplay
Preview of Analytics DashboardFree

Template · Dashboards

Analytics Dashboard

Web analytics dashboard template for Vue 3 and Tailwind CSS: SVG area chart, metric tabs, top pages, sources, a devices donut and a date range picker.

by Vueplay

Pro feature

Upgrade to Pro

Upgrade to unlock more of Vueplay. Cancel any time.

  • Custom domains with HTTPS
  • Private projects
  • No "Made with Vueplay" badge
  • GitHub sync

$120/year

Compare plansBilling settings