Comprehensive admin + user dashboards (production-ready)

This commit is contained in:
Leon Serfaty
2026-06-07 17:54:30 -04:00
parent 155507f21a
commit f033f00379
122 changed files with 7878 additions and 805 deletions
+99 -12
View File
@@ -1,20 +1,107 @@
import type { Metadata } from "next";
import { LegalDoc, type LegalSection } from "@/components/marketing/legal-doc";
export const metadata: Metadata = { title: "Privacy Policy" };
const UPDATED = "June 7, 2026";
const SECTIONS: LegalSection[] = [
{
heading: "Information we collect",
paragraphs: ["We collect the following categories of information to operate PodcastYes:"],
bullets: [
"Account information you provide — your name, email address, and password (passwords are stored only as salted hashes).",
"Content you create — episode topics, prompts, configuration (tone, format, language, voices), generated scripts, audio, cover art, and repurposed content.",
"Billing information — your plan, subscription status, and payment-provider customer IDs. Card and bank details are handled by our payment processors and are never stored on our servers.",
"Usage and technical data — feature usage, monthly generation counts, API-key activity, IP address, browser/user-agent, and server logs used for security and debugging.",
],
},
{
heading: "How we use your information",
paragraphs: [
"We use your information to provide and improve the service: to authenticate you, generate and store your episodes, enforce plan limits, process payments, send transactional email, prevent abuse, and meet legal obligations. We do not sell your personal data, and we do not use your private content to train our own models.",
],
},
{
heading: "AI processing and sub-processors",
paragraphs: [
"Generating an episode requires sending the content you submit (and content derived from it) to our AI sub-processors so they can produce your script, audio, and artwork:",
],
bullets: [
"OpenAI — script generation, content moderation, and cover-art generation.",
"ElevenLabs — text-to-speech and multi-speaker dialogue synthesis.",
"These providers process your prompts and generated text under their own terms and security commitments. Only the data needed to perform the requested generation is shared.",
],
},
{
heading: "Payments",
paragraphs: [
"Subscriptions are processed by Stripe and PayPal. When you check out you interact with the provider directly; we receive only confirmation of your subscription status and identifiers needed to manage it. Please review the privacy policies of Stripe and PayPal for how they handle your payment data.",
],
},
{
heading: "Email",
paragraphs: [
"Transactional email (account verification, password resets, and episode-ready notifications) is delivered through Resend. We send only the information necessary to deliver these messages.",
],
},
{
heading: "Data retention",
paragraphs: [
"We retain your account and content for as long as your account is active. Generated assets (audio and artwork) are stored so we can deliver your episodes. When you delete an episode it is removed from our systems; when you delete your account, your personal data and content are deleted or anonymized except where we must retain records to comply with legal, tax, or accounting obligations.",
],
},
{
heading: "Your rights",
paragraphs: [
"Depending on where you live, you may have rights to access, correct, export, or delete your personal data, and to object to or restrict certain processing. You can edit your profile and delete your content from within the app, or contact us to exercise any of these rights. We will not discriminate against you for exercising them.",
],
},
{
heading: "Cookies and sessions",
paragraphs: [
"We use strictly-necessary cookies to keep you signed in and to secure your session. We do not use third-party advertising cookies.",
],
},
{
heading: "Security",
paragraphs: [
"We protect your data with encryption in transit, hashed credentials and API keys, scoped access controls, signed billing webhooks, and least-privilege storage. No method of transmission or storage is perfectly secure, but we work to protect your information and to respond promptly to any incident.",
],
},
{
heading: "Children",
paragraphs: [
"PodcastYes is not directed to children under 13 (or the minimum age required in your jurisdiction), and we do not knowingly collect their personal data.",
],
},
{
heading: "International transfers",
paragraphs: [
"We and our sub-processors may process your data in countries other than your own. Where required, we rely on appropriate safeguards for such transfers.",
],
},
{
heading: "Changes to this policy",
paragraphs: [
"We may update this policy from time to time. Material changes will be reflected by updating the date above and, where appropriate, by notifying you.",
],
},
{
heading: "Contact",
paragraphs: [
"Questions about this policy or your data? Email privacy@podcastyes.app and we'll be glad to help.",
],
},
];
export default function PrivacyPage() {
return (
<div className="container max-w-3xl py-20 md:py-24">
<h1 className="font-display text-4xl font-extrabold tracking-tight md:text-5xl">Privacy Policy</h1>
<p className="mt-4 text-muted-foreground">
We collect the account information you provide (name, email) and the content you create to
operate PodcastYes. Episode prompts are sent to our AI providers (OpenAI and ElevenLabs) to
generate scripts, audio, and artwork. Generated assets are stored to deliver your episodes.
We do not sell your personal data. Payment processing is handled by Stripe and PayPal.
</p>
<p className="mt-4 text-sm text-muted-foreground">
This is placeholder copy replace with your reviewed privacy policy before launch.
</p>
</div>
<LegalDoc
title="Privacy Policy"
updated={UPDATED}
intro="This Privacy Policy explains what information PodcastYes collects, how we use it, who we share it with, and the choices you have. It applies to your use of the PodcastYes website and application."
sections={SECTIONS}
/>
);
}
+98 -12
View File
@@ -1,20 +1,106 @@
import type { Metadata } from "next";
import { LegalDoc, type LegalSection } from "@/components/marketing/legal-doc";
export const metadata: Metadata = { title: "Terms of Service" };
const UPDATED = "June 7, 2026";
const SECTIONS: LegalSection[] = [
{
heading: "Acceptance of these terms",
paragraphs: [
"By creating an account or using PodcastYes (the \"Service\"), you agree to these Terms of Service. If you are using the Service on behalf of an organization, you represent that you are authorized to bind that organization to these terms.",
],
},
{
heading: "The Service",
paragraphs: [
"PodcastYes is an AI platform that turns a topic into a produced podcast episode — writing the script, synthesizing multi-voice audio, and generating cover art — and helps you repurpose that content. Features and limits vary by plan and may change as we improve the Service.",
],
},
{
heading: "Accounts and eligibility",
paragraphs: [
"You must provide accurate account information, keep your credentials and API keys confidential, and are responsible for all activity under your account. You must be old enough to form a binding contract in your jurisdiction. Notify us promptly of any unauthorized use.",
],
},
{
heading: "Acceptable use",
paragraphs: [
"You agree not to use the Service to create or distribute content that is illegal, infringing, deceptive, hateful, harassing, sexually exploitative, or that impersonates a real person's voice or identity without authorization. You may not attempt to bypass usage limits, security controls, or rate limits, or use the Service to build a competing model.",
],
bullets: [
"We screen topics and generated scripts with automated moderation and may flag, hold, or remove content that violates these terms.",
"We may suspend or terminate accounts that abuse the Service or put it, our providers, or other users at risk.",
],
},
{
heading: "AI-generated content and ownership",
paragraphs: [
"Subject to your compliance with these terms and the terms of our AI providers, you own the scripts, audio, and artwork you generate and are responsible for how you use and publish them. AI output can be inaccurate, biased, or unintentionally similar to existing works — you are responsible for reviewing it for accuracy, rights, and suitability before publishing. The Service and generated output are provided on an \"as is\" basis.",
],
},
{
heading: "Plans, billing, and cancellation",
paragraphs: [
"Paid plans are billed in advance through Stripe or PayPal on a recurring basis until cancelled. By subscribing you authorize us and our processors to charge your payment method for each renewal at the then-current price. You can cancel at any time from the billing page or provider portal; cancellation takes effect at the end of the current billing period. Except where required by law, payments are non-refundable.",
],
},
{
heading: "Usage limits",
paragraphs: [
"Each plan includes monthly allowances for scripts, audio, artwork, repurposing, seats, and maximum episode length. Allowances reset at the start of each calendar month and are enforced at generation time. Exceeding a limit pauses the relevant feature until the next period or until you upgrade.",
],
},
{
heading: "API access",
paragraphs: [
"Eligible plans may access the PodcastYes API using keys you generate. Keep keys secret; requests are attributed to, and count against, the owning account, and are subject to rate and usage limits. We may revoke keys that are abused.",
],
},
{
heading: "Third-party services",
paragraphs: [
"The Service relies on third parties including OpenAI, ElevenLabs, Stripe, PayPal, and Resend. Your use of features powered by these providers is also subject to their terms, and we are not responsible for their acts or omissions.",
],
},
{
heading: "Disclaimers and limitation of liability",
paragraphs: [
"To the maximum extent permitted by law, the Service is provided without warranties of any kind, and PodcastYes is not liable for indirect, incidental, or consequential damages, or for any loss of data, profits, or goodwill. Our total liability for any claim relating to the Service is limited to the amount you paid us in the twelve months before the claim.",
],
},
{
heading: "Termination",
paragraphs: [
"You may stop using the Service and delete your account at any time. We may suspend or terminate access if you breach these terms or to protect the Service. Provisions that by their nature should survive termination (such as ownership, disclaimers, and limitations of liability) will survive.",
],
},
{
heading: "Changes to these terms",
paragraphs: [
"We may update these terms as the Service evolves. Material changes will be reflected by updating the date above, and your continued use after changes take effect constitutes acceptance.",
],
},
{
heading: "Governing law",
paragraphs: [
"These terms are governed by the laws of the jurisdiction in which PodcastYes is established, without regard to conflict-of-laws rules. Nothing here limits any non-waivable rights you have under your local law.",
],
},
{
heading: "Contact",
paragraphs: ["Questions about these terms? Email legal@podcastyes.app."],
},
];
export default function TermsPage() {
return (
<div className="container max-w-3xl py-20 md:py-24">
<h1 className="font-display text-4xl font-extrabold tracking-tight md:text-5xl">Terms of Service</h1>
<p className="mt-4 text-muted-foreground">
These terms govern your use of PodcastYes. By creating an account you agree to use the
service lawfully and to retain responsibility for the content you generate. AI-generated
scripts, audio, and artwork are provided as-is; review them before publishing. Subscriptions
renew automatically until cancelled, and usage limits reset monthly.
</p>
<p className="mt-4 text-sm text-muted-foreground">
This is placeholder copy replace with your reviewed legal terms before launch.
</p>
</div>
<LegalDoc
title="Terms of Service"
updated={UPDATED}
intro="These Terms of Service govern your access to and use of PodcastYes. Please read them carefully — they include important information about your rights, billing, acceptable use, and the limits of our liability."
sections={SECTIONS}
/>
);
}