/* global React, ReactDOM */ const { useState, useEffect, useRef } = React; // Inline lucide-style icons (so we don't depend on a UMD that may be broken) const Icon = ({ size = 16, stroke = 2, children, style }) => ( ); const ArrowRight = (p) => ; const Clock = (p) => ; const Menu = (p) => ; const X = (p) => ; // Live clock for navbar — London time HH:MM function useLondonTime() { const [t, setT] = useState(() => fmt(new Date())); useEffect(() => { const id = setInterval(() => setT(fmt(new Date())), 1000); return () => clearInterval(id); }, []); return t; } function fmt(d) { try { return new Intl.DateTimeFormat('en-GB', { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'Europe/London', }).format(d); } catch { return '00:00'; } } // ───────────── HERO ───────────── const HEADLINE_VARIANTS = { bold: ['We build software, mobile apps', 'and AI automations for teams', 'ready to move faster.'], expert: ['Engineering software, mobile', 'apps and AI workflows for', 'businesses that ship.'], playful: ['Code, apps and automations', 'for the teams who keep the', 'internet running.'], }; function Hero({ accent, headlineKey, shaderIntensity, mobileOpen, setMobileOpen }) { const shaderHost = useRef(null); const shaderApi = useRef(null); const time = useLondonTime(); const lines = HEADLINE_VARIANTS[headlineKey] || HEADLINE_VARIANTS.bold; useEffect(() => { if (!shaderHost.current) return; shaderApi.current = window.mountShader(shaderHost.current, { baseA: '#ffffff', baseB: '#f0f0f0', accent, grain: 0.05, intensity: shaderIntensity, }); return () => shaderApi.current?.destroy(); }, []); // mount once useEffect(() => { shaderApi.current?.setAccent(accent); }, [accent]); useEffect(() => { shaderApi.current?.setIntensity(shaderIntensity); }, [shaderIntensity]); return (
{/* Shader background */} {/* Navbar */}
{/* spacer */}
{/* Hero content */}
Encode Fox Tech

{lines.map((line, i) => ( {line} {i < lines.length - 1 && (<>
)}
))}

{/* CTAs */}
Start a project
setMobileOpen(false)} time={time} accent={accent} />
); } // ───────────── CTA button with text-roll hover ───────────── function CTAButton({ children, dark = false, accent = '#F26522' }) { const bg = dark ? '#111827' : accent; const arrowColor = dark ? '#111827' : accent; return ( ); } function darken(hex, amt) { hex = hex.replace('#',''); if (hex.length === 3) hex = hex.split('').map(c=>c+c).join(''); const n = parseInt(hex, 16); let r = Math.max(0, ((n>>16)&255) - Math.round(255*amt)); let g = Math.max(0, ((n>>8)&255) - Math.round(255*amt)); let b = Math.max(0, (n&255) - Math.round(255*amt)); return '#' + [r,g,b].map(v=>v.toString(16).padStart(2,'0')).join(''); } // Partner badge with starburst SVG function PartnerBadge({ accent }) { return (
e.currentTarget.style.boxShadow = '0 4px 16px rgba(0,0,0,0.12)'} onMouseLeave={e => e.currentTarget.style.boxShadow = '0 2px 8px rgba(0,0,0,0.08)'} > AWS & GCP Certified Partner Featured
); } // Mobile menu sheet function MobileMenu({ open, onClose, time, accent }) { return (
{time} London
Start a project
); } // ───────────── ABOUT ───────────── function About({ accent }) { const SMALL = 'https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260516_090123_74be96d4-9c1b-40cf-932a-96f4f4babed3.png&w=1280&q=85'; const LARGE = 'https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260516_090133_c157d30b-a99a-4477-bec1-a446149ec3f2.png&w=1280&q=85'; return (
{/* Badge */}
1
Introducing Encode Fox Tech
{/* Heading */}

Strategy-led engineering, delivering
results across software, mobile and AI.

{/* Mobile/tablet stacked */}

Through research, engineering and iteration we help growing teams realize their digital potential — from custom software and mobile apps to AI automations that quietly run the business.

About our studio
{/* Desktop grid */}

Software, mobile apps and AI automations,
built with research, engineering and iteration
for teams ready to ship faster.

About our studio
); } // ───────────── CASE STUDIES ───────────── const CASES = [ { title: 'Helios AI', description: 'Cut a fintech support team\'s response time by 80% with an AI triage workflow integrated into Zendesk and Slack.', video: 'https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260516_122702_390f5305-8719-41d5-ae80-d23ab3796c28.mp4', aspect: '329 / 246', bg: '#1a1d2e', button: { variant: 'white', label: 'Learn more', width: 148, icon: 'link' }, }, { title: 'Vault Mobile', description: 'Rebuilt a banking mobile app from the ground up — shipped to iOS & Android, hit a 4.9 store rating in six weeks.', video: 'https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260516_123323_f909c2b8-ff6c-4edf-882b-8ebcdbe389b5.mp4', aspect: '1 / 1', bg: '#6b6b6b', button: { variant: 'dark', label: 'View case study', width: 168, icon: 'arrow' }, }, ]; function Cases() { return (
{/* Badge */}
2
Featured client work
{/* Heading */}

Our projects

{CASES.map((c, i) => )}
); } function CaseCard({ title, description, video, aspect, bg, button }) { return (

{title}

); } function HoverButton({ variant, label, width, icon }) { const isDark = variant === 'dark'; return (
{label} {icon === 'link' ? : }
); } function LinkIcon() { return ( ); } // ───────────── APP ───────────── const TWEAKS = /*EDITMODE-BEGIN*/{ "accent": "#F26522", "headline": "bold", "shaderIntensity": 1 }/*EDITMODE-END*/; function App() { const [tweaks, setTweaks] = useTweaks(TWEAKS); const [mobileOpen, setMobileOpen] = useState(false); return (
{/* Footer strip */}
EF
Encode Fox Tech
© 2026 Encode Fox Tech. Engineering by humans, shipped by humans.
setTweaks('accent', v)} /> setTweaks('headline', v)} /> setTweaks('shaderIntensity', v)} />
); } ReactDOM.createRoot(document.getElementById('root')).render();