/legal-pages
Scaffolds the legal pages a public website needs. Output is a starting template — clearly marked at the top of each file: "This is a template. Have a lawyer review before going live."
Why this exists
Almost every public website needs at least: a Privacy Policy, Terms of Service, and (for EU/UK visitors or any tracking) a Cookie Policy plus consent banner. Without these:
- You expose yourself to GDPR / CCPA / PIPEDA / LGPD fines.
- You can't legally collect any user data, including IP/cookies/analytics.
- App stores reject mobile apps.
- Payment processors reject your account.
- Search engines (and your users) treat you as low-trust.
This skill produces baseline templates so you can launch — but they're templates, not legal advice. You always need a lawyer to review for your jurisdiction and business model.
When to use
- Starting a new website project.
- An existing site has no legal pages.
- Adding a new feature that changes data handling (analytics, payments, user accounts, cookies).
- After a
/web-launch-check flagged missing legal pages.
What it produces
1. Privacy Policy (/privacy or /privacy-policy)
Sections every privacy policy needs:
- Who we are — legal entity name, address, contact email.
- What data we collect — categorized:
- Information you give us (name, email, payment, content uploaded).
- Information we collect automatically (IP, browser, device, cookies, usage).
- Information from third parties (OAuth providers, analytics, advertisers).
- Why we collect it — legitimate interest, contract performance, consent, legal obligation. Be specific.
- Who we share it with — sub-processors (hosting, analytics, email, payment, support). List by category if not by name.
- How long we keep it — retention periods.
- Your rights — access, correction, deletion, portability, objection, withdraw consent.
- How to exercise rights — email address or DSAR endpoint, response within 30 days.
- International transfers — if servers are in another country, name the safeguards (SCCs, adequacy).
- Children's privacy — if not for under 13/16, say so explicitly.
- Cookie policy — link to the dedicated page or include a section.
- Changes — how you'll notify users of changes.
- Contact — DPO if you have one, or general contact.
- Effective date — last updated date at the top.
2. Terms of Service (/terms or /terms-of-service)
- Acceptance — by using the site, you accept these terms.
- Eligibility — minimum age, geographic restrictions.
- Account — registration, security, termination.
- Acceptable use — what users may and may not do (no harassment, no scraping, no IP infringement).
- User content — who owns it, what license you take, content moderation.
- Payments — pricing, billing, refunds, taxes.
- Intellectual property — your IP, trademarks, copyright.
- Disclaimers — service "as is," limitations of liability, indemnification.
- Termination — when you can suspend or terminate accounts.
- Governing law — which jurisdiction's law applies, dispute resolution (arbitration clauses are tricky — consult a lawyer).
- Changes — how you'll notify users.
- Contact — for legal notices.
3. Cookie Policy (/cookies) and consent banner
- What cookies we use — categorized:
- Strictly necessary (always on, no consent needed).
- Functional (preferences, language).
- Analytics (Plausible/GA/etc.).
- Marketing (Meta Pixel, Google Ads, etc.).
- Per-cookie table — name, purpose, expiry, first-party / third-party.
- How to manage — link to settings UI, browser settings.
Banner pattern:
┌─────────────────────────────────────────────────────────────┐
│ We use cookies to make this site work. │
│ Optional: analytics + marketing cookies (only with consent).│
│ │
│ [Accept all] [Reject all] [Customize] │
└─────────────────────────────────────────────────────────────┘
Rules the banner must follow:
- "Reject all" must be as easy as "Accept all" (no hidden behind clicks).
- No tracking/analytics scripts load until consent is given.
- Choice persisted (cookie or localStorage) so the user isn't asked again.
- Settings page lets the user change their mind.
4. Refund / Cancellation Policy (/refunds)
For any e-commerce or paid product:
- Refund window — typical 14–30 days, longer is friendlier.
- What's refundable — and what's not (digital goods consumed? services rendered?).
- How to request — link or email.
- Processing time — when the user gets their money back.
- Cancellation — for subscriptions, how to cancel and when it takes effect.
EU-specific: 14-day cooling-off period for distance contracts (Consumer Rights Directive).
5. Contact / Imprint (/contact or /imprint)
- Legal entity name (e.g., "Acme Inc.", "Acme GmbH").
- Registered address.
- Email — at least one human-monitored.
- Phone — required in some jurisdictions.
- Tax / company registration number — required in EU (Impressum), UK (Companies House number).
- VAT number — if EU/UK.
- Responsible person — director / managing partner — required in some EU countries.
6. (Recommended) Accessibility Statement (/accessibility)
- WCAG conformance level (AA target).
- Known issues being worked on.
- Contact for accessibility complaints.
Required by the European Accessibility Act for many sites in the EU. Strongly encouraged elsewhere.
7. (Recommended) Security disclosure (/.well-known/security.txt)
Contact: mailto:security@example.com
Expires: 2027-01-01T00:00:00.000Z
Preferred-Languages: en
Canonical: https://example.com/.well-known/security.txt
Acknowledgments: https://example.com/security-thanks
Operating method
- Detect the framework — Next.js, Astro, plain HTML, etc.
- Detect what exists — don't overwrite an existing privacy policy.
- Ask the user for the minimum information needed:
- Legal entity name
- Contact email
- Registered address (or "remote / TBD")
- Jurisdiction (US, EU, UK, other)
- What data is collected (none / analytics-only / accounts / payments / content)
- Age requirement (none / 13+ / 16+ / 18+)
- Generate the pages with placeholders clearly marked
[REPLACE: ...].
- Wire them into the layout — footer links to all required pages.
- Add the cookie banner if any tracking is used.
- Print a "still to do" list — every placeholder, every legal review needed.
Output format
Each file starts with:
<!--
TEMPLATE ONLY — NOT LEGAL ADVICE.
Have a lawyer in your jurisdiction review before going live.
Last template update: {{date}}
Generated by Claude Code Toolkit's /legal-pages skill.
-->
After generation, summary:
## Generated
- /src/pages/privacy.mdx — Privacy Policy template
- /src/pages/terms.mdx — Terms of Service template
- /src/pages/cookies.mdx — Cookie Policy template
- /src/components/CookieBanner.tsx — Cookie consent banner
- /src/pages/refunds.mdx — Refund Policy template (because you mentioned payments)
- /src/pages/contact.mdx — Imprint / Contact
## Wired into layout
- Footer now links to /privacy, /terms, /cookies, /contact
## Placeholders to fill in (search for [REPLACE:)
1. [REPLACE: legal entity name] — appears in 4 places
2. [REPLACE: registered address] — privacy.mdx, contact.mdx
3. [REPLACE: data retention period] — privacy.mdx
4. [REPLACE: governing law jurisdiction] — terms.mdx
## Before launch
- [ ] Have a lawyer review.
- [ ] Check that no tracking scripts load before consent.
- [ ] Confirm sitemap.xml includes the legal pages.
- [ ] Set the effective date on each page.
Boundaries
- Templates only. Always remind the user this is not legal advice.
- Don't pretend to be a lawyer. Flag any time the user is making a choice that has real legal weight (arbitration clauses, GDPR lawful basis, content moderation policy).
- Don't generate jurisdiction-specific clauses without asking. EU/UK/CA/US/Brazil/etc. have meaningfully different requirements.
- Default to the friendly choice when ambiguous — easier refund, longer cooling-off, plain language. Aggressive ToS clauses are user-hostile and often unenforceable.
- Never fabricate a real address or phone number. Use
[REPLACE: ...] placeholders.
1---2name: legal-pages3description: Scaffolds production-ready legal page templates for a website: Privacy Policy, Terms of Service, Cookie Policy, Cookie Consent banner, Refund Policy, Contact / Imprint. Templates are clearly marked as a starting point — the user must customize and have a lawyer review before going live.4---56# /legal-pages78Scaffolds the legal pages a public website needs. Output is a **starting template** — clearly marked at the top of each file: "This is a template. Have a lawyer review before going live."910## Why this exists1112Almost every public website needs at least: a Privacy Policy, Terms of Service, and (for EU/UK visitors or any tracking) a Cookie Policy plus consent banner. Without these:1314- You expose yourself to GDPR / CCPA / PIPEDA / LGPD fines.15- You can't legally collect any user data, including IP/cookies/analytics.16- App stores reject mobile apps.17- Payment processors reject your account.18- Search engines (and your users) treat you as low-trust.1920This skill produces baseline templates so you can launch — but they're **templates, not legal advice**. You always need a lawyer to review for your jurisdiction and business model.2122## When to use2324- Starting a new website project.25- An existing site has no legal pages.26- Adding a new feature that changes data handling (analytics, payments, user accounts, cookies).27- After a `/web-launch-check` flagged missing legal pages.2829## What it produces3031### 1. Privacy Policy (`/privacy` or `/privacy-policy`)3233Sections every privacy policy needs:3435- **Who we are** — legal entity name, address, contact email.36- **What data we collect** — categorized:37 - Information you give us (name, email, payment, content uploaded).38 - Information we collect automatically (IP, browser, device, cookies, usage).39 - Information from third parties (OAuth providers, analytics, advertisers).40- **Why we collect it** — legitimate interest, contract performance, consent, legal obligation. Be specific.41- **Who we share it with** — sub-processors (hosting, analytics, email, payment, support). List by category if not by name.42- **How long we keep it** — retention periods.43- **Your rights** — access, correction, deletion, portability, objection, withdraw consent.44- **How to exercise rights** — email address or DSAR endpoint, response within 30 days.45- **International transfers** — if servers are in another country, name the safeguards (SCCs, adequacy).46- **Children's privacy** — if not for under 13/16, say so explicitly.47- **Cookie policy** — link to the dedicated page or include a section.48- **Changes** — how you'll notify users of changes.49- **Contact** — DPO if you have one, or general contact.50- **Effective date** — last updated date at the top.5152### 2. Terms of Service (`/terms` or `/terms-of-service`)5354- **Acceptance** — by using the site, you accept these terms.55- **Eligibility** — minimum age, geographic restrictions.56- **Account** — registration, security, termination.57- **Acceptable use** — what users may and may not do (no harassment, no scraping, no IP infringement).58- **User content** — who owns it, what license you take, content moderation.59- **Payments** — pricing, billing, refunds, taxes.60- **Intellectual property** — your IP, trademarks, copyright.61- **Disclaimers** — service "as is," limitations of liability, indemnification.62- **Termination** — when you can suspend or terminate accounts.63- **Governing law** — which jurisdiction's law applies, dispute resolution (arbitration clauses are tricky — consult a lawyer).64- **Changes** — how you'll notify users.65- **Contact** — for legal notices.6667### 3. Cookie Policy (`/cookies`) and consent banner6869- **What cookies we use** — categorized:70 - Strictly necessary (always on, no consent needed).71 - Functional (preferences, language).72 - Analytics (Plausible/GA/etc.).73 - Marketing (Meta Pixel, Google Ads, etc.).74- **Per-cookie table** — name, purpose, expiry, first-party / third-party.75- **How to manage** — link to settings UI, browser settings.7677Banner pattern:7879```80┌─────────────────────────────────────────────────────────────┐81│ We use cookies to make this site work. │82│ Optional: analytics + marketing cookies (only with consent).│83│ │84│ [Accept all] [Reject all] [Customize] │85└─────────────────────────────────────────────────────────────┘86```8788Rules the banner must follow:89- "Reject all" must be as easy as "Accept all" (no hidden behind clicks).90- No tracking/analytics scripts load until consent is given.91- Choice persisted (cookie or localStorage) so the user isn't asked again.92- Settings page lets the user change their mind.9394### 4. Refund / Cancellation Policy (`/refunds`)9596For any e-commerce or paid product:9798- **Refund window** — typical 14–30 days, longer is friendlier.99- **What's refundable** — and what's not (digital goods consumed? services rendered?).100- **How to request** — link or email.101- **Processing time** — when the user gets their money back.102- **Cancellation** — for subscriptions, how to cancel and when it takes effect.103104EU-specific: 14-day cooling-off period for distance contracts (Consumer Rights Directive).105106### 5. Contact / Imprint (`/contact` or `/imprint`)107108- **Legal entity name** (e.g., "Acme Inc.", "Acme GmbH").109- **Registered address.**110- **Email** — at least one human-monitored.111- **Phone** — required in some jurisdictions.112- **Tax / company registration number** — required in EU (Impressum), UK (Companies House number).113- **VAT number** — if EU/UK.114- **Responsible person** — director / managing partner — required in some EU countries.115116### 6. (Recommended) Accessibility Statement (`/accessibility`)117118- WCAG conformance level (AA target).119- Known issues being worked on.120- Contact for accessibility complaints.121122Required by the European Accessibility Act for many sites in the EU. Strongly encouraged elsewhere.123124### 7. (Recommended) Security disclosure (`/.well-known/security.txt`)125126```127Contact: mailto:security@example.com128Expires: 2027-01-01T00:00:00.000Z129Preferred-Languages: en130Canonical: https://example.com/.well-known/security.txt131Acknowledgments: https://example.com/security-thanks132```133134## Operating method1351361. **Detect the framework** — Next.js, Astro, plain HTML, etc.1372. **Detect what exists** — don't overwrite an existing privacy policy.1383. **Ask the user** for the minimum information needed:139 - Legal entity name140 - Contact email141 - Registered address (or "remote / TBD")142 - Jurisdiction (US, EU, UK, other)143 - What data is collected (none / analytics-only / accounts / payments / content)144 - Age requirement (none / 13+ / 16+ / 18+)1454. **Generate the pages** with placeholders clearly marked `[REPLACE: ...]`.1465. **Wire them into the layout** — footer links to all required pages.1476. **Add the cookie banner** if any tracking is used.1487. **Print a "still to do" list** — every placeholder, every legal review needed.149150## Output format151152Each file starts with:153154```html155<!--156 TEMPLATE ONLY — NOT LEGAL ADVICE.157 Have a lawyer in your jurisdiction review before going live.158 Last template update: {{date}}159 Generated by Claude Code Toolkit's /legal-pages skill.160-->161```162163After generation, summary:164165```166## Generated167- /src/pages/privacy.mdx — Privacy Policy template168- /src/pages/terms.mdx — Terms of Service template169- /src/pages/cookies.mdx — Cookie Policy template170- /src/components/CookieBanner.tsx — Cookie consent banner171- /src/pages/refunds.mdx — Refund Policy template (because you mentioned payments)172- /src/pages/contact.mdx — Imprint / Contact173174## Wired into layout175- Footer now links to /privacy, /terms, /cookies, /contact176177## Placeholders to fill in (search for [REPLACE:)1781. [REPLACE: legal entity name] — appears in 4 places1792. [REPLACE: registered address] — privacy.mdx, contact.mdx1803. [REPLACE: data retention period] — privacy.mdx1814. [REPLACE: governing law jurisdiction] — terms.mdx182183## Before launch184- [ ] Have a lawyer review.185- [ ] Check that no tracking scripts load before consent.186- [ ] Confirm sitemap.xml includes the legal pages.187- [ ] Set the effective date on each page.188```189190## Boundaries191192- **Templates only.** Always remind the user this is not legal advice.193- **Don't pretend to be a lawyer.** Flag any time the user is making a choice that has real legal weight (arbitration clauses, GDPR lawful basis, content moderation policy).194- **Don't generate jurisdiction-specific clauses without asking.** EU/UK/CA/US/Brazil/etc. have meaningfully different requirements.195- **Default to the friendly choice** when ambiguous — easier refund, longer cooling-off, plain language. Aggressive ToS clauses are user-hostile and often unenforceable.196- **Never fabricate a real address or phone number.** Use `[REPLACE: ...]` placeholders.