From fabb40cf6fdb8ebbf73f4a08ce5486841984b5ef Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Thu, 25 Jun 2026 10:17:24 +0000 Subject: [PATCH] Bob AI: Added result search, progression stories, and reviews sectio --- src/index.css | 18 +- src/pages/HomePage.tsx | 159 +++--------------- src/pages/HomePage/sections/Contact.tsx | 21 +++ src/pages/HomePage/sections/Faq.tsx | 26 +++ src/pages/HomePage/sections/Hero.tsx | 30 ++++ src/pages/HomePage/sections/Metrics.tsx | 25 +++ .../HomePage/sections/ProgressionStories.tsx | 72 ++++++++ src/pages/HomePage/sections/ResultSearch.tsx | 152 +++++++++++++++++ src/pages/HomePage/sections/Reviews.tsx | 80 +++++++++ src/pages/HomePage/sections/Social.tsx | 23 +++ 10 files changed, 462 insertions(+), 144 deletions(-) create mode 100644 src/pages/HomePage/sections/Contact.tsx create mode 100644 src/pages/HomePage/sections/Faq.tsx create mode 100644 src/pages/HomePage/sections/Hero.tsx create mode 100644 src/pages/HomePage/sections/Metrics.tsx create mode 100644 src/pages/HomePage/sections/ProgressionStories.tsx create mode 100644 src/pages/HomePage/sections/ResultSearch.tsx create mode 100644 src/pages/HomePage/sections/Reviews.tsx create mode 100644 src/pages/HomePage/sections/Social.tsx diff --git a/src/index.css b/src/index.css index e6d8763..9db8d24 100644 --- a/src/index.css +++ b/src/index.css @@ -5,15 +5,15 @@ :root { /* @colorThemes/lightTheme/grayNavyBlue */ - --background: #f5faff; - --card: #ffffff; - --foreground: #001122; - --primary-cta: #15479c; - --primary-cta-text: #f5faff; - --secondary-cta: #ffffff; - --secondary-cta-text: #001122; - --accent: #a8cce8; - --background-accent: #7ba3cf; + --background: #f6f0e9; + --card: #efe7dd; + --foreground: #2b180a; + --primary-cta: #ff6207; + --primary-cta-text: #f6f0e9; + --secondary-cta: #2b180a; + --secondary-cta-text: #f6f0e9; + --accent: #94877c; + --background-accent: #afa094; /* @layout/border-radius/rounded */ --radius: 1.5rem; diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 0d49a0f..21e4527 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,147 +1,36 @@ -import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit'; -import ContactCta from '@/components/sections/contact/ContactCta'; -import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn'; -import FeaturesTaggedCards from '@/components/sections/features/FeaturesTaggedCards'; -import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; -import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards'; -import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee'; -import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards'; -import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +// AUTO-GENERATED shell by per-section-migrate. +// Section bodies live in .//sections/.tsx. Edit the section +// files directly. Non-block content (wrappers, non-inlinable sections) is +// preserved inline; extracted section blocks become refs. -export default function HomePage() { +import React from 'react'; +import HeroSection from './HomePage/sections/Hero'; +import MetricsSection from './HomePage/sections/Metrics'; +import FaqSection from './HomePage/sections/Faq'; +import SocialSection from './HomePage/sections/Social'; +import ContactSection from './HomePage/sections/Contact'; + + +import ResultSearchSection from './HomePage/sections/ResultSearch'; +import ProgressionStoriesSection from './HomePage/sections/ProgressionStories'; +import ReviewsSection from './HomePage/sections/Reviews';export default function HomePage(): 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..e3ee0d7 --- /dev/null +++ b/src/pages/HomePage/sections/Contact.tsx @@ -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 ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Faq.tsx b/src/pages/HomePage/sections/Faq.tsx new file mode 100644 index 0000000..3f18057 --- /dev/null +++ b/src/pages/HomePage/sections/Faq.tsx @@ -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 FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function FaqSection(): 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..48a5c9e --- /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 HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function HeroSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Metrics.tsx b/src/pages/HomePage/sections/Metrics.tsx new file mode 100644 index 0000000..b6421c0 --- /dev/null +++ b/src/pages/HomePage/sections/Metrics.tsx @@ -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 MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function MetricsSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/ProgressionStories.tsx b/src/pages/HomePage/sections/ProgressionStories.tsx new file mode 100644 index 0000000..869e61b --- /dev/null +++ b/src/pages/HomePage/sections/ProgressionStories.tsx @@ -0,0 +1,72 @@ +import { motion } from "motion/react"; +import ScrollReveal from "@/components/ui/ScrollReveal"; +import TextAnimation from "@/components/ui/TextAnimation"; +import Tag from "@/components/ui/Tag"; +import Button from "@/components/ui/Button"; + +export default function ProgressionStories() { + const images = [ + "https://images.unsplash.com/photo-1523050854058-8df90110c9f1?auto=format&fit=crop&w=800&q=80", + "https://images.unsplash.com/photo-1541339907198-e08756dedf3f?auto=format&fit=crop&w=800&q=80", + "https://images.unsplash.com/photo-1523240795612-9a054b0db644?auto=format&fit=crop&w=800&q=80", + "https://images.unsplash.com/photo-1511629091441-ee46146481b6?auto=format&fit=crop&w=800&q=80", + "https://images.unsplash.com/photo-1627556592933-ffe99c1c9cd0?auto=format&fit=crop&w=800&q=80" + ]; + + return ( +
+
+
+ + + + + +

+ See our graduates holding their degrees with pride after years of hard work and dedication. +

+
+
+ +
+ {images.map((src, index) => { + const rotation = (index - 2) * 15; + const zIndex = 5 - Math.abs(index - 2); + const scale = 1 - Math.abs(index - 2) * 0.1; + const xOffset = (index - 2) * 150; + + return ( + + Graduate +
+ + ); + })} +
+ + +
+
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/ResultSearch.tsx b/src/pages/HomePage/sections/ResultSearch.tsx new file mode 100644 index 0000000..7f5078b --- /dev/null +++ b/src/pages/HomePage/sections/ResultSearch.tsx @@ -0,0 +1,152 @@ +import { useState } from "react"; +import { motion } from "motion/react"; +import Button from "@/components/ui/Button"; +import Input from "@/components/ui/Input"; +import Card from "@/components/ui/Card"; +import ScrollReveal from "@/components/ui/ScrollReveal"; +import { Search, GraduationCap, BookOpen, Award } from "lucide-react"; + +export default function ResultSearch() { + const [searchQuery, setSearchQuery] = useState(""); + const [hasSearched, setHasSearched] = useState(false); + + const handleSearch = (e: React.FormEvent) => { + e.preventDefault(); + if (searchQuery.trim().toLowerCase() === "2025-ag-11653") { + setHasSearched(true); + } else if (searchQuery.trim() !== "") { + alert("Please enter a valid AG No. (e.g., 2025-ag-11653)"); + } + }; + + return ( +
+
+ +
+

Student Results Portal

+

Enter your AG number to view your complete academic performance.

+
+
+ + + +
+
+ + setSearchQuery(e.target.value)} + className="w-full pl-10" + required + /> +
+
+
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Reviews.tsx b/src/pages/HomePage/sections/Reviews.tsx new file mode 100644 index 0000000..e362aa7 --- /dev/null +++ b/src/pages/HomePage/sections/Reviews.tsx @@ -0,0 +1,80 @@ +import ScrollReveal from "@/components/ui/ScrollReveal"; +import TextAnimation from "@/components/ui/TextAnimation"; +import Tag from "@/components/ui/Tag"; +import Card from "@/components/ui/Card"; +import RatingStars from "@/components/ui/RatingStars"; + +export default function Reviews() { + const testimonials = [ + { + name: "Sarah Ahmed", + role: "Computer Science Graduate", + company: "Tech Solutions", + rating: 5, + imageSrc: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?auto=format&fit=crop&w=800&q=80", + quote: "The results portal made it incredibly easy to track my progress throughout my degree. The interface is clean and finding my grades was always just a click away." + }, + { + name: "Ali Khan", + role: "Agriculture Student", + company: "AgriTech", + rating: 5, + imageSrc: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=800&q=80", + quote: "I love how quickly I can access my semester results. The breakdown of grades and GPA calculation is very clear and helpful for planning my next semester." + }, + { + name: "Fatima Noor", + role: "Mathematics Major", + company: "Data Corp", + rating: 4, + imageSrc: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?auto=format&fit=crop&w=800&q=80", + quote: "A very reliable system. I never had any issues logging in with my AG number and retrieving my academic records. Highly recommended for all students." + } + ]; + + return ( +
+
+
+ + + + + +

+ Read reviews from our students about their academic journey and the ease of accessing their results. +

+
+
+ +
+ {testimonials.map((testimonial, index) => ( + + + +

"{testimonial.quote}"

+
+ {testimonial.name} +
+

{testimonial.name}

+

{testimonial.role}

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