Vue templateFree

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 Vueplayv1.0.0Updated 3 hours ago

Install
Full screen ↗

About this template

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.

  • Four tiers with an animated monthly/yearly toggle
  • Comparison table with sticky header, tabs on mobile
  • Enterprise call to action
  • FAQ built on native details/summary
  • All pricing data in one typed data.ts

Code

16 files in the repo
<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>
All marketing pages →
Preview of Coming SoonFree

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.

by Vueplay
Preview of SaaS Landing$19

Template · Landing pages

SaaS Landing

Complete Vue 3 SaaS landing page template with a drawn product UI, features, pricing toggle, testimonials and FAQ. Tailwind CSS 4, dark mode, typed.

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 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

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