Merge version_2_1781614810465 into main #4
@@ -1,140 +1,38 @@
|
||||
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly. Non-block content (wrappers, non-inlinable sections) is
|
||||
// preserved inline; extracted section blocks become <XSection/> 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 GallerySection from './HomePage/sections/Gallery';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import SolarSystemMapSection from './HomePage/sections/SolarSystemMap';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroTiltedCards
|
||||
tag="Interactive Learning"
|
||||
title="Explore the Solar System in 3D"
|
||||
description="Journey through eight planets with immersive animations, interactive models, and stunning visual effects Discover the cosmos like never before."
|
||||
primaryButton={{ text: "Start Exploring", href: "#features" }}
|
||||
secondaryButton={{ text: "Learn More", href: "#about" }}
|
||||
items={[
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/modern-futuristic-sci-fi-background_35913-2150.jpg?_wi=1" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/fiery-planet-universe_23-2151955873.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/planets-with-metallic-reflective-effect_23-2150253961.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/gradient-rippled-multicolored-soap-bubble-black-background_23-2148235906.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/liquid-marbling-paint-texture-background-fluid-painting-abstract-texture-intensive-color-mix-wallpaper_1258-79218.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Mission"
|
||||
quote="Bringing the wonders of the universe to everyone, making space education as accessible as it is breathtaking."
|
||||
author="Dr. Sarah Miller"
|
||||
role="Chief Astronomer"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/portrait-cosmonaut-exploring-deep-space-preparing-planetary-mission_482257-126844.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBentoGrid
|
||||
tag="Core Capabilities"
|
||||
title="Cosmos at Your Fingertips"
|
||||
description="Experience deep space with our proprietary rendering engine."
|
||||
features={[
|
||||
{ title: "3D Planet Models", description: "High-fidelity textures and accurate planetary physics.", imageSrc: "http://img.b2bpic.net/free-photo/earth-hour-photo-composition_23-2149282777.jpg" },
|
||||
{ title: "Orbital Mechanics", description: "Visualize how gravity shapes our celestial neighborhood.", imageSrc: "http://img.b2bpic.net/free-photo/modern-futuristic-sci-fi-background_35913-2150.jpg?_wi=2" },
|
||||
{ title: "Interactive Lessons", description: "Gamified learning modules for students of all ages.", imageSrc: "http://img.b2bpic.net/free-photo/futuristic-data-interface_23-2152011741.jpg" },
|
||||
{ title: "Research Tools", description: "Professional-grade research data accessible to everyone.", imageSrc: "http://img.b2bpic.net/free-photo/astronaut-checking-human-expansion-space-mission-data-tablet-journey-mars-cosmonaut_482257-136487.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Visual Discovery"
|
||||
title="Witness the Unknown"
|
||||
description="Explore nebula, galaxies, and celestial phenomena."
|
||||
items={[
|
||||
{ title: "Nebula Vistas", description: "Breathtaking clouds of star formation.", imageSrc: "http://img.b2bpic.net/free-photo/space-background-realistic-starry-night-cosmos-shining-stars-milky-way-stardust-color-galaxy_1258-154778.jpg" },
|
||||
{ title: "Spiral Galaxies", description: "Massive structures of stars and dust.", imageSrc: "http://img.b2bpic.net/free-photo/digital-tunnel-abstract_23-2151977844.jpg" },
|
||||
{ title: "Stellar Nurseries", description: "The cradle of future star systems.", imageSrc: "http://img.b2bpic.net/free-photo/cosmic-nebula-with-stars-gas-clouds_9975-33159.jpg" },
|
||||
{ title: "Supernovae", description: "The explosive final acts of massive stars.", imageSrc: "http://img.b2bpic.net/free-photo/space-background-realistic-starry-night-cosmos-shining-stars-milky-way-stardust-color-galaxy_1258-153862.jpg" },
|
||||
{ title: "Binary Systems", description: "Two stars locked in an eternal cosmic dance.", imageSrc: "http://img.b2bpic.net/free-photo/abstract-geometric-background-shapes-texture_1194-315197.jpg" },
|
||||
{ title: "Singularities", description: "Gravity pushed to the absolute extreme.", imageSrc: "http://img.b2bpic.net/free-photo/colorful-acrylic-ball-water_23-2148469372.jpg" },
|
||||
{ title: "Asteroid Fields", description: "The remnants of planetary construction.", imageSrc: "http://img.b2bpic.net/free-photo/cosmic-catastrophe_23-2151951433.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<GallerySection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsFeatureCards
|
||||
tag="Platform Stats"
|
||||
title="A Community of Explorers"
|
||||
description="Join thousands of enthusiasts exploring the stars daily."
|
||||
metrics={[
|
||||
{ value: "1.2M", title: "Active Explorers", features: ["Monthly active users", "Global reach", "Continuous engagement"] },
|
||||
{ value: "8", title: "Planetary Systems", features: ["Detailed models", "Surface exploration", "Physics simulations"] },
|
||||
{ value: "24/7", title: "Stellar Access", features: ["Always online", "Mobile accessible", "Cloud-rendered"] }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialTrustCard
|
||||
quote="An unparalleled educational experience that has transformed how I understand our neighborhood in the sky."
|
||||
rating={5}
|
||||
author="Marcus Thorne"
|
||||
avatars={[
|
||||
{ name: "Sarah", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg" },
|
||||
{ name: "Michael", imageSrc: "http://img.b2bpic.net/free-photo/front-view-portrait-businessman-with-glasses_23-2148816831.jpg" },
|
||||
{ name: "Elena", imageSrc: "http://img.b2bpic.net/free-photo/portrait-successful-young-businessman-with-his-arms-crossed-looking-camera_23-2148176207.jpg" },
|
||||
{ name: "David", imageSrc: "http://img.b2bpic.net/free-photo/studio-portrait-serious-bearded-male-dressed-suit_613910-5596.jpg" },
|
||||
{ name: "Jessica", imageSrc: "http://img.b2bpic.net/free-photo/astronaut-day-spaceman-outer-space-cosmos-galaxy-helmet-off-looking-black-coffee-cup_140725-161236.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Answers to your cosmic curiosity."
|
||||
categories={[
|
||||
{ name: "General", items: [
|
||||
{ question: "Is this platform free?", answer: "Yes, basic exploration is free for everyone." },
|
||||
{ question: "Does it work on mobile?", answer: "Yes, our web-based 3D models scale to mobile devices." }
|
||||
] }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Join Us"
|
||||
text="Start your journey through the cosmos today and never look at the night sky the same way again."
|
||||
primaryButton={{ text: "Begin Exploration", href: "#" }}
|
||||
secondaryButton={{ text: "Contact Support", href: "#" }}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
<SolarSystemMapSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
22
src/pages/HomePage/sections/About.tsx
Normal file
22
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
// 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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="Our Mission"
|
||||
quote="Bringing the wonders of the universe to everyone, making space education as accessible as it is breathtaking."
|
||||
author="Dr. Sarah Miller"
|
||||
role="Chief Astronomer"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/portrait-cosmonaut-exploring-deep-space-preparing-planetary-mission_482257-126844.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Contact.tsx
Normal file
21
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Join Us"
|
||||
text="Start your journey through the cosmos today and never look at the night sky the same way again."
|
||||
primaryButton={{ text: "Begin Exploration", href: "#" }}
|
||||
secondaryButton={{ text: "Contact Support", href: "#" }}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
26
src/pages/HomePage/sections/Faq.tsx
Normal file
26
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Support"
|
||||
title="Frequently Asked Questions"
|
||||
description="Answers to your cosmic curiosity."
|
||||
categories={[
|
||||
{ name: "General", items: [
|
||||
{ question: "Is this platform free?", answer: "Yes, basic exploration is free for everyone." },
|
||||
{ question: "Does it work on mobile?", answer: "Yes, our web-based 3D models scale to mobile devices." }
|
||||
] }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
26
src/pages/HomePage/sections/Features.tsx
Normal file
26
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
// 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 FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBentoGrid
|
||||
tag="Core Capabilities"
|
||||
title="Cosmos at Your Fingertips"
|
||||
description="Experience deep space with our proprietary rendering engine."
|
||||
features={[
|
||||
{ title: "3D Planet Models", description: "High-fidelity textures and accurate planetary physics.", imageSrc: "http://img.b2bpic.net/free-photo/earth-hour-photo-composition_23-2149282777.jpg" },
|
||||
{ title: "Orbital Mechanics", description: "Visualize how gravity shapes our celestial neighborhood.", imageSrc: "http://img.b2bpic.net/free-photo/modern-futuristic-sci-fi-background_35913-2150.jpg?_wi=2" },
|
||||
{ title: "Interactive Lessons", description: "Gamified learning modules for students of all ages.", imageSrc: "http://img.b2bpic.net/free-photo/futuristic-data-interface_23-2152011741.jpg" },
|
||||
{ title: "Research Tools", description: "Professional-grade research data accessible to everyone.", imageSrc: "http://img.b2bpic.net/free-photo/astronaut-checking-human-expansion-space-mission-data-tablet-journey-mars-cosmonaut_482257-136487.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Gallery.tsx
Normal file
29
src/pages/HomePage/sections/Gallery.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "gallery" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function GallerySection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesImageBento
|
||||
tag="Visual Discovery"
|
||||
title="Witness the Unknown"
|
||||
description="Explore nebula, galaxies, and celestial phenomena."
|
||||
items={[
|
||||
{ title: "Nebula Vistas", description: "Breathtaking clouds of star formation.", imageSrc: "http://img.b2bpic.net/free-photo/space-background-realistic-starry-night-cosmos-shining-stars-milky-way-stardust-color-galaxy_1258-154778.jpg" },
|
||||
{ title: "Spiral Galaxies", description: "Massive structures of stars and dust.", imageSrc: "http://img.b2bpic.net/free-photo/digital-tunnel-abstract_23-2151977844.jpg" },
|
||||
{ title: "Stellar Nurseries", description: "The cradle of future star systems.", imageSrc: "http://img.b2bpic.net/free-photo/cosmic-nebula-with-stars-gas-clouds_9975-33159.jpg" },
|
||||
{ title: "Supernovae", description: "The explosive final acts of massive stars.", imageSrc: "http://img.b2bpic.net/free-photo/space-background-realistic-starry-night-cosmos-shining-stars-milky-way-stardust-color-galaxy_1258-153862.jpg" },
|
||||
{ title: "Binary Systems", description: "Two stars locked in an eternal cosmic dance.", imageSrc: "http://img.b2bpic.net/free-photo/abstract-geometric-background-shapes-texture_1194-315197.jpg" },
|
||||
{ title: "Singularities", description: "Gravity pushed to the absolute extreme.", imageSrc: "http://img.b2bpic.net/free-photo/colorful-acrylic-ball-water_23-2148469372.jpg" },
|
||||
{ title: "Asteroid Fields", description: "The remnants of planetary construction.", imageSrc: "http://img.b2bpic.net/free-photo/cosmic-catastrophe_23-2151951433.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Hero.tsx
Normal file
29
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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 HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroTiltedCards
|
||||
tag="Interactive Learning"
|
||||
title="Explore the Solar System in 3D"
|
||||
description="Journey through eight planets with immersive animations, interactive models, and stunning visual effects Discover the cosmos like never before."
|
||||
primaryButton={{ text: "Start Exploring", href: "#features" }}
|
||||
secondaryButton={{ text: "Learn More", href: "#about" }}
|
||||
items={[
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/modern-futuristic-sci-fi-background_35913-2150.jpg?_wi=1" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/fiery-planet-universe_23-2151955873.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/planets-with-metallic-reflective-effect_23-2150253961.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/gradient-rippled-multicolored-soap-bubble-black-background_23-2148235906.jpg" },
|
||||
{ imageSrc: "http://img.b2bpic.net/free-photo/liquid-marbling-paint-texture-background-fluid-painting-abstract-texture-intensive-color-mix-wallpaper_1258-79218.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
25
src/pages/HomePage/sections/Metrics.tsx
Normal file
25
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsFeatureCards
|
||||
tag="Platform Stats"
|
||||
title="A Community of Explorers"
|
||||
description="Join thousands of enthusiasts exploring the stars daily."
|
||||
metrics={[
|
||||
{ value: "1.2M", title: "Active Explorers", features: ["Monthly active users", "Global reach", "Continuous engagement"] },
|
||||
{ value: "8", title: "Planetary Systems", features: ["Detailed models", "Surface exploration", "Physics simulations"] },
|
||||
{ value: "24/7", title: "Stellar Access", features: ["Always online", "Mobile accessible", "Cloud-rendered"] }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
81
src/pages/HomePage/sections/SolarSystemMap.tsx
Normal file
81
src/pages/HomePage/sections/SolarSystemMap.tsx
Normal file
@@ -0,0 +1,81 @@
|
||||
import React, { useState } from 'react';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
|
||||
const planets = [
|
||||
{ name: 'Mercury', color: 'bg-slate-400', size: 'size-3 md:size-4', orbit: 'w-24 h-24 md:w-32 md:h-32', duration: '10s' },
|
||||
{ name: 'Venus', color: 'bg-orange-300', size: 'size-4 md:size-6', orbit: 'w-36 h-36 md:w-48 md:h-48', duration: '15s' },
|
||||
{ name: 'Earth', color: 'bg-blue-500', size: 'size-4 md:size-6', orbit: 'w-48 h-48 md:w-64 md:h-64', duration: '20s' },
|
||||
{ name: 'Mars', color: 'bg-red-500', size: 'size-3 md:size-5', orbit: 'w-60 h-60 md:w-80 md:h-80', duration: '25s' },
|
||||
{ name: 'Jupiter', color: 'bg-orange-500', size: 'size-8 md:size-12', orbit: 'w-72 h-72 md:w-96 md:h-96', duration: '35s' },
|
||||
{ name: 'Saturn', color: 'bg-yellow-200', size: 'size-6 md:size-10', orbit: 'w-[22rem] h-[22rem] md:w-[28rem] md:h-[28rem]', duration: '45s' },
|
||||
{ name: 'Uranus', color: 'bg-cyan-300', size: 'size-5 md:size-8', orbit: 'w-[26rem] h-[26rem] md:w-[34rem] md:h-[34rem]', duration: '55s' },
|
||||
{ name: 'Neptune', color: 'bg-blue-600', size: 'size-5 md:size-8', orbit: 'w-[30rem] h-[30rem] md:w-[40rem] md:h-[40rem]', duration: '65s' },
|
||||
];
|
||||
|
||||
export default function SolarSystemMapSection() {
|
||||
const [activePlanet, setActivePlanet] = useState<string | null>(null);
|
||||
|
||||
return (
|
||||
<section aria-label="Solar System Map" className="overflow-hidden relative bg-background min-h-svh flex flex-col items-center justify-center">
|
||||
<div className="flex flex-col items-center w-content-width mx-auto gap-2 z-10 relative">
|
||||
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
|
||||
<p>Interactive Map</p>
|
||||
</div>
|
||||
<TextAnimation
|
||||
text="Explore the Solar System"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
gradientText={true}
|
||||
className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance"
|
||||
/>
|
||||
<TextAnimation
|
||||
text="Click on any planet to learn more about our cosmic neighborhood."
|
||||
variant="fade-blur"
|
||||
tag="p"
|
||||
gradientText={false}
|
||||
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance mt-4"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="fade-blur" className="relative w-full max-w-content-width aspect-square flex items-center justify-center">
|
||||
{/* Sun */}
|
||||
<div className="absolute size-12 md:size-20 bg-yellow-500 rounded-full shadow-[0_0_60px_20px_rgba(234,179,8,0.4)] z-10" />
|
||||
|
||||
{/* Orbits and Planets */}
|
||||
{planets.map((planet) => (
|
||||
<div
|
||||
key={planet.name}
|
||||
className={`absolute rounded-full border border-foreground/10 flex items-center justify-center ${planet.orbit}`}
|
||||
style={{ animation: `spin-slow ${planet.duration} linear infinite` }}
|
||||
>
|
||||
<div
|
||||
className={`absolute top-0 -translate-y-1/2 rounded-full cursor-pointer transition-transform hover:scale-150 ${planet.color} ${planet.size}`}
|
||||
onClick={() => setActivePlanet(planet.name)}
|
||||
title={planet.name}
|
||||
>
|
||||
{planet.name === 'Saturn' && (
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[160%] h-[40%] border-2 border-yellow-200/50 rounded-full rotate-12" />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</ScrollReveal>
|
||||
|
||||
{activePlanet && (
|
||||
<div className="fixed bottom-10 left-1/2 -translate-x-1/2 card p-6 rounded-xl z-50 flex flex-col items-center gap-4 min-w-[300px] shadow-2xl border border-foreground/10">
|
||||
<h3 className="text-2xl font-bold">{activePlanet}</h3>
|
||||
<p className="text-muted-foreground text-center">
|
||||
You are exploring {activePlanet}.
|
||||
</p>
|
||||
<button
|
||||
className="primary-button px-6 py-2 rounded-lg mt-2 font-medium"
|
||||
onClick={() => setActivePlanet(null)}
|
||||
>
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Testimonials.tsx
Normal file
27
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialTrustCard
|
||||
quote="An unparalleled educational experience that has transformed how I understand our neighborhood in the sky."
|
||||
rating={5}
|
||||
author="Marcus Thorne"
|
||||
avatars={[
|
||||
{ name: "Sarah", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg" },
|
||||
{ name: "Michael", imageSrc: "http://img.b2bpic.net/free-photo/front-view-portrait-businessman-with-glasses_23-2148816831.jpg" },
|
||||
{ name: "Elena", imageSrc: "http://img.b2bpic.net/free-photo/portrait-successful-young-businessman-with-his-arms-crossed-looking-camera_23-2148176207.jpg" },
|
||||
{ name: "David", imageSrc: "http://img.b2bpic.net/free-photo/studio-portrait-serious-bearded-male-dressed-suit_613910-5596.jpg" },
|
||||
{ name: "Jessica", imageSrc: "http://img.b2bpic.net/free-photo/astronaut-day-spaceman-outer-space-cosmos-galaxy-helmet-off-looking-black-coffee-cup_140725-161236.jpg" }
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user