Add legal policy pages and shared layout component
- Add Cookie Policy view documenting essential cookies (session, CSRF, remember_me, fa_location) and cookieless Umami analytics - Add Privacy Policy view covering UK GDPR compliance, data categories, lawful bases, processors, retention, and user rights - Add Refund & Cancellation Policy view explaining 14-day cooling-off period under Consumer Contracts Regulations 2013 and express-consent flow - Add Terms of Service view defining account rules, subscription billing, and governing law - Create shared legal layout component with FuelAlert header, footer with cross-links, and consistent typography - Add feature tests covering all four legal pages and their cross-links - All policies include placeholders for ICO registration number, email, and hosting/email providers pending production config
This commit is contained in:
@@ -402,9 +402,10 @@
|
||||
<div class="space-y-4">
|
||||
<h5 class="font-black text-xs text-zinc-800 tracking-widest">Legal</h5>
|
||||
<ul class="space-y-2 text-sm text-zinc-500">
|
||||
<li><a class="hover:text-accent transition-colors" href="#">Privacy Policy</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="#">Terms of Service</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="#">Cookie Settings</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="/legal/privacy">Privacy Policy</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="/legal/terms">Terms of Service</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="/legal/refund">Refund & Cancellation</a></li>
|
||||
<li><a class="hover:text-accent transition-colors" href="/legal/cookies">Cookie Policy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
53
resources/views/components/layouts/legal.blade.php
Normal file
53
resources/views/components/layouts/legal.blade.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
@include('partials.head', ['title' => $title ?? null])
|
||||
@isset($metaDescription)
|
||||
<meta name="description" content="{{ $metaDescription }}">
|
||||
@endisset
|
||||
</head>
|
||||
<body class="min-h-screen bg-[#f5ede5] text-zinc-900 antialiased">
|
||||
<header class="border-b border-zinc-300 bg-white/70 backdrop-blur">
|
||||
<div class="mx-auto flex max-w-3xl items-center justify-between px-6 py-4">
|
||||
<a href="/" class="flex items-center gap-2">
|
||||
<span class="flex h-8 w-8 items-center justify-center rounded bg-accent text-white">
|
||||
<iconify-icon icon="lucide:fuel"></iconify-icon>
|
||||
</span>
|
||||
<span class="font-display text-xl font-black tracking-tighter text-accent">FuelAlert</span>
|
||||
</a>
|
||||
<a href="/" class="text-sm text-zinc-600 hover:text-accent">← Back to site</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="mx-auto max-w-3xl px-6 py-12">
|
||||
<article class="space-y-6 leading-relaxed text-zinc-800">
|
||||
<header class="space-y-3 border-b border-zinc-300 pb-6">
|
||||
<h1 class="font-display text-3xl font-black tracking-tight text-zinc-900 md:text-4xl">
|
||||
{{ $heading }}
|
||||
</h1>
|
||||
@isset($lastUpdated)
|
||||
<p class="text-sm text-zinc-500">Last updated: {{ $lastUpdated }}</p>
|
||||
@endisset
|
||||
</header>
|
||||
|
||||
{{ $slot }}
|
||||
</article>
|
||||
</main>
|
||||
|
||||
<footer class="mt-16 border-t border-zinc-300 bg-white/50">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 text-sm text-zinc-600">
|
||||
<nav class="flex flex-wrap gap-x-6 gap-y-2">
|
||||
<a class="hover:text-accent" href="{{ route('legal.privacy') }}">Privacy Policy</a>
|
||||
<a class="hover:text-accent" href="{{ route('legal.terms') }}">Terms of Service</a>
|
||||
<a class="hover:text-accent" href="{{ route('legal.refund') }}">Refund & Cancellation</a>
|
||||
<a class="hover:text-accent" href="{{ route('legal.cookies') }}">Cookie Policy</a>
|
||||
</nav>
|
||||
<p class="mt-6 text-xs text-zinc-500">
|
||||
© {{ date('Y') }} FuelAlert. A trading name of Ovidiu Ungureanu, sole trader, Peterborough, United Kingdom.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
112
resources/views/legal/cookies.blade.php
Normal file
112
resources/views/legal/cookies.blade.php
Normal file
@@ -0,0 +1,112 @@
|
||||
{{-- DRAFT: Generated {{ date('Y-m-d') }}. Review by UK-qualified solicitor recommended before launch. --}}
|
||||
<x-layouts.legal
|
||||
title="Cookie Policy"
|
||||
heading="Cookie Policy"
|
||||
lastUpdated="{{ now()->format('j F Y') }}"
|
||||
metaDescription="The cookies and similar technologies FuelAlert uses, and how to manage them.">
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">1. What cookies are</h2>
|
||||
<p>
|
||||
Cookies are small text files placed on your device by websites you visit. They allow a
|
||||
site to remember things between visits (for example, that you're signed in) and to
|
||||
measure how the site is used. This policy explains how FuelAlert uses cookies and
|
||||
similar technologies, and how you can manage them.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">2. Cookies we use</h2>
|
||||
<p>
|
||||
FuelAlert uses only <strong>essential</strong> cookies — cookies that are strictly
|
||||
necessary to deliver the service you've asked for. Under the Privacy and Electronic
|
||||
Communications Regulations (PECR), these do not require your consent, but we list them
|
||||
here for transparency.
|
||||
</p>
|
||||
<p>
|
||||
For aggregated usage metrics we run our own self-hosted instance of
|
||||
<strong>Umami Analytics</strong>, which is <strong>cookieless</strong> — it does
|
||||
not set any cookies, does not use device fingerprinting, and does not track you across
|
||||
sites. Because no personal data is collected, no consent is required.
|
||||
</p>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full border-collapse text-left text-sm">
|
||||
<thead class="bg-zinc-100">
|
||||
<tr>
|
||||
<th class="border border-zinc-300 px-3 py-2 font-semibold">Name</th>
|
||||
<th class="border border-zinc-300 px-3 py-2 font-semibold">Purpose</th>
|
||||
<th class="border border-zinc-300 px-3 py-2 font-semibold">Duration</th>
|
||||
<th class="border border-zinc-300 px-3 py-2 font-semibold">Type</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="border border-zinc-300 px-3 py-2 font-mono text-xs">fuel_alert_session</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Keeps you signed in and maintains your session state.</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Session</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Essential</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="border border-zinc-300 px-3 py-2 font-mono text-xs">XSRF-TOKEN</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Protects against cross-site request forgery attacks on forms and account actions.</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Session</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Essential</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="border border-zinc-300 px-3 py-2 font-mono text-xs">remember_web_*</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">"Remember me" — keeps you signed in across browser restarts if you tick the box at login.</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Up to 5 years</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Essential</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="border border-zinc-300 px-3 py-2 font-mono text-xs">fa_location</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Stores your most recent postcode search so we can show local prices on return visits without re-querying.</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">30 days</td>
|
||||
<td class="border border-zinc-300 px-3 py-2">Essential</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="text-sm text-zinc-600">
|
||||
<strong>[PLACEHOLDER:</strong> Update the table above if any cookie names change. If a
|
||||
marketing tool is added in future, a Marketing row will be added here and consent will
|
||||
be requested before it loads.<strong>]</strong>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">3. Your choices</h2>
|
||||
<p>
|
||||
Because we currently only use essential cookies, there is nothing to opt in or out of
|
||||
on FuelAlert at this time. If we add non-essential cookies in future (for example,
|
||||
analytics or marketing), we will present a consent banner and you will be able to
|
||||
accept, reject, or customise your choice. We will not set non-essential cookies before
|
||||
you have given consent.
|
||||
</p>
|
||||
<p>
|
||||
All major browsers also let you view, block, or delete cookies. The ICO publishes
|
||||
guidance on managing cookies in your browser:
|
||||
<a class="text-accent underline" href="https://ico.org.uk/your-data-matters/online/cookies/" target="_blank" rel="noopener">ico.org.uk · managing cookies</a>.
|
||||
Note that blocking essential cookies will prevent you from signing in.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">4. Changes to this policy</h2>
|
||||
<p>
|
||||
We may update this policy if we add new cookies, change our providers, or in response to
|
||||
legal or guidance changes. Material changes will be highlighted by an updated
|
||||
"Last updated" date at the top of this page.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">5. Contact</h2>
|
||||
<p>
|
||||
Questions about cookies? Email
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
</p>
|
||||
</section>
|
||||
</x-layouts.legal>
|
||||
205
resources/views/legal/privacy.blade.php
Normal file
205
resources/views/legal/privacy.blade.php
Normal file
@@ -0,0 +1,205 @@
|
||||
{{-- DRAFT: Generated {{ date('Y-m-d') }}. Review by UK-qualified solicitor recommended before launch. --}}
|
||||
<x-layouts.legal
|
||||
title="Privacy Policy"
|
||||
heading="Privacy Policy"
|
||||
lastUpdated="{{ now()->format('j F Y') }}"
|
||||
metaDescription="How FuelAlert collects, uses and protects your personal data under UK GDPR.">
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">1. Who we are</h2>
|
||||
<p>
|
||||
FuelAlert is a trading name of <strong>Ovidiu Ungureanu</strong>, a sole trader based in
|
||||
Peterborough, United Kingdom. For the purposes of UK data protection law, Ovidiu Ungureanu
|
||||
is the <strong>data controller</strong> for personal data collected through this service.
|
||||
</p>
|
||||
<p>
|
||||
We are registered with the UK Information Commissioner's Office (ICO).
|
||||
Our registration number is <strong>[PLACEHOLDER: ICO registration number ZAxxxxxxx]</strong>.
|
||||
</p>
|
||||
<p>
|
||||
If you have any questions about this policy or how we handle your personal data, contact us at
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">2. What data we collect</h2>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Account data</h3>
|
||||
<p>Your email address, a hashed password, and the date you created your account.</p>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Location data</h3>
|
||||
<p>
|
||||
Postcodes or place names you search for. With your permission, your device's precise
|
||||
location to find nearby stations. Derived approximate location used to query our database.
|
||||
</p>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Payment data</h3>
|
||||
<p>
|
||||
Payment card details are collected and processed by <strong>Stripe</strong>, our payment
|
||||
processor. FuelAlert does not see, store, or otherwise have access to your card numbers.
|
||||
We retain only your Stripe customer ID and subscription metadata (plan, billing cycle,
|
||||
renewal date).
|
||||
</p>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Usage data</h3>
|
||||
<p>
|
||||
Features you use, queries you make, and alerts you configure — used to deliver the
|
||||
service and improve it.
|
||||
</p>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Technical data</h3>
|
||||
<p>
|
||||
IP address, browser type and version, device type, and operating system — used for
|
||||
security, fraud prevention, and basic analytics.
|
||||
</p>
|
||||
|
||||
<h3 class="font-semibold text-zinc-900">Marketing preferences</h3>
|
||||
<p>Only collected if you opt in to marketing communications.</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">3. Lawful basis for processing</h2>
|
||||
<p>We process your personal data under the following bases of UK GDPR Article 6:</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li><strong>Account creation and service delivery</strong> — contract (Art. 6(1)(b)).</li>
|
||||
<li><strong>Payment processing</strong> — contract (Art. 6(1)(b)).</li>
|
||||
<li><strong>Security and fraud prevention</strong> — legitimate interests (Art. 6(1)(f)).</li>
|
||||
<li><strong>Analytics and product improvement</strong> — legitimate interests, with opt-out via our cookie banner where applicable.</li>
|
||||
<li><strong>Marketing emails</strong> — consent (Art. 6(1)(a)). You can withdraw consent at any time.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">4. How we use your data</h2>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>To create and operate your account (contract).</li>
|
||||
<li>To deliver fuel price information and alerts you have configured (contract).</li>
|
||||
<li>To process subscription payments via Stripe (contract).</li>
|
||||
<li>To keep our service secure and prevent abuse (legitimate interests).</li>
|
||||
<li>To understand which features are used and improve the product (legitimate interests).</li>
|
||||
<li>To respond to your support enquiries (contract / legitimate interests).</li>
|
||||
<li>To send marketing emails if you have opted in (consent).</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">5. Who we share data with</h2>
|
||||
<p>We use the following processors to deliver the service. We do not sell your data to anyone.</p>
|
||||
<ul class="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Stripe</strong> — payment processing. Card details, billing address,
|
||||
and subscription events flow to Stripe. See
|
||||
<a class="text-accent underline" href="https://stripe.com/privacy" target="_blank" rel="noopener">Stripe's privacy policy</a>.
|
||||
</li>
|
||||
<li><strong>[PLACEHOLDER: Hosting provider]</strong> — infrastructure where our application and database run.</li>
|
||||
<li><strong>[PLACEHOLDER: Transactional email provider]</strong> — sends account, billing and alert emails on our behalf.</li>
|
||||
<li>
|
||||
<strong>Umami Analytics</strong> — we run our own self-hosted Umami instance to
|
||||
collect aggregated, cookieless usage metrics (pages viewed, referrer, country, device
|
||||
type). No personal data is collected and no analytics data is shared with third
|
||||
parties.
|
||||
</li>
|
||||
<li><strong>[PLACEHOLDER: Notification providers]</strong> — if you opt in to push, WhatsApp, or SMS alerts, the chosen provider will be named here.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">6. International transfers</h2>
|
||||
<p>
|
||||
Some of our processors (notably Stripe) operate outside the UK and EEA, including in the
|
||||
United States. Where personal data is transferred internationally, we rely on appropriate
|
||||
safeguards under UK GDPR: the UK International Data Transfer Addendum to the EU Standard
|
||||
Contractual Clauses, or an equivalent mechanism.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">7. How long we keep data</h2>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li><strong>Active account data:</strong> for as long as your account is open, plus 12 months after closure.</li>
|
||||
<li><strong>Payment records:</strong> 6 years, to meet HMRC requirements for self-employed traders.</li>
|
||||
<li><strong>Marketing data:</strong> until you withdraw consent.</li>
|
||||
<li><strong>Logs and analytics:</strong> a maximum of 24 months.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">8. Your rights under UK GDPR</h2>
|
||||
<p>You have the following rights in relation to your personal data:</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li><strong>Right of access</strong> — ask for a copy of the data we hold about you.</li>
|
||||
<li><strong>Right to rectification</strong> — ask us to correct inaccurate data.</li>
|
||||
<li><strong>Right to erasure</strong> ("right to be forgotten") — ask us to delete your data.</li>
|
||||
<li><strong>Right to restrict processing</strong> — ask us to pause processing in certain circumstances.</li>
|
||||
<li><strong>Right to data portability</strong> — receive your data in a machine-readable format.</li>
|
||||
<li><strong>Right to object</strong> — object to processing based on legitimate interests.</li>
|
||||
<li><strong>Rights related to automated decision-making</strong> — we do <strong>not</strong> make solely automated decisions with legal or similarly significant effects on you.</li>
|
||||
<li><strong>Right to withdraw consent</strong> — where we rely on consent (e.g. marketing).</li>
|
||||
</ul>
|
||||
<p>
|
||||
To exercise any of these rights, email
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
We will respond within one month.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">9. Cookies</h2>
|
||||
<p>
|
||||
We use a small number of cookies to operate the service. Full details — including
|
||||
categories and how to change your choices — are in our
|
||||
<a class="text-accent underline" href="{{ route('legal.cookies') }}">Cookie Policy</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">10. Security</h2>
|
||||
<p>
|
||||
All traffic between your device and our service is encrypted with HTTPS. Passwords are
|
||||
stored as one-way hashes — we never see your plaintext password. Sensitive fields in
|
||||
our database are protected by access controls, and our infrastructure receives regular
|
||||
security updates. No system is ever 100% secure; if a breach occurs that affects you, we
|
||||
will notify you and the ICO as required by law.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">11. Children</h2>
|
||||
<p>
|
||||
FuelAlert is not directed at children. We do not knowingly collect data from anyone under
|
||||
16. If you believe a child has provided us with personal data, contact us and we will
|
||||
delete it.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">12. Complaints</h2>
|
||||
<p>
|
||||
We hope you'll contact us first if you have a complaint, so we can try to put it right.
|
||||
You also have the right to lodge a complaint with the UK Information Commissioner's Office
|
||||
at any time.
|
||||
</p>
|
||||
<p>
|
||||
ICO website: <a class="text-accent underline" href="https://ico.org.uk" target="_blank" rel="noopener">ico.org.uk</a>
|
||||
· ICO helpline: 0303 123 1113.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">13. Changes to this policy</h2>
|
||||
<p>
|
||||
We may update this policy from time to time. If we make material changes we will notify
|
||||
registered users by email. Non-material changes will be shown by an updated "Last updated"
|
||||
date at the top of this page.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">14. Contact</h2>
|
||||
<p>
|
||||
For any privacy queries, email
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
</p>
|
||||
</section>
|
||||
</x-layouts.legal>
|
||||
110
resources/views/legal/refund.blade.php
Normal file
110
resources/views/legal/refund.blade.php
Normal file
@@ -0,0 +1,110 @@
|
||||
{{-- DRAFT: Generated {{ date('Y-m-d') }}. Review by UK-qualified solicitor recommended before launch. --}}
|
||||
<x-layouts.legal
|
||||
title="Refund & Cancellation Policy"
|
||||
heading="Refund & Cancellation Policy"
|
||||
lastUpdated="{{ now()->format('j F Y') }}"
|
||||
metaDescription="Your right to cancel a FuelAlert subscription, including the 14-day cooling-off period under UK law.">
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">1. Your 14-day right to cancel</h2>
|
||||
<p>
|
||||
Under the <strong>Consumer Contracts (Information, Cancellation and Additional Charges)
|
||||
Regulations 2013</strong>, you have <strong>14 days</strong> from the date you subscribe
|
||||
to a paid plan to cancel without giving a reason. This is sometimes called the
|
||||
"cooling-off period".
|
||||
</p>
|
||||
<p>
|
||||
This 14-day right applies to <strong>new subscribers only</strong>. It does not apply to
|
||||
subsequent automatic renewals of an existing subscription.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3 rounded-lg border-l-4 border-accent bg-white/70 p-6">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">2. Express consent to start the service immediately</h2>
|
||||
<p>
|
||||
When you subscribe, we ask you to choose whether the paid features should be available
|
||||
to you immediately. If you tick the consent box and start using paid features within the
|
||||
14-day window, you expressly acknowledge that:
|
||||
</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>The service is being supplied to you straight away;</li>
|
||||
<li>
|
||||
<strong>You will lose your right to cancel under the Consumer Contracts Regulations
|
||||
2013 once the service has been fully supplied</strong> (i.e. once you have used the
|
||||
paid features during the cooling-off period).
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
If you do <strong>not</strong> tick the express-consent box, your subscription is still
|
||||
created but paid features remain inactive until the cooling-off period ends, or until
|
||||
you change your mind and confirm consent.
|
||||
</p>
|
||||
<p>
|
||||
If you cancel within the 14-day window <strong>before</strong> using any paid features,
|
||||
you receive a <strong>full refund</strong>. If you cancel within the window after using
|
||||
some paid features, we may reduce the refund proportionally to reflect usage, as
|
||||
permitted by the Regulations.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">3. How to cancel</h2>
|
||||
<p>You can cancel a subscription in either of these ways:</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>From your account: <strong>Settings → Subscription → Cancel</strong>.</li>
|
||||
<li>By emailing <a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a> from the address on your account.</li>
|
||||
</ul>
|
||||
<p>
|
||||
Unless you are exercising the 14-day right above, cancellation takes effect at the end
|
||||
of the current billing period. You keep access to paid features until that date.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">4. Refunds outside the 14-day period</h2>
|
||||
<p>
|
||||
Outside the 14-day cooling-off window, subscription fees are <strong>non-refundable</strong>
|
||||
for the remainder of the period you have paid for. You keep access to paid features
|
||||
until the end of that period; the subscription simply does not renew.
|
||||
</p>
|
||||
<p>
|
||||
We may issue discretionary refunds where there has been a service failure on our side or
|
||||
where required by law.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">5. Annual subscriptions</h2>
|
||||
<p>
|
||||
The 14-day cooling-off right applies to annual subscriptions in the same way as monthly
|
||||
subscriptions. After the 14 days, annual fees are non-refundable; we do not issue
|
||||
pro-rata refunds for unused months of an annual plan.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">6. Failed payments and involuntary cancellation</h2>
|
||||
<p>
|
||||
If a renewal payment fails, we and Stripe will retry the payment over a short period and
|
||||
email you. Paid features are suspended after the final unsuccessful retry. Your account
|
||||
itself is <strong>not deleted</strong>; you can resume by updating your payment method.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">7. How long refunds take</h2>
|
||||
<p>
|
||||
Approved refunds are issued to the original payment method via Stripe and typically
|
||||
arrive in your account within 5–10 business days, depending on your bank or card
|
||||
provider.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">8. Contact</h2>
|
||||
<p>
|
||||
For refund or cancellation queries, email
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
</p>
|
||||
</section>
|
||||
</x-layouts.legal>
|
||||
221
resources/views/legal/terms.blade.php
Normal file
221
resources/views/legal/terms.blade.php
Normal file
@@ -0,0 +1,221 @@
|
||||
{{-- DRAFT: Generated {{ date('Y-m-d') }}. Review by UK-qualified solicitor recommended before launch. --}}
|
||||
<x-layouts.legal
|
||||
title="Terms of Service"
|
||||
heading="Terms of Service"
|
||||
lastUpdated="{{ now()->format('j F Y') }}"
|
||||
metaDescription="The terms that govern your use of FuelAlert's subscription service.">
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">1. About these terms</h2>
|
||||
<p>
|
||||
FuelAlert is a trading name of <strong>Ovidiu Ungureanu</strong>, a sole trader based in
|
||||
Peterborough, United Kingdom ("we", "us", "our"). These terms form a legally binding
|
||||
contract between you and Ovidiu Ungureanu trading as FuelAlert.
|
||||
</p>
|
||||
<p>
|
||||
By creating an account or using the service, you confirm that you have read, understood
|
||||
and accepted these terms. If you do not accept them, please do not use the service.
|
||||
</p>
|
||||
<p>These terms are governed by the laws of England and Wales.</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">2. The service</h2>
|
||||
<p>
|
||||
FuelAlert provides UK fuel price comparison and forecasting. We aggregate publicly
|
||||
available UK fuel price data and surface it through a web app, alerts and forecasts.
|
||||
</p>
|
||||
<p>
|
||||
We offer a free tier and one or more paid subscription plans. The current list of plans
|
||||
and prices is available on our <a class="text-accent underline" href="/#pricing">pricing page</a>.
|
||||
</p>
|
||||
<p>
|
||||
We may add, remove, or change features over time. Where changes materially reduce the
|
||||
paid service, we will give you reasonable notice and, where appropriate, a way to cancel.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">3. Your account</h2>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>You must be at least 18 years old and resident in the United Kingdom to create an account.</li>
|
||||
<li>The information you provide must be accurate and kept up to date.</li>
|
||||
<li>One account per person. You are responsible for keeping your login credentials secure.</li>
|
||||
<li>You are responsible for activity that takes place under your account.</li>
|
||||
<li>We may suspend or close accounts where these terms are seriously or repeatedly breached.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">4. Subscriptions, billing and payment</h2>
|
||||
<p>
|
||||
Paid plans are billed in advance, either monthly or annually. The current price for each
|
||||
plan is shown on the <a class="text-accent underline" href="/#pricing">pricing page</a> at the time you subscribe.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Auto-renewal.</strong> Subscriptions renew automatically at the end of each
|
||||
billing period at the then-current price, unless you cancel before the renewal date. By
|
||||
subscribing you authorise FuelAlert — through our payment processor Stripe —
|
||||
to charge your nominated payment method at each renewal.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Failed payments.</strong> If a payment fails, we and Stripe will retry the
|
||||
payment over the following days. We will email you when this happens. Persistent failure
|
||||
will cause your paid features to be suspended; your account itself is not deleted.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Price changes.</strong> If we change the price of your plan, we will give you at
|
||||
least 30 days' notice by email before the new price takes effect on your next renewal.
|
||||
You may cancel before the change takes effect.
|
||||
</p>
|
||||
<p>
|
||||
<strong>VAT.</strong> Prices include UK VAT where applicable.
|
||||
<strong>[PLACEHOLDER: verify before launch — FuelAlert is currently below the UK VAT registration threshold and therefore does not charge VAT.]</strong>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">5. Cancellation and refunds</h2>
|
||||
<p>
|
||||
You can cancel your subscription at any time from your account settings. Cancellation
|
||||
stops the next renewal; you keep access to paid features until the end of the current
|
||||
billing period.
|
||||
</p>
|
||||
<p>
|
||||
New subscribers have a <strong>14-day right to cancel</strong> under the Consumer
|
||||
Contracts Regulations 2013. Important details — including the express-consent
|
||||
mechanism that affects this right — are set out in our
|
||||
<a class="text-accent underline" href="{{ route('legal.refund') }}">Refund & Cancellation Policy</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">6. Acceptable use</h2>
|
||||
<p>You agree not to:</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>Scrape, reverse-engineer, or bulk-extract data from the service.</li>
|
||||
<li>Resell or redistribute fuel price data taken from FuelAlert.</li>
|
||||
<li>Use the service for any unlawful purpose.</li>
|
||||
<li>Attempt to circumvent or compromise our security measures.</li>
|
||||
<li>Use automated tools to make queries beyond what a single human user would reasonably make.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">7. Accuracy of price data</h2>
|
||||
<p>
|
||||
Fuel prices shown on FuelAlert are sourced from official UK government data feeds
|
||||
(including the Pump Watch / Fuel Finder transparency schemes) and refreshed
|
||||
periodically. Stations can change prices at any time, and there is usually a delay
|
||||
between a forecourt change and the feed update.
|
||||
</p>
|
||||
<p>
|
||||
We make reasonable efforts to display accurate prices but <strong>we cannot guarantee
|
||||
that the price shown will match the price at the pump</strong> when you arrive.
|
||||
<strong>Always confirm the price at the pump before fuelling.</strong>
|
||||
</p>
|
||||
<p>
|
||||
We are not liable for any loss arising from inaccurate, delayed, or missing price data,
|
||||
including the cost of a wasted journey or any difference between the price shown and the
|
||||
price charged.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">8. Forecasts and predictions</h2>
|
||||
<p>
|
||||
FuelAlert may show forecasts and recommendations (e.g. "fill up now" or "wait"). These
|
||||
are <strong>informational only</strong>, are not financial advice, and should not be
|
||||
relied upon as a guarantee of future prices. Past trends do not guarantee future prices.
|
||||
We do not warrant the accuracy of any forecast.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">9. Intellectual property</h2>
|
||||
<p>
|
||||
The FuelAlert name, logo, software, and original content are owned by Ovidiu Ungureanu.
|
||||
You receive a limited, non-exclusive, revocable licence to use the service for personal,
|
||||
non-commercial purposes.
|
||||
</p>
|
||||
<p>
|
||||
Underlying fuel price data is owned by the respective fuel retailers and published under
|
||||
UK government open data schemes. Postcode and geographic data is sourced from the ONS
|
||||
Postcode Directory, © Crown Copyright, used under the Open Government Licence v3.0.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">10. Third-party services</h2>
|
||||
<p>
|
||||
We use <strong>Stripe</strong> to process payments. Your use of Stripe is also subject
|
||||
to Stripe's own terms and privacy policy. We may use other third-party processors to
|
||||
run the service; these are named in our
|
||||
<a class="text-accent underline" href="{{ route('legal.privacy') }}">Privacy Policy</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">11. Limitation of liability</h2>
|
||||
<p>
|
||||
Nothing in these terms excludes or limits our liability for death or personal injury
|
||||
caused by our negligence, fraud or fraudulent misrepresentation, or any other liability
|
||||
that cannot be excluded under UK consumer law. Your statutory rights as a consumer are
|
||||
not affected.
|
||||
</p>
|
||||
<p>Subject to the paragraph above:</p>
|
||||
<ul class="list-disc space-y-1 pl-6">
|
||||
<li>We exclude liability for indirect, consequential, or business losses.</li>
|
||||
<li>
|
||||
For paying subscribers, our total liability to you in any 12-month period is capped
|
||||
at the total amount you paid in subscription fees during that period.
|
||||
</li>
|
||||
<li>
|
||||
We do not accept liability for issues caused by third-party services we rely on,
|
||||
including but not limited to outages or errors at our payment processor, hosting
|
||||
provider, or upstream data sources.
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">12. Termination</h2>
|
||||
<p>
|
||||
You may stop using the service and close your account at any time. We may terminate or
|
||||
suspend access for serious breach of these terms, with reasonable notice where the
|
||||
breach is capable of being put right.
|
||||
</p>
|
||||
<p>
|
||||
Sections that by their nature should survive termination (including sections 7 to 11)
|
||||
will continue to apply after your account is closed.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">13. Changes to these terms</h2>
|
||||
<p>
|
||||
We may update these terms. Material changes will be notified to registered users by
|
||||
email at least 14 days before they take effect. Continued use of the service after the
|
||||
change date means you accept the new terms.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">14. Disputes</h2>
|
||||
<p>
|
||||
Please contact us first if you have a complaint — we will try to resolve it
|
||||
directly. These terms are governed by the laws of England and Wales, and the courts of
|
||||
England and Wales have non-exclusive jurisdiction over any dispute. If you live
|
||||
elsewhere in the United Kingdom, you keep the right to bring proceedings in the courts
|
||||
of your country of residence.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="space-y-3">
|
||||
<h2 class="font-display text-2xl font-bold text-zinc-900">15. Contact</h2>
|
||||
<p>
|
||||
For questions about these terms, email
|
||||
<a href="mailto:[PLACEHOLDER: hello@fuelalert.co.uk]" class="text-accent underline">[PLACEHOLDER: hello@fuelalert.co.uk]</a>.
|
||||
</p>
|
||||
</section>
|
||||
</x-layouts.legal>
|
||||
Reference in New Issue
Block a user