"use client"; import { useState } from "react"; // import Link from "next/link"; // navigation temporarily disabled import { motion } from "framer-motion"; import { useInView } from "react-intersection-observer"; // Non-navigating stub — links still render but go nowhere. Restore the import // above to re-enable navigation. const Link = ({ href, onClick, children, ...props }) => ( { e.preventDefault(); onClick?.(e); }} {...props}> {children} ); import { ArrowRight, Check, Gamepad, Database, Code, Palette } from "@/components/ui/icons"; import AnimatedButton from "@/components/ui/AnimatedButton"; /** * "What we do" — sticky scrollytelling (the site's flagship section). * Left: a pinned media frame whose image, number and progress rail sync to * the service chapter you're reading. Right: four full chapters — heading, * description, highlights, tags, link — all always in the DOM (SEO-safe). * Mobile: chapters stack with their image inline. */ const SERVICES = [ { no: "01", Icon: Gamepad, title: "Game Development", desc: "Immersive 2D, 3D, AR/VR and multiplayer games for mobile, PC and console — from concept and game art to live ops and gamification.", points: ["Mobile, PC & console games", "Unity & Unreal engineering", "Multiplayer, AR/VR & live ops"], tags: ["Unity", "Unreal", "Multiplayer"], href: "/services/game-development", image: "/images/opt/Pillar1.webp", }, { no: "02", Icon: Database, title: "Data Analytics & AI", desc: "BI, dashboards, predictive analytics and AI that turn raw data into intelligence and automation your team can act on with confidence.", points: ["BI, dashboards & visualization", "Predictive analytics & machine learning", "AI solutions & automation"], tags: ["Power BI", "Python", "AI / ML"], href: "/services/data-analytics-ai", image: "/images/opt/HeroBanner3.png", }, { no: "03", Icon: Code, title: "Web Development", desc: "Corporate sites, e-commerce, web apps and custom software — engineered on a modern stack, secured and built to scale with your traffic.", points: ["Web apps & custom software", "Cloud, DevOps & cybersecurity", "SEO-first performance"], tags: ["Next.js", "Node.js", "Cloud"], href: "/services/web-development", image: "/images/opt/Pillar2.webp", }, { no: "04", Icon: Palette, title: "Media & Creative", desc: "Branding, video, motion graphics, animation and social creative — on-brand content and campaigns that command attention everywhere.", points: ["Branding & visual identity", "Video, motion & 2D/3D animation", "Social & campaign creative"], tags: ["Branding", "Video", "Motion"], href: "/services/media-creative", image: "/images/opt/HeroBanner2.webp", }, ]; const EASE = [0.21, 0.47, 0.32, 0.98]; const container = { hidden: {}, show: { transition: { staggerChildren: 0.12 } } }; const word = { hidden: { yPercent: 120 }, show: { yPercent: 0, transition: { duration: 0.7, ease: EASE } }, }; const rise = { hidden: { opacity: 0, y: 40 }, show: { opacity: 1, y: 0, transition: { duration: 0.65, ease: EASE } }, }; /** One chapter on the right — reports itself active when centered in view. */ function Chapter({ service, index, onActive }) { const { ref } = useInView({ rootMargin: "-45% 0px -45% 0px", onChange: (inView) => inView && onActive(index), }); const { no, Icon, title, desc, points, tags, href, image } = service; return ( {/* inline image (mobile/tablet only) */} {no} {no} {title} {desc} {points.map((p) => ( {p} ))} {tags.map((t) => ( {t} ))} Explore {title} ); } export default function WhatWeDo() { const [active, setActive] = useState(0); return ( {/* Header */} What we do We help you build, launch and {" "} scale with confidence. {/* Scrollytelling */} {/* Sticky media frame (desktop) */} {/* image layers — all mounted, crossfade */} {SERVICES.map((s, i) => ( ))} {/* giant number watermark */} {SERVICES[active].no} {/* active title chip */} {(() => { const Icon = SERVICES[active].Icon; return ; })()} {SERVICES[active].title} {/* progress rail */} {SERVICES.map((s, i) => ( ))} {/* Chapters */} {SERVICES.map((service, i) => ( ))} {/* CTA */} Explore all services ); }
{desc}