rubis/apps/landing/src/pages/index.astro
ordinarthur cecbddc496
All checks were successful
Build & Deploy Landing / build-and-deploy (push) Successful in 1m1s
refactor(landing): mono-langue FR + quick wins optimisations conversion
- Retire le système i18n EN (apps/landing/src/i18n/, pages /en/*) ajouté
  en 4f3417f. Source unique de copy dans src/copy.ts (FR uniquement).
  Switcher de langue retiré du header, sitemap nettoyé des hreflang.
- Header : micro-baseline « Logiciel de relance de factures impayées »
  sous le wordmark pour lever l'ambiguïté du nom (§1).
- CTA principal : « Lancer Rubis » → « Démarrer mon essai 14 jours »
  avec sous-texte sur Hero / FinalCTA / Pricing (§5).
- Essai 30 j → 14 j sur landing + CGV §6.2 (§3).
- Blog promu en nav primaire avec label « Ressources » (§6).

Doc d'arbitrage : docs/tech/landing-optimisations.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:46:42 +02:00

97 lines
3.4 KiB
Plaintext

---
/**
* / — landing publique de rubis.pro.
* Statique au build (`prerender = true`).
*/
export const prerender = true;
import Layout from "../layouts/Layout.astro";
import { Hero } from "../components/sections/Hero";
import { Stats } from "../components/sections/Stats";
import { Promise as PromiseSection } from "../components/sections/Promise";
import { HowItWorks } from "../components/sections/HowItWorks";
import { Gamification } from "../components/sections/Gamification";
import { AutoBanking } from "../components/sections/AutoBanking";
import { Legal } from "../components/sections/Legal";
import { Pricing } from "../components/sections/Pricing";
import { FAQ } from "../components/sections/FAQ";
import { FinalCTA } from "../components/sections/FinalCTA";
import { Footnotes } from "../components/sections/Footnotes";
import { copy } from "../copy";
const jsonLd = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "Rubis sur l'ongle",
description: copy.meta.home.description,
url: "https://rubis.pro",
applicationCategory: "BusinessApplication",
operatingSystem: "Web",
offers: [
{ "@type": "Offer", name: "Free", price: "0", priceCurrency: "EUR" },
{ "@type": "Offer", name: "Pro", price: "19", priceCurrency: "EUR" },
{ "@type": "Offer", name: "Business", price: "49", priceCurrency: "EUR" },
],
inLanguage: "fr-FR",
publisher: { "@type": "Organization", name: "Rubis sur l'ongle", url: "https://rubis.pro" },
};
---
<Layout title={copy.meta.home.title} description={copy.meta.home.description} jsonLd={jsonLd}>
<Hero />
<Stats />
<PromiseSection />
<HowItWorks />
<Gamification />
<AutoBanking />
<Legal />
<Pricing />
<FAQ />
<FinalCTA />
<Footnotes />
</Layout>
<script is:inline>
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('a[href^="https://app.rubis.pro"]').forEach(function (link) {
link.addEventListener('click', function () {
var section = link.closest('section');
var sectionId = section ? (section.id || 'unknown') : 'header';
if (section && section.id === 'pricing' && link.textContent.trim().match(/^(Commencer|Démarrer)/)) {
window.posthog?.capture('pricing_pro_cta_clicked', {
label: link.textContent.trim(),
});
} else if (section && section.id === 'pricing') {
var planName = link.querySelector('[class*="font-display"][class*="font-bold"]')?.textContent?.trim() || 'unknown';
window.posthog?.capture('pricing_plan_selected', {
plan: planName,
});
} else {
window.posthog?.capture('signup_cta_clicked', {
location: sectionId || 'header',
label: link.textContent.trim(),
});
}
});
});
document.querySelectorAll('header a[href^="https://app.rubis.pro"]').forEach(function (link) {
link.addEventListener('click', function () {
window.posthog?.capture('signup_cta_clicked', {
location: 'header',
label: link.textContent.trim(),
});
});
});
document.querySelectorAll('#faq details').forEach(function (details) {
details.addEventListener('toggle', function () {
if (details.open) {
var question = details.querySelector('summary')?.textContent?.trim() || '';
window.posthog?.capture('faq_item_opened', { question: question });
}
});
});
});
</script>