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.
+
+
+ ) : (
+
+ )}
+
+
+
+
+ );
+}
\ 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.
+
+ );
+}
\ 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 (
+