// home.jsx — Home page sections for Harjog Solutions const CAPABILITIES = [ { num: '01', title: 'Brand Identity', desc: 'Logos, wordmarks, brand systems and visual language that command attention from launch day onwards.', tags: ['Logo', 'Identity', 'Guidelines'] }, { num: '02', title: 'Real Estate Marketing', desc: 'Pre-launch campaigns, lead funnels and creative for builders, brokers and townships across Punjab and beyond.', tags: ['Builders', 'Lead Gen', 'Creatives'] }, { num: '03', title: 'Political Campaigns', desc: 'Door-to-door creative, voter outreach, IVR, video and field collateral for candidates at every level.', tags: ['Outreach', 'IVR', 'Video'] }, { num: '04', title: 'Performance Marketing', desc: 'Meta, Google and YouTube ads engineered to ship qualified leads — not vanity metrics.', tags: ['Meta', 'Google', 'YouTube'] }, { num: '05', title: 'Marketing Automation', desc: 'WhatsApp, email and CRM automation. Nurture every lead like it\u2019s your only one, without the headcount.', tags: ['WhatsApp', 'CRM', 'Workflows'] }, { num: '06', title: 'Content & Production', desc: 'Reels, drone, photography and copy — produced in-house, turned around fast, on-brand every time.', tags: ['Reels', 'Drone', 'Copy'] }, ]; const WORK = [ { slug: 'township-launch', cat: 'Real Estate', date: '2025–26', title: 'Ashok Malhotra Group — Digital & Lead Gen', blurb: 'Social media, performance marketing and lead generation for premier Ludhiana real estate properties.', image: 'https://images.unsplash.com/photo-WQ42ypHazNo?w=1200&q=80&auto=format&fit=crop' }, { slug: 'mla-campaign', cat: 'Political', date: '2025', title: 'Vidhan Sabha Campaign — Punjab', blurb: 'Full creative and outreach engine for a sitting MLA. 4.2L verified voter touchpoints across booths, IVR and WhatsApp.', image: 'https://images.unsplash.com/photo-AXGOhRx0Sko?w=1200&q=80&auto=format&fit=crop' }, { slug: 'sona-foods', cat: 'Film & Production', date: '2019', title: 'Bollywood & Punjabi Film Promos', blurb: 'Edited promos for Bala, Nikka Zaildar 3, Dream Girl, Jabaria Jodi and more for major Bollywood and Punjabi productions.', image: 'https://images.unsplash.com/photo-i0IvwAhhGZM?w=1200&q=80&auto=format&fit=crop' }, { slug: 'heritage-resorts', cat: 'Social Media', date: '2023–24', title: 'Socializar — Global Social Campaigns', blurb: 'Social media campaigns for brands across London, Australia, Canada, USA, Dubai and Thailand.', image: 'https://images.unsplash.com/photo-ou_9KZ6BJ-0?w=1200&q=80&auto=format&fit=crop' }, ]; const PROCESS = [ { n: '01', t: 'Listen', d: 'A working session in our Ludhiana studio (or yours). We figure out what success actually looks like for your business — not what we wish it looked like.' }, { n: '02', t: 'Plan', d: 'Scoped roadmap, channel mix, budget split and a measurement plan. We sign off on numbers before anyone makes a creative.' }, { n: '03', t: 'Ship', d: 'Two-week sprints. Real creative live in week two, real leads in week four. We adjust spend based on what the data says.' }, { n: '04', t: 'Scale', d: 'What works gets more budget; what doesn\u2019t gets cut. Monthly reviews with the founder, weekly updates with the team.' }, ]; const TESTIMONIALS = [ { q: 'Harjog ran our township launch end-to-end. Bookings the first month covered the whole marketing spend.', name: 'Aman Buildwell', av: 'AB' }, { q: 'Best creative we\'ve had on a campaign. Satnam understood Punjab voters in a way agencies in Delhi never did.', name: 'Vidhan Sabha Campaign', av: 'VS' }, { q: 'They rebuilt our brand, our packaging, and our funnel. Repeat customer rate is finally where we\'d hoped it would be.', name: 'Sona Foods', av: 'SF' }, { q: 'Social media campaigns that actually reached our audience across six countries. Real results, not just impressions.', name: 'Socializar', av: 'SZ' }, { q: 'Our lead cost dropped by more than half within the first month. The team knows what they\'re doing.', name: 'Ashok Malhotra Group', av: 'AM' }, { q: 'The corporate film and Auto Expo pitch video were delivered on time and exactly to brief.', name: 'MCI India — Mahindra', av: 'MC' }, ]; const FAQS = [ { q: 'Who is Harjog Solutions for?', a: 'Real estate builders and brokers, political candidates and their campaign teams, and growth-stage consumer brands. If you need fast, accountable marketing, we can usually help.' }, { q: 'Do you work outside Punjab?', a: 'Yes — we run campaigns and brand work across India, with a base in Ludhiana. About 40% of our retainers are out-of-state.' }, { q: 'What does a typical engagement cost?', a: 'Brand identity projects start around \u20b91.5L. Marketing retainers begin at \u20b975k/month plus ad spend. Political campaigns are scoped per seat — get in touch for a quote.' }, { q: 'How fast can you start?', a: 'For an active retainer, 5\u20137 working days from contract. For a brand sprint, we can usually open a slot within 2\u20133 weeks.' }, { q: 'What about automation and CRM?', a: 'We build on tools you already use \u2014 WhatsApp Business, GoHighLevel, Zoho, HubSpot, custom Make/n8n flows. We don\u2019t lock you into proprietary software.' }, { q: 'Will you sign an NDA?', a: 'Always. We routinely sign mutual NDAs before the first conversation, especially for political and real-estate work.' }, ]; function MapBg() { return ( ); } function ScrollServices({ setRoute }) { const SERVICES = [ { num: '01', slug: 'brand-identity', name: 'Brand Identity', sub: 'Logo · Visual Language · Guidelines' }, { num: '02', slug: 'real-estate', name: 'Real Estate Marketing', sub: 'Pre-launch · Lead Funnels · Creatives' }, { num: '03', slug: 'political', name: 'Political Campaigns', sub: 'Outreach · IVR · Field Collateral' }, { num: '04', slug: 'performance', name: 'Performance Marketing', sub: 'Meta · Google · YouTube Ads' }, { num: '05', slug: 'automation', name: 'Marketing Automation', sub: 'WhatsApp · CRM · Workflows' }, { num: '06', slug: 'content-video', name: 'Content & Production', sub: 'Reels · Drone · Photography' }, ]; const N = SERVICES.length; const sectionRef = React.useRef(null); const [activeIdx, setActiveIdx] = React.useState(0); React.useEffect(() => { const el = sectionRef.current; if (!el) return; const onScroll = () => { const rect = el.getBoundingClientRect(); const scrolled = -rect.top; const total = el.offsetHeight - window.innerHeight; if (total <= 0) return; const p = Math.max(0, Math.min(1, scrolled / total)); setActiveIdx(Math.min(N - 1, Math.floor(p * N))); }; window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); return () => window.removeEventListener('scroll', onScroll); }, [N]); return (

What we do

    {SERVICES.map((s, i) => (
  • setRoute('service/' + s.slug)} style={{ cursor: 'pointer' }}>
    {s.name}
  • ))}
); } function AuroraHero({ sub, setRoute }) { // Scroll-based parallax and fade-out are now handled by GSAP in animations.jsx return (
); } function HeroBlock({ headline, sub, layout, setRoute }) { if (layout === 'aurora') return ; // Headline gets an italic accent on a key word — last word by default const renderHeadline = (text) => { const parts = text.trim().split(/\s+/); if (parts.length < 2) return text; const last = parts.pop(); return (<>{parts.join(' ')} {last}); }; return (
); } function Strip() { const items = ['Ashok Malhotra Group', 'Aman Buildwell', 'MCI India — Mahindra', 'Socializar', 'Lahori Jeera', 'M3M', 'Omaxe', 'HealthOptim', 'Royal Greens Township', 'Bollywood Film Promos']; const doubled = [...items, ...items]; return (
{doubled.map((n, i) => {n})}
); } function Capabilities({ setRoute }) { return (

What we do
under one roof.

Branding, marketing and automation — handled by one team that talks to each other. No agencies blaming agencies when a campaign underperforms.

{CAPABILITIES.map((c, i) => ( setRoute('services')}>
{c.num} / 06

{c.title}

{c.desc}

{c.tags.map(t => {t})}
))}
); } function WorkListItem({ w, i, setRoute }) { const ref = React.useRef(null); const [seen, setSeen] = React.useState(false); React.useEffect(() => { if (!ref.current) return; const io = new IntersectionObserver(entries => { entries.forEach(e => { if (e.isIntersecting) { setSeen(true); io.disconnect(); } }); }, { threshold: 0, rootMargin: '0px 0px -6% 0px' }); io.observe(ref.current); const fallback = setTimeout(() => setSeen(true), 1400); return () => { io.disconnect(); clearTimeout(fallback); }; }, []); return (
setRoute('case/' + w.slug)} >
{w.title}

{w.title}

{w.cat} · {w.date}
); } function Work({ setRoute }) { return (
Selected work {WORK.length} projects
{WORK.map((w, i) => ( ))}
); } function Process() { return (

How we work

Same four-step approach for every engagement. Predictable for you. Lets us focus our energy on the campaign, not the process.

{PROCESS.map((s, i) => (
{s.n}

{s.t}

{s.d}

))}
); } function Testimonials() { const [idx, setIdx] = React.useState(0); const total = TESTIMONIALS.length; React.useEffect(() => { const id = setInterval(() => setIdx(i => (i + 1) % total), 3500); return () => clearInterval(id); }, [total]); const prev = () => setIdx(i => (i - 1 + total) % total); const next = () => setIdx(i => (i + 1) % total); return (

What clients say

{TESTIMONIALS.map((t, i) => (
{t.q}
{t.av}
{t.name}
))}
{TESTIMONIALS.map((_, i) => (
); } function FAQ() { const [open, setOpen] = React.useState(0); return (

Common questions
we hear.

Don't see yours? window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' })} style={{ color: 'var(--accent)', cursor: 'pointer', borderBottom: '1px solid currentColor' }}>Ask directly — Satnam usually replies within a day.

{FAQS.map((f, i) => (
setOpen(open === i ? -1 : i)}>
{f.q}
{f.a}
))}
); } function CTA({ setRoute, dark = true }) { return (

Let's build
something that lasts.

A 20-minute call to scope your project. No pitch deck, no obligation — just a useful conversation about your business.

); } function HomePage({ tweaks, setRoute }) { return (
); } Object.assign(window, { HomePage, CTA });