Template · Marketing pages
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.
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 Vueplayv1.0.0Updated 3 hours ago
A complete pricing page for a subscription product. Four plan cards react to a billing switch, a feature comparison table lays out every limit and capability, an enterprise banner catches larger customers, and a two-column FAQ answers the usual objections before they reach your inbox.
The comparison table is a real, accessible table on desktop with a sticky header row, grouped sections and a highlighted recommended column. On phones it becomes a tabbed, one-plan-at-a-time list so nothing scrolls sideways. Included and excluded cells have text alternatives for screen readers.
All plans, limits, comparison rows and questions live in src/data.ts. Each cell can be true, false or a short string such as "24h" or "Unlimited", and the TierCards select event gives you the tier to send to checkout.
<script setup lang="ts">
import { ref } from 'vue'
import BillingToggle from './components/BillingToggle.vue'
import TierCards from './components/TierCards.vue'
import ComparisonTable from './components/ComparisonTable.vue'
import PricingFaq from './components/PricingFaq.vue'
import EnterpriseCta from './components/EnterpriseCta.vue'
import type { Billing, Tier } from './data'
const billing = ref<Billing>('yearly')
const selected = ref('')
function onSelect(tier: Tier) {
selected.value = `${tier.name} plan selected, billed ${billing.value}. Wire this to your checkout.`
}
</script>
<template>
<div class="min-h-screen bg-white text-gray-900 antialiased dark:bg-gray-950 dark:text-white">
<header class="border-b border-gray-200 dark:border-white/10">
<div class="mx-auto flex h-16 max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8">
<a href="#" class="flex items-center gap-2 rounded-lg font-semibold focus-visible:outline-2 focus-visible:outline-teal-600">
<span class="grid size-8 place-items-center rounded-lg bg-teal-600 text-white" aria-hidden="true">
<svg viewBox="0 0 24 24" class="size-4" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M12 3v13M8 20h8M12 16l-3 4M12 16l3 4" /></svg>
</span>
Plumbline
</a>
<nav aria-label="Main" class="flex items-center gap-1 text-sm font-medium">
<a href="#" class="hidden rounded-lg px-3 py-2 text-gray-600 hover:text-gray-900 sm:block dark:text-gray-300 dark:hover:text-white">Product</a>
<a href="#" aria-current="page" class="hidden rounded-lg px-3 py-2 text-gray-900 sm:block dark:text-white">Pricing</a>
<a href="#" class="rounded-lg px-3 py-2 text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white">Sign in</a>
<a href="#" class="ml-1 rounded-lg bg-teal-600 px-3.5 py-2 font-semibold text-white hover:bg-teal-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600">Try free</a>
</nav>
</div>
</header>
<main>
<section class="relative isolate px-4 pb-16 pt-16 sm:px-6 sm:pt-24 lg:px-8" aria-labelledby="pricing-title">
<div aria-hidden="true" class="absolute inset-x-0 top-0 -z-10 h-80 bg-gradient-to-b from-teal-50 to-transparent dark:from-teal-500/10" />
<div class="mx-auto max-w-2xl text-center">
<h1 id="pricing-title" class="text-4xl font-bold tracking-tight text-balance sm:text-5xl">Simple pricing, based on traffic</h1>
<p class="mt-5 text-lg text-pretty text-gray-600 dark:text-gray-400">Every plan includes cookie-free tracking, EU hosting and all core reports. Pay only for the pageviews you need.</p>
<div class="mt-9 flex justify-center">
<BillingToggle v-model="billing" />
</div>
</div>
<div class="mx-auto mt-12 max-w-7xl">
<TierCards :billing="billing" @select="onSelect" />
<p class="mt-6 min-h-5 text-center text-sm text-teal-700 dark:text-teal-300" aria-live="polite">{{ selected }}</p>
</div>
</section>
<section class="px-4 py-16 sm:px-6 lg:px-8" aria-labelledby="compare-title">
<div class="mx-auto max-w-7xl">
<div class="max-w-2xl">
<h2 id="compare-title" class="text-3xl font-bold tracking-tight">Compare every feature</h2>
<p class="mt-3 text-gray-600 dark:text-gray-400">The full list, so there are no surprises after you sign up.</p>
</div>
<div class="mt-10">
<ComparisonTable />
</div>
</div>
</section>
<section class="px-4 py-16 sm:px-6 lg:px-8" aria-label="Enterprise">
<div class="mx-auto max-w-7xl">
<EnterpriseCta />
</div>
</section>
<section class="px-4 pb-24 pt-8 sm:px-6 lg:px-8" aria-labelledby="faq-title">
<div class="mx-auto max-w-5xl">
<h2 id="faq-title" class="text-center text-3xl font-bold tracking-tight">Frequently asked questions</h2>
<p class="mt-3 text-center text-gray-600 dark:text-gray-400">
Still unsure? <a href="#" class="font-semibold text-teal-700 underline-offset-4 hover:underline dark:text-teal-400">Email our team</a>, a human replies.
</p>
<div class="mt-10">
<PricingFaq />
</div>
</div>
</section>
</main>
<footer class="border-t border-gray-200 py-8 text-center text-sm text-gray-500 dark:border-white/10 dark:text-gray-400">
Prices in USD, excluding VAT. © {{ new Date().getFullYear() }} Plumbline Analytics, a fictional company.
</footer>
</div>
</template>
Template · Marketing pages
Vue 3 coming-soon and waitlist page with a live countdown, validated email capture and social links, drawn sky backdrop. Tailwind CSS, dark mode.
Template · Landing pages
Complete Vue 3 SaaS landing page template with a drawn product UI, features, pricing toggle, testimonials and FAQ. Tailwind CSS 4, dark mode, typed.
Template · Dashboards
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.
Template · Error pages
Friendly Vue 3 404 page with a drawn compass illustration, live search suggestions and helpful links, plus a compact 500 error variant. Tailwind CSS.