// Apps page — portfolio of products published by AdOpsify LLC. const AppsHero = () => ( Software we ship and operate.} lead="AdOpsify isn't just a service shop — we publish our own apps. Each one is a working answer to a question we kept hearing from clients. Here's what's live." /> ); const NutriAIFeature = () => { const ref = React.useRef(null); React.useEffect(() => { if (!window.gsap || !window.ScrollTrigger) return; const els = ref.current.querySelectorAll("[data-r]"); window.gsap.from(els, { scrollTrigger: { trigger: ref.current, start: "top 75%" }, y: 36, opacity: 0, duration: 0.9, stagger: 0.08, ease: "expo.out", }); }, []); return (
Featured app

nutriAI — scan a meal,
know your day.

A camera-first calorie and macro tracker. Point your phone at a plate and nutriAI identifies items, estimates portions, and logs the meal against a BMR-personalised target — no typing, no database searching.

{[ ["1.4s", "Avg. scan latency"], ["94%", "Top-1 food accuracy"], ["5/day", "Free scans · unlimited on Premium"], ].map(([n, l], i) => (
{n}
{l}
))}
GET IT ON Google Play Android 8.0+ · iOS coming Q3 2026
{/* Phone mock with calorie ring */}
Today · Apr 24
Logged
493
of 2,340 kcal target
{[["P", "32g", "var(--brand-cobalt)"], ["C", "48g", "var(--brand-violet)"], ["F", "14g", "var(--brand-orange)"]].map(([k, v, c]) => (
{k}
{v}
))}
); }; const OtherApps = () => { const apps = [ { tint: "var(--brand-cobalt)", status: "In private beta", name: "Pacing", tag: "Media-buying ops", d: "An internal tool we open-sourced. Real-time DSP pacing alerts via Slack + Linear, with budget rebalancing baked in. Free for one seat.", }, { tint: "var(--brand-orange)", status: "Coming Q3 2026", name: "Shelf", tag: "Retail analytics", d: "Shelf-share scanner for CPG ops teams — point at a retail aisle, get planogram compliance and competitor share-of-shelf in seconds.", }, { tint: "var(--brand-violet)", status: "Concept", name: "Frame", tag: "Creative QA", d: "Drop a video file, get IAB-VAST validation, frequency-cap recommendations, and brand-safety scoring before you push to a DSP.", }, ]; return (
In the workshop

What we're building next.

{apps.map(a => (
{a.status}

{a.name}

{a.tag}

{a.d}

))}
); }; const App = () => { useReveal(); return ( <>