feat: public marketing site (vitrine)

Adds a (marketing) route group -- Home, Features, About, Privacy,
Terms, Contact -- reusing the app's design system/i18n/deploy
pipeline rather than a separate site. Root page.tsx now branches on
session instead of always redirecting to /recipes: logged-in visitors
still land in the app unchanged, logged-out visitors see the vitrine
home page.

The actual integration point: proxy.ts's PUBLIC_PATHS previously sent
every anonymous "/" request straight to /login before page.tsx's
redirect ever ran. Added the new marketing routes to PUBLIC_PATHS,
plus a separate exact-match list for "/" itself -- it can't go in the
startsWith-matched array, since every path starts with "/" and that
would make the whole app public.

Also adds app/sitemap.ts and app/robots.ts (neither existed before),
disallowing the authenticated app and the unlisted /r/ and /s/ share
routes from crawling while allowing /u/ public profiles.

Pricing page deliberately not included -- waiting on Stripe Checkout
(STRIPE_PLAN.md) so its CTA goes somewhere real. Privacy/Terms are
structural drafts flagged inline as not lawyer-reviewed, per
STRIPE_PLAN.md's own tax-advice caveat -- same spirit here.

Verified with a full production build (pnpm build) -- compiles clean,
all 7 new routes render, since there's no DB in this sandbox to run
the dev server against for a real click-through.

v0.48.0
This commit is contained in:
Arnaud
2026-07-18 09:33:47 +02:00
parent 2a256a8943
commit e71c978e52
19 changed files with 533 additions and 10 deletions
+58
View File
@@ -1,4 +1,62 @@
{
"marketing": {
"nav": {
"features": "Fonctionnalités",
"about": "À propos",
"openApp": "Ouvrir l'application",
"login": "Connexion",
"signup": "Inscription"
},
"footer": {
"about": "À propos",
"privacy": "Confidentialité",
"terms": "Conditions",
"contact": "Contact",
"copyright": "© {year} Epicure"
},
"home": {
"heroTitle": "Votre carnet de recettes propulsé par l'IA",
"heroSubtitle": "Générez, organisez et partagez vos recettes — planifiez vos repas, suivez votre garde-manger, et cuisinez avec un assistant capable d'agir pour vous.",
"ctaPrimary": "Commencer gratuitement",
"ctaSecondary": "Voir les fonctionnalités",
"bottomCtaTitle": "Cuisinez plus intelligemment",
"bottomCtaSubtitle": "Gratuit pour commencer. Aucune carte bancaire requise.",
"highlights": {
"ai": { "title": "Génération de recettes par IA", "description": "Générez une recette complète à partir d'une idée, d'une photo ou d'une URL — modèles de vision et de texte travaillent ensemble pour rédiger les détails." },
"assistant": { "title": "Assistant culinaire", "description": "Posez vos questions de cuisine à tout moment — il peut même rédiger une recette ou une liste de courses directement dans la conversation, pour que vous la validiez." },
"mealPlan": { "title": "Planification de repas", "description": "Planifiez votre semaine, générez un plan avec l'IA, et transformez-le directement en liste de courses." },
"pantry": { "title": "Suivi du garde-manger", "description": "Sachez ce que vous avez sous la main — scannez-le, et laissez les recettes en tenir compte automatiquement." },
"social": { "title": "Partager & découvrir", "description": "Suivez d'autres cuisiniers, notez et commentez les recettes, et contrôlez précisément qui peut voir les vôtres." },
"batchCook": { "title": "Cuisine en lots", "description": "Cuisinez une fois, mangez toute la semaine — planification dédiée avec conseils de conservation au frigo/congélateur." }
}
},
"features": {
"title": "Tout ce qu'il faut pour cuisiner plus intelligemment",
"subtitle": "D'une simple idée à une collection de recettes organisée.",
"cta": "Essayer gratuitement",
"items": {
"ai": { "title": "Génération de recettes par IA", "description": "Générez une recette à partir d'une courte idée, d'une URL ou d'une description — plat ou boisson, détecté automatiquement." },
"photoImport": { "title": "Importer depuis une photo", "description": "Un modèle de vision identifie ce qui est sur la photo, puis un modèle de texte rédige la recette complète à partir de cette description." },
"assistant": { "title": "Assistant culinaire avec actions", "description": "Un assistant conversationnel pour vos questions de cuisine, capable aussi de rédiger une recette ou d'ajouter des articles à une liste de courses pour que vous les validiez — rien n'est enregistré sans votre accord." },
"mealPlan": { "title": "Planification de repas par IA", "description": "Générez une semaine de repas selon vos préférences, besoins alimentaires, et ce qui est déjà dans votre garde-manger." },
"pantry": { "title": "Suivi du garde-manger", "description": "Suivez ce que vous avez — scannez codes-barres ou photos — pour informer la planification et les listes de courses." },
"shoppingList": { "title": "Listes de courses", "description": "Plusieurs listes, partageables, remplies automatiquement à partir des recettes ou des plans de repas." },
"social": { "title": "Abonnements, notes & commentaires", "description": "Une couche sociale pour les recettes — suivez d'autres cuisiniers, notez et commentez, avec un contrôle de visibilité précis, y compris réservé aux abonnés." },
"batchCook": { "title": "Cuisine en lots", "description": "Planifiez des sessions de cuisine en lots avec conseils de conservation par plat." }
}
},
"about": {
"title": "À propos d'Epicure",
"paragraphs": [
"Epicure est né d'une idée simple : un carnet de recettes qui suit vraiment votre façon de cuisiner — planification, garde-manger et IA réunis en un seul endroit plutôt qu'éparpillés dans cinq applications différentes.",
"C'est un projet indépendant, conçu et maintenu par une seule personne, qui évolue en fonction de ce qui est réellement utile à ses utilisateurs."
]
},
"contact": {
"title": "Nous contacter",
"subtitle": "Questions, retours, ou un problème rencontré — écrivez-nous, nous vous répondrons."
}
},
"nav": {
"menu": "Menu",
"recipes": "Recettes",