From c23543b1201e4851eedc76fff7f433cc4ddec5fb Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Thu, 2 Jul 2026 16:02:12 +0000 Subject: [PATCH] Bob AI: Added custom placement, register, login, and contact section --- src/pages/HomePage.tsx | 233 +++------------------- src/pages/HomePage/sections/About.tsx | 19 ++ src/pages/HomePage/sections/Contact.tsx | 65 ++++++ src/pages/HomePage/sections/Demo.tsx | 29 +++ src/pages/HomePage/sections/Features.tsx | 59 ++++++ src/pages/HomePage/sections/Hero.tsx | 30 +++ src/pages/HomePage/sections/Login.tsx | 97 +++++++++ src/pages/HomePage/sections/Placement.tsx | 141 +++++++++++++ src/pages/HomePage/sections/Register.tsx | 110 ++++++++++ src/pages/HomePage/sections/Schedule.tsx | 31 +++ 10 files changed, 608 insertions(+), 206 deletions(-) create mode 100644 src/pages/HomePage/sections/About.tsx create mode 100644 src/pages/HomePage/sections/Contact.tsx create mode 100644 src/pages/HomePage/sections/Demo.tsx create mode 100644 src/pages/HomePage/sections/Features.tsx create mode 100644 src/pages/HomePage/sections/Hero.tsx create mode 100644 src/pages/HomePage/sections/Login.tsx create mode 100644 src/pages/HomePage/sections/Placement.tsx create mode 100644 src/pages/HomePage/sections/Register.tsx create mode 100644 src/pages/HomePage/sections/Schedule.tsx diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 0ca50ea..e468918 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,218 +1,39 @@ -import AboutText from '@/components/sections/about/AboutText'; -import ContactCta from '@/components/sections/contact/ContactCta'; -import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn'; -import FeaturesBorderGlow from '@/components/sections/features/FeaturesBorderGlow'; -import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento'; -import HeroBillboard from '@/components/sections/hero/HeroBillboard'; -import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards'; -import { BookOpen, Globe2, MessageCircle, Mic, PenTool, Users, Video } from "lucide-react"; -import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +// AUTO-GENERATED shell by per-section-migrate. +// Section bodies live in the sibling sections/ folder (one file per section). +// Edit those section files directly. Non-block content (wrappers, +// non-inlinable sections) is preserved inline; extracted section blocks +// become component refs. -export default function HomePage() { +import React from 'react'; +import HeroSection from './HomePage/sections/Hero'; +import AboutSection from './HomePage/sections/About'; +import FeaturesSection from './HomePage/sections/Features'; +import DemoSection from './HomePage/sections/Demo'; +import ScheduleSection from './HomePage/sections/Schedule'; + + +import PlacementSection from './HomePage/sections/Placement'; +import RegisterSection from './HomePage/sections/Register'; +import LoginSection from './HomePage/sections/Login'; +import ContactSection from './HomePage/sections/Contact';export default function HomePage(): React.JSX.Element { return ( - <> -
- - - -
+<> + -
- - - -
+ -
- - - -
+ + -
- - - -
-
- - - -
+ -
- - - -
+ + + + -
- - - -
-
- - - -
); } diff --git a/src/pages/HomePage/sections/About.tsx b/src/pages/HomePage/sections/About.tsx new file mode 100644 index 0000000..71f7bbb --- /dev/null +++ b/src/pages/HomePage/sections/About.tsx @@ -0,0 +1,19 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "about" section. + +import React from 'react'; +import AboutText from '@/components/sections/about/AboutText'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function AboutSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Contact.tsx b/src/pages/HomePage/sections/Contact.tsx new file mode 100644 index 0000000..71cdcd3 --- /dev/null +++ b/src/pages/HomePage/sections/Contact.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import Card from '@/components/ui/Card'; +import TextAnimation from '@/components/ui/TextAnimation'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +import Tag from '@/components/ui/Tag'; +import { MessageCircle, Instagram, User } from 'lucide-react'; + +export default function ContactSection(): React.JSX.Element { + return ( + + ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Demo.tsx b/src/pages/HomePage/sections/Demo.tsx new file mode 100644 index 0000000..87f0cee --- /dev/null +++ b/src/pages/HomePage/sections/Demo.tsx @@ -0,0 +1,29 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "demo" section. + +import React from 'react'; +import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function DemoSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Features.tsx b/src/pages/HomePage/sections/Features.tsx new file mode 100644 index 0000000..5704a7a --- /dev/null +++ b/src/pages/HomePage/sections/Features.tsx @@ -0,0 +1,59 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "features" section. + +import React from 'react'; +import FeaturesBorderGlow from '@/components/sections/features/FeaturesBorderGlow'; +import { BookOpen, Globe2, MessageCircle, Mic, PenTool, Users, Video } from "lucide-react"; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function FeaturesSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Hero.tsx b/src/pages/HomePage/sections/Hero.tsx new file mode 100644 index 0000000..a701e7f --- /dev/null +++ b/src/pages/HomePage/sections/Hero.tsx @@ -0,0 +1,30 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "hero" section. + +import React from 'react'; +import HeroBillboard from '@/components/sections/hero/HeroBillboard'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function HeroSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Login.tsx b/src/pages/HomePage/sections/Login.tsx new file mode 100644 index 0000000..9093319 --- /dev/null +++ b/src/pages/HomePage/sections/Login.tsx @@ -0,0 +1,97 @@ +import React, { useState } from 'react'; +import Button from '@/components/ui/Button'; +import Card from '@/components/ui/Card'; +import TextAnimation from '@/components/ui/TextAnimation'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +import Tag from '@/components/ui/Tag'; +import Input from '@/components/ui/Input'; +import Label from '@/components/ui/Label'; + +export default function LoginSection(): React.JSX.Element { + const [submitted, setSubmitted] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // In a real app, this would send to aminsophie98@gmail.com + setSubmitted(true); + }; + + return ( +
+ +
+ + +

+ Login to access your live sessions, daily practice worksheets, and recorded lessons. +

+ + + {submitted ? ( +
+
+ + + +
+

Login Request Sent

+

+ Your login request has been sent to the administrator. You will be contacted shortly. +

+
+ ) : ( +
+
+ + +
+ +
+
+ + Forgot password? +
+ +
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Placement.tsx b/src/pages/HomePage/sections/Placement.tsx new file mode 100644 index 0000000..e0b5a62 --- /dev/null +++ b/src/pages/HomePage/sections/Placement.tsx @@ -0,0 +1,141 @@ +import React, { useState } from 'react'; +import Button from '@/components/ui/Button'; +import Card from '@/components/ui/Card'; +import TextAnimation from '@/components/ui/TextAnimation'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +import Tag from '@/components/ui/Tag'; + +const questions = [ + { q: "1. I ___ from Spain.", options: ["am", "is", "are"], answer: 0 }, + { q: "2. She ___ to the store every day.", options: ["go", "goes", "going"], answer: 1 }, + { q: "3. ___ you like coffee?", options: ["Do", "Does", "Are"], answer: 0 }, + { q: "4. I have been living here ___ 5 years.", options: ["since", "for", "in"], answer: 1 }, + { q: "5. If I ___ you, I would study harder.", options: ["was", "were", "am"], answer: 1 }, + { q: "6. By this time next year, I ___ my degree.", options: ["will finish", "will have finished", "finish"], answer: 1 }, + { q: "7. He is the man ___ stole my car.", options: ["who", "which", "whose"], answer: 0 }, + { q: "8. I'm looking forward ___ you.", options: ["to see", "to seeing", "seeing"], answer: 1 }, + { q: "9. She asked me where ___.", options: ["I lived", "did I live", "do I live"], answer: 0 }, + { q: "10. Hardly ___ the house when it started to rain.", options: ["I had left", "had I left", "I left"], answer: 1 } +]; + +export default function PlacementSection(): React.JSX.Element { + const [currentQuestion, setCurrentQuestion] = useState(0); + const [score, setScore] = useState(0); + const [showResult, setShowResult] = useState(false); + + const handleAnswer = (selectedIndex: number) => { + if (selectedIndex === questions[currentQuestion].answer) { + setScore(score + 1); + } + + if (currentQuestion < questions.length - 1) { + setCurrentQuestion(currentQuestion + 1); + } else { + setShowResult(true); + } + }; + + const resetQuiz = () => { + setCurrentQuestion(0); + setScore(0); + setShowResult(false); + }; + + const getResult = () => { + if (score <= 3) { + return { + level: "A1 Beginner", + description: "Speak basic English confidently and build grammar foundations.", + course: "Beginner Course" + }; + } else if (score <= 7) { + return { + level: "B1 Intermediate", + description: "Handle travel, interviews, daily conversations, and business meetings confidently.", + course: "Intermediate Course" + }; + } else { + return { + level: "C1 Advanced", + description: "Communicate professionally, give presentations, and express complex ideas fluently.", + course: "Advanced Course" + }; + } + }; + + return ( +
+ +
+ + +

+ Take our quick 10-question test to discover your current English level and get a customized class recommendation. +

+ + + {!showResult ? ( +
+
+ Question {currentQuestion + 1} of 10 +
+
+
+
+ +

+ {questions[currentQuestion].q} +

+ +
+ {questions[currentQuestion].options.map((option, idx) => ( + + ))} +
+
+ ) : ( +
+
+ {score}/10 +
+ +

+ Your Level: {getResult().level} +

+ +

+ {getResult().description} +

+ +
+

Recommended Class

+

{getResult().course}

+
+ +
+
+
+ )} + +
+ +
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Register.tsx b/src/pages/HomePage/sections/Register.tsx new file mode 100644 index 0000000..c415bff --- /dev/null +++ b/src/pages/HomePage/sections/Register.tsx @@ -0,0 +1,110 @@ +import React, { useState } from 'react'; +import Button from '@/components/ui/Button'; +import Card from '@/components/ui/Card'; +import TextAnimation from '@/components/ui/TextAnimation'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +import Tag from '@/components/ui/Tag'; +import Input from '@/components/ui/Input'; +import Label from '@/components/ui/Label'; + +export default function RegisterSection(): React.JSX.Element { + const [submitted, setSubmitted] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // In a real app, this would send to aminsophie98@gmail.com + setSubmitted(true); + }; + + return ( +
+ +
+ + +

+ Fill out the form below and we will contact you shortly to begin your English journey. +

+ + + {submitted ? ( +
+
+ + + +
+

Thank you!

+

+ We received your inquiry and will contact you shortly. +

+
+ ) : ( +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Schedule.tsx b/src/pages/HomePage/sections/Schedule.tsx new file mode 100644 index 0000000..3e5b23f --- /dev/null +++ b/src/pages/HomePage/sections/Schedule.tsx @@ -0,0 +1,31 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "schedule" section. + +import React from 'react'; +import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function ScheduleSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} -- 2.49.1