9 Commits

Author SHA1 Message Date
9b3e3f4ba1 Update src/app/chat/page.tsx 2026-04-02 13:20:32 +00:00
1d81682183 Update src/app/page.tsx 2026-04-02 13:20:07 +00:00
516032e31f Add src/app/chat/page.tsx 2026-04-02 13:20:06 +00:00
29904cc551 Merge version_4 into main
Merge version_4 into main
2026-04-02 13:15:10 +00:00
9029d726ab Update src/app/page.tsx 2026-04-02 13:15:07 +00:00
e1c27f7df6 Merge version_3 into main
Merge version_3 into main
2026-04-02 13:07:57 +00:00
bd5c1c520a Update src/app/styles/variables.css 2026-04-02 13:07:51 +00:00
f5d43b118a Update src/app/page.tsx 2026-04-02 13:07:51 +00:00
fef3aefc85 Merge version_2 into main
Merge version_2 into main
2026-04-02 13:05:59 +00:00
3 changed files with 166 additions and 91 deletions

45
src/app/chat/page.tsx Normal file
View File

@@ -0,0 +1,45 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
export default function ChatPage() {
return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="medium"
sizing="medium"
background="circleGradient"
cardStyle="glass-elevated"
primaryButtonStyle="gradient"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<div id="nav" data-section="nav">
<NavbarStyleFullscreen
navItems={[
{ name: "Accueil", id: "/" },
{ name: "Chat", id: "/chat" },
]}
brandName="MathIA Chat"
/>
</div>
<main className="container mx-auto p-8 pt-32 min-h-screen flex flex-col md:flex-row gap-8">
<div className="flex-1 border border-neutral-800 rounded-xl p-6 bg-neutral-900">
<h2 className="text-2xl font-bold mb-4">3D Math Teacher</h2>
<div className="h-96 w-full flex items-center justify-center border border-neutral-700 rounded bg-black/50">
<p className="text-neutral-500">[3D Avatar Component: Teaching Active]</p>
</div>
</div>
<div className="flex-[2] border border-neutral-800 rounded-xl p-6 bg-white">
<h2 className="text-2xl font-bold mb-4 text-black">Whiteboard</h2>
<div className="h-96 w-full border border-neutral-300 rounded bg-white shadow-inner">
<p className="p-4 text-neutral-400">[Real-time Whiteboard Canvas]</p>
</div>
</div>
</main>
</ThemeProvider>
);
}

View File

@@ -10,8 +10,19 @@ import HeroLogoBillboardSplit from '@/components/sections/hero/HeroLogoBillboard
import MediaAbout from '@/components/sections/about/MediaAbout'; import MediaAbout from '@/components/sections/about/MediaAbout';
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen'; import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
import { Lightbulb, Monitor, PenTool, ShieldCheck, Zap } from "lucide-react"; import { Lightbulb, Monitor, PenTool, ShieldCheck, Zap } from "lucide-react";
import CardStack from '@/components/cardStack/CardStack';
import { useState } from 'react';
export default function LandingPage() { export default function LandingPage() {
const [grokApiKey, setGrokApiKey] = useState("");
const handleContactSubmit = (data: Record<string, string>) => {
if (data.apiKey) {
setGrokApiKey(data.apiKey);
console.log("API Key secured in memory");
}
};
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="icon-arrow" defaultButtonVariant="icon-arrow"
@@ -26,99 +37,118 @@ export default function LandingPage() {
headingFontWeight="semibold" headingFontWeight="semibold"
> >
<ReactLenis root> <ReactLenis root>
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarStyleFullscreen <NavbarStyleFullscreen
navItems={[ navItems={[
{ name: "Accueil", id: "hero" }, { name: "Accueil", id: "hero" },
{ name: "Fonctionnalités", id: "features" }, { name: "Chat", id: "chat" },
{ name: "FAQ", id: "faq" }, { name: "Fonctionnalités", id: "features" },
{ name: "Contact", id: "contact" }, { name: "FAQ", id: "faq" },
]} { name: "Contact", id: "contact" },
brandName="MathIA Grok" ]}
/> brandName="MathIA Grok"
</div> />
</div>
<div id="hero" data-section="hero"> <div id="hero" data-section="hero">
<HeroLogoBillboardSplit <HeroLogoBillboardSplit
background={{ variant: "plain" }} background={{ variant: "plain" }}
logoText="MathIA x Grok" logoText="MathIA x Grok"
description="Une interface de chat avancée combinant le raisonnement de Grok avec un espace de travail visuel. Posez vos questions, recevez des explications illustrées instantanément." description="Une interface de chat avancée combinant le raisonnement de Grok avec un espace de travail visuel. Posez vos questions, recevez des explications illustrées instantanément."
buttons={[ buttons={[
{ text: "Essayer la démo", href: "#contact" }, { text: "Essayer la démo", href: "#contact" },
]} ]}
buttonAnimation="slide-up" buttonAnimation="slide-up"
layoutOrder="default" layoutOrder="default"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/a-highly-sophisticated-digital-classroom-1775133772930-0a6d301f.png" imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/a-highly-sophisticated-digital-classroom-1775133772930-0a6d301f.png"
mediaAnimation="blur-reveal" mediaAnimation="blur-reveal"
/> />
</div> </div>
<div id="about" data-section="about"> <div id="chat" data-section="chat">
<MediaAbout <CardStack
useInvertedBackground={false} title="Grok Chat Interface"
title="Réflexion augmentée" description={grokApiKey ? "Connecté à Grok AI - Prêt à enseigner les mathématiques." : "Veuillez configurer votre clé API dans la section contact pour activer le tuteur IA."}
description="MathIA utilise les capacités de raisonnement de Grok pour analyser des problèmes complexes et générer des solutions étape par étape sur un tableau blanc numérique, créant une expérience de chat interactive et visuelle." textboxLayout="split"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/an-ai-powered-math-teacher-character-int-1775133776116-85c101a8.png" animationType="blur-reveal"
imageAlt="Interface de chat et tableau blanc" ariaLabel="Chat interface"
/> className="bg-black text-white"
</div> >
<div className="flex flex-col gap-4 p-8 border border-neutral-800 rounded-lg">
<div className="text-sm text-neutral-400">{grokApiKey ? "Grok: Système en ligne. Quelle équation souhaitez-vous résoudre ?" : "Grok: En attente de clé API..."}</div>
<div className="h-px w-full bg-neutral-800 my-2" />
<div className="text-white font-medium">User: Explique-moi le calcul intégral.</div>
</div>
</CardStack>
</div>
<div id="features" data-section="features"> <div id="about" data-section="about">
<FeatureBorderGlow <MediaAbout
textboxLayout="split" useInvertedBackground={false}
useInvertedBackground={false} title="Réflexion augmentée"
animationType="slide-up" description="MathIA utilise les capacités de raisonnement de Grok pour analyser des problèmes complexes et générer des solutions étape par étape sur un tableau blanc numérique, créant une expérience de chat interactive et visuelle."
features={[ imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/an-ai-powered-math-teacher-character-int-1775133776116-85c101a8.png"
{ icon: Lightbulb, title: "Chat Grok IA", description: "Interaction naturelle avec un modèle de langage performant." }, imageAlt="Interface de chat et tableau blanc"
{ icon: PenTool, title: "Visualisation", description: "Conversion automatique des concepts mathématiques en schémas." }, />
{ icon: Monitor, title: "Interface épurée", description: "Design noir et blanc minimaliste pour se concentrer sur l'essentiel." }, </div>
{ icon: Zap, title: "Réponses rapides", description: "Latence ultra-faible pour un apprentissage fluide." },
{ icon: ShieldCheck, title: "Confidentialité", description: "Gestion sécurisée de vos clés API en local." },
]}
title="La puissance du visuel"
description="Une interface pensée pour la clarté et l'efficacité."
/>
</div>
<div id="faq" data-section="faq"> <div id="features" data-section="features">
<FaqSplitMedia <FeatureBorderGlow
textboxLayout="split" textboxLayout="split"
useInvertedBackground={false} useInvertedBackground={false}
faqs={[ animationType="slide-up"
{ id: "1", title: "Qu'est-ce que MathIA ?", content: "C'est une plateforme qui associe Grok AI à un canevas numérique interactif." }, features={[
{ id: "2", title: "Besoin d'une clé API ?", content: "Oui, vous utilisez votre propre clé pour une confidentialité totale." }, { icon: Lightbulb, title: "Chat Grok IA", description: "Interaction naturelle avec un modèle de langage performant." },
]} { icon: PenTool, title: "Visualisation", description: "Conversion automatique des concepts mathématiques en schémas." },
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/clean-interface-showing-interactive-math-1775133774387-5fe1858a.png" { icon: Monitor, title: "Interface épurée", description: "Design noir et blanc minimaliste pour se concentrer sur l'essentiel." },
title="Questions Fréquentes" { icon: Zap, title: "Réponses rapides", description: "Latence ultra-faible pour un apprentissage fluide." },
description="Plus d'informations sur MathIA." { icon: ShieldCheck, title: "Confidentialité", description: "Gestion sécurisée de vos clés API en local." },
faqsAnimation="slide-up" ]}
mediaAnimation="slide-up" title="La puissance du visuel"
/> description="Une interface pensée pour la clarté et l'efficacité."
</div> />
</div>
<div id="contact" data-section="contact"> <div id="faq" data-section="faq">
<ContactSplitForm <FaqSplitMedia
useInvertedBackground={false} textboxLayout="split"
title="Accès au système" useInvertedBackground={false}
description="Configurez votre environnement." faqs={[
inputs={[ { id: "1", title: "Qu'est-ce que MathIA ?", content: "C'est une plateforme qui associe Grok AI à un canevas numérique interactif." },
{ name: "name", type: "text", placeholder: "Nom", required: true }, { id: "2", title: "Besoin d'une clé API ?", content: "Oui, vous utilisez votre propre clé pour une confidentialité totale." },
{ name: "email", type: "email", placeholder: "Email", required: true }, ]}
{ name: "apiKey", type: "password", placeholder: "Clé API Grok", required: true }, imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/clean-interface-showing-interactive-math-1775133774387-5fe1858a.png"
]} title="Questions Fréquentes"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/futuristic-digital-aesthetic-background--1775133773550-69c25a60.png" description="Plus d'informations sur MathIA."
mediaAnimation="blur-reveal" faqsAnimation="slide-up"
/> mediaAnimation="slide-up"
</div> />
</div>
<div id="footer" data-section="footer"> <div id="contact" data-section="contact">
<FooterLogoReveal <ContactSplitForm
logoText="MathIA" useInvertedBackground={false}
leftLink={{ text: "Confidentialité", href: "#" }} title="Accès au système"
rightLink={{ text: "Contact", href: "#contact" }} description="Configurez votre environnement."
/> inputs={[
</div> { name: "name", type: "text", placeholder: "Nom", required: true },
{ name: "email", type: "email", placeholder: "Email", required: true },
{ name: "apiKey", type: "password", placeholder: "Clé API Grok", required: true },
]}
onSubmit={handleContactSubmit}
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3BiavO3dCn02likxwS7upWoCIlU/futuristic-digital-aesthetic-background--1775133773550-69c25a60.png"
mediaAnimation="blur-reveal"
/>
</div>
<div id="footer" data-section="footer">
<FooterLogoReveal
logoText="MathIA"
leftLink={{ text: "Confidentialité", href: "#" }}
rightLink={{ text: "Contact", href: "#contact" }}
/>
</div>
</ReactLenis> </ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -10,15 +10,15 @@
--accent: #ffffff; --accent: #ffffff;
--background-accent: #ffffff; */ --background-accent: #ffffff; */
--background: #0a0a0a; --background: #000000;
--card: #1a1a1a; --card: #0a0a0a;
--foreground: #ffffff; --foreground: #ffffff;
--primary-cta: #ffffff; --primary-cta: #ffffff;
--primary-cta-text: #0a0a0a; --primary-cta-text: #0a0a0a;
--secondary-cta: #1a1a1a; --secondary-cta: #1a1a1a;
--secondary-cta-text: #ffffff; --secondary-cta-text: #ffffff;
--accent: #737373; --accent: #333333;
--background-accent: #737373; --background-accent: #222222;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);