Improve public pages 2
This commit is contained in:
@@ -2,18 +2,12 @@ import React, { forwardRef } from 'react';
|
|||||||
import { clsx } from 'clsx';
|
import { clsx } from 'clsx';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Button } from '../../ui';
|
|
||||||
import {
|
import {
|
||||||
Heart,
|
Heart,
|
||||||
ExternalLink,
|
ExternalLink,
|
||||||
Mail,
|
Mail,
|
||||||
Phone,
|
Phone,
|
||||||
MapPin,
|
|
||||||
Github,
|
|
||||||
Twitter,
|
|
||||||
Linkedin,
|
|
||||||
Globe,
|
Globe,
|
||||||
Shield,
|
|
||||||
FileText,
|
FileText,
|
||||||
HelpCircle,
|
HelpCircle,
|
||||||
MessageSquare
|
MessageSquare
|
||||||
@@ -141,12 +135,6 @@ export const Footer = forwardRef<FooterRef, FooterProps>(({
|
|||||||
copyrightText,
|
copyrightText,
|
||||||
showVersion = true,
|
showVersion = true,
|
||||||
version = '2.0.0',
|
version = '2.0.0',
|
||||||
showLanguageSelector = false,
|
|
||||||
languages = [],
|
|
||||||
currentLanguage = 'es',
|
|
||||||
onLanguageChange,
|
|
||||||
showThemeToggle = false,
|
|
||||||
onThemeToggle,
|
|
||||||
showPrivacyLinks = true,
|
showPrivacyLinks = true,
|
||||||
compact = false,
|
compact = false,
|
||||||
children,
|
children,
|
||||||
@@ -208,12 +196,6 @@ export const Footer = forwardRef<FooterRef, FooterProps>(({
|
|||||||
|
|
||||||
const socialLinksToShow = socialLinks || defaultSocialLinks;
|
const socialLinksToShow = socialLinks || defaultSocialLinks;
|
||||||
|
|
||||||
// Privacy links
|
|
||||||
const privacyLinks: FooterLink[] = [
|
|
||||||
{ id: 'privacy', label: t('common:footer.links.privacy', 'Privacidad'), href: '/privacy', icon: Shield },
|
|
||||||
{ id: 'terms', label: t('common:footer.links.terms', 'Términos'), href: '/terms', icon: FileText },
|
|
||||||
{ id: 'cookies', label: t('common:footer.links.cookies', 'Cookies'), href: '/cookies' },
|
|
||||||
];
|
|
||||||
|
|
||||||
// Scroll into view
|
// Scroll into view
|
||||||
const scrollIntoView = React.useCallback(() => {
|
const scrollIntoView = React.useCallback(() => {
|
||||||
|
|||||||
@@ -228,9 +228,33 @@
|
|||||||
"benefit3": "Manages central + point inventory"
|
"benefit3": "Manages central + point inventory"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"roadmap": {
|
||||||
|
"badge": "Coming Soon",
|
||||||
|
"title": "Our Roadmap",
|
||||||
|
"highlight": "Limitless Innovation",
|
||||||
|
"subtitle": "We don't stop at predictive AI. We are building the complete technological ecosystem for the future of the bakery.",
|
||||||
|
"iot": {
|
||||||
|
"title": "IoT and Hardware",
|
||||||
|
"description": "Connect your ovens and silos directly with the AI for total precision in baking and real stock control.",
|
||||||
|
"item1": "Connected IoT Ovens",
|
||||||
|
"item2": "Silo Weight Sensors"
|
||||||
|
},
|
||||||
|
"staff_app": {
|
||||||
|
"title": "Staff App",
|
||||||
|
"description": "Digitize the workshop with mobile production panels. Less paper, fluid communication and total traceability.",
|
||||||
|
"item1": "Digital Kitchen Panels",
|
||||||
|
"item2": "Dynamic Shift Control"
|
||||||
|
},
|
||||||
|
"ecosystem": {
|
||||||
|
"title": "AI Ecosystem",
|
||||||
|
"description": "Predictive maintenance of machinery and a smart marketplace to optimize supply costs.",
|
||||||
|
"item1": "Predictive Maintenance",
|
||||||
|
"item2": "Smart Marketplace"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cta": {
|
"cta": {
|
||||||
"title": "See Bakery-AI in Action",
|
"title": "See Bakery-AI in Action",
|
||||||
"subtitle": "Request a personalized demo for your bakery",
|
"subtitle": "Request a personalized demo for your bakery",
|
||||||
"button": "Request Demo"
|
"button": "Request Demo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -228,9 +228,33 @@
|
|||||||
"benefit3": "Gestiona inventario central + puntos"
|
"benefit3": "Gestiona inventario central + puntos"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"roadmap": {
|
||||||
|
"badge": "Próximamente",
|
||||||
|
"title": "Nuestra Hoja de Ruta",
|
||||||
|
"highlight": "Innovación Sin Límites",
|
||||||
|
"subtitle": "No nos detenemos en la IA predictiva. Estamos construyendo el ecosistema tecnológico completo para el futuro de la panadería.",
|
||||||
|
"iot": {
|
||||||
|
"title": "IoT y Hardware",
|
||||||
|
"description": "Conecta tus hornos y silos directamente con la IA para una precisión total en el horneado y control de stock real.",
|
||||||
|
"item1": "Hornos Conectados IoT",
|
||||||
|
"item2": "Sensores de Peso en Silos"
|
||||||
|
},
|
||||||
|
"staff_app": {
|
||||||
|
"title": "App para Equipos",
|
||||||
|
"description": "Digitaliza el obrador con paneles de producción móviles. Menos papel, comunicación fluida y trazabilidad total.",
|
||||||
|
"item1": "Paneles de Cocina Digitales",
|
||||||
|
"item2": "Control de Turnos Dinámico"
|
||||||
|
},
|
||||||
|
"ecosystem": {
|
||||||
|
"title": "Ecosistema IA",
|
||||||
|
"description": "Mantenimiento predictivo de maquinaria y un marketplace inteligente para optimizar costes de suministros.",
|
||||||
|
"item1": "Mantenimiento Predictivo",
|
||||||
|
"item2": "Marketplace Inteligente"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cta": {
|
"cta": {
|
||||||
"title": "Ver Bakery-IA en Acción",
|
"title": "Ver Bakery-IA en Acción",
|
||||||
"subtitle": "Solicita una demo personalizada para tu panadería",
|
"subtitle": "Solicita una demo personalizada para tu panadería",
|
||||||
"button": "Solicitar Demo"
|
"button": "Solicitar Demo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -228,9 +228,33 @@
|
|||||||
"benefit3": "Inbentario zentrala + puntuak kudeatzen ditu"
|
"benefit3": "Inbentario zentrala + puntuak kudeatzen ditu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"roadmap": {
|
||||||
|
"badge": "Laster",
|
||||||
|
"title": "Gure Bide-orria",
|
||||||
|
"highlight": "Mugagabe Berrikuntza",
|
||||||
|
"subtitle": "Ez gara IA prediktiboan geratzen. Okindegiaren etorkizunerako ekosistema teknologiko osoa eraikitzen ari gara.",
|
||||||
|
"iot": {
|
||||||
|
"title": "IoT eta Hardwarea",
|
||||||
|
"description": "Konektatu zure labeak eta siloak zuzenean IArekin labekatzean zehaztasun osoa eta izkinen kontrol errealerako.",
|
||||||
|
"item1": "IoT Laben Konexioa",
|
||||||
|
"item2": "Siloen Pisu Sentsoreak"
|
||||||
|
},
|
||||||
|
"staff_app": {
|
||||||
|
"title": "Taldeentzako App-a",
|
||||||
|
"description": "Digitalizatu lantegia ekoizpen panel mugikorrekin. Paper gutxiago, komunikazio arina eta trazabilitate osoa.",
|
||||||
|
"item1": "Sukaldeko Panel Digitalak",
|
||||||
|
"item2": "Txanda-kontrol Dinamikoa"
|
||||||
|
},
|
||||||
|
"ecosystem": {
|
||||||
|
"title": "IA Ekosistema",
|
||||||
|
"description": "Makineriaren mantentze prediktiboa eta hornidura kostuak optimizatzeko marketplace adimenduna.",
|
||||||
|
"item1": "Mantentze Prediktiboa",
|
||||||
|
"item2": "Marketplace Adimenduna"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cta": {
|
"cta": {
|
||||||
"title": "Ikusi Bakery-IA Lan Egiten",
|
"title": "Ikusi Bakery-IA Lan Egiten",
|
||||||
"subtitle": "Eskatu zure okindegiaren demo pertsonalizatua",
|
"subtitle": "Eskatu zure okindegiaren demo pertsonalizatua",
|
||||||
"button": "Demo Eskatu"
|
"button": "Demo Eskatu"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,6 @@ import { Link, useNavigate } from 'react-router-dom';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { PublicLayout } from '../../components/layout';
|
import { PublicLayout } from '../../components/layout';
|
||||||
import {
|
import {
|
||||||
Button,
|
|
||||||
ProgressBar,
|
ProgressBar,
|
||||||
FloatingCTA,
|
FloatingCTA,
|
||||||
ScrollReveal,
|
ScrollReveal,
|
||||||
@@ -14,7 +13,6 @@ import {
|
|||||||
Card,
|
Card,
|
||||||
CardHeader,
|
CardHeader,
|
||||||
CardBody,
|
CardBody,
|
||||||
Badge
|
|
||||||
} from '../../components/ui';
|
} from '../../components/ui';
|
||||||
import { getDemoUrl } from '../../utils/navigation';
|
import { getDemoUrl } from '../../utils/navigation';
|
||||||
import {
|
import {
|
||||||
@@ -25,10 +23,7 @@ import {
|
|||||||
Leaf,
|
Leaf,
|
||||||
Store,
|
Store,
|
||||||
CheckCircle2,
|
CheckCircle2,
|
||||||
Calendar,
|
|
||||||
Package,
|
|
||||||
AlertTriangle,
|
AlertTriangle,
|
||||||
Euro,
|
|
||||||
Globe,
|
Globe,
|
||||||
School,
|
School,
|
||||||
Building2,
|
Building2,
|
||||||
@@ -37,14 +32,15 @@ import {
|
|||||||
Cloud,
|
Cloud,
|
||||||
PartyPopper,
|
PartyPopper,
|
||||||
ArrowRight,
|
ArrowRight,
|
||||||
Zap,
|
|
||||||
Target,
|
Target,
|
||||||
TreeDeciduous,
|
TreeDeciduous,
|
||||||
Droplets,
|
Droplets,
|
||||||
Award,
|
Award,
|
||||||
Database,
|
Database,
|
||||||
FileText,
|
FileText,
|
||||||
Sparkles
|
Sparkles,
|
||||||
|
Cpu,
|
||||||
|
Smartphone
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
|
|
||||||
const FeaturesPage: React.FC = () => {
|
const FeaturesPage: React.FC = () => {
|
||||||
@@ -913,6 +909,109 @@ const FeaturesPage: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{/* Condensed Roadmap Section */}
|
||||||
|
<section id="roadmap-preview" className="py-20 bg-[var(--bg-primary)] border-t border-[var(--border-primary)]">
|
||||||
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
|
<ScrollReveal variant="fadeUp" delay={0.1}>
|
||||||
|
<div className="text-center mb-16">
|
||||||
|
<div className="inline-flex items-center gap-2 bg-purple-500/10 dark:bg-purple-500/20 border border-purple-500/20 dark:border-purple-500/30 text-purple-600 dark:text-purple-400 px-4 py-2 rounded-full text-sm font-medium mb-6">
|
||||||
|
<Sparkles className="w-5 h-5" />
|
||||||
|
<span>{t('roadmap.badge')}</span>
|
||||||
|
</div>
|
||||||
|
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-4">
|
||||||
|
{t('roadmap.title')}
|
||||||
|
<span className="block bg-gradient-to-r from-purple-600 to-blue-600 bg-clip-text text-transparent">
|
||||||
|
{t('roadmap.highlight')}
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
|
||||||
|
{t('roadmap.subtitle')}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</ScrollReveal>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
<ScrollReveal variant="fadeUp" delay={0.2}>
|
||||||
|
<Card className="h-full border-t-4 border-t-purple-500 bg-[var(--bg-secondary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
|
||||||
|
<CardHeader>
|
||||||
|
<div className="w-12 h-12 bg-purple-500/10 rounded-xl flex items-center justify-center mb-4">
|
||||||
|
<Cpu className="w-6 h-6 text-purple-600" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-bold">{t('roadmap.iot.title')}</h3>
|
||||||
|
</CardHeader>
|
||||||
|
<CardBody>
|
||||||
|
<p className="text-[var(--text-secondary)] mb-4">
|
||||||
|
{t('roadmap.iot.description')}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-2 text-sm text-[var(--text-tertiary)]">
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-purple-500" />
|
||||||
|
{t('roadmap.iot.item1')}
|
||||||
|
</li>
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-purple-500" />
|
||||||
|
{t('roadmap.iot.item2')}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</CardBody>
|
||||||
|
</Card>
|
||||||
|
</ScrollReveal>
|
||||||
|
|
||||||
|
<ScrollReveal variant="fadeUp" delay={0.3}>
|
||||||
|
<Card className="h-full border-t-4 border-t-blue-500 bg-[var(--bg-secondary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
|
||||||
|
<CardHeader>
|
||||||
|
<div className="w-12 h-12 bg-blue-500/10 rounded-xl flex items-center justify-center mb-4">
|
||||||
|
<Smartphone className="w-6 h-6 text-blue-600" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-bold">{t('roadmap.staff_app.title')}</h3>
|
||||||
|
</CardHeader>
|
||||||
|
<CardBody>
|
||||||
|
<p className="text-[var(--text-secondary)] mb-4">
|
||||||
|
{t('roadmap.staff_app.description')}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-2 text-sm text-[var(--text-tertiary)]">
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-blue-500" />
|
||||||
|
{t('roadmap.staff_app.item1')}
|
||||||
|
</li>
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-blue-500" />
|
||||||
|
{t('roadmap.staff_app.item2')}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</CardBody>
|
||||||
|
</Card>
|
||||||
|
</ScrollReveal>
|
||||||
|
|
||||||
|
<ScrollReveal variant="fadeUp" delay={0.4}>
|
||||||
|
<Card className="h-full border-t-4 border-t-green-500 bg-[var(--bg-secondary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
|
||||||
|
<CardHeader>
|
||||||
|
<div className="w-12 h-12 bg-green-500/10 rounded-xl flex items-center justify-center mb-4">
|
||||||
|
<ArrowRight className="w-6 h-6 text-green-600" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-bold">{t('roadmap.ecosystem.title')}</h3>
|
||||||
|
</CardHeader>
|
||||||
|
<CardBody>
|
||||||
|
<p className="text-[var(--text-secondary)] mb-4">
|
||||||
|
{t('roadmap.ecosystem.description')}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-2 text-sm text-[var(--text-tertiary)]">
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
||||||
|
{t('roadmap.ecosystem.item1')}
|
||||||
|
</li>
|
||||||
|
<li className="flex items-center gap-2">
|
||||||
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
||||||
|
{t('roadmap.ecosystem.item2')}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</CardBody>
|
||||||
|
</Card>
|
||||||
|
</ScrollReveal>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
{/* Final CTA - Replicated from AboutPage */}
|
{/* Final CTA - Replicated from AboutPage */}
|
||||||
<section className="py-20 bg-gradient-to-r from-[var(--color-primary)] to-orange-600">
|
<section className="py-20 bg-gradient-to-r from-[var(--color-primary)] to-orange-600">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||||
|
|||||||
Reference in New Issue
Block a user