Compare commits
13 Commits
version_1_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c3665d8fc6 | |||
|
|
94183c2cb9 | ||
|
|
09fd7ffc07 | ||
|
|
f9b7f1d2c4 | ||
| a329a73251 | |||
|
|
c50f9a2f4c | ||
|
|
4940359f9b | ||
| bbe2cb7359 | |||
|
|
3d4e368514 | ||
|
|
1fa9e23efd | ||
| bb11f9d285 | |||
|
|
4c267c750f | ||
|
|
f78c454a43 |
@@ -2,11 +2,15 @@ import { Routes, Route } from 'react-router-dom';
|
||||
import Layout from './components/Layout';
|
||||
import HomePage from './pages/HomePage';
|
||||
|
||||
import MenuPage from "@/pages/MenuPage";
|
||||
import AlShamsRestaurantPage from "@/pages/AlShamsRestaurantPage";
|
||||
export default function App() {
|
||||
return (
|
||||
<Routes>
|
||||
<Route element={<Layout />}>
|
||||
<Route path="/" element={<HomePage />} />
|
||||
<Route path="/menu" element={<MenuPage />} />
|
||||
<Route path="/al-shams-restaurant" element={<AlShamsRestaurantPage />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
);
|
||||
|
||||
@@ -19,22 +19,18 @@ export default function Layout() {
|
||||
"name": "Training",
|
||||
"href": "#training"
|
||||
},
|
||||
{
|
||||
"name": "Why NGA",
|
||||
"href": "#why-nga"
|
||||
},
|
||||
{
|
||||
"name": "Contact",
|
||||
"href": "#contact"
|
||||
},
|
||||
{
|
||||
"name": "Hero",
|
||||
"href": "#hero"
|
||||
},
|
||||
{
|
||||
"name": "About",
|
||||
"href": "#about"
|
||||
},
|
||||
{
|
||||
"name": "Why Nga",
|
||||
"href": "#why-nga"
|
||||
}
|
||||
{ name: "Menu", href: "/menu" },
|
||||
{ name: "Al Shams Restaurant", href: "/al-shams-restaurant" },
|
||||
|
||||
|
||||
];
|
||||
|
||||
return (
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #050012;
|
||||
--card: #040121;
|
||||
--foreground: #f0e6ff;
|
||||
--primary-cta: #c89bff;
|
||||
--primary-cta-text: #050012;
|
||||
--secondary-cta: #1d123b;
|
||||
--secondary-cta-text: #f0e6ff;
|
||||
--accent: #684f7b;
|
||||
--background-accent: #65417c;
|
||||
--background: #030305;
|
||||
--card: #0a0a0f;
|
||||
--foreground: #ffffff;
|
||||
--primary-cta: #00e5ff;
|
||||
--primary-cta-text: #000000;
|
||||
--secondary-cta: #11111a;
|
||||
--secondary-cta-text: #ffffff;
|
||||
--accent: #8a2be2;
|
||||
--background-accent: #110822;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 0.5rem;
|
||||
|
||||
38
src/pages/AlShamsRestaurantPage.tsx
Normal file
38
src/pages/AlShamsRestaurantPage.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
import Button from "@/components/ui/Button";
|
||||
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import { cls } from "@/lib/utils";
|
||||
import { Star } from "lucide-react";
|
||||
import GridOrCarousel from "@/components/ui/GridOrCarousel";
|
||||
|
||||
export default function AlShamsRestaurantPage() {
|
||||
return (
|
||||
<>
|
||||
<div data-webild-section="HeroSplit"><section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh md:py-0"><HeroBackgroundSlot /><div className="flex flex-col md:flex-row items-center w-content-width mx-auto"><div className="w-full md:w-1/2"><div className="flex flex-col items-center md:items-start gap-3"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Hospitality Project</p></div><TextAnimation text="Al Shams Restaurant: A Digital Transformation" variant="fade" gradientText={true} tag="h1" className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance" /><TextAnimation text="Discover how NGA Digital crafted a sleek, appetizing online presence for Al Shams Restaurant, blending intelligent design with a seamless user experience." variant="fade" gradientText={false} tag="p" className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance" /><div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3"><Button text="View Case Study" href="#case-study" variant="primary" /><Button text="Start Your Project" href="/contact" variant="secondary" animationDelay={0.1} /></div></div></div><ScrollReveal variant="fade" delay={0.2} className="w-full md:w-1/2 h-100 md:h-[65vh] md:max-h-[75svh] p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/luxury-restaurant-interior-with-elegant-table-setting_1127-3269.jpg" /></ScrollReveal></div></section></div>
|
||||
<div data-webild-section="FeaturesImageBento"><section aria-label="Features image bento section" className=""><div className="flex flex-col gap-8"><div className="flex flex-col items-center w-content-width mx-auto gap-2"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Case Study</p></div><TextAnimation text="Al Shams Restaurant" variant="slide-up" gradientText={true} tag="h2" className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="A complete digital transformation for a premier dining destination, blending authentic hospitality with modern, AI-powered user experiences." variant="slide-up" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="View Live Site" href="#" variant="primary" /><Button text="More Projects" href="/work" variant="secondary" animationDelay={0.1} /></div></div><div className="w-content-width mx-auto grid grid-cols-1 md:grid-cols-6 gap-3"><ScrollReveal key={0} variant="slide-up" delay={0} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={1} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-4"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={2} variant="slide-up" delay={0} className="col-span-1 group md:col-span-3"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={3} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-3"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={4} variant="slide-up" delay={0} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={5} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={6} variant="slide-up" delay={0.2} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal></div></div></section></div>
|
||||
<div data-webild-section="TestimonialRatingCards"><section aria-label="Testimonials section" className=""><div className="flex flex-col gap-8"><div className="flex flex-col items-center gap-2 w-content-width mx-auto"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Client Success</p></div><TextAnimation text="What Al Shams Says" variant="fade" gradientText={true} tag="h2" className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Hear from the team behind Al Shams Restaurant about how our digital transformation elevated their dining experience and online presence." variant="fade" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="View Case Study" href="#case-study" variant="primary" /><Button text="More Projects" href="/work" variant="secondary" animationDelay={0.1} /></div></div><ScrollReveal variant="fade"><GridOrCarousel><div key="Restaurant Owner" className="flex flex-col justify-between gap-4 xl:gap-5 2xl:gap-6 h-full p-6 xl:p-7 2xl:p-8 rounded card"><div className="flex flex-col items-start gap-4 xl:gap-5 2xl:gap-6"><div className="flex gap-1.5"><Star key={0} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={1} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={2} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={3} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={4} className="size-5 text-accent fill-accent" strokeWidth={1.5} /></div><p className="text-lg leading-snug">NGA Digital completely transformed our online ordering system. The new website is stunning and incredibly easy for our customers to use.</p></div><div className="flex items-center gap-3"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/portrait-smiling-chef-uniform_329181-675.jpg" className="size-10 md:size-11 2xl:size-12 rounded-full object-cover" /><div className="flex flex-col min-w-0"><span className="text-base text-foreground font-semibold leading-snug truncate">Restaurant Owner</span><span className="text-base text-foreground/75 leading-snug truncate">Al Shams</span></div></div></div>
|
||||
<div key="Marketing Director" className="flex flex-col justify-between gap-4 xl:gap-5 2xl:gap-6 h-full p-6 xl:p-7 2xl:p-8 rounded card"><div className="flex flex-col items-start gap-4 xl:gap-5 2xl:gap-6"><div className="flex gap-1.5"><Star key={0} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={1} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={2} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={3} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={4} className="size-5 text-accent fill-accent" strokeWidth={1.5} /></div><p className="text-lg leading-snug">The visual identity and digital menu they created perfectly capture the essence of our cuisine. We've seen a wonderful increase in online reservations since launch.</p></div><div className="flex items-center gap-3"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/confident-businesswoman-posing-outside_23-2148767023.jpg" className="size-10 md:size-11 2xl:size-12 rounded-full object-cover" /><div className="flex flex-col min-w-0"><span className="text-base text-foreground font-semibold leading-snug truncate">Marketing Director</span><span className="text-base text-foreground/75 leading-snug truncate">Al Shams</span></div></div></div>
|
||||
<div key="Head Chef" className="flex flex-col justify-between gap-4 xl:gap-5 2xl:gap-6 h-full p-6 xl:p-7 2xl:p-8 rounded card"><div className="flex flex-col items-start gap-4 xl:gap-5 2xl:gap-6"><div className="flex gap-1.5"><Star key={0} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={1} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={2} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={3} className="size-5 text-accent fill-accent" strokeWidth={1.5} />
|
||||
<Star key={4} className="size-5 text-accent fill-accent" strokeWidth={1.5} /></div><p className="text-lg leading-snug">Finally, a website that showcases our dishes as beautifully as they look in person. The NGA team truly understands hospitality.</p></div><div className="flex items-center gap-3"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/handsome-young-chef-uniform-smiling-looking-camera_171337-5343.jpg" className="size-10 md:size-11 2xl:size-12 rounded-full object-cover" /><div className="flex flex-col min-w-0"><span className="text-base text-foreground font-semibold leading-snug truncate">Head Chef</span><span className="text-base text-foreground/75 leading-snug truncate">Al Shams</span></div></div></div></GridOrCarousel></ScrollReveal></div></section></div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,207 +1,33 @@
|
||||
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Code, Palette, Sparkles } from "lucide-react";
|
||||
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 ServicesSection from './HomePage/sections/Services';
|
||||
import PortfolioSection from './HomePage/sections/Portfolio';
|
||||
import TrainingSection from './HomePage/sections/Training';
|
||||
import WhyNgaSection from './HomePage/sections/WhyNga';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Next Gen AI Digital Solutions"
|
||||
title="Transform Your Ideas Into Digital Reality"
|
||||
description="NGA Digital bridges the gap between intelligence and design. We build AI-powered experiences that scale."
|
||||
primaryButton={{
|
||||
text: "Get Started",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Explore Services",
|
||||
href: "#services",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/3d-data-technology-background-with-flowing-particles_1048-18065.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/still-life-office-desk-mess_23-2150164871.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTestimonial
|
||||
tag="About Us"
|
||||
quote="Innovation, intelligence, and creativity. We help businesses harness the power of AI to create impactful digital footprints in an evolving world."
|
||||
author="NGA Digital Leadership"
|
||||
role="Next Gen AI Experts"
|
||||
imageSrc="http://img.b2bpic.net/free-photo/abstract-green-background-from-brilliant-mosaic-pattern-generative-ai_169016-30202.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesBentoGrid
|
||||
tag="Our Expertise"
|
||||
title="Next Gen Digital Services"
|
||||
description="Comprehensive solutions powered by cutting-edge AI and human creativity."
|
||||
features={[
|
||||
{
|
||||
title: "AI Digital Solutions",
|
||||
description: "Leverage machine learning to drive automation and smart business growth.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blockchain-technology-controls-digital-currency-transactions-online-generated-by-ai_188544-27198.jpg",
|
||||
},
|
||||
{
|
||||
title: "Branding & Design",
|
||||
description: "Stunning visuals that define your corporate identity and voice.",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/graphic-design-element-collection_23-2148098250.jpg",
|
||||
},
|
||||
{
|
||||
title: "Web Development",
|
||||
description: "High-performance websites designed for speed, security, and conversion.",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/creative-coding-app-development-25-flat-icon-pack-such-as-flask-testing-internet-sketching-notepad_1142-21598.jpg",
|
||||
},
|
||||
{
|
||||
title: "Online Training",
|
||||
description: "Upskill your team with courses designed for the future of digital work.",
|
||||
imageSrc: "https://storage.googleapis.com/webild/default/no-image.jpg?id=97tgx9",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="portfolio" data-section="portfolio">
|
||||
<SectionErrorBoundary name="portfolio">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Portfolio"
|
||||
title="Selected Projects"
|
||||
description="A glimpse into our creative and technical capability."
|
||||
items={[
|
||||
{
|
||||
title: "AI Dashboard",
|
||||
description: "Smart analytics interface for retail.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/flat-electronics-logo-pack_23-2148974940.jpg",
|
||||
},
|
||||
{
|
||||
title: "E-commerce Site",
|
||||
description: "High-conversion shop platform.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/qwerty-word-gradient-corporate-visiting-cards_23-2148500435.jpg",
|
||||
},
|
||||
{
|
||||
title: "Corporate Branding",
|
||||
description: "Identity system for new tech start-up.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/linear-web-development-illustration_1257-357.jpg",
|
||||
},
|
||||
{
|
||||
title: "Marketing Social App",
|
||||
description: "Campaign management platform.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/flat-design-minimal-technology-landing-page_23-2149148966.jpg",
|
||||
},
|
||||
{
|
||||
title: "AI Content Bot",
|
||||
description: "Automated engagement systems.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/technological-logo_1035-6545.jpg",
|
||||
},
|
||||
{
|
||||
title: "Modern Course Hub",
|
||||
description: "Platform for digital skill training.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-luxury-gradient-blue-background-smooth-dark-blue-with-black-vignette-studio-banner_1258-92086.jpg",
|
||||
},
|
||||
{
|
||||
title: "Visual AI Branding",
|
||||
description: "Identity using generative tech.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/digital-code-coding-from-connecting-dot-line-light-effect-vector-illustration-isolated-transparent-background_587448-324.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PortfolioSection />
|
||||
|
||||
<div id="training" data-section="training">
|
||||
<SectionErrorBoundary name="training">
|
||||
<MetricsIconCards
|
||||
tag="Digital Training"
|
||||
title="Empowering Future Talent"
|
||||
description="Courses designed by industry experts to boost your competitive edge."
|
||||
metrics={[
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "AI Masterclass",
|
||||
value: "20+ hrs",
|
||||
},
|
||||
{
|
||||
icon: Palette,
|
||||
title: "Design Systems",
|
||||
value: "Expert",
|
||||
},
|
||||
{
|
||||
icon: Code,
|
||||
title: "Dev Basics",
|
||||
value: "Applied",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TrainingSection />
|
||||
|
||||
<div id="why-nga" data-section="why-nga">
|
||||
<SectionErrorBoundary name="why-nga">
|
||||
<FaqSimple
|
||||
tag="Why Choose Us"
|
||||
title="NGA Digital Advantage"
|
||||
description="What makes our agency unique in a crowded market."
|
||||
items={[
|
||||
{
|
||||
question: "AI-Powered Creativity",
|
||||
answer: "We integrate advanced machine learning tools to accelerate the design and development phase without compromising quality.",
|
||||
},
|
||||
{
|
||||
question: "Professional Quality",
|
||||
answer: "Our team maintains global agency standards, ensuring your project reflects professionalism and innovation.",
|
||||
},
|
||||
{
|
||||
question: "Fast Workflow",
|
||||
answer: "Through intelligent technologies, we deliver high-end digital solutions faster than traditional agencies.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<WhyNgaSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Let's Talk"
|
||||
text="Ready to launch your project? Let’s talk about how NGA Digital can build your future."
|
||||
primaryButton={{
|
||||
text: "Start Your Project",
|
||||
href: "mailto:hello@ngadigital.com",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email Us",
|
||||
href: "mailto:hello@ngadigital.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
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="About NGA Digital"
|
||||
quote="Innovation, intelligence, and creativity. We help businesses harness the power of AI to create impactful digital footprints in an evolving world."
|
||||
author="NGA Digital Leadership"
|
||||
role="Next Gen AI Experts"
|
||||
imageSrc="https://picsum.photos/seed/2129599349/1200/800"
|
||||
/>
|
||||
</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="Start Your Project"
|
||||
text="Ready to launch your project? Let's talk about how NGA Digital can build your future."
|
||||
primaryButton={{"href":"mailto:hello@ngadigital.com","text":"Let's Build the Future Together"}}
|
||||
secondaryButton={{"href":"#","text":"Follow on Social"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
23
src/pages/HomePage/sections/Hero.tsx
Normal file
23
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
// 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 HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Next Generation AI-Powered Digital Solutions"
|
||||
title="Transform Your Ideas Into Digital Reality"
|
||||
description="NGA Digital bridges the gap between intelligence and design. We build AI-powered experiences that scale."
|
||||
primaryButton={{"text":"Start Your Project","href":"#contact"}}
|
||||
secondaryButton={{"href":"#services","text":"Explore Services"}}
|
||||
items={[{"imageSrc":"https://images.unsplash.com/photo-1620712943543-bcc4688e7485?q=80&w=1000&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1677442136019-21780ecad995?q=80&w=1000&auto=format&fit=crop"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Portfolio.tsx
Normal file
21
src/pages/HomePage/sections/Portfolio.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 "portfolio" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PortfolioSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="portfolio" data-section="portfolio">
|
||||
<SectionErrorBoundary name="portfolio">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Portfolio & Case Studies"
|
||||
title="Selected Projects"
|
||||
description="A glimpse into our creative and technical capability."
|
||||
items={[{"imageSrc":"https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=1000&auto=format&fit=crop","href":"#","description":"Smart analytics interface for retail.","title":"AI Dashboard"},{"title":"E-commerce Site","description":"High-conversion shop platform.","href":"#","imageSrc":"https://images.unsplash.com/photo-1460925895917-afdab827c52f?q=80&w=1000&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1600132806370-bf17e65e942f?q=80&w=1000&auto=format&fit=crop","href":"#","description":"Identity system for new tech start-up.","title":"Corporate Branding"},{"href":"#","imageSrc":"https://images.unsplash.com/photo-1611162617474-5b21e879e113?q=80&w=1000&auto=format&fit=crop","title":"Marketing Social App","description":"Campaign management platform."},{"title":"AI Content Bot","description":"Automated engagement systems.","href":"#","imageSrc":"https://images.unsplash.com/photo-1677442136019-21780ecad995?q=80&w=1000&auto=format&fit=crop"},{"title":"Modern Course Hub","description":"Platform for digital skill training.","href":"#","imageSrc":"https://images.unsplash.com/photo-1516321318423-f06f85e504b3?q=80&w=1000&auto=format&fit=crop"},{"href":"#","imageSrc":"https://images.unsplash.com/photo-1620712943543-bcc4688e7485?q=80&w=1000&auto=format&fit=crop","title":"Visual AI Branding","description":"Identity using generative tech."}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Services.tsx
Normal file
21
src/pages/HomePage/sections/Services.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 "services" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesBentoGrid
|
||||
tag="Our Expertise"
|
||||
title="Next Gen Digital Services"
|
||||
description="Comprehensive solutions powered by cutting-edge AI and human creativity."
|
||||
features={[{"imageSrc":"https://images.unsplash.com/photo-1677442136019-21780ecad995?q=80&w=1000&auto=format&fit=crop","title":"AI Digital Solutions","description":"Leverage machine learning to drive automation and smart business growth."},{"description":"Stunning visuals that define your corporate identity and voice.","imageSrc":"https://images.unsplash.com/photo-1620712943543-bcc4688e7485?q=80&w=1000&auto=format&fit=crop","title":"Branding & Design"},{"description":"High-performance websites designed for speed, security, and conversion.","title":"Web Development","imageSrc":"https://images.unsplash.com/photo-1451187580459-43490279c0fa?q=80&w=1000&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1516321318423-f06f85e504b3?q=80&w=1000&auto=format&fit=crop","title":"Online Training","description":"Upskill your team with courses designed for the future of digital work."}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/Training.tsx
Normal file
22
src/pages/HomePage/sections/Training.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 "training" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Code, Palette, Sparkles } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TrainingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="training" data-section="training">
|
||||
<SectionErrorBoundary name="training">
|
||||
<MetricsIconCards
|
||||
tag="Training Academy"
|
||||
title="Empowering Future Talent"
|
||||
description="Structured courses, learning paths, and certifications designed for the future of digital work."
|
||||
metrics={[{"value":"Masterclass","icon":"Sparkles","title":"AI Tools Training"},{"value":"Advanced","icon":"Palette","title":"Graphic Design"},{"title":"Digital Skills","icon":"Code","value":"Certified"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/WhyNga.tsx
Normal file
21
src/pages/HomePage/sections/WhyNga.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 "why-nga" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhyNgaSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why-nga" data-section="why-nga">
|
||||
<SectionErrorBoundary name="why-nga">
|
||||
<FaqSimple
|
||||
tag="Why Choose Us"
|
||||
title="NGA Digital Advantage"
|
||||
description="What makes our agency unique in a crowded market."
|
||||
items={[{"answer":"We integrate advanced machine learning tools to accelerate the design and development phase without compromising quality.","question":"AI-Powered Creativity"},{"answer":"Our team maintains global agency standards, ensuring your project reflects professionalism and innovation.","question":"Professional Quality"},{"question":"Fast Workflow","answer":"Through intelligent technologies, we deliver high-end digital solutions faster than traditional agencies."},{"question":"Integrated Services","answer":"We combine agency services with professional education, offering a complete ecosystem for digital growth."}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/MenuPage.tsx
Normal file
29
src/pages/MenuPage.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
import Button from "@/components/ui/Button";
|
||||
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import AvatarGroup from "@/components/ui/AvatarGroup";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import { cls } from "@/lib/utils";
|
||||
import { ArrowUpRight, Loader2 } from "lucide-react";
|
||||
import GridOrCarousel from "@/components/ui/GridOrCarousel";
|
||||
import useProducts from "@/hooks/useProducts";
|
||||
|
||||
export default function MenuPage() {
|
||||
return (
|
||||
<>
|
||||
<div data-webild-section="HeroOverlay"><section aria-label="Hero section" className="relative w-full h-svh overflow-hidden flex flex-col justify-end mb-20"><HeroBackgroundSlot /><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/top-view-arab-food-assortment_23-2148739179.jpg" className="absolute inset-0 w-full h-full object-cover rounded-none" /><div className="absolute z-10 w-[150vw] h-[150vw] left-0 bottom-0 -translate-x-1/2 translate-y-1/2 backdrop-blur mask-[radial-gradient(circle,black_20%,transparent_70%)]" aria-hidden="true" /><div className="relative z-10 w-content-width mx-auto pb-10 md:pb-25"><div className="flex flex-col gap-3 w-full md:w-6/10 lg:w-1/2 xl:w-45/100 2xl:w-4/10"><div className="w-fit px-3 py-1 mb-1 text-sm card rounded"><p>Established 1975</p></div><TextAnimation text="The Al Shams Menu" variant="fade-blur" gradientText={true} tag="h1" className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-white text-balance" /><TextAnimation text="From authentic Lebanese mezze to exquisite international plates, explore a culinary journey crafted with passion and the finest ingredients." variant="fade-blur" gradientText={false} tag="p" className="text-lg md:text-xl text-white leading-snug text-balance" /><div className="flex flex-wrap gap-3 mt-2 md:mt-3"><Button text="Reserve Now" href="/reservations" variant="primary" /><Button text="Call Us" href="tel:+1234567890" variant="secondary" animationDelay={0.1} /></div></div></div></section></div>
|
||||
<div data-webild-section="FeaturesImageBento"><section aria-label="Features image bento section" className="py-20"><div className="flex flex-col gap-8 md:gap-10"><div className="flex flex-col items-center w-content-width mx-auto gap-2"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Culinary Excellence</p></div><TextAnimation text="A Legacy of Flavor Since 1975" variant="slide-up" gradientText={true} tag="h2" className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Explore our extensive menu featuring signature Lebanese dishes, premium meats, and international classics. Crafted with passion and the finest ingredients." variant="slide-up" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Book a Table" href="/reservations" variant="primary" /><Button text="Call Now" href="tel:+1234567890" variant="secondary" animationDelay={0.1} /></div></div><div className="w-content-width mx-auto grid grid-cols-1 md:grid-cols-6 gap-3"><ScrollReveal key={0} variant="slide-up" delay={0} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={1} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-4"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={2} variant="slide-up" delay={0} className="col-span-1 group md:col-span-3"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={3} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-3"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={4} variant="slide-up" delay={0} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={5} variant="slide-up" delay={0.1} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal>
|
||||
<ScrollReveal key={6} variant="slide-up" delay={0.2} className="col-span-1 group md:col-span-2"><div className="overflow-hidden rounded"></div></ScrollReveal></div></div></section></div>
|
||||
<div data-webild-section="ProductMediaCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
|
||||
<div data-webild-section="ProductMediaCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
|
||||
<div data-webild-section="ProductMediaCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
|
||||
<div data-webild-section="ContactCta"><section aria-label="Contact section" className="py-20"><div className="w-content-width mx-auto"><ScrollReveal variant="slide-up"><div className="flex flex-col items-center gap-8 md:gap-10 py-20 px-8 rounded card"><div className="flex flex-col items-center gap-2"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Dine With Us</p></div><TextAnimation text="Experience a culinary legacy since 1975. Reserve your table or contact us for special arrangements." variant="fade-blur" gradientText={true} tag="h2" className="md:max-w-8/10 text-5xl 2xl:text-6xl leading-[1.15] font-semibold text-center text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Book a Table" href="/reservations" variant="primary" /><Button text="Call Now" href="tel:+1234567890" variant="secondary" animationDelay={0.1} /></div></div></div></ScrollReveal></div></section></div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -6,4 +6,6 @@ export interface Route {
|
||||
|
||||
export const routes: Route[] = [
|
||||
{ path: '/', label: 'Home', pageFile: 'HomePage' },
|
||||
{ path: '/menu', label: 'Menu', pageFile: 'MenuPage' },
|
||||
{ path: '/al-shams-restaurant', label: 'Al Shams Restaurant', pageFile: 'AlShamsRestaurantPage' },
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user