225 lines
7.7 KiB
TypeScript
225 lines
7.7 KiB
TypeScript
export type FeaturedProperty = {
|
|
slug: string;
|
|
name: string;
|
|
area: string;
|
|
summary: string;
|
|
sleeps: number;
|
|
bedrooms: number;
|
|
bathrooms: number;
|
|
priceFrom: string;
|
|
tags: string[];
|
|
};
|
|
|
|
export type Testimonial = {
|
|
quote: string;
|
|
author: string;
|
|
location: string;
|
|
};
|
|
|
|
export type ContentSection = {
|
|
title: string;
|
|
paragraphs: string[];
|
|
bullets?: string[];
|
|
};
|
|
|
|
export type ContentPage = {
|
|
slug: string;
|
|
title: string;
|
|
intro: string;
|
|
seoTitle: string;
|
|
seoDescription: string;
|
|
sections: ContentSection[];
|
|
};
|
|
|
|
export const site = {
|
|
name: 'Holiday Property Booking',
|
|
tagline: 'Direct holiday stays with visible availability and no guesswork.',
|
|
description:
|
|
'Browse holiday homes, check the essentials, and move from inspiration to enquiry without losing the thread.',
|
|
contact: {
|
|
email: 'hello@example.com',
|
|
phone: '+44 20 7946 0123',
|
|
area: 'North Devon, UK',
|
|
},
|
|
highlights: [
|
|
'Public browsing and search',
|
|
'Live availability and pricing rules',
|
|
'Stripe checkout and confirmation flow',
|
|
'Admin-ready data model',
|
|
],
|
|
foundationSteps: ['Project scaffold', 'Environment configuration', 'Database schema', 'App shell', 'Health endpoint'],
|
|
};
|
|
|
|
export const primaryNavigation = [
|
|
{ href: '/', label: 'Home' },
|
|
{ href: '/about', label: 'About' },
|
|
{ href: '/faqs', label: 'FAQs' },
|
|
{ href: '/contact', label: 'Contact' },
|
|
];
|
|
|
|
export const featuredProperties: FeaturedProperty[] = [
|
|
{
|
|
slug: 'coastal-view-cottage',
|
|
name: 'Coastal View Cottage',
|
|
area: 'Clifftop village',
|
|
summary: 'A bright two-bedroom cottage with sea views, a private terrace, and room to slow down.',
|
|
sleeps: 4,
|
|
bedrooms: 2,
|
|
bathrooms: 2,
|
|
priceFrom: 'From £185/night',
|
|
tags: ['Sea views', 'Family-friendly', 'Short breaks'],
|
|
},
|
|
{
|
|
slug: 'orchard-barn',
|
|
name: 'Orchard Barn',
|
|
area: 'Rural retreat',
|
|
summary: 'Converted barn accommodation with an open-plan living space and easy access to walking trails.',
|
|
sleeps: 6,
|
|
bedrooms: 3,
|
|
bathrooms: 2,
|
|
priceFrom: 'From £210/night',
|
|
tags: ['Pets considered', 'Hot tub', 'Long weekends'],
|
|
},
|
|
{
|
|
slug: 'harbour-house',
|
|
name: 'Harbour House',
|
|
area: 'Harbour front',
|
|
summary: 'A flexible stay for couples or groups, steps from the water and close to local restaurants.',
|
|
sleeps: 5,
|
|
bedrooms: 3,
|
|
bathrooms: 1,
|
|
priceFrom: 'From £165/night',
|
|
tags: ['Walkable', 'Town stay', 'Flexible dates'],
|
|
},
|
|
];
|
|
|
|
export const locationHighlights = [
|
|
{
|
|
title: 'Coast and countryside',
|
|
body: 'Choose between cliff paths, harbour towns, and quiet countryside stays within a short drive of each other.',
|
|
},
|
|
{
|
|
title: 'Simple trip planning',
|
|
body: 'The public journey is designed to answer the basics early: where the property is, what it sleeps, and how to enquire.',
|
|
},
|
|
{
|
|
title: 'Stay-led content',
|
|
body: 'Each property page can carry the practical details guests need, including capacity, amenities, and house rules.',
|
|
},
|
|
];
|
|
|
|
export const testimonials: Testimonial[] = [
|
|
{
|
|
quote: 'Everything we needed was clear before we booked, which made planning the trip much easier.',
|
|
author: 'Sophie M.',
|
|
location: 'Bristol',
|
|
},
|
|
{
|
|
quote: 'The property details answered our questions without forcing us to chase for basics.',
|
|
author: 'Daniel K.',
|
|
location: 'Manchester',
|
|
},
|
|
];
|
|
|
|
export const contentPages: ContentPage[] = [
|
|
{
|
|
slug: 'about',
|
|
title: 'About Holiday Property Booking',
|
|
intro:
|
|
'Holiday Property Booking is being shaped as a direct, content-led booking site that keeps the browsing experience clear before any payment flow is added.',
|
|
seoTitle: 'About Holiday Property Booking',
|
|
seoDescription: 'Learn how the holiday booking site is structured and what the public journey will cover.',
|
|
sections: [
|
|
{
|
|
title: 'What the site is for',
|
|
paragraphs: [
|
|
'The public site is intended to help guests browse properties, understand the essentials quickly, and move toward a confident enquiry or booking decision.',
|
|
'The implementation is being delivered in slices so each public page is grounded in the approved planning docs instead of being filled with placeholder booking logic too early.',
|
|
],
|
|
},
|
|
{
|
|
title: 'What guests should expect',
|
|
paragraphs: [
|
|
'The homepage should provide a direct route into the public journey, with feature-led content, clear calls to action, and enough detail to reduce uncertainty.',
|
|
],
|
|
bullets: ['Clear property summaries', 'Practical stay information', 'A readable route to contact and enquiry'],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'faqs',
|
|
title: 'Frequently Asked Questions',
|
|
intro: 'A lightweight content page for the most common questions guests ask before they enquire or book.',
|
|
seoTitle: 'Holiday Property Booking FAQs',
|
|
seoDescription: 'Common questions about the booking journey, property information, and how to contact the business.',
|
|
sections: [
|
|
{
|
|
title: 'When will live availability arrive?',
|
|
paragraphs: ['Availability and pricing will be added in the dedicated booking and pricing slices that follow this public content work.'],
|
|
},
|
|
{
|
|
title: 'Can guests still enquire now?',
|
|
paragraphs: ['Yes. The public experience includes a clear contact route so guests can ask questions before the booking engine is complete.'],
|
|
},
|
|
{
|
|
title: 'What will content pages cover?',
|
|
paragraphs: ['About, local area, FAQs, terms and conditions, and privacy pages can all be rendered from the same content-page structure.'],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'local-area',
|
|
title: 'Local Area Guide',
|
|
intro: 'A short editorial page that can be expanded with neighbourhood tips, transport advice, and nearby attractions.',
|
|
seoTitle: 'Local Area Guide',
|
|
seoDescription: 'Explore the local area around the featured holiday properties.',
|
|
sections: [
|
|
{
|
|
title: 'Why area content matters',
|
|
paragraphs: [
|
|
'Guests often decide based on location first. The content page structure allows the business to explain the setting without overloading the homepage.',
|
|
],
|
|
},
|
|
{
|
|
title: 'What can be added later',
|
|
paragraphs: ['Walking routes, beaches, restaurants, transport notes, and seasonal advice can all live in this page format.'],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'terms-and-conditions',
|
|
title: 'Terms and Conditions',
|
|
intro: 'A placeholder legal content page that can be replaced with the final terms text when it is approved.',
|
|
seoTitle: 'Terms and Conditions',
|
|
seoDescription: 'The terms and conditions content page for Holiday Property Booking.',
|
|
sections: [
|
|
{
|
|
title: 'How this page is used',
|
|
paragraphs: [
|
|
'This route exists so the public site can render formal content pages from the same model as editorial pages.',
|
|
'The legal copy itself will be finalised later, but the page structure is now ready for it.',
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'privacy-policy',
|
|
title: 'Privacy Policy',
|
|
intro: 'A structured content page for the privacy policy and future data handling notices.',
|
|
seoTitle: 'Privacy Policy',
|
|
seoDescription: 'The privacy policy content page for Holiday Property Booking.',
|
|
sections: [
|
|
{
|
|
title: 'Why it exists now',
|
|
paragraphs: [
|
|
'The public content layer needs to support policy pages from the start so the site can grow into a compliant booking flow without reworking the routing model.',
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
export function getContentPage(slug: string) {
|
|
return contentPages.find((page) => page.slug === slug);
|
|
}
|