Files
voicebox/landing/src/lib/pricing.ts
T
James Pine 7d9a384ee4 Add $VOICEBOX token page, blog, and cloud/pricing pages
- /token: dedicated page with on-chain transparency (liquidity lock +
  buyback/burns), holder utility, official-token clarity, and FAQ. The
  landing now shows a teaser linking to it; navbar + footer repointed
  from pump.fun to /token.
- /blog: file-based markdown blog (gray-matter + marked) with per-post
  Open Graph images; first post "Why Voicebox has a token".
- /cloud: end-to-end encrypted backup & sync product page.
- /pricing: Local / Cloud / Studio tiers with a monthly/annual toggle;
  $VOICEBOX holders get Cloud free.
- Add Testimonials section to the landing.
- Navbar: remove API/Download, add Pricing/Blog, fix center-nav spacing.
- docker-compose: host port 17493->17600 for local dev coexistence.
2026-06-27 17:34:53 -07:00

127 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Pricing + cloud data — single source of truth for /pricing and /cloud.
//
// DRAFT: the cloud service is not live yet and the pricing model is not final.
// $12/yr is a launch/intro figure; tier limits below are placeholders to shape
// the page — tune them once the model is decided. Keeping it all here means the
// pages update by editing this file only.
export const CLOUD_STATUS = "coming-soon" as const; // → flips to "live" at launch
export const CLOUD_PRICE_YEARLY = 12; // launch price for the Cloud tier (USD/yr)
/** Where "get notified" CTAs point until there's a real signup flow. */
export const CLOUD_NOTIFY_URL = "https://x.com/VoiceboxAI";
export type BillingPeriod = "monthly" | "annual";
export interface PricingTier {
id: string;
name: string;
tagline: string;
/** USD per month. 0 = free. */
monthly: number;
/** USD per year. 0 = free. Set below 12×monthly to reward annual. */
annual: number;
priceNote?: string;
/** Visually emphasize this tier (the headline plan). */
highlighted?: boolean;
/** Status pill, e.g. "Available now" / "Coming soon". */
badge?: string;
cta: {label: string; href: string};
features: string[];
}
export const PRICING_TIERS: PricingTier[] = [
{
id: "local",
name: "Local",
tagline: "The full app, free forever.",
monthly: 0,
annual: 0,
priceNote: "No account required",
badge: "Available now",
cta: {label: "Download Voicebox", href: "/download"},
features: [
"Voice cloning across every TTS engine",
"Dictation & Capture (audio kept alongside transcript)",
"MCP / agent integration & personalities",
"Unlimited local generations & captures",
"100% open source, runs entirely on your machine",
],
},
{
id: "cloud",
name: "Cloud",
tagline: "Backup & sync for everything you make.",
monthly: 2, // placeholder
annual: CLOUD_PRICE_YEARLY, // $12 launch price (≈50% off monthly)
priceNote: "Launch price · free for $VOICEBOX holders",
highlighted: true,
badge: "Coming soon",
cta: {label: "Get notified", href: CLOUD_NOTIFY_URL},
features: [
"Everything in Local",
"End-to-end encrypted backup — we can't read it",
"Sync across desktop & mobile",
"25 GB encrypted storage", // placeholder
"Up to 5 devices", // placeholder
"30-day version history", // placeholder
],
},
{
id: "studio",
name: "Studio",
tagline: "For power users and professionals.",
monthly: 6, // placeholder
annual: 48, // placeholder
priceNote: "Placeholder — pricing TBD",
badge: "Coming soon",
cta: {label: "Get notified", href: CLOUD_NOTIFY_URL},
features: [
"Everything in Cloud",
"250 GB encrypted storage", // placeholder
"Unlimited devices", // placeholder
"1-year version history", // placeholder
"Priority support",
],
},
];
/** Annual savings vs paying 12× the monthly price, as a whole percent (0 if none). */
export function annualSavingsPercent(tier: PricingTier): number {
if (tier.monthly <= 0 || tier.annual <= 0) return 0;
const full = tier.monthly * 12;
return Math.max(0, Math.round((1 - tier.annual / full) * 100));
}
export interface CloudFeature {
title: string;
body: string;
}
export const CLOUD_FEATURES: CloudFeature[] = [
{
title: "End-to-end encrypted",
body: "Everything is encrypted on your device before it leaves it. The server only ever stores opaque blobs — it literally cannot read your voices, generations, or captures.",
},
{
title: "Back up everything",
body: "Voice profiles, generations, and captures — including the original audio Voicebox keeps alongside each transcript — safe off your machine.",
},
{
title: "Sync across devices",
body: "Pick up on desktop or mobile. Your library follows you, encrypted in transit and at rest, with a per-device key.",
},
{
title: "Generate on the go",
body: "The mobile app pairs with your library so you can dictate and generate anywhere, then find it all waiting back at your desk.",
},
{
title: "You hold the keys",
body: "A recovery phrase you control is the root of your encryption. Lose your devices and you can still restore — but no one else, including us, ever can.",
},
{
title: "Optional & local-first",
body: "Voicebox works fully offline without an account. Cloud is an add-on for when you want backup and sync — never a requirement.",
},
];