diff --git a/app/src/assets/sponsors/openai.svg b/app/src/assets/sponsors/openai.svg new file mode 100644 index 00000000..859d7af3 --- /dev/null +++ b/app/src/assets/sponsors/openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/components/ServerTab/AboutPage.tsx b/app/src/components/ServerTab/AboutPage.tsx index aa8a1d5a..3a1909fc 100644 --- a/app/src/components/ServerTab/AboutPage.tsx +++ b/app/src/components/ServerTab/AboutPage.tsx @@ -3,6 +3,7 @@ import type { CSSProperties, ReactNode } from 'react'; import { useEffect, useState } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import voiceboxLogo from '@/assets/voicebox-logo.png'; +import { SPONSORS } from '@/lib/sponsors'; import { usePlatform } from '@/platform/PlatformContext'; function FadeIn({ delay = 0, children }: { delay?: number; children: ReactNode }) { @@ -116,7 +117,37 @@ export function AboutPage() { - + {SPONSORS.length > 0 && ( + +
+

+ Sponsored by +

+
+ {SPONSORS.map((sponsor) => ( + + {sponsor.logoAlt + + ))} +
+
+
+ )} + +

\ No newline at end of file diff --git a/landing/src/app/page.tsx b/landing/src/app/page.tsx index b3349477..8faa7411 100644 --- a/landing/src/app/page.tsx +++ b/landing/src/app/page.tsx @@ -11,6 +11,7 @@ import {Footer} from "@/components/Footer"; import {Navbar} from "@/components/Navbar"; import {Personalities} from "@/components/Personalities"; import {AppleIcon, LinuxIcon, WindowsIcon} from "@/components/PlatformIcons"; +import {SponsorPromo} from "@/components/SponsorPromo"; import {SupportedModels} from "@/components/SupportedModels"; import {TutorialsSection} from "@/components/TutorialsSection"; import {VoiceCreator} from "@/components/VoiceCreator"; @@ -130,6 +131,9 @@ export default function Home() { + {/* ── Sponsor promo ────────────────────────────────────────── */} + + {/* ── Features ─────────────────────────────────────────────── */} diff --git a/landing/src/app/sponsors/page.tsx b/landing/src/app/sponsors/page.tsx new file mode 100644 index 00000000..c5e1bc18 --- /dev/null +++ b/landing/src/app/sponsors/page.tsx @@ -0,0 +1,324 @@ +'use client'; + +import { ArrowRight, Check, Coffee, Mail } from 'lucide-react'; +import { useEffect, useState } from 'react'; +import { Footer } from '@/components/Footer'; +import { Navbar } from '@/components/Navbar'; +import { + DONATE_URL, + SPONSOR_CHECKOUT_URL, + SPONSOR_CONTACT_EMAIL, +} from '@/lib/constants'; + +function formatCount(n: number): string { + if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1).replace(/\.0$/, '')}M`; + if (n >= 1_000) return `${(n / 1_000).toFixed(0)}k`; + return n.toLocaleString(); +} + +export default function SponsorsPage() { + const [downloads, setDownloads] = useState(null); + const [stars, setStars] = useState(null); + + useEffect(() => { + fetch('/api/releases') + .then((res) => (res.ok ? res.json() : null)) + .then((data) => { + if (data?.totalDownloads != null) setDownloads(data.totalDownloads); + }) + .catch(() => {}); + fetch('/api/stars') + .then((res) => (res.ok ? res.json() : null)) + .then((data) => { + if (typeof data?.count === 'number') setStars(data.count); + }) + .catch(() => {}); + }, []); + + return ( + <> + + + {/* ── Hero ─────────────────────────────────────────────────── */} +

+
+
+
+
+ +
+
+ Corporate sponsorship +
+ +

+ Get your brand in front of half a million creators. +

+ +

+ Voicebox is the open-source AI voice studio used by creators, podcasters, voice + artists, writers, developers, accessibility users, and curious humans all over the + world. Sponsor the project, get your logo in front of all of them. +

+ + +
+
+ + {/* ── Traction ────────────────────────────────────────────── */} +
+
+
+
+ Reach +
+

+ Real distribution, real attention. +

+
+ +
+ + + + +
+ +

+ Voicebox users are content creators, podcasters, voice artists, writers, developers, + accessibility users, hobbyists, and AI enthusiasts. They picked a local-first tool + over a cloud subscription — they care about owning their software and the brands + behind it. +

+
+
+ + {/* ── What you get ────────────────────────────────────────── */} +
+
+
+
+ Placement +
+

+ Where your logo shows up. +

+
+ +
+
+ Headline placement +
+

+ voicebox.sh — directly below the hero. +

+

+ Your logo lives in the prime slot on the homepage — the first thing every visitor + sees after the hero. Same row as every other corporate sponsor, linked to your URL + of choice. This is the placement that actually moves the needle. +

+ + {/* Preview of what the placement looks like on the homepage */} +
+
+
+ Sponsored by +
+
+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + Example sponsor logo +
+
+

+ Example only — actual sponsor logos appear here once placements are live. +

+
+
+ +
+ + + +
+
+
+ + {/* ── Pricing ─────────────────────────────────────────────── */} + + + {/* ── Individual / policy ─────────────────────────────────── */} +
+
+
+
+ +

Not a company?

+
+

+ Individual supporters keep Voicebox running too. Drop a tip on Buy Me a Coffee and + your name shows up in the supporters list. +

+ + Support on Buy Me a Coffee + + +
+ +
+

+ Who we accept +

+

+ Voicebox is local-first and privacy-first. We don't accept sponsorships from + companies whose business model conflicts with that — voice-data brokers, ad-tech + built on speech, or surveillance vendors. Everyone else is welcome. +

+
+
+
+ +