const { useEffect, useMemo, useState } = React; const DATA = window.NXO_DATA || {}; const settings = DATA.settings || {}; const services = DATA.services || []; const works = DATA.works || []; const testimonials = DATA.testimonials || []; const pricing = DATA.pricing || []; const stats = DATA.stats || []; const adminFaqs = DATA.faqs || []; const servicePageMap = { "web-design": "web-design.php", "video-motion": "video-editing-motion-graphics.php", "digital-marketing": "digital-marketing.php" }; const servicePriceMap = { "web-design": { price: "From $499 / project", note: "Landing pages, business sites, portfolio sites, and conversion pages." }, "video-motion": { price: "From $149 / video", note: "Short-form edits, launch videos, motion graphics, intros, and social assets." }, "digital-marketing": { price: "From $399 / month", note: "Campaign planning, creative direction, ad assets, funnels, and reporting." } }; const fallbackServices = [ { id: "web-design", title: "Web Design", tagline: "Premium websites that convert", description: "High-end websites with a clear story, strong interface, and clean lead flow.", deliverables: "Strategy, UX, UI, responsive build, contact funnel" }, { id: "video-motion", title: "Video Editing & Motion Graphics", tagline: "Sharp edits with motion polish", description: "Social videos, launch films, kinetic text, and animated brand systems.", deliverables: "Editing, sound polish, animation, exports" }, { id: "digital-marketing", title: "Digital Marketing", tagline: "Campaigns that keep momentum", description: "Creative campaigns, content systems, analytics, and conversion-focused experiments.", deliverables: "Campaign plan, ad creative, calendar, analytics" } ]; const serviceSource = services.length ? services : fallbackServices; const proofFeed = [ "Landing page structure locked", "Motion direction in review", "Campaign creative exported", "Lead flow connected", "Launch checklist prepared" ]; const processSteps = [ ["01", "Discovery", "We map your offer, audience, goals, content gaps, timeline, and what the project must achieve.", "Brief, goals, assets, success metric"], ["02", "Strategy", "We shape the message, funnel, visual direction, pricing path, and production plan before execution.", "Positioning, page map, campaign angle"], ["03", "Design", "NXO builds the website, edits, motion assets, and campaign visuals inside one polished brand system.", "UI, motion, creative assets, review"], ["04", "Launch", "Final assets are deployed, forms are checked, analytics are prepared, and the next improvement loop is clear.", "Deploy, measure, improve"] ]; const fallbackFaqs = [ ["Can NXO handle the full launch?", "Yes. The public offer, website, launch video, motion graphics, and marketing assets can be produced as one connected sprint."], ["Can I update the website later?", "Yes. NXO can keep your services, work, testimonials, pricing, settings, and incoming project messages organized for future updates."], ["Is Video Editing & Motion Graphics one service?", "Yes. It is intentionally combined so edits, animated typography, graphics, intros, outros, and exports stay in one production lane."], ["Does the page work on mobile?", "The landing page is built with responsive React/Tailwind sections, mobile navigation, fluid type, and compact interaction states."] ]; const faqs = adminFaqs.length ? adminFaqs.map((item) => [item.question || "Question", item.answer || "Answer coming soon."]) : fallbackFaqs; function splitList(value) { return String(value || "") .split(/\r\n|\r|\n|,/) .map((item) => item.trim()) .filter(Boolean); } function shortText(value, fallback, limit = 118) { const text = String(value || fallback || "").trim(); if (text.length <= limit) { return text; } return text.slice(0, limit).replace(/\s+\S*$/, "") + "."; } function serviceUrl(service) { return servicePageMap[service?.id] || `service.php?id=${encodeURIComponent(service?.id || "")}`; } function servicePrice(service) { return servicePriceMap[service?.id] || { price: "Custom quote", note: service?.tagline || "Scoped around your launch goal, timeline, and content needs." }; } function contactMessageForPlan(plan) { const features = splitList(plan?.features).slice(0, 5); const lines = [ `I want to discuss the ${plan?.name || "NXO project"} package.`, plan?.price ? `Budget direction: ${plan.price}` : "", plan?.description ? `Project fit: ${plan.description}` : "", features.length ? `Included focus: ${features.join(", ")}` : "", "", "My project goal:", "Timeline:", "Anything else NXO should know:" ]; return lines.filter((line, index) => line || index >= lines.length - 3).join("\n"); } function ratingValue(value) { const numeric = Number(value); if (!Number.isFinite(numeric)) { return 5; } return Math.min(5, Math.max(1, numeric)); } function reviewerInitials(name) { return String(name || "NXO Client") .split(/\s+/) .filter(Boolean) .slice(0, 2) .map((part) => part.charAt(0).toUpperCase()) .join("") || "NC"; } function cx() { return Array.from(arguments).filter(Boolean).join(" "); } function useTheme() { const initial = document.documentElement.getAttribute("data-theme") || "dark"; const [theme, setTheme] = useState(initial); useEffect(() => { document.documentElement.setAttribute("data-theme", theme); localStorage.setItem("nxo-theme", theme); }, [theme]); return [theme, setTheme]; } function useScrollProgress() { const [progress, setProgress] = useState(0); useEffect(() => { function update() { const scrollable = document.documentElement.scrollHeight - window.innerHeight; setProgress(scrollable > 0 ? Math.min(100, Math.max(0, (window.scrollY / scrollable) * 100)) : 0); } update(); window.addEventListener("scroll", update, { passive: true }); window.addEventListener("resize", update); return () => { window.removeEventListener("scroll", update); window.removeEventListener("resize", update); }; }, []); return progress; } function AmbientBackground() { return ( ); } function CircularHeroArc() { return ( ); } function Badge({ children, tone = "blue" }) { const tones = { blue: "border-sky-400/30 bg-sky-400/10 text-sky-200 light:text-sky-900", lime: "border-lime-300/35 bg-lime-300/10 text-lime-100 light:text-lime-900", dark: "border-white/10 bg-white/[0.06] text-white/80 light:border-slate-200 light:bg-white light:text-slate-700" }; return {children}; } function Navbar({ theme, setTheme }) { const [open, setOpen] = useState(false); const progress = useScrollProgress(); const primaryNav = [ ["Services", "#services"], ["Work", "#work"], ["Pricing", "#pricing"], ["Contact", "#contact"] ]; const mobileNav = [ ["Home", "#top"], ...primaryNav ]; const themeIcon = theme === "dark" ? : ( <> ); return (
{`${settings.brand {settings.brand || "NXO Studio"}
Start project
{open && ( )}
); } function Hero() { const [focusIndex, setFocusIndex] = useState(0); const active = serviceSource[focusIndex % serviceSource.length] || serviceSource[0]; useEffect(() => { const timer = window.setInterval(() => { setFocusIndex((index) => (index + 1) % serviceSource.length); }, 3200); return () => window.clearInterval(timer); }, []); return (
{settings.availability || "Booking new projects"} Web design + motion + growth

{settings.headline || "Digital work that makes brands impossible to ignore"}

{shortText(settings.subheadline, "Websites, videos, motion, and growth systems built for launches that need to look expensive and convert fast.", 128)}

{serviceSource.map((service, index) => ( ))}
{stats.map((stat) => (
{stat.value} {stat.label}
))}
NXO Live Board

Live focus

{active.title}

Active

Momentum

{[44, 70, 52, 88, 64].map((height, index) => ( ))}

Growth

4.8x campaign lift
StrategyDesignMotionLaunch
); } function LiveProof() { const [active, setActive] = useState(0); useEffect(() => { const timer = window.setInterval(() => { setActive((index) => (index + 1) % proofFeed.length); }, 2400); return () => window.clearInterval(timer); }, []); return (
Live delivery rhythm

A page that moves without shouting.

{["Live proof", "Auto flow", "Lead-ready"].map((item) => ( {item} ))}
{proofFeed.map((item, index) => ( ))}
); } function Services() { const [active, setActive] = useState(serviceSource[0]?.id || ""); const activeService = serviceSource.find((service) => service.id === active) || serviceSource[0] || {}; const activePrice = servicePrice(activeService); useEffect(() => { const timer = window.setInterval(() => { const currentIndex = serviceSource.findIndex((service) => service.id === active); const next = serviceSource[(currentIndex + 1 + serviceSource.length) % serviceSource.length]; if (next) { setActive(next.id); } }, 6200); return () => window.clearInterval(timer); }, [active]); return (
Our Services

Three focused services, built to work together.

Choose one service or combine them into a launch package with one creative direction.

Selected preview

{activeService.title}

{shortText(activeService.description, activeService.tagline, 135)}

{splitList(activeService.deliverables).slice(0, 5).map((item) => ( {item} ))}
NXO

Starting at

{activePrice.price}

{activePrice.note}

Open details
); } function Work() { const categories = useMemo(() => ["All", ...Array.from(new Set(works.map((work) => work.category).filter(Boolean)))], []); const [filter, setFilter] = useState("All"); const [featuredId, setFeaturedId] = useState(works[0]?.id || ""); const sortedWorks = [...works].sort((a, b) => Number(Boolean(b.recent)) - Number(Boolean(a.recent))); const visibleWorks = filter === "All" ? sortedWorks : sortedWorks.filter((work) => work.category === filter); const featured = works.find((work) => work.id === featuredId) || visibleWorks[0] || works[0] || {}; return (
Selected Work

Premium visuals. Clear buying paths.

{categories.map((category) => ( ))}
{visibleWorks.map((work, index) => (
setFeaturedId(work.id)} onFocus={() => setFeaturedId(work.id)} className={cx("group overflow-hidden rounded-[32px] border border-white/10 bg-white/[0.055] shadow-apple transition hover:-translate-y-2 light:border-slate-200 light:bg-white", index === 0 ? "md:col-span-2" : "")} tabIndex="0" >
{work.category} {work.recent && Recent}
Outcome {work.metric} {(work.client || work.year) && {[work.client, work.year].filter(Boolean).join(" / ")}}

{work.title}

{shortText(work.description, "", 92)}

))}
{featured.title && (
Currently previewing

{featured.title}

{shortText(featured.description, "", 105)} {featured.metric}

)}
); } function Process() { const [activeStep, setActiveStep] = useState(0); return (
How We Work

A clear path from first brief to launch.

Four focused stages keep every website, video, and campaign moving without confusion.

{processSteps.map(([number, title, body, meta], index) => (
setActiveStep(index)} className={cx( "grid cursor-pointer gap-4 rounded-[24px] border p-5 shadow-apple transition light:border-slate-200 sm:grid-cols-[72px_1fr]", activeStep === index ? "border-sky-300/50 bg-white text-slate-950" : "border-white/10 bg-white/[0.055] light:bg-white" )} > {number}

{title}

{shortText(body, "", 88)}

{meta}
))}
); } function Testimonials() { const rows = [...testimonials, ...testimonials]; return (
Client Reviews

Rated for launch quality, speed, and polish.

4.9 average rating Verified project feedback
{rows.map((item, index) => { const rating = ratingValue(item.rating); const stars = Array.from({ length: 5 }, (_, starIndex) => starIndex + 1); return (
{reviewerInitials(item.name)}
{item.name} {item.role}
{rating.toFixed(1)}
{stars.map((star) => ( ))} Verified review

"{shortText(item.quote, "", 156)}"

{item.service || "Launch project"} {item.location || "Bangladesh"} {item.date || "Recent project"}
); })}
); } function Pricing({ onDiscussProject }) { return (
Pricing

Individual prices and bundle deals.

Start with one service or combine web, video, motion, and marketing into a launch package.

{serviceSource.map((service) => { const price = servicePrice(service); return ( ); })}
Bundle packages
{pricing.map((plan, index) => { const left = plan.highlight ? 3 : 6; const used = 10 - left; return (
{plan.highlight && Most requested}

{plan.name}

{plan.price}

{shortText(plan.description, "", 100)}

    {splitList(plan.features).map((feature) => (
  • + {feature}
  • ))}
{left}/10 slots left {index === 0 ? "Flexible" : "Priority"}
); })}
); } function FAQ() { const [open, setOpen] = useState(0); return (
Questions

Quick answers.

{faqs.map(([question, answer], index) => (
{open === index &&

{shortText(answer, "", 130)}

}
))}
); } function GmailLogo() { return ( ); } function PhoneLogo() { return ( ); } function WhatsAppLogo() { return ( ); } function Contact({ preset }) { const [selectedService, setSelectedService] = useState(""); const [message, setMessage] = useState(""); const phoneHref = `tel:${String(settings.phone || "").replace(/[^\d+]/g, "")}`; const whatsappHref = `https://wa.me/${String(settings.phone || "").replace(/[^\d]/g, "")}`; const mailHref = `mailto:${settings.email || ""}`; useEffect(() => { if (!preset) { return; } setSelectedService(preset.service || ""); setMessage(preset.message || ""); }, [preset]); const presetServiceExists = serviceSource.some((service) => service.title === selectedService); return (
Start

Tell NXO what needs to launch.

Send the rough version. NXO will shape it into a launch path.

{DATA.sent &&
Thanks. Your project message has been sent.
} {DATA.flash &&
{DATA.flash}
}