initial commmit google
tests / ci (push) Canceled after 0s

This commit is contained in:
Mark Gregory
2026-09-30 15:13:02 +01:00
parent d4662356c0
commit 56234e2c9f
12 changed files with 85 additions and 9 deletions
+4
View File
@@ -35,4 +35,8 @@ return [
],
],
'google' => [
'site_verification' => env('GOOGLE_SITE_VERIFICATION'),
],
];
+3 -1
View File
@@ -1,2 +1,4 @@
User-agent: *
Disallow:
Allow: /
Sitemap: https://holidayparkowners.com/sitemap.xml
+46 -1
View File
@@ -1,3 +1,48 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Independent information for UK holiday park owners about valuations, depreciation, fees, resale and owner experiences."><title>@yield('title','Holiday Park Owners UK')</title>@vite(['resources/css/app.css'])</head><body>
<!doctype html>
<html lang="en-GB">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>@yield('title', 'Holiday Park Owners UK') | Holiday Park Owners UK</title>
<meta name="description" content="@yield('description', 'Independent information for UK holiday park owners about valuations, depreciation, pitch fees, resale, ownership rights and owner experiences.')">
<meta name="robots" content="{{ app()->environment('production') ? 'index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1' : 'noindex,nofollow,noarchive' }}">
<meta name="googlebot" content="{{ app()->environment('production') ? 'index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1' : 'noindex,nofollow,noarchive' }}">
@if(config('services.google.site_verification'))<meta name="google-site-verification" content="{{ config('services.google.site_verification') }}">@endif
<link rel="canonical" href="{{ url()->current() }}">
<link rel="icon" href="{{ asset('favicon.ico') }}" sizes="any">
<link rel="icon" href="{{ asset('favicon.svg') }}" type="image/svg+xml">
<link rel="apple-touch-icon" href="{{ asset('apple-touch-icon.png') }}">
<meta name="theme-color" content="#ffffff">
<meta property="og:type" content="website">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Holiday Park Owners UK">
<meta property="og:title" content="@yield('title', 'Holiday Park Owners UK')">
<meta property="og:description" content="@yield('description', 'Independent information for UK holiday park owners about valuations, depreciation, pitch fees, resale, ownership rights and owner experiences.')">
<meta property="og:url" content="{{ url()->current() }}">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="@yield('title', 'Holiday Park Owners UK')">
<meta name="twitter:description" content="@yield('description', 'Independent information for UK holiday park owners about valuations, depreciation, pitch fees, resale, ownership rights and owner experiences.')">
<script type="application/ld+json">{!! json_encode([
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => 'Holiday Park Owners UK',
'url' => url('/'),
'description' => 'Independent information for UK holiday park owners about valuations, depreciation, pitch fees, resale, ownership rights and owner experiences.',
'inLanguage' => 'en-GB',
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) !!}</script>
<script type="application/ld+json">{!! json_encode([
'@context' => 'https://schema.org',
'@type' => 'Organization',
'name' => 'Holiday Park Owners UK',
'url' => url('/'),
'logo' => asset('apple-touch-icon.png'),
'description' => 'Independent consumer information for UK holiday park owners.',
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) !!}</script>
@vite(['resources/css/app.css'])
</head>
<body>
<header class="site-header"><a class="brand" href="{{ route('home') }}"><span class="brand-icon">⌂</span><span>HOLIDAY PARK<br><b>OWNERS UK</b><small>REAL INFORMATION. STRONGER OWNERS.</small></span></a><button class="menu" aria-label="Toggle navigation" onclick="document.querySelector('.nav').classList.toggle('open')">☰</button><nav class="nav"><a href="{{route('home')}}">Home</a><a href="{{route('valuations')}}">Valuations</a><a href="{{route('park-holidays')}}">Park Holidays UK</a><a href="{{route('owner-stories')}}">Owner Stories</a><a href="{{route('rights')}}">Know Your Rights</a><a href="{{route('evidence')}}">Evidence</a><a href="{{route('evidence.create')}}">Submit Evidence</a></nav></header>
<main>@yield('content')</main><footer><b>Holiday Park Owners UK</b><p>Independent consumer information. Not affiliated with Park Holidays UK or any holiday park operator. Owner reports are identified as such and should not be treated as findings of fact unless independently evidenced.</p><p>Information only — not legal or financial advice.</p></footer></body></html>
+1 -1
View File
@@ -1 +1 @@
@extends('layouts.public') @section('title','Evidence') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Evidence</h1><p class="lead">Documents matter.</p><div class="prose"><p>This library is designed for contracts, invoices, pitch-fee notices, finance statements, written valuations, resale offers and correspondence. Sources should be dated and clearly attributed.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@extends('layouts.public') @section('title','Evidence') @section('description','Evidence and source material relating to UK holiday park ownership, valuations, pitch fees, finance, resale offers and owner experiences.') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Evidence</h1><p class="lead">Documents matter.</p><div class="prose"><p>This library is designed for contracts, invoices, pitch-fee notices, finance statements, written valuations, resale offers and correspondence. Sources should be dated and clearly attributed.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
+1 -1
View File
@@ -1,4 +1,4 @@
@extends('layouts.public') @section('title','Holiday Park Owners UK — Valuations, ownership & evidence') @section('content')
@extends('layouts.public') @section('title','Holiday Park Owners UK — Valuations, ownership & evidence') @section('description','Independent UK holiday park owner information covering valuations, depreciation, pitch fees, resale, finance and documented owner experiences.') @section('content')
<section class="hero"><div class="hero-inner"><span class="eyebrow">Independent UK owner information</span><h1>The real cost of<br><em>holiday park ownership.</em></h1><p>Independent information, owner experiences and evidence about valuations, depreciation, pitch fees and selling your holiday home.</p><div class="actions"><a class="btn red" href="{{route('evidence.create')}}">Share Your Experience →</a><a class="btn outline" href="{{route('rights')}}">Understand Your Rights →</a></div></div><aside>Holiday homes are for leisure use only and cannot be used as a main residence.</aside></section>
<section class="stats"><div><small>ILLUSTRATIVE PURCHASE PRICE</small><strong>£70,000</strong></div><div><small>ILLUSTRATIVE PARK VALUATION</small><strong>£20,000 <i>↓71%</i></strong></div><div><small>ILLUSTRATIVE FINANCE BALANCE</small><strong>£50,000</strong></div><div class="danger"><small>POTENTIAL SHORTFALL</small><strong>£30,000</strong></div></section><p class="disclaimer">Illustrative example only. Actual values vary. This is not financial advice.</p>
<section class="grid"><article class="feature"><span class="tag">VALUATIONS</span><h2>Why valuations matter</h2><p>A holiday home can depreciate substantially after purchase. If a resale or part-exchange offer is lower than the remaining finance balance, an owner may face a significant shortfall.</p><p>The key comparison is not one number: it is the original purchase price, outstanding finance, independent/open-market value, park offer and the contractual costs of selling.</p><a href="{{route('valuations')}}">Understand valuations →</a></article><article class="focus"><span class="tag redtag">FOCUS: PARK HOLIDAYS UK</span><h2>Examining Park Holidays UK</h2><p>Ownership terms, running costs, finance, resale arrangements and documented owner experiences.</p><ul><li>Purchase prices, pitch fees and running costs</li><li>Finance and ongoing commitments</li><li>Valuations, part-exchange and resale</li><li>Owner experiences — clearly attributed</li></ul><a class="btn outline" href="{{route('park-holidays')}}">Explore the Park Holidays UK section →</a></article></section>
@@ -1 +1 @@
@extends('layouts.public') @section('title','Owner Stories') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Owner Stories</h1><p class="lead">Owners’ experiences, in their own context.</p><div class="prose"><p>Stories should include dates, park/operator, relevant documents and the operator’s response where available. Publication does not mean an allegation has been independently established.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@extends('layouts.public') @section('title','Owner Stories') @section('description','Read documented experiences from UK holiday park owners, with context, dates and supporting evidence where available.') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Owner Stories</h1><p class="lead">Owners’ experiences, in their own context.</p><div class="prose"><p>Stories should include dates, park/operator, relevant documents and the operator’s response where available. Publication does not mean an allegation has been independently established.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@@ -1 +1 @@
@extends('layouts.public') @section('title','Park Holidays UK') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Park Holidays UK</h1><p class="lead">Evidence before conclusions.</p><div class="prose"><p>This section brings together published terms, costs, finance information, resale arrangements and attributed owner experiences concerning Park Holidays UK. It should distinguish company statements, independent evidence and individual allegations.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@extends('layouts.public') @section('title','Park Holidays UK') @section('description','Independent information about Park Holidays UK, including ownership terms, costs, finance, resale arrangements and attributed owner experiences.') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Park Holidays UK</h1><p class="lead">Evidence before conclusions.</p><div class="prose"><p>This section brings together published terms, costs, finance information, resale arrangements and attributed owner experiences concerning Park Holidays UK. It should distinguish company statements, independent evidence and individual allegations.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
+1 -1
View File
@@ -1 +1 @@
@extends('layouts.public') @section('title','Know Your Rights') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Know Your Rights</h1><p class="lead">Know what you are buying.</p><div class="prose"><p>A holiday caravan is not the same legal category as a residential park home. Read the licence agreement, finance agreement and park rules, and obtain appropriate professional advice before committing substantial sums.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@extends('layouts.public') @section('title','Know Your Rights') @section('description','Information for UK holiday caravan owners about contracts, licence agreements, finance, park rules and questions to ask before committing or selling.') @section('content')<section class="page"><span class="eyebrow">Independent information</span><h1>Know Your Rights</h1><p class="lead">Know what you are buying.</p><div class="prose"><p>A holiday caravan is not the same legal category as a residential park home. Read the licence agreement, finance agreement and park rules, and obtain appropriate professional advice before committing substantial sums.</p></div><a class="btn red" href="{{route('evidence.create')}}">Submit supporting evidence →</a></section>@endsection
@@ -1 +1 @@
@extends('layouts.public') @section('title','Submit Evidence') @section('content')<section class="page narrow"><span class="eyebrow">Evidence locker</span><h1>Tell us what happened.</h1><p class="lead">Provide the numbers and circumstances. Do not upload or enter information you do not have the right to share.</p>@if(session('status'))<div class="success">{{session('status')}}</div>@endif<form method="post" action="{{route('evidence.store')}}">@csrf<div class="form-grid"><label>Name (optional)<input name="name" value="{{old('name')}}"></label><label>Email (optional)<input type="email" name="email" value="{{old('email')}}"></label><label>Park name<input name="park_name" value="{{old('park_name')}}"></label><label>Operator<input name="operator" value="{{old('operator')}}"></label><label>Purchase price £<input type="number" step="0.01" name="purchase_price" value="{{old('purchase_price')}}"></label><label>Valuation / offer £<input type="number" step="0.01" name="valuation" value="{{old('valuation')}}"></label><label>Finance balance £<input type="number" step="0.01" name="finance_balance" value="{{old('finance_balance')}}"></label></div><label>Your experience<textarea name="story" rows="9" required>{{old('story')}}</textarea></label><label class="check"><input type="checkbox" name="consent_to_contact" value="1"> You may contact me about this submission.</label>@if($errors->any())<div class="errors">{{implode(' ', $errors->all())}}</div>@endif<button class="btn red" type="submit">Submit evidence →</button></form></section>@endsection
@extends('layouts.public') @section('title','Submit Evidence') @section('description','Submit your holiday park ownership experience and supporting information for review by Holiday Park Owners UK.') @section('content')<section class="page narrow"><span class="eyebrow">Evidence locker</span><h1>Tell us what happened.</h1><p class="lead">Provide the numbers and circumstances. Do not upload or enter information you do not have the right to share.</p>@if(session('status'))<div class="success">{{session('status')}}</div>@endif<form method="post" action="{{route('evidence.store')}}">@csrf<div class="form-grid"><label>Name (optional)<input name="name" value="{{old('name')}}"></label><label>Email (optional)<input type="email" name="email" value="{{old('email')}}"></label><label>Park name<input name="park_name" value="{{old('park_name')}}"></label><label>Operator<input name="operator" value="{{old('operator')}}"></label><label>Purchase price £<input type="number" step="0.01" name="purchase_price" value="{{old('purchase_price')}}"></label><label>Valuation / offer £<input type="number" step="0.01" name="valuation" value="{{old('valuation')}}"></label><label>Finance balance £<input type="number" step="0.01" name="finance_balance" value="{{old('finance_balance')}}"></label></div><label>Your experience<textarea name="story" rows="9" required>{{old('story')}}</textarea></label><label class="check"><input type="checkbox" name="consent_to_contact" value="1"> You may contact me about this submission.</label>@if($errors->any())<div class="errors">{{implode(' ', $errors->all())}}</div>@endif<button class="btn red" type="submit">Submit evidence →</button></form></section>@endsection
+1 -1
View File
@@ -1 +1 @@
@extends('layouts.public') @section('title','Holiday Home Valuations') @section('content') <section class="page"><span class="eyebrow">Valuations & depreciation</span><h1>Understand the numbers before you sell.</h1><p class="lead">A purchase price is not a guaranteed future value. Compare every valuation with the finance settlement figure, contractual sale costs and evidence of comparable sales.</p><div class="panel"><h2>Valuation shortfall calculator</h2><div class="calc"><label>Purchase price £<input id="purchase" type="number" value="70000"></label><label>Current valuation £<input id="value" type="number" value="20000"></label><label>Finance remaining £<input id="finance" type="number" value="50000"></label></div><div id="result" class="result"></div></div><div class="prose"><h2>Questions worth asking</h2><p>Ask how the valuation was calculated, whether you can sell privately, what commission or transfer fees apply, whether there are age restrictions on the unit, and whether an independent valuation is permitted. Keep every offer and explanation in writing.</p></div></section><script>function c(){let p=+purchase.value||0,v=+value.value||0,f=+finance.value||0;let loss=p?v/p*100:0;result.innerHTML=`Current value: <b>${loss.toFixed(1)}%</b> of purchase price · Finance shortfall at this valuation: <b>£${Math.max(0,f-v).toLocaleString()}</b>`} document.querySelectorAll('.calc input').forEach(x=>x.oninput=c);c()</script> @endsection
@extends('layouts.public') @section('title','Holiday Home Valuations') @section('description','Understand UK holiday home valuations, depreciation, finance shortfalls, resale offers and the questions owners should ask before selling.') @section('content') <section class="page"><span class="eyebrow">Valuations & depreciation</span><h1>Understand the numbers before you sell.</h1><p class="lead">A purchase price is not a guaranteed future value. Compare every valuation with the finance settlement figure, contractual sale costs and evidence of comparable sales.</p><div class="panel"><h2>Valuation shortfall calculator</h2><div class="calc"><label>Purchase price £<input id="purchase" type="number" value="70000"></label><label>Current valuation £<input id="value" type="number" value="20000"></label><label>Finance remaining £<input id="finance" type="number" value="50000"></label></div><div id="result" class="result"></div></div><div class="prose"><h2>Questions worth asking</h2><p>Ask how the valuation was calculated, whether you can sell privately, what commission or transfer fees apply, whether there are age restrictions on the unit, and whether an independent valuation is permitted. Keep every offer and explanation in writing.</p></div></section><script>function c(){let p=+purchase.value||0,v=+value.value||0,f=+finance.value||0;let loss=p?v/p*100:0;result.innerHTML=`Current value: <b>${loss.toFixed(1)}%</b> of purchase price · Finance shortfall at this valuation: <b>£${Math.max(0,f-v).toLocaleString()}</b>`} document.querySelectorAll('.calc input').forEach(x=>x.oninput=c);c()</script> @endsection
+10
View File
@@ -0,0 +1,10 @@
{!! '<?xml version="1.0" encoding="UTF-8"?>' !!}
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach($urls as $url)
<url>
<loc>{{ $url['loc'] }}</loc>
<changefreq>weekly</changefreq>
<priority>{{ $url['priority'] }}</priority>
</url>
@endforeach
</urlset>
+15
View File
@@ -11,3 +11,18 @@ Route::view('/know-your-rights', 'pages.rights')->name('rights');
Route::view('/evidence', 'pages.evidence')->name('evidence');
Route::get('/submit-evidence', [EvidenceSubmissionController::class, 'create'])->name('evidence.create');
Route::post('/submit-evidence', [EvidenceSubmissionController::class, 'store'])->name('evidence.store')->middleware('throttle:5,1');
Route::get('/sitemap.xml', function () {
$urls = [
['loc' => route('home'), 'priority' => '1.0'],
['loc' => route('valuations'), 'priority' => '0.9'],
['loc' => route('park-holidays'), 'priority' => '0.9'],
['loc' => route('owner-stories'), 'priority' => '0.8'],
['loc' => route('rights'), 'priority' => '0.8'],
['loc' => route('evidence'), 'priority' => '0.8'],
['loc' => route('evidence.create'), 'priority' => '0.6'],
];
return response()->view('sitemap', compact('urls'))
->header('Content-Type', 'application/xml');
})->name('sitemap');