refactor(i18n): use route manifest for all internal links; fix Astro frontmatter blocks; build passes

This commit is contained in:
Ruidy 2025-09-05 12:11:37 -04:00
parent cc09505eca
commit 4c4224eb46
10 changed files with 42 additions and 21 deletions

View file

@ -1,5 +1,8 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const t2Href = hrefFor('apartment_t2', 'en');
const t3Href = hrefFor('apartment_t3', 'en');
---
<BaseLayout title="Apartments" lang="en">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -8,14 +11,13 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<article class="rounded-lg border border-slate-200 p-4">
<h2 class="text-lg font-semibold">T2 Corail</h2>
<p class="text-sm text-slate-600">45 m² • 23 guests • 1 queen + sofabed • €59/night</p>
<a href="/en/apartments/t2-corail/" class="mt-3 inline-block text-brand-600 underline">Discover</a>
<a href={t2Href} class="mt-3 inline-block text-brand-600 underline">Discover</a>
</article>
<article class="rounded-lg border border-slate-200 p-4">
<h2 class="text-lg font-semibold">T3 Azur</h2>
<p class="text-sm text-slate-600">55 m² • up to 4 guests • 2 queen beds • €79/night</p>
<a href="/en/apartments/t3-azur/" class="mt-3 inline-block text-brand-600 underline">Discover</a>
<a href={t3Href} class="mt-3 inline-block text-brand-600 underline">Discover</a>
</article>
</div>
</div>
</BaseLayout>

View file

@ -1,5 +1,7 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const contactHref = hrefFor('contact', 'en');
---
<BaseLayout title="T2 Corail" lang="en">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -16,9 +18,8 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<li>Checkin 14:00 / Checkout 11:00</li>
</ul>
<div class="mt-6 flex gap-3">
<a href="/en/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href="https://airbnb.fr/h/villafleurie-t2" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 px-4 py-2">Book on Airbnb (T2)</a>
</div>
</div>
</BaseLayout>

View file

@ -1,5 +1,7 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const contactHref = hrefFor('contact', 'en');
---
<BaseLayout title="T3 Azur" lang="en">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -16,9 +18,8 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<li>Checkin 14:00 / Checkout 11:00</li>
</ul>
<div class="mt-6 flex gap-3">
<a href="/en/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href="https://airbnb.fr/h/villafleurie-t3" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 px-4 py-2">Book on Airbnb (T3)</a>
</div>
</div>
</BaseLayout>

View file

@ -1,10 +1,12 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import { hrefFor } from '../../i18n/routes';
const thankHref = hrefFor('thank_you', 'en');
---
<BaseLayout title="Contact" lang="en">
<div class="mx-auto max-w-6xl px-6 py-10">
<h1 class="text-3xl font-semibold">Send a Request</h1>
<form name="bookingForm" method="POST" data-netlify="true" action="/en/thank-you/" class="mt-6 grid grid-cols-1 md:grid-cols-2 gap-4">
<form name="bookingForm" method="POST" data-netlify="true" action={thankHref} class="mt-6 grid grid-cols-1 md:grid-cols-2 gap-4">
<input type="hidden" name="form-name" value="bookingForm" />
<label class="flex flex-col gap-1">
<span class="text-sm">Full name</span>
@ -52,4 +54,3 @@ import BaseLayout from '../../layouts/BaseLayout.astro';
</form>
</div>
</BaseLayout>

View file

@ -1,6 +1,10 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import { hrefFor } from '../../i18n/routes';
const title = 'Home';
const contactHref = hrefFor('contact', 'en');
const t2Href = hrefFor('apartment_t2', 'en');
const t3Href = hrefFor('apartment_t3', 'en');
---
<BaseLayout title={title} lang="en" description="Comfortable stays in Le Gosier for couples and small families">
<section class="relative">
@ -11,7 +15,7 @@ const title = 'Home';
<h1 class="text-white text-3xl md:text-5xl font-semibold max-w-3xl">Comfortable stays in Le Gosier for couples and small families</h1>
<p class="text-white/90 mt-3 max-w-2xl">Two bright apartments near the beaches. Send a request or book instantly.</p>
<div class="mt-6 flex gap-3">
<a href="/en/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send a Request</a>
<a href="https://www.booking.com/hotel/gp/villafleurie.fr.html" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 bg-white/90 px-4 py-2 text-slate-900 hover:bg-white" onclick="plausible('click_booking',{props:{locale:'en',page:'home',position:'hero'}})">Book on Booking.com</a>
<a href="https://airbnb.fr/h/villafleurie-t2" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 bg-white/90 px-4 py-2 text-slate-900 hover:bg-white" onclick="plausible('click_airbnb',{props:{locale:'en',page:'home',position:'hero'}})">Book on Airbnb (T2)</a>
</div>
@ -44,12 +48,12 @@ const title = 'Home';
<article class="rounded-lg border border-slate-200 p-4">
<h3 class="text-lg font-semibold">T2 Corail</h3>
<p class="text-sm text-slate-600">45 m² • 23 guests • 1 queen + sofabed • €59/night</p>
<a href="/en/apartments/t2-corail/" class="mt-3 inline-block text-brand-600 underline">Discover</a>
<a href={t2Href} class="mt-3 inline-block text-brand-600 underline">Discover</a>
</article>
<article class="rounded-lg border border-slate-200 p-4">
<h3 class="text-lg font-semibold">T3 Azur</h3>
<p class="text-sm text-slate-600">55 m² • up to 4 guests • 2 queen beds • €79/night</p>
<a href="/en/apartments/t3-azur/" class="mt-3 inline-block text-brand-600 underline">Discover</a>
<a href={t3Href} class="mt-3 inline-block text-brand-600 underline">Discover</a>
</article>
</div>
</section>
@ -63,4 +67,3 @@ const title = 'Home';
</div>
</section>
</BaseLayout>

View file

@ -1,5 +1,8 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const t2Href = hrefFor('apartment_t2', 'fr');
const t3Href = hrefFor('apartment_t3', 'fr');
---
<BaseLayout title="Appartements" lang="fr">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -8,12 +11,12 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<article class="rounded-lg border border-slate-200 p-4">
<h2 class="text-lg font-semibold">T2 Corail</h2>
<p class="text-sm text-slate-600">45 m² • 23 personnes • 1 lit queen + canapélit • 59 €/nuit</p>
<a href="/fr/appartements/t2-corail/" class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
<a href={t2Href} class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
</article>
<article class="rounded-lg border border-slate-200 p-4">
<h2 class="text-lg font-semibold">T3 Azur</h2>
<p class="text-sm text-slate-600">55 m² • jusquà 4 personnes • 2 lits queen • 79 €/nuit</p>
<a href="/fr/appartements/t3-azur/" class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
<a href={t3Href} class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
</article>
</div>
</div>

View file

@ -1,5 +1,7 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const contactHref = hrefFor('contact', 'fr');
---
<BaseLayout title="T2 Corail" lang="fr">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -16,7 +18,7 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<li>Arrivée 14:00 / Départ 11:00</li>
</ul>
<div class="mt-6 flex gap-3">
<a href="/fr/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href="https://airbnb.fr/h/villafleurie-t2" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 px-4 py-2">Réserver sur Airbnb (T2)</a>
</div>
</div>

View file

@ -1,5 +1,7 @@
---
import BaseLayout from '../../../layouts/BaseLayout.astro';
import { hrefFor } from '../../../i18n/routes';
const contactHref = hrefFor('contact', 'fr');
---
<BaseLayout title="T3 Azur" lang="fr">
<div class="mx-auto max-w-6xl px-6 py-10">
@ -16,7 +18,7 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
<li>Arrivée 14:00 / Départ 11:00</li>
</ul>
<div class="mt-6 flex gap-3">
<a href="/fr/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href="https://airbnb.fr/h/villafleurie-t3" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 px-4 py-2">Réserver sur Airbnb (T3)</a>
</div>
</div>

View file

@ -1,10 +1,12 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import { hrefFor } from '../../i18n/routes';
const thankHref = hrefFor('thank_you', 'fr');
---
<BaseLayout title="Contact" lang="fr">
<div class="mx-auto max-w-6xl px-6 py-10">
<h1 class="text-3xl font-semibold">Envoyer une demande</h1>
<form name="bookingForm" method="POST" data-netlify="true" action="/fr/merci/" class="mt-6 grid grid-cols-1 md:grid-cols-2 gap-4">
<form name="bookingForm" method="POST" data-netlify="true" action={thankHref} class="mt-6 grid grid-cols-1 md:grid-cols-2 gap-4">
<input type="hidden" name="form-name" value="bookingForm" />
<label class="flex flex-col gap-1">
<span class="text-sm">Nom complet</span>

View file

@ -1,6 +1,10 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import { hrefFor } from '../../i18n/routes';
const title = 'Accueil';
const contactHref = hrefFor('contact', 'fr');
const t2Href = hrefFor('apartment_t2', 'fr');
const t3Href = hrefFor('apartment_t3', 'fr');
---
<BaseLayout title={title} lang="fr" description="Séjours confortables au Gosier pour couples et petites familles">
<section class="relative">
@ -11,7 +15,7 @@ const title = 'Accueil';
<h1 class="text-white text-3xl md:text-5xl font-semibold max-w-3xl">Séjours confortables au Gosier pour couples et petites familles</h1>
<p class="text-white/90 mt-3 max-w-2xl">Deux appartements lumineux, près des plages. Envoyez une demande ou réservez instantanément.</p>
<div class="mt-6 flex gap-3">
<a href="/fr/contact/" class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href={contactHref} class="inline-flex items-center rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer une demande</a>
<a href="https://www.booking.com/hotel/gp/villafleurie.fr.html" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 bg-white/90 px-4 py-2 text-slate-900 hover:bg-white" on:click={() => plausible('click_booking', {props:{locale:'fr',page:'home',position:'hero'}})}>Réserver sur Booking.com</a>
<a href="https://airbnb.fr/h/villafleurie-t2" target="_blank" rel="noopener" class="inline-flex items-center rounded-lg border border-slate-200 bg-white/90 px-4 py-2 text-slate-900 hover:bg-white" on:click={() => plausible('click_airbnb', {props:{locale:'fr',page:'home',position:'hero'}})}>Réserver sur Airbnb (T2)</a>
</div>
@ -44,12 +48,12 @@ const title = 'Accueil';
<article class="rounded-lg border border-slate-200 p-4">
<h3 class="text-lg font-semibold">T2 Corail</h3>
<p class="text-sm text-slate-600">45 m² • 23 personnes • 1 lit queen + canapélit • 59 €/nuit</p>
<a href="/fr/appartements/t2-corail/" class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
<a href={t2Href} class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
</article>
<article class="rounded-lg border border-slate-200 p-4">
<h3 class="text-lg font-semibold">T3 Azur</h3>
<p class="text-sm text-slate-600">55 m² • jusquà 4 personnes • 2 lits queen • 79 €/nuit</p>
<a href="/fr/appartements/t3-azur/" class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
<a href={t3Href} class="mt-3 inline-block text-brand-600 underline">Découvrir</a>
</article>
</div>
</section>