# FuelAlert — Legal Pages Spec ## Context for Claude Code You are generating four legal pages for **FuelAlert**, a UK consumer subscription web/mobile app that shows real-time UK fuel prices and forecasts. ### Reference comparable (structural check, NOT for copying) A near-identical business already exists and has competent legal pages: **Fuel Finder UK** at https://www.fuel-finder.uk, operated by Scott Benson as a UK sole trader. Same business model, same data sources, same jurisdiction. **Use it ONLY as a structural sanity check.** Do not copy any text. Their content is copyrighted and their specific processors / retention periods / business decisions are not FuelAlert's. What Fuel Finder UK does well that this spec already incorporates: - Explicit sole trader disclosure naming the operator - Named ICO registration number in the Privacy Policy - Specific named processors (Stripe, hosting provider, email provider, analytics, mapping services) with what data flows to each - Strong price-accuracy disclaimer in Terms ("prices may not reflect real-time changes, always verify at the pump") - "AS IS" / "AS AVAILABLE" basis with liability limitations - ICO complaint route clearly stated - Account deletion flow that cancels paid subscription first What FuelAlert must do BETTER than Fuel Finder UK: - **Standalone Refund & Cancellation Policy page** — Fuel Finder UK appears to bundle this into Terms. Stripe specifically asks for a refund policy; keep it as a separate page at `/legal/refund`. - **Express-consent checkbox at subscription checkout** for the 14-day cooling-off period under Consumer Contracts Regulations 2013 (see Refund Policy section below). This is the single most important implementation detail in the entire spec. If you find yourself generating content that overlaps verbatim with Fuel Finder UK or any other site, stop and rewrite in your own words. Legal pages are copyrighted works. **Business operator (data controller):** - Name: Ovidiu Ungureanu - Trading as: FuelAlert - Status: Sole trader (not a limited company — do not use "Ltd", "Limited", or any corporate form) - Location: Peterborough, United Kingdom - Contact email: [hello@fuelalert.co.uk] - ICO registration number: [PLACEHOLDER: ZAxxxxxxx — Ovidiu to register at ico.org.uk before launch, fee ~£40/yr] **Service:** - UK fuel price comparison and forecasting - Free tier + two paid subscription tiers: Daily (£0.99/mo) and Smart (£2.49/mo); annual billing also offered - Data sources: UK government Fuel Finder / Pump Watch open data, ONS Postcode Directory (OGL/Crown Copyright) - Processes: email address, postcode/location data, account credentials, payment data (via Stripe), usage telemetry **Jurisdiction:** - England and Wales - Consumer law: Consumer Rights Act 2015, Consumer Contracts (Information, Cancellation and Additional Charges) Regulations 2013 ("CCRs") - Data protection: UK GDPR + Data Protection Act 2018, PECR for cookies/marketing - Digital markets: Digital Markets, Competition and Consumers Act 2024 ("DMCC") **Tech stack & integration:** - Laravel + Blade for server-rendered pages (NOT Vue components — these must render in raw HTML for Stripe reviewers and SEO) - Route prefix: `/legal/*` - Layout: extend the existing site layout but with a readable prose container (max-width ~720px, generous line-height) - Each page has a `last_updated` date in front matter — set to today - All pages must be linkable from the footer and accessible without JavaScript ### ⚠️ CRITICAL: Server-rendered Blade only, NOT Vue The rest of this application is a Vue SPA. **That is irrelevant for these pages.** The legal pages must be server-rendered Blade templates. Rules: - Files live at `resources/views/legal/{name}.blade.php` — never `.vue` - Body content must be plain HTML with Blade directives (`@extends`, `@section`, `{{ }}`) - No Vue components anywhere in the page body — no custom tags like ``, no `
`, no Vue mounting points - No client-side rendering for the legal content itself — Alpine.js is acceptable only for the cookie banner show/hide behaviour, nothing else - Pages must work fully with JavaScript disabled **Verification test (run after generation):** ```bash curl -s https://[host]/legal/privacy | grep -i "data controller" curl -s https://[host]/legal/terms | grep -i "subscription" curl -s https://[host]/legal/refund | grep -i "14-day" curl -s https://[host]/legal/cookies | grep -i "essential" ``` Each command must return matching lines from the raw HTML response. If any returns empty, the page has been built as a client-rendered component and must be redone as Blade. If you find yourself reaching for `