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:
@@ -1,4 +1,62 @@
|
||||
{
|
||||
"marketing": {
|
||||
"nav": {
|
||||
"features": "Features",
|
||||
"about": "About",
|
||||
"openApp": "Open app",
|
||||
"login": "Log in",
|
||||
"signup": "Sign up"
|
||||
},
|
||||
"footer": {
|
||||
"about": "About",
|
||||
"privacy": "Privacy",
|
||||
"terms": "Terms",
|
||||
"contact": "Contact",
|
||||
"copyright": "© {year} Epicure"
|
||||
},
|
||||
"home": {
|
||||
"heroTitle": "Your AI-powered recipe book",
|
||||
"heroSubtitle": "Generate, organize, and share recipes — plan meals, track your pantry, and cook with an assistant that can act on your behalf.",
|
||||
"ctaPrimary": "Get started free",
|
||||
"ctaSecondary": "See features",
|
||||
"bottomCtaTitle": "Start cooking smarter",
|
||||
"bottomCtaSubtitle": "Free to start. No credit card required.",
|
||||
"highlights": {
|
||||
"ai": { "title": "AI recipe generation", "description": "Generate a full recipe from an idea, a photo, or a URL — vision and text models work together to write the details." },
|
||||
"assistant": { "title": "Cooking assistant", "description": "Ask cooking questions anytime — it can even draft a recipe or shopping list right in the conversation, for you to review and confirm." },
|
||||
"mealPlan": { "title": "Meal planning", "description": "Plan your week, generate a plan with AI, and turn it straight into a shopping list." },
|
||||
"pantry": { "title": "Pantry tracking", "description": "Know what you have on hand — scan it in, and let recipes account for it automatically." },
|
||||
"social": { "title": "Share & discover", "description": "Follow other cooks, rate and comment on recipes, and control exactly who can see yours." },
|
||||
"batchCook": { "title": "Batch cooking", "description": "Cook once, eat all week — dedicated batch-cook planning with fridge/freezer guidance." }
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"title": "Everything you need to cook smarter",
|
||||
"subtitle": "From a single idea to a finished, organized recipe collection.",
|
||||
"cta": "Try it free",
|
||||
"items": {
|
||||
"ai": { "title": "AI recipe generation", "description": "Generate a recipe from a short idea, a URL, or a description — dish or drink, automatically detected." },
|
||||
"photoImport": { "title": "Import from a photo", "description": "A vision model recognizes what's in the photo, then a text model writes the full recipe from that description." },
|
||||
"assistant": { "title": "Cooking assistant with tool-calling", "description": "A conversational assistant for cooking questions that can also draft a recipe or shopping-list additions for you to confirm — nothing saves without your say." },
|
||||
"mealPlan": { "title": "AI meal planning", "description": "Generate a week of meals around your preferences, dietary needs, and what's already in your pantry." },
|
||||
"pantry": { "title": "Pantry tracking", "description": "Track what you have — scan barcodes or photos — and let it inform meal planning and shopping lists." },
|
||||
"shoppingList": { "title": "Shopping lists", "description": "Multiple lists, shared with others, auto-populated from recipes or meal plans." },
|
||||
"social": { "title": "Follows, ratings & comments", "description": "A social layer for recipes — follow other cooks, rate and review, with granular visibility controls including followers-only." },
|
||||
"batchCook": { "title": "Batch cooking", "description": "Plan cook-once-eat-all-week sessions with per-dish fridge/freezer guidance." }
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"title": "About Epicure",
|
||||
"paragraphs": [
|
||||
"Epicure started as a simple idea: a recipe book that actually keeps up with how you cook — planning, pantry, and AI all in one place instead of five different apps.",
|
||||
"It's an independent project, built and maintained by one person, growing based on what's actually useful to the people using it."
|
||||
]
|
||||
},
|
||||
"contact": {
|
||||
"title": "Get in touch",
|
||||
"subtitle": "Questions, feedback, or something broken — email us and we'll get back to you."
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"menu": "Menu",
|
||||
"recipes": "Recipes",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user