1const{useState:useStateCS}=React,CS_ITEMS=[{slug:"wholesum",kind:"cyan",num:"01",year:"2025",client:"WholeSum",title:"Self-serve AI analytics platform for unstructured text",meta:["Data / AI","16 weeks"],result:"Launched on time, raised funding",metric:{v:"On time",l:"launch & funding"},tag:"Featured",excerpt:"Upload surveys, reviews, and interviews and get structured, AI-powered insights, built end-to-end on Next.js, Nest.js, and AWS."},{slug:"daily8",kind:"cyan",num:"02",year:"2022",client:"Daily8",title:"AI-powered news aggregator for the MENA region",meta:["Mobile / Media","6 months"],result:"Shipped iOS + Android in 6 months",metric:{v:"iOS + Android",l:"stores ready"},excerpt:"News, podcasts, and videos tailored by interest and country, moderated, summarised, and surfaced by AI on React Native + AWS Lambda + OpenAI."},{slug:"revote",kind:"defence",num:"03",year:"2023",client:"Eurel International",title:"Remote electronic voting platform for the European Parliament",meta:["E-Government","8 months"],result:"Released May 2023 to the EU Parliament",metric:{v:"EU Parliament",l:"live deployment"},excerpt:"Modern remote voting for MEPs across the EU, five modules, EP-grade infrastructure, eight months from discovery to release. Partner: Eurel International."},{slug:"g42-fleet",kind:"energy",num:"04",year:"2022",client:"Group 42 (G42)",title:"Real-time fleet tracking platform for EXPO 2020 Dubai",meta:["IoT / Smart Buildings","2 years"],result:"Deployed for EXPO 2020 Dubai",metric:{v:"EXPO 2020",l:"deployed at scale"},excerpt:"Custom TCP ingestion, geofence rules, real-time map and trip playback, built for the world's largest expo on React Native + Node.js."},{slug:"cloud-of-legacy",kind:"cyan",num:"05",year:"2024",client:"Cloud of Legacy",title:"Cloud-based digital-heritage platform with secure inheritance access",meta:["Consumer SaaS","8 months"],result:"MVP launched",metric:{v:"MVP",l:"launched in 8 months"},excerpt:"Subscription cloud where users designate two heirs who can access documents, photos, and credit cards after death, Next.js, React, Keycloak, 2FA."},{slug:"lidl-road-safety",kind:"cyan",num:"06",year:"2022",client:"Lidl Romania",title:"Children's road-safety gamification web app for Lidl Romania",meta:["Education / Retail CSR","6 months"],result:"8th edition running with Romanian Police",metric:{v:"8 editions",l:"annual programme"},excerpt:"Public + private web app for kids and parents, episodes, levels, quizzes, gamification, built with Lidl and the Romanian Police on React + Nest.js."},{slug:"hera",kind:"health",num:"08",year:"2025",client:"Hera Health Tech",title:"AI-powered patient-support app for fertility clinics",meta:["Healthcare / FemTech","3 months MVP"],result:"MVP shipped in 3 months, ongoing engagement",metric:{v:"RAG",l:"verified clinical AI"},excerpt:"React Native + Serverless on AWS with a LlamaIndex RAG layer over verified clinical content, and a Strapi-powered Admin + Clinic CMS, HIPAA + GDPR ready from day one."},{slug:"melsonic",kind:"cyan",num:"09",year:"2025",client:"Melsonic",title:"AI-powered guitar-learning web app with real-time feedback",meta:["Music / EdTech","5 months MVP"],result:"MVP shipped in 5 months",metric:{v:"Real-time",l:"AI feedback"},excerpt:"Next.js + Nest.js + pixi.js wraps Melsonic's AI engine, record, score against the original, and surface notes correct, missed, or wrong."},{slug:"drum-bun",kind:"ops",num:"10",year:"2024",client:"Explorom (Drum Bun)",title:"Romanian car-services mobile app, RCA, ITP, vignette in one tap",meta:["InsurTech / Automotive","Ongoing"],result:"Live on App Store and Play Store",metric:{v:"3-in-1",l:"compliance app"},excerpt:"React Native + Node.js with an OCR document pipeline and per-car expiry alerts, verify, purchase, and track every Romanian driver obligation."},{slug:"numerize",kind:"ops",num:"11",year:"2024",client:"Numerize",title:"Responsive electronic document management + e-signature platform",meta:["DocTech / Enterprise","Ongoing"],result:"Responsive overhaul live for 6,000+ accounts",metric:{v:"6,000+",l:"customer accounts"},excerpt:"React + Material-UI overhaul of a 17-year French GED platform, OCR-trained invoice pipeline, YouSign e-signatures, Stripe + 3D Secure billing."},{slug:"lendit",kind:"cyan",num:"12",year:"2025",client:"Lendit",title:"Peer-to-peer rental marketplace for local communities",meta:["Marketplace / Sharing Economy","Ongoing"],result:"Web + mobile marketplace live in the UK",metric:{v:"Web + mobile",l:"marketplace live"},excerpt:"Rent tools and equipment from your neighbours, brand, design system, web app, iOS and Android app, and a Next.js + Nest.js + AWS backend with Stripe payments and Ondato KYC."}],CS_CATS=["All","Healthcare","Finance","Energy","Operations","Defence","AI / SaaS","Data / AI"];function CaseStudiesGrid(){const[e,t]=useStateCS("All"),a="All"===e?CS_ITEMS:CS_ITEMS.filter(t=>t.meta[0]===e);return React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"stat-row reveal",style:{marginTop:0,marginBottom:56}},[{v:"20+",l:"Projects delivered"},{v:"12",l:"Industries served"},{v:"98%",l:"Satisfied clients"},{v:"$120M+",l:"Revenue impact"}].map((e,t)=>React.createElement("div",{key:t,className:"stat",style:{transitionDelay:60*t+"ms"}},React.createElement("div",{className:"stat-value"},e.v),React.createElement("div",{className:"stat-label"},e.l)))),React.createElement("div",{className:"blog-categories"},CS_CATS.map(a=>React.createElement("button",{key:a,className:"blog-cat"+(a===e?" is-active":""),onClick:()=>t(a)},a))),React.createElement("div",{className:"cs-grid"},a.map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"cs-card reveal",style:{transitionDelay:t%3*80+"ms"}},React.createElement(CSCover,{kind:e.kind,label:e.meta[0],slug:e.slug}),e.tag&&React.createElement("div",{className:"cs-tag-row"},React.createElement("span",{className:"tag tag--ink"},e.tag)),React.createElement("div",{className:"cs-body"},React.createElement("div",{className:"cs-meta"},e.meta.map((e,t)=>React.createElement("span",{key:t},e))),React.createElement("h3",null,e.title),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,color:"var(--cyan-600)",fontWeight:600,fontSize:14}},React.createElement(Icon.zap,{style:{width:16,height:16}})," ",e.result),React.createElement("span",{className:"cs-link"},"Read case study ",React.createElement(Icon.arrow,null))))))))}function CaseStudiesEditorial(){return React.createElement("section",{className:"section"},React.createElement("div",{className:"container",style:{maxWidth:1080}},React.createElement("div",{className:"cs-edit-list"},CS_ITEMS.map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"cs-edit-row reveal",style:{transitionDelay:50*t+"ms"}},React.createElement("div",{className:"cs-edit-meta"},React.createElement("div",{className:"cs-edit-tag"},e.meta[0])),React.createElement("div",{className:"cs-edit-body"},React.createElement("div",{className:"cs-edit-client"},e.client),React.createElement("h3",{className:"cs-edit-title"},e.title),React.createElement("p",{className:"cs-edit-excerpt"},e.excerpt)),React.createElement("div",{className:"cs-edit-metric"},React.createElement("div",{className:"cs-edit-metric-v"},e.metric.v),React.createElement("div",{className:"cs-edit-metric-l"},e.metric.l)),React.createElement("div",{className:"cs-edit-arrow"},React.createElement(Icon.arrow,null)))))))}function CaseStudiesFeatured(){const[e,t]=useStateCS(0),a=CS_ITEMS[e];return React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"cs-feat reveal"},React.createElement("div",{className:"cs-feat-cover"},React.createElement(CSCover,{kind:a.kind,label:a.meta[0],slug:a.slug})),React.createElement("div",{className:"cs-feat-body"},React.createElement("span",{className:"tag tag--ink"},React.createElement("span",{className:"tag-dot"})," Case study"),React.createElement("div",{className:"cs-feat-client"},a.client),React.createElement("h2",{className:"cs-feat-title"},a.title),React.createElement("p",{className:"cs-feat-excerpt"},a.excerpt),React.createElement("div",{className:"cs-feat-metrics"},React.createElement("div",null,React.createElement("div",{className:"cs-feat-metric-v"},a.metric.v),React.createElement("div",{className:"cs-feat-metric-l"},a.metric.l)),React.createElement("div",null,React.createElement("div",{className:"cs-feat-metric-v"},a.meta[1]),React.createElement("div",{className:"cs-feat-metric-l"},"delivery")),React.createElement("div",null,React.createElement("div",{className:"cs-feat-metric-v"},a.meta[0]),React.createElement("div",{className:"cs-feat-metric-l"},"industry"))),React.createElement("a",{href:"/case-study/"+a.slug,className:"btn btn--primary"},"Read full case study ",React.createElement(Icon.arrow,null)))),React.createElement("div",{className:"cs-feat-tabs"},CS_ITEMS.map((a,c)=>React.createElement("button",{key:a.title,className:"cs-feat-tab"+(e===c?" is-active":""),onClick:()=>t(c)},React.createElement("span",{className:"cs-feat-tab-client"},a.client),React.createElement("span",{className:"cs-feat-tab-meta"},a.meta[0]))))))}function CaseStudiesTimeline(){return React.createElement("section",{className:"section"},React.createElement("div",{className:"container",style:{maxWidth:1040}},React.createElement("div",{className:"cs-tl"},React.createElement("div",{className:"cs-tl-spine"}),CS_ITEMS.map((e,t)=>React.createElement("div",{key:e.title,className:"cs-tl-row reveal "+(t%2==0?"is-left":"is-right"),style:{transitionDelay:60*t+"ms"}},React.createElement("div",{className:"cs-tl-card"},React.createElement("div",{className:"cs-tl-meta"},React.createElement("span",null,e.meta[0])),React.createElement("div",{className:"cs-tl-client"},e.client),React.createElement("h3",{className:"cs-tl-title"},e.title),React.createElement("p",{className:"cs-tl-excerpt"},e.excerpt),React.createElement("div",{className:"cs-tl-result"},React.createElement(Icon.zap,{style:{width:16,height:16}})," ",e.result),React.createElement("a",{href:"/case-study/"+e.slug,className:"cs-link"},"Read case study ",React.createElement(Icon.arrow,null))),React.createElement("div",{className:"cs-tl-node"},React.createElement("div",{className:"cs-tl-node-inner"})))))))}function ShowcaseMockup({kind:e}){return"health"===e||"cyan"===e?React.createElement("div",{className:"sc-mock sc-mock--phone"},React.createElement("div",{className:"sc-phone"},React.createElement("div",{className:"sc-phone-notch"}),React.createElement("div",{className:"sc-phone-screen"},React.createElement("div",{className:"sc-app-bar"},React.createElement("div",{className:"sc-app-avatar"}),React.createElement("div",{className:"sc-app-bars"},React.createElement("div",null),React.createElement("div",null))),React.createElement("div",{className:"sc-app-card sc-app-card--accent"},React.createElement("div",{className:"sc-app-row sc-row--md"}),React.createElement("div",{className:"sc-app-row sc-row--sm"}),React.createElement("div",{className:"sc-app-cta"})),React.createElement("div",{className:"sc-app-list"},React.createElement("div",{className:"sc-app-item"},React.createElement("div",{className:"sc-app-dot"}),React.createElement("div",{className:"sc-app-lines"},React.createElement("div",null),React.createElement("div",null))),React.createElement("div",{className:"sc-app-item"},React.createElement("div",{className:"sc-app-dot"}),React.createElement("div",{className:"sc-app-lines"},React.createElement("div",null),React.createElement("div",null))),React.createElement("div",{className:"sc-app-item"},React.createElement("div",{className:"sc-app-dot"}),React.createElement("div",{className:"sc-app-lines"},React.createElement("div",null),React.createElement("div",null))))))):React.createElement("div",{className:"sc-mock sc-mock--browser"},React.createElement("div",{className:"sc-browser"},React.createElement("div",{className:"sc-browser-bar"},React.createElement("span",{className:"sc-dot"}),React.createElement("span",{className:"sc-dot"}),React.createElement("span",{className:"sc-dot"}),React.createElement("div",{className:"sc-browser-url"})),React.createElement("div",{className:"sc-browser-body"},React.createElement("div",{className:"sc-browser-side"},React.createElement("div",null),React.createElement("div",null),React.createElement("div",null),React.createElement("div",null),React.createElement("div",null)),React.createElement("div",{className:"sc-browser-main"},React.createElement("div",{className:"sc-stat-row"},React.createElement("div",{className:"sc-stat"},React.createElement("div",{className:"sc-stat-v"}),React.createElement("div",{className:"sc-stat-l"})),React.createElement("div",{className:"sc-stat"},React.createElement("div",{className:"sc-stat-v"}),React.createElement("div",{className:"sc-stat-l"})),React.createElement("div",{className:"sc-stat"},React.createElement("div",{className:"sc-stat-v"}),React.createElement("div",{className:"sc-stat-l"}))),React.createElement("div",{className:"sc-chart"}
1,React.createElement("svg",{viewBox:"0 0 280 80",preserveAspectRatio:"none"},React.createElement("defs",null,React.createElement("linearGradient",{id:"sc-grad-"+e,x1:"0",y1:"0",x2:"0",y2:"1"},React.createElement("stop",{offset:"0%",stopColor:"var(--cyan-500)",stopOpacity:"0.45"}),React.createElement("stop",{offset:"100%",stopColor:"var(--cyan-500)",stopOpacity:"0"}))),React.createElement("path",{d:"M0,60 L40,45 L80,52 L120,30 L160,38 L200,18 L240,28 L280,12 L280,80 L0,80 Z",fill:"url(#sc-grad-"+e+")"}),React.createElement("path",{d:"M0,60 L40,45 L80,52 L120,30 L160,38 L200,18 L240,28 L280,12",fill:"none",stroke:"var(--cyan-500)",strokeWidth:"2"}))),React.createElement("div",{className:"sc-table"},React.createElement("div",{className:"sc-table-row"},React.createElement("div",null),React.createElement("div",null),React.createElement("div",null)),React.createElement("div",{className:"sc-table-row"},React.createElement("div",null),React.createElement("div",null),React.createElement("div",null)),React.createElement("div",{className:"sc-table-row"},React.createElement("div",null),React.createElement("div",null),React.createElement("div",null)))))))}function CaseStudiesShowcase(){const[e,t]=useStateCS("All"),a="All"===e?CS_ITEMS:CS_ITEMS.filter(t=>t.meta[0]===e);return React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"blog-categories",style:{marginBottom:48}},CS_CATS.map(a=>React.createElement("button",{key:a,className:"blog-cat"+(a===e?" is-active":""),onClick:()=>t(a)},a))),React.createElement("div",{className:"sc-grid"},a.map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"sc-card reveal",style:{transitionDelay:t%2*100+"ms"}},React.createElement("div",{className:"sc-glow"}),React.createElement("div",{className:"sc-card-inner"},React.createElement("div",{className:"sc-card-text"},React.createElement("div",{className:"sc-card-head"},React.createElement("span",{className:"sc-card-name"},e.client),React.createElement("span",{className:"sc-card-arrow"},React.createElement(Icon.arrow,null))),React.createElement("p",{className:"sc-card-desc"},e.excerpt),React.createElement("div",{className:"sc-card-tags"},React.createElement("span",{className:"sc-tag"},e.meta[0]),React.createElement("span",{className:"sc-tag"},e.meta[1]),React.createElement("span",{className:"sc-tag sc-tag--accent"},e.metric.v," ",e.metric.l))),React.createElement("div",{className:"sc-card-art"},React.createElement(ShowcaseMockup,{kind:e.kind})))))),a.length>0&&React.createElement("div",{style:{textAlign:"center",marginTop:56}},React.createElement("a",{href:"/blog",className:"btn btn--ghost"},"More case studies ",React.createElement(Icon.arrow,null)))))}function CaseStudiesMagazine(){const[e,...t]=CS_ITEMS;return React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"mag-grid"},React.createElement("a",{href:"/case-study/"+e.slug,className:"mag-hero reveal"},React.createElement("div",{className:"mag-hero-cover"},React.createElement(CSCover,{kind:e.kind,label:e.meta[0],slug:e.slug})),React.createElement("div",{className:"mag-hero-body"},React.createElement("span",{className:"mag-kicker"},React.createElement("span",{className:"mag-dot"})," Featured story"),React.createElement("h2",{className:"mag-hero-title"},e.title),React.createElement("p",{className:"mag-hero-excerpt"},e.excerpt),React.createElement("div",{className:"mag-hero-row"},React.createElement("div",{className:"mag-hero-metric"},React.createElement("div",{className:"mag-hero-metric-v"},e.metric.v),React.createElement("div",{className:"mag-hero-metric-l"},e.metric.l)),React.createElement("span",{className:"mag-hero-link"},"Read the story ",React.createElement(Icon.arrow,null))))),React.createElement("div",{className:"mag-side"},t.slice(0,3).map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"mag-mini reveal",style:{transitionDelay:60*t+"ms"}},React.createElement("div",{className:"mag-mini-body"},React.createElement("div",{className:"mag-mini-meta"},e.meta[0]),React.createElement("div",{className:"mag-mini-title"},e.title),React.createElement("div",{className:"mag-mini-metric"},e.metric.v," ",React.createElement("span",null,e.metric.l))),React.createElement(Icon.arrow,null))))),React.createElement("div",{className:"mag-row"},t.slice(3).map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"mag-card reveal",style:{transitionDelay:60*t+"ms"}},React.createElement("div",{className:"mag-card-cover"},React.createElement(CSCover,{kind:e.kind,label:e.meta[0],slug:e.slug})),React.createElement("div",{className:"mag-card-body"},React.createElement("div",{className:"mag-mini-meta"},e.meta[0]),React.createElement("h3",null,e.title),React.createElement("div",{className:"mag-mini-metric"},e.metric.v," ",React.createElement("span",null,e.metric.l))))))))}function CaseStudiesStack(){return React.createElement("section",{className:"section"},React.createElement("div",{className:"container",style:{maxWidth:1200}},React.createElement("div",{className:"stk-list"},CS_ITEMS.map((e,t)=>React.createElement("a",{key:e.title,href:"/case-study/"+e.slug,className:"stk-row reveal "+(t%2==0?"is-even":"is-odd"),style:{transitionDelay:60*t+"ms"}},React.createElement("div",{className:"stk-cover"},React.createElement(CSCover,{kind:e.kind,label:e.meta[0],slug:e.slug})),React.createElement("div",{className:"stk-body"},React.createElement("div",{className:"stk-meta"},React.createElement("span",null,e.meta[0]),React.createElement("span",{className:"stk-divider"}),React.createElement("span",null,e.meta[1])),React.createElement("div",{className:"stk-client"},e.client),React.createElement("h2",{className:"stk-title"},e.title),React.createElement("p",{className:"stk-excerpt"},e.excerpt),React.createElement("div",{className:"stk-result"},React.createElement("div",{className:"stk-result-v"},e.metric.v),React.createElement("div",{className:"stk-result-l"},e.metric.l)),React.createElement("span",{className:"stk-link"},"Read case study ",React.createElement(Icon.arrow,null))))))))}function CaseStudiesMosaic(){const e=[{span:"mos--xl",variant:"image"},{span:"mos--md",variant:"metric"},{span:"mos--md",variant:"quote"},{span:"mos--lg",variant:"image"},{span:"mos--md",variant:"metric"},{span:"mos--lg",variant:"image"}];return React.createElement("section",{className:"section"},React.createElement("div",{className:"container",style:{maxWidth:1240}},React.createElement("div",{className:"mos-grid"},CS_ITEMS.map((t,a)=>{const c=e[a]||e[0];return React.createElement("a",{key:t.title,href:"/case-study/"+t.slug,className:"mos-card reveal "+c.span+" mos--"+c.variant,style:{transitionDelay:50*a+"ms"}},"image"===c.variant&&React.createElement(React.Fragment,null,React.createElement("div",{className:"mos-cover"},React.createElement(CSCover,{kind:t.kind,label:t.meta[0],slug:t.slug})),React.createElement("div",{className:"mos-overlay"},React.createElement("div",{className:"mos-meta"},t.meta[0]),React.createElement("div",{className:"mos-title"},t.title),React.createElement("div",{className:"mos-arrow"},React.createElement(Icon.arrow,null)))),"metric"===c.variant&&React.createElement("div",{className:"mos-metric-card"},React.createElement("div",{className:"mos-metric-tag"},t.meta[0]),React.createElement("div",{className:"mos-metric-v"},t.metric.v),React.createElement("div",{className:"mos-metric-l"},t.metric.l),React.createElement("div",{className:"mos-metric-foot"},React.createElement("span",null,t.client),React.createElement(Icon.arrow,null))),"quote"===c.variant&&React.createElement("div",{className:"mos-quote-card"},React.createElement("div",{className:"mos-quote-mark"},"â"),React.createElement("p",{className:"mos-quote-text"},t.excerpt),React.createElement("div",{className:"mos-quote-foot"},React.createElement("div",null,React.createElement("div",{className:"mos-quote-client"},t.client),React.createElement("div",{className:"mos-quote-meta"},t.meta[0])),React.createElement(Icon.arrow,null))))}))))}function CaseStudiesPage({variant:e="grid"}){React.useEffect(()=>{const e=document.title;document.title="Case Studies, AI & Software Engineering Projects | 7Code Romania";const t=document.querySelector('meta[name="description"]'),a=t?t.getAttribute("content"):null;return t&&t.setAttribute("content","10+ case studies from 7Code's AI and software engineering practice: HealthTech, FinTech, IoT, GovTech, EdTech, and SaaS products built for clients across Europe, the UK, and the Middle East."),()=>{document.title=e,t&&null!==a&&t.setAttribute("content",a)}},[]);const t={grid:{eyebrow:"Case studies",h1:"Outcomes, not just deliverables",sub:"A selection of products we've shipped with our partners, across healthcare, finance, energy, defence and beyond."},editorial:{eyebrow:"Selected work · 2024â2026",h1:"Six stories, six outcomes.",sub:"An editorial index of the work we're proudest of, with the numbers attached."},featured:{eyebrow:"Featured case studies",h1:"Each one moved a metric.",sub:"Hover any project below to dig into how
1we built it and the results it produced."},timeline:{eyebrow:"A short history",h1:"How we've spent the last two years",sub:"From early-stage MVPs to large-scale platform launches, in roughly the order they shipped."},showcase:{eyebrow:"Recent case studies",h1:"Work we're proud to ship",sub:"Learn more about our clients, the types of projects we work with, our process, and the technologies we use to build software."},magazine:{eyebrow:"The portfolio",h1:"Stories worth telling",sub:"An editorial look at the products we've shipped, what they do, who they're for, and what they moved."},stack:{eyebrow:"Selected work",h1:"In-depth stories",sub:"Take your time, each one is a full case, top to bottom."},mosaic:{eyebrow:"Portfolio",h1:"A snapshot of recent work",sub:"Every project earned its real estate, by what it shipped, what it changed, or what someone said about it."}},a=t[e]||t.grid;let c;return c="editorial"===e?React.createElement(CaseStudiesEditorial,null):"featured"===e?React.createElement(CaseStudiesFeatured,null):"timeline"===e?React.createElement(CaseStudiesTimeline,null):"showcase"===e?React.createElement(CaseStudiesShowcase,null):"magazine"===e?React.createElement(CaseStudiesMagazine,null):"stack"===e?React.createElement(CaseStudiesStack,null):"mosaic"===e?React.createElement(CaseStudiesMosaic,null):React.createElement(CaseStudiesGrid,null),React.createElement("div",{className:"page"},React.createElement("section",{className:"page-hero"},React.createElement("div",{className:"container"},React.createElement("span",{className:"eyebrow",style:{justifyContent:"center"}},a.eyebrow),React.createElement("h1",null,a.h1),React.createElement("p",null,a.sub))),c,React.createElement(CTAStrip,null))}window.CaseStudiesPage=CaseStudiesPage; 2const{useState:useStateCSD,useEffect:useEffectCSD}=React,CASES={wholesum:{slug:"wholesum",client:"WholeSum",industry:"Data / AI",year:"2025",duration:"16 weeks",team:"1 UI/UX designer · 1 cloud architect · 1 front-end · 1 back-end · 1 QA",region:"United Kingdom",kind:"cyan",title:"Self-serve AI analytics platform for unstructured text",tagline:"Qualitative analytics, automated: upload surveys, reviews, and interview transcripts, get statistically-grounded, AI-quantified insight, built end-to-end on Next.js + Nest.js + AWS.",summary:"WholeSum is a UK-based AI / data-analytics startup that turns unstructured qualitative text, surveys, reviews, interview transcripts, into reproducible, statistically-grounded insights. We partnered with WholeSum to validate self-serve demand and drive direct API adoption through a clean, fast UX focused on time-to-insight. The product was designed in 4 weeks, built in 10 weeks, validated through 2 weeks of UAT, and shipped on time on Next.js + Nest.js + PostgreSQL with S3, Cognito, and Elastic Beanstalk on AWS.",challenge:{eyebrow:"The challenge",title:"A self-serve UX that's fast, clear, and immediately valuable, on a tight clock.",body:"The product had to feel effortless: upload your data, get insights, navigate the results, without a sales call or a manual onboarding. That meant carefully mapping every user flow, iterating with users, and shipping a stable, intuitive experience inside a fixed delivery window.",pains:["Strict timeline, 4 weeks design, 10 weeks development, 2 weeks UAT","Self-serve UX requirements demanded careful flow mapping and iteration","Speed, clarity, and immediate value had to coexist with rigorous QA","Needed a tech foundation that could grow with API adoption post-launch"]},approach:{eyebrow:"Our approach",title:"Speed, clarity, and immediate value, end to end.",body:"We delivered the full product lifecycle, from product strategy and design to development, testing, deployment, and ongoing maintenance. Our approach centred on speed, clarity, and immediate value, ensuring users could interact with the product effortlessly while the system delivered rapid, automated analysis.",pillars:[{title:"Product strategy & design",desc:"4-week discovery and design sprint to lock the self-serve experience before a line of code."},{title:"Modern JS stack",desc:"Next.js front-end and Nest.js API on Postgres, fast to ship, easy to scale."},{title:"Cloud-native on AWS",desc:"S3, Cognito, and Elastic Beanstalk for storage, auth, and deployment."},{title:"Five core modules",desc:"Landing, Upload Flow, Analysis Results, Dashboard, and User Profile & Settings."}]},results:[{v:"On time",l:"launch delivered",sub:"to the agreed timeline"},{v:"Funded",l:"investment raised",sub:"off the back of the launch"},{v:"Ongoing",l:"engagement",sub:"continued maintenance & support"},{v:"5",l:"modules shipped",sub:"landing, upload, results, dashboard, profile"}],testimonial:{quote:"The self-serve MVP is live and in use. 7Code has excellent communication and project management skills. The team is quick to respond to the client's needs. The client is pleased with the outcome and the team's technical leadership.",name:"Emily Kucharski",role:"CEO & Co-Founder, WholeSum"},metaDescription:"Self-serve AI analytics platform for unstructured text by 7Code. Built end-to-e
2nd on Next.js + Nest.js + AWS for WholeSum (UK), 16-week design and build, launched on time and raised funding.",next:{slug:"daily8",client:"Daily8",title:"AI-powered news aggregator for the MENA region",kind:"cyan"}},daily8:{slug:"daily8",client:"Daily8",industry:"Mobile / Media",year:"2022",duration:"6 months",team:"1 UI/UX designer · 1 architect · 3 full-stack developers · 1 PM · 1 QA",region:"United Arab Emirates",kind:"cyan",title:"AI-powered news aggregator for the MENA region",tagline:"MediaTech meets generative AI: a React Native news, podcasts, and videos app for the MENA region, moderated, summarised, and balanced by an OpenAI + AWS Lambda AI layer.",summary:"Daily8 is a UAE-based AI MediaTech startup building a centralised platform for news, podcasts, and videos tailored by country and interest, live now at daily8.com/en. After a stalled engagement with a previous provider, Daily8 switched to 7Code to design and ship the product end-to-end: a React Native iOS + Android app, the daily8.com web experience, an admin dashboard, and an AI layer on OpenAI + AWS Lambda for automated comment moderation, daily wrap-up summaries, and balanced-opinion features.",challenge:{eyebrow:"The challenge",title:"A multi-format content app that's fast, fair, and shippable on a startup runway.",body:"Daily8 came to us after a stalled engagement with a prior vendor. The product had to span three content formats, news, podcasts, and videos, feel personal from session one, and keep community spaces clean as comments scaled. All inside a six-month runway from blank canvas to App Store and Play Store readiness.",pains:["Switching providers mid-vision with no working build to inherit","Three content surfaces (news, podcasts, videos) under one cohesive UX","Community comments at scale required automated moderation from day one","Six months to design, build, test, and ready the app for both stores"]},approach:{eyebrow:"Our approach",title:"AI-native foundations, end-to-end delivery, ready for the stores in six months.",body:"We took the product from discovery to release: one month of focused UI/UX, four months of mobile and admin development, and parallel AI integration across moderation and summarisation. React Native on the front, AWS Lambda for the backend, OpenAI behind the AI features, chosen so the app would scale cleanly as Daily8's audience grew across the Emirates and the wider MENA region.",pillars:[{title:"Aligned discovery sprint",desc:"One-month UI/UX phase locked the experience, onboarding, three content feeds, comments, profile, before a line of mobile code was written."},{title:"React Native + admin dashboard",desc:"Single codebase for iOS and Android, plus an internal admin for editorial and ops, built on AWS Lambda for cost-efficient scale."},{title:"AI moderation built-in",desc:"OpenAI-powered comment moderation keeps community spaces safe without a human-only review queue."},{title:"AI summarisation & balance",desc:"A Daily Wrap-Up condenses the news cycle; an Unbiased Opinion feature surfaces multiple perspectives on a story."}]},results:[{v:"6 months",l:"design to release",sub:"1 month design · 5 months build & QA"},{v:"9",l:"consumer modules shipped",sub:"social login, feeds, comments, profile, push"},{v:"3",l:"AI features in core flow",sub:"moderator · daily wrap-up · unbiased opinion"},{v:"iOS + Android",l:"ready for the stores",sub:"App Store and Play Store"}],testimonial:{quote:"",name:"",role:""},metaDescription:"AI-powered news aggregator for the MENA region by 7Code. Daily8 (UAE), live at daily8.com/en, with React Native mobile, web, AI moderation, daily wrap-up, and unbiased opinion on AWS Lambda + OpenAI. Shipped iOS + Android in 6 months.",next:{slug:"revote",client:"Eurel International",title:"Remote electronic voting platform for the European Parliament",kind:"defence"}},revote:{slug:"revote",client:"Eurel International / European Parliament",industry:"E-Government / Civic Tech",year:"2023",duration:"8 months",team:"1 tech lead · 2 full-stack engineers",region:"European Union (Belgium, Italy)",kind:"defence",title:"Remote electronic voting platform for the European Parliament",tagline:"GovTech / E-Government: a multi-device remote-voting application for the European Parliament, authenticated on the EP network, designed to complement a 20-year-old in-chamber system without breaking it.",summary:"Eurel International is a Rome-based GovTech / E-Government provider of electronic voting systems for the Italian Senate, the Chamber of Deputies, and the European Parliament for nearly 20 years. 7Code partnered with Eurel to de
2sign and build a remote-voting application alongside their established in-chamber system, letting Members of the European Parliament authenticate through the EP network and vote securely from smartphone, tablet, laptop, or desktop, with full feature parity to the chamber experience.",challenge:{eyebrow:"The challenge",title:"Build a remote-voting platform that meets European Parliament's standards from day one.",body:"The Parliament's in-chamber voting system had been the standard for 20 years. The new remote application had to match it feature-for-feature, integrate with the EP's high-security network, and remain reliable through plenary and committee sessions where every vote counts. Testing was constrained by EP security policy, our CTO travelled to Brussels twice to validate the system on the live network.",pains:["Coordinating architecture and feature parity against a 20-year incumbent in-chamber system","Security and networking restrictions that limited where and how we could test","Performance, reliability, and scalability had to match a real-time chamber-grade system","Each release had to clear EP infrastru
2cture validation before user testing"]},approach:{eyebrow:"Our approach",title:"Discovery in Brussels, proof of concept on the EP network, ship in eight months.",body:"We began with a one-month discovery to map requirements with Eurel and EP infrastructure teams and define the right architecture, followed by a one-month proof of concept on the European Parliament's network. The four-month development phase shipped five core modules, Landing, Authentication, Plenary, Committee, and Dashboard, with two months of user-acceptance testing on the live infrastructure before the May 2023 release.",pillars:[{title:"Discovery in-situ",desc:"On-site assessment with Eurel and EP infrastructure teams to lock requirements and constraints before proposing an architecture."},{title:"Proof of concept on the live network",desc:"A working PoC inside the Parliament's network during month two, surfacing security and performance constraints early, when they were cheapest to fix."},{title:"Five-module delivery",desc:"Plenary, Committee, Landing, Authentication, and Dashboard modules, built so each could be validated, hardened, and shipped independently."},{title:"On-site UAT and rollout",desc:"Two months of user-acceptance testing on EP infrastru
2cture, with our CTO in Brussels to resolve issues against live network behaviour."}]},results:[{v:"May 2023",l:"released to production",sub:"8-month delivery from kick-off"},{v:"5 modules",l:"shipped",sub:"Plenary, Committee, Landing, Auth, Dashboard"},{v:"Multi-device",l:"voting parity",sub:"phone, tablet, laptop, desktop"},{v:"Ongoing",l:"engagement",sub:"continued maintenance & rollout support"}],testimonial:{quote:"The client was happy with 7Code's work, daily status reports, and on-time delivery of milestones. Their project management was well-organized, and they used virtual meetings for communication. 7Code's professionalism, flexibility, and commitment also contributed to the project's success.",name:"IT Engineer",role:"Electronic Voting Systems Company"},metaDescription:"Remote electronic voting platform for the European Parliament, built by 7Code with Eurel International. Secure multi-device voting on the EP network, five modules, eight months, released May 2023.",next:{slug:"g42-fleet",client:"Group 42",title:"Real-time fleet tracking for EXPO 2020 Dubai",kind:"energy"}},"g42-fleet":{slug:"g42-fleet",client:"Group 42 (G42)",industry:"IoT / Smart Buildings",year:"2022",duration:"2 years",team:"2 front-end · 2 back-end · 1 QA",region:"United Arab Emirates",kind:"energy",title:"Real-time fleet tracking platform for EXPO 2020 Dubai",tagline:"IoT meets telematics at world-expo scale: real-time vehicle tracking with geofence rule evaluation, custom trip events, and trip playback, delivered for EXPO 2020 Dubai on a custom TCP ingestion pipeline.",summary:"Group 42 (G42) is a UAE-based AI and cloud-computing company. 7Code partnered with G42 to build ESTS, an IoT fleet-tracking and smart-buildings platform deployed at EXPO 2020 Dubai, covering real-time vehicle location, geofence rule enforcement, custom event detection (overspeeding, loitering, geofence breach), trip playback, and dashboards for security and access teams. The stack: a custom device TCP server feeding a Node.js + React Native dashboard with Material-UI. Eighteen months of focused build plus six months of production maintenance.",challenge:{eyebrow:"The challenge",title:"Real-time, large-scale fleet tracking for a six-month global event with 200+ partners.",body:"EXPO 2020 Dubai needed centralised, real-time visibility across vehicle fleets covering security, logistics, and visitor transport. Devices reported over a custom TCP protocol; events had to be processed, geofenced, and escalated within seconds; the dashboard had to remain responsive under heavy concurrent load.",pains:["Custom device TCP protocol with streaming telemetry","Real-time geofence rule evaluation across many vehicles","Trip playback and historical event reconstruction","Six-month event window with no tolerance for downtime"]},approach:{eyebrow:"Our approach",title:"TCP ingestion, rule-based geofencing, and a real-time map dashboard.",body:"We built a dedicated device TCP server to ingest live telemetry, a rule engine for geofences and custom trip events (overspeeding, loitering, exit/enter geofence), and a React Native + Node.js front and back end with a real-time map. Custom procedures were tailored to EXPO 2020. Eighteen months of focused development were followed by six months of production maintenance.",pillars:[{title:"Device TCP server",desc:"Custom server to ingest device status, real-time telemetry, and backlog data, built to handle the EXPO fleet's volume and unreliability."},{title:"Geofences and rule engine",desc:"CRUD for geofences plus a rule engine that evaluates overspeeding, loitering, and zone exits in near real time."},{title:"Real-time map dashboard",desc:"Live map and dashboard for security and access teams, with trip playback for incident reconstruction."},{title:"Custom EXPO procedures",desc:"Bespoke alert, escalation, and remote-unlock procedures designed around the EXPO 2020 operations playbook."}]},results:[{v:"EXPO 2020",l:"deployed at scale",sub:"delivered for the world expo's six-month run"},{v:"18 + 6 mo",l:"build + maintenance",sub:"two-year engagement total"},{v:"Real-time",l:"telemetry & alerts",sub:"device TCP ingestion, geofence rules"},{v:"5+ modules",l:"shipped",sub:"TCP server, geofences, map, playback, alerts"}],testimonial:{quote:"",name:"",role:""},metaDescription:"Real-time IoT fleet tracking for EXPO 2020 Dubai by 7Code, partnered with Group 42
2(G42, UAE). Custom TCP ingestion, geofence rules, real-time map, and trip playback, 18 months build + 6 months maintenance.",next:{slug:"cloud-of-legacy",client:"Cloud of Legacy",title:"Cloud-based digital-heritage platform with secure inheritance",kind:"cyan"}},"cloud-of-legacy":{slug:"cloud-of-legacy",client:"Cloud of Legacy",industry:"Consumer SaaS / Digital Heritage",year:"2024",duration:"8 months",team:"1 tech lead · 3 front-end engineers · 1 QA",region:"Germany",kind:"cyan",title:"Cloud-based digital-heritage platform with secure inheritance access",tagline:"Digital Heritage / DeathTech meets consumer SaaS: a Next.js + React + Keycloak subscription cloud where customers store sensitive personal data and designate two heirs to inherit it, secured by Keycloak two-factor authentication.",summary:"Cloud of Legacy is a German Digital Heritage / DeathTech consumer SaaS that lets customers store sensitive personal data, documents, photos, videos, credit cards, and designate two trusted legacy contacts who can access the account after the owner's death. 7Code partnered with founder Uwe Bohler to ship the MVP in eight months: one month of discovery, six months of development, and one month of user-acceptance testing, built on React + Next.js + Material-UI on the front, Keycloak with 2FA for identity, and a tiered subscription engine (Free, Premium Legacy, Golden Legacy) with monthly and annual billing.",challenge:{eyebrow:"The challenge",title:"A consumer cloud product where the privacy bar is set higher than any single user can audit.",body:"The product handles inherently sensitive data, personal documents, payment cards, end-of-life designations, and the user only finds out it works correctly after the worst happens. The MVP had to be tailor-made to the founder's vision, ship inside a fixed budget and timeline, and meet a higher trust bar than a typical consumer SaaS.",pains:["Sensitive data (documents, credit cards, end-of-life arrangements) requiring strong identity guarantees","Two-party access model, designated legacy contacts must have a clear, auditable access path","Subscription tiers with different storage and feature entitlements","Tight MVP timeline against a fixed budget for a solo-founder client"]},approach:{eyebrow:"Our approach",title:"Keycloak-backed identity, tiered subscriptions, and a Next.js + React MVP shipped in eight months.",body:"We standardised identity on Keycloak with two-factor authentication, built tiered plans (Free, Premium Legacy, Golden Legacy) with monthly and annual billing, and shipped subscription, payment, and account-management flows on Next.js + React + Material-UI. One month of discovery preceded six months of development; the final month was user-acceptance testing before launch.",pillars:[{title:"Keycloak with 2FA",desc:"Industry-standard identity provider with two-factor authentication and the audit trail required for end-of-life access workflows."},{title:"Tiered subscription engine",desc:"Free, Premium Legacy, and Golden Legacy plans with monthly and annual billing, upgrade/downgrade, and the storage and feature entitlements bound to each tier."},{title:"Legacy account design",desc:"A two-trustee model: each owner designates two heirs who can access the account after death, with a clear verification path."},{title:"Next.js + Material-UI front end",desc:"A Next.js + React + Material-UI codebase built to be readable and extensible by a single ongoing maintainer."}]},results:[{v:"MVP launched",l:"in 8 months",sub:"1mo discovery · 6mo build · 1mo UAT"},{v:"3 tiers",l:"subscription model",sub:"Free, Premium Legacy, Golden Legacy"},{v:"2FA + Keycloak",l:"identity stack",sub:"audit-grade authentication"},{v:"Ongoing",l:"engagement",sub:"continued maintenance & feature work"}],testimonial:{quote:"",name:"",role:""},metaDescription:"Cloud-based digital-heritage platform for Cloud of Legacy (Germany), built by 7Code in 8 months on Next.js + React + Keycloak with 2FA. Subscription cloud where users designate two heirs.",next:{slug:"lidl-road-safety",client:"Lidl Romania",title:"Children's road-safety gamification web app",kind:"cyan"}},"lidl-road-safety":{slug:"lidl-road-safety",client:"Lidl Romania",industry:"Education / Retail CSR",year:"2022",duration:"6 months",team:"1 front-end · 1 back-end · 1 QA",region:"Romania",kind:"cyan",title:"Children's road-safety gamification web app for Lidl Romania",tagline:"EdTech / CSR in retail: a React + Nest.js gamified web app for Lidl Romania and the Romanian Police that teaches children road-safety legislation through episodes, levels, video lessons, and a points-based engine.",summary:"Lidl Romania, in partnership with the Romanian Police, runs an annual children's road-safety education programme, now in its eighth edition. 7Code designed and built the web app behind it: a public landing experience plus an authenticated kids-and-parents space with quizzes, levels, video lessons, and a points-based gamification engine. Stack: React on the front, a Nest.js API on Heroku-hosted infrastru
2cture. Six-month delivery covering front-end, back-end, QA, deployment, and ongoing support.",challenge:{eyebrow:"The challenge",title:"Make road-safety education actually fun for children, without compromising the seriousness of the message.",body:"An educational programme run by a national retailer and a national police force has to be safe, accessible, and educational, and a children's product has to be engaging or it dies on the homepage. The challenge was to build a gamified web app that earns the seriousness of the brief while genuinely working as a kids' product, with parent guidance and inclusive design at the centre.",pains:["A children's audience with all the engagement and accessibility considerations that entails","Multi-stakeholder content (Lidl Romania + Romanian Police) requiring careful approval flows","Public + private split: open landing experience plus authenticated gamified space","Annual programme cycle, the platform has to evolve each year without disruption"]},approach:{eyebrow:"Our approach",title:"Public landing, authenticated kids' space, and a gamification engine on React + Nest.js.",body:"We split the web app into a public marketing experience and an authenticated child-and-parent space. The authenticated space is built around episodes, levels, quizzes, and video content, each anchored in a points-based gamification engine that rewards progress and unlocks the next level. Stack: React on the front, a Nest.js API, and Heroku-hosted infrastructure. A back-office lets Lidl and Police content owners manage episodes, levels, and reporting independently.",pillars:[{title:"Public + private architecture",desc:"Open marketing pages plus an authenticated kid-and-parent space, each tuned to its own engagement and accessibility needs."},{title:"React + Nest.js stack",desc:"React on the front and a Nest.js API on Heroku, chosen so Lidl can extend the platform each annual edition without re-platforming."},{title:"Episode and level engine",desc:"Episodes group themed lessons; levels structure progression; videos and quizzes deliver the content. All editable by the back-office team."},{title:"Gamification with welcoming logic",desc:"Dynamic points reward learning; welcoming logic eases new users in; flexible rules keep the experience inclusive across families."},{title:"Back-office for editorial teams",desc:"A reporting and content-management module for Lidl and Police staff, they manage episodes, content, and reporting without our involvement."}]},results:[{v:"8th edition",l:"annual programme run",sub:"with Lidl Romania + Romanian Police"},{v:"7 modules",l:"shipped",sub:"Profile, Child, Episode, Level, Gamification, Report, Auth"},{v:"End-to-end",l:"delivery",sub:"front-end, back-end, QA, deploy, support"},{v:"Inclusive",l:"by design",sub:"WCAG-aligned, parent-guided, family-friendly"}],testimonial:{quote:"",name:"",role:""},metaDescription:"Children's road-safety gamification web app for Lidl Romania and the Romanian Police, built by 7Code on React + Nest.js + Heroku in 6 months. Public + private split, episodes, levels, and a points engine.",next:{slug:"hera",client:"Hera",title:"AI-powered fertility-clinic patient app",kind:"health"}},hera:{slug:"hera",client:"Hera Health Tech",industry:"Healthcare / FemTech / FertilityTech",year:"2025",duration:"3 months MVP · ongoing",team:"1 full-stack engineer · 1 cloud architect · 1 AI engineer · 1 PM",region:"United Arab Emirates",kind:"health",title:"AI-powered patient-support app for fertility clinics",tagline:"FemTech meets verified clinical AI: an adaptive RAG-grounded persona that turns Hera's medical knowledge base into warm, personalised support across the patient's fertility journey.",summary:"Hera Health Tech is a UAE-based FemTech / FertilityTech startup building an AI patient-support companion for fertility clinics. We partnered with Hera's founders to design and ship the mobile app end-to-end, a React Native client, a Serverless-framework API on AWS Lambda, a LlamaIndex retrieval layer over Hera's verified clinical knowledge base, and a Strapi-powered dual CMS (Admin CMS for the medical content team, Clinic CMS for partner clinics). HIPAA and GDPR controls were designed in from week one. The product launched as an MVP in three months and is now an ongoing engagement.",challenge:{eyebrow:"The challenge",title:"Make AI feel like a clinically-trained assistant, without losing the empathy patients actually need.",body:"Fertility care is high-stakes, deeply personal, and surrounded by misinformation. Hera's founders set out to combine medically accurate feedback with a compassionate user experience. The product had to profile every patient's behaviour and preferences, ground every answer in Hera's verified medical knowledge, and stay safe under HIPAA and GDPR.",pains:["AI profiling system that adapts to patient behaviour and preferences","Medically accurate answers grounded in an ever-growing clinical knowledge base","Balancing clinical reliability with a warm, supportive user experience","HIPAA and GDPR compliance from day one of the MVP"]},approach:{eyebrow:"Our approach",title:"RAG over verified clinical content, an AI persona over a structured patient profile, all on a serverless AWS stack.",body:"We shipped a React Native app with onboarding, profile management, suggested questions, and an AI chat that retrieves over Hera's verified content via LlamaIndex. A Serverless framework API on AWS keeps inference and content delivery latency low; Strapi powers an Admin CMS for the medical team and a Clinic CMS for partner sites. Every layer was designed for HIPAA + GDPR compliance from week one, and shipped as a working MVP in three months.",pillars:[{title:"Adaptive AI patient-profiling system",desc:"Patient behaviour, preferences, and clinical inputs feed a structured profile that an adaptive AI persona uses to personalise every reply across the fertility journey."}
2,{title:"Clinically-grounded RAG",desc:"A LlamaIndex retrieval layer over Hera's verified clinical knowledge base, answers are cited from medically-reviewed content, not hallucinated guesses, with refusal patterns when context is missing."},{title:"Dual-tenant CMS (Admin + Clinic)",desc:"Strapi-powered: an Admin CMS for the medical content team, a Clinic CMS for partner clinics. One codebase, role-scoped surfaces, audit-friendly content workflows."},{title:"HIPAA + GDPR from week one",desc:"Encryption in transit and at rest, audit logs, data-residency controls, and explicit consent flows, designed into the architecture, not bolted on after launch."}]},results:[{v:"3 months",l:"to MVP launch",sub:"discovery, design, build, and store readiness"},{v:"RAG-grounded",l:"clinical AI chat",sub:"answers cite Hera's verified medical knowledge"},{v:"HIPAA + GDPR",l:"compliance-ready",sub:"encryption, audit logs, consent flows from day one"},{v:"Ongoing",l:"engagement",sub:"continued feature work and clinic onboarding"}],testimonial:{quote:"7Code's work resulted in a functional MVP, and the client's internal testing yielded positive results. The team followed a structured sprint process, held regular stand-ups, and communicated consistently during the project. 7Code was responsive, proactive, flexible, transparent, and collaborative.",name:"Evyn White",role:"Co-Founder, Hera Health Tech"},metaDescription:"AI-powered patient-support app for fertility clinics, built by 7Code for Hera Health Tech (UAE). FemTech / FertilityTech MVP on React Native + Serverless on AWS Lambda, LlamaIndex RAG over verified clinical content, HIPAA + GDPR compliant. Shipped in 3 months.",next:{slug:"melsonic",client:"Melsonic",title:"AI-powered guitar-learning web app",kind:"cyan"}},melsonic:{slug:"melsonic",client:"Melsonic",industry:"Music / EdTech / AI",year:"2025",duration:"5 months MVP · ongoing",team:"1 front-end engineer · 1 cloud architect · 1 QA · 1 PM",region:"United Kingdom",kind:"cyan",title:"AI-powered guitar-learning web app with real-time performance feedback",tagline:"Music EdTech meets real-time audio AI: play your guitar, the Web Audio pipeline scores you against the original, and the canvas renders every note correct, missed, or wrong, Melsonic turns practice into a measurable, gamified loop.",summary:"Melsonic is a UK-based music-EdTech startup helping beginner and intermediate guitarists improve through real-time AI performance analysis. We integrated Melsonic's existing AI engine into a fully-built Next.js web platform, Web Audio API capture, pixi.js note rendering on a tightly-synced canvas, AI scoring against the original track (notes correct, missed, played wrong), and a gamification loop that keeps players coming back. Stack: Next.js + pixi.js on the front, Nest.js + PostgreSQL on AWS at the back.",challenge:{eyebrow:"The challenge",title:"Sync real-time audio with note rendering, and turn raw performance data into feedback a player actually trusts.",body:"Melsonic had a working AI engine. They needed a product around it: a web platform that captures a player's recording, syncs note rendering on a canvas to the live audio, runs the AI comparison against the original track, and renders feedback (notes correct, missed, played wrong) in a way a learner can act on.",pains:["Syncing real-time audio capture with note rendering on a pixi.js canvas","Smooth user experience during recording, latency-sensitive across browsers and devices","Transforming raw audio analysis into structured, motivating feedback","Hitting a five-month MVP target with a full product surface (auth, learning, recording, feedback, profile, gamification)"]},approach:{eyebrow:"Our approach",title:"Next.js front, Nest.js API, pixi.js canvas, wrapped around Melsonic's AI engine.",body:"We built the full web platform on Next.js, with a pixi.js canvas for note rendering tightly synchronised to the audio capture pipeline. A Nest.js API on Postgres + AWS sits in front of Melsonic's AI engine and feeds the scoring loop. Seven core modules shipped, sign-up & login, landing, learning, feedback, recording, profile, and gamification, into a five-month MVP that's now an ongoing engagement.",pillars:[{title:"Web Audio capture + canvas sync",desc:"Web Audio API for live recording, pixi.js note rendering tied frame-accurately to the audio pipeline so every visual cue matches what the player just heard."},{title:"AI scoring loop",desc:"The recording is compared against the original track via Melsonic's AI engine, notes correct, missed, played wrong, surfaced as actionable feedback inside the practice screen."},{title:"Seven-module web platform",desc:"Sign-up, landing, learning, recording, feedback, profile, gamification, all shipped on Next.js + pixi.js + Nest.js + PostgreSQL on AWS."},{title:"Gamified practice engagement",desc:"A points-and-progression layer that turns repeated practice into a measurable streak, with welcoming logic for new players and rewards tuned for c
2ontinued use."}]},results:[{v:"5 months",l:"to MVP launch",sub:"platform built around Melsonic's AI engine"},{v:"7 modules",l:"shipped",sub:"auth, learning, recording, feedback, profile, gamification, landing"},{v:"Real-time",l:"audio + canvas sync",sub:"Web Audio API + pixi.js, frame-accurate"},{v:"Ongoing",l:"engagement",sub:"continued feature work and platform iteration"}],testimonial:{quote:"",name:"",role:""},metaDescription:"AI-powered guitar-learning web app for Melsonic (UK) by 7Code. Real-time Web Audio API capture, pixi.js canvas rendering, and AI scoring against the original, built on Next.js + Nest.js + PostgreSQL + AWS. Music EdTech MVP shipped in 5 months.",next:{slug:"drum-bun",client:"Drum Bun",title:"Mobile car-services app for the Romanian driver",kind:"ops"}},"drum-bun":{slug:"drum-bun",client:"Explorom (drumbun.ro)",industry:"InsurTech / Automotive / Mobile",year:"2024",duration:"Ongoing",team:"2 front-end engineers · 2 back-end engineers · 1 QA",region:"Romania",kind:"ops",title:"Mobile car-services app for the Romanian driver, RCA, ITP, vignette, all in one tap",tagline:"InsurTech meets automotive compliance: verify, purchase, and track every Romanian car obligation, RCA insurance, ITP inspection, road vignette, from one React Native app with an OCR document pipeline.",summary:"Drum Bun, by Romanian InsurTech startup Explorom, is the single mobile app Romanian drivers use to keep their car compliant: verifying RCA insurance, ITP technical inspection, and road vignette by license-plate number, then purchasing or renewing them in-app. 7Code built the React Native iOS + Android client and the Node.js backend on Heroku, plus the OCR document pipeline that lifts car details from a photo so drivers stop typing license plates and policy numbers by hand.",challenge:{eyebrow:"The challenge",title:"Take three fragmented Romanian car-service flows and hide the bureaucracy behind one tap.",body:"Romanian drivers juggle three separate compliance services, RCA insurance, ITP inspection, and the road vignette, each with its own provider, expiry date, and renewal flow. Drum Bun's pitch is one app for all of it: instant verification on a plate, alerts before anything expires, OCR-assisted onboarding, and in-app purchase. Building it meant pulling together a robust foundation, an OCR pipeline, and a payment layer that drivers actually trust.",pains:["Three independent compliance services unified behind a single product surface","OCR pipeline robust enough to read messy real-world car documents","Auto-complete and pre-fill so drivers don't manually type plates and details","Custom expiry-alert engine for RCA, ITP, and vignette per car"]},approach:{eyebrow:"Our approach",title:"React Native + Node.js, walkthrough-first onboarding, OCR-driven document capture.",body:"We built Drum Bun on React Native with a Node.js backend on Heroku. The app opens with verification (RCA, ITP, vignette by plate, no signup required), funnels users into a Sign Up only when they need to do more, and leans on OCR to lift documents from photos, so adding a car takes seconds, not minutes. Modules cover walkthrough, car management, alerts, OCR, profile, services, and payment methods, with purchase history stored alongside each car.",pillars:[{title:"Verification before signup",desc:"Open the app, type a plate, see whether RCA / ITP / vignette is valid. Sign-up is only required when the user wants to take action, buy, store documents, or set alerts."},{title:"OCR document pipeline",desc:"Photograph any Romanian car document, RCA policy, ITP card, talon, and the OCR module extracts and pre-fills the structured data into the car's profile. No more typing plates and policy numbers by hand."},{title:"Per-car expiry alerts",desc:"Custom notification rules for each service on each car, so RCA, ITP, and vignette renewals never sneak up on the driver. Alerts are tunable per-document and per-car."},{title:"In-app service purchase",desc:"Buy or renew RCA, ITP, and road vignette directly inside the app, with payment methods saved per profile and purchase history tied to the right car."}]},results:[{v:"3-in-1",l:"compliance app",sub:"RCA, ITP, vignette unified for Romanian drivers"},{v:"OCR-assisted",l:"onboarding",sub:"auto-fill from a single document photo"},{v:"App Store + Play Store",l:"live",sub:"released to both stores, ongoing engagement"},{v:"8 modules",l:"shipped",sub:"walkthrough, cars, alerts, OCR, profile, services, payments, history"}],testimonial:{quote:"",name:"",role:""},metaDescription:"Romanian InsurTech mobile app (Drum Bun) for Explorom, built by 7Code on React Native + Node.js + Heroku with an OCR document pipeline. Verify and purchase RCA, ITP, and road vignette in one tap, live on App Store and Play Store.",next:{slug:"numerize",client:"Numerize",title:"Electronic document management platform with OCR + e-signature",kind:"ops"}},numerize:{slug:"numerize",client:"Numerize",industry:"DocTech / Enterprise SaaS / OCR",year:"2024",duration:"Ongoing",team:"1 front-end engineer · 1 back-end engineer · 1 QA",region:"France",kind:"ops",title:"Responsive electronic document management platform with OCR and digital signatures",tagline:"Document management software (GED / EDM) for 6,000+ French enterprises, hospitals, and public administrations, re-engineered for responsive web with OCR, YouSign e-signatures, and Stripe + 3D Secure billing baked in.",summary:"Numerize is a French DocTech / Enterprise SaaS company that has been digitising and archiving documents for 17+ years, serving 6,000+ enterprises, public administrations, hospitals, and SMEs. 7Code took on the responsive overhaul of their GED (gestion électronique des documents), also known as EDM, electronic document management, keeping the OCR-trained invoice pipeline, electronic archiving, and multi-signatory workflows intact while rebuilding the customer-facing surface on React + Material-UI and modernising the billing layer with Stripe + 3D Secure (with a bank-transfer fallback) and a tiered subscription engine.",challenge:{eyebrow:"The challenge",title:"A 17-year-old document-management platform whose customers expect both rigour and a modern responsive UX.",body:"Numerize's clients trust them with sensitive documents, invoices, contracts, hospital records, and expect indexation, archiving, and customer-signed workflows that hold up in a French legal and procurement context. The brief was to take a mature platform and rebuild the customer-facing surface to be responsive, billable, and signable end-to-e
2nd without breaking the OCR and archiving pipelines underneath.",pains:["Responsive web overhaul of a long-established GED tool, without breaking existing customers","Digital signatures with multiple signatories, customer-side labelling, and email delivery of signed invoices","Stripe + 3D Secure integration with bank-transfer fallback for enterprise billing","Customisable subscription tiers across user count, storage, and file type, annual or monthly"]},approach:{eyebrow:"Our approach",title:"React + Material-UI on the front, Laravel + PHP on the back, AWS underneath, all bolted onto Numerize's existing OCR and archiving core.",body:"We rebuilt the responsive customer surface on React + Material-UI, with a Laravel + PHP API on AWS. The OCR pipeline trains on invoices, extracts structured data, and routes documents into the right archival sector. Digital signatures via YouSign cover multi-signatory flows; Stripe with 3D Secure (and bank-transfer fallback) handles billing across individual, company, and trial accounts. Subscriptions can be created, upgraded, or downgraded, monthly or annual, without touching the archive layer.",pillars:[{title:"Responsive GED / EDM surface",desc:"React + Material-UI rebuild of the customer-facing electronic document manager, phone, tablet, and desktop parity for the same archival and indexing workflows."},{title:"OCR-trained invoice pipeline",desc:"Train on incoming invoices, extract structured data, categorise by sector, route into archival storage, the OCR core was preserved untouched while the UI was rebuilt around it."},{title:"YouSign e-signature with email delivery",desc:"YouSign-backed digital signatures with multi-signatory flows, customer-side labelling of signature fields, and email delivery of signed invoices to all parties."},{title:"Tiered Stripe + 3D Secure billing",desc:"Individual, company, and trial accounts with monthly or annual subscriptions, upgrade/downgrade flows, Stripe 3D Secure, and a bank-transfer fallback for enterprise procurement."}]},results:[{v:"6,000+",l:"customer accounts",sub:"enterprises, hospitals, public administrations, SMEs"},{v:"17+ yrs",l:"in market",sub:"Numerize platform, responsive overhaul shipped by 7Code"},{v:"Stripe + 3DS",l:"billing live",sub:"monthly + annual tiers, bank-transfer fallback"},{v:"YouSign",l:"e-signature integrated",sub:"multi-signatory, email delivery of signed invoices"}],testimonial:{quote:"",name:"",role:""},metaDescription:"Responsive electronic document management (GED / EDM) and e-signature platform for Numerize (France), built by 7Code on React + Material-UI + Laravel + AWS. OCR-trained invoice pipeline, YouSign multi-signatory e-signatures, Stripe + 3D Secure billing across 6,000+ enterprise accounts.",next:{slug:"lendit",client:"Lendit",title:"Peer-to-peer rental marketplace for local communities",kind:"cyan"}},lendit:{slug:"lendit",client:"Lendit",industry:"Marketplace / Sharing Economy",year:"2025",duration:"Ongoing, since Nov 2025",team:"1 PM · 1 architect · 1 designer · 1 web engineer · 1 mobile engineer · 1 back-end engineer",region:"United Kingdom",kind:"cyan",title:"Peer-to-peer rental marketplace for local communities",tagline:"Web, mobile, and backend for a UK peer-to-peer rental marketplace: list an item, borrow from a neighbour, and settle it through a KYC-verified payments rail, built on Next.js + Nest.js + AWS with Stripe and Ondato.",summary:"Lendit is a UK peer-to-peer rental platform on a mission to turn rarely-used tools and equipment into accessible, income-generating assets inside local communities. 7Code built the product end to end: a brand and design system created from the founders' initial inspiration, a web application covering the full rental lifecycle, an iOS and Android app for on-the-go discovery and messaging, and a backend powering listings, search, payments, and KYC, engineered to capture the behavioural data a community-led launch depends on.",challenge:{eyebrow:"The challenge",title:"A neighbourhood marketplace needs a brand, a payments rail strangers can trust, and one product across three surfaces.",body:"Lendit set out to build a trusted marketplace where neighbours rent everyday items to each other. That meant a recognisable brand built from scratch, a payment flow safe enough for two strangers to transact through, and a coherent experience across web, mobile, and the services behind them, all engineered to support a community-led launch.",pains:["Creating a recognisable, distinctive brand image from initial inspiration sources","A frictionless but secure payment flow between lenders and borrowers","One consistent experience across web, mobile, and AI-powered services","A backend capable of capturing extensive user-behaviour data from day one"]},approach:{eyebrow:"Our approach",title:"One design system, three surfaces, and a verified payments rail underneath.",body:"We ran the full product lifecycle: brand and design system first, then a Next.js web application, an iOS and Android app, and a Nest.js backend on AWS. Stripe moves money between lenders and borrowers, Ondato verifies identity so both sides know who they are transacting with, and AI services support discovery and listing. Ten modules shipped across the rental lifecycle, from Explore to Payment.",pillars:[{title:"Brand and design system",desc:"A recognisable brand built from the founders' initial inspiration, extended into one comprehensive design system shared by web and mobile."},{title:"Web and mobile as one product",desc:"A web app for browsing, listing, and managing rentals, plus an iOS and Android app for on-the-go discovery and messaging, same flows, same language."},{title:"Verified, secure payments rail",desc:"Stripe payments between lenders and borrowers with Ondato KYC, so identity checks and money movement sit inside the same trusted flow."},{title:"A backend built for behavioural data",desc:"Nest.js services on AWS powering listings, search, payments, and KYC, capturing the extensive behavioural data Lendit needs for c
2ommunity insight."}]},results:[{v:"Web + mobile",l:"platform live",sub:"browser, iOS, and Android"},{v:"10",l:"modules shipped",sub:"from Explore to Payment"},{v:"Stripe",l:"payments + Ondato KYC",sub:"verified lenders and borrowers"},{v:"Ongoing",l:"development partnership",sub:"continuous delivery with the Lendit team"}],testimonial:{quote:"Their ability to deliver on time and budget has been impressive. 7code has kept sprints well managed and met deadlines, which has improved the client's planning and the end-client uptake and engagement. The team has also successfully helped the client overcome hurdles while managing budgets exceptionally well.",name:"Ross Cooper",role:"Director, Brightside Connect"},metaDescription:"Peer-to-peer rental marketplace for UK local communities, built end-to-end by 7Code for Lendit. Web app, iOS and Android app, and a Next.js + Nest.js + AWS backend with Stripe payments and Ondato KYC. Ten modules shipped, ongoing partnership.",next:{slug:"wholesum",client:"WholeSum",title:"Self-serve AI analytics platform for unstructured text",kind:"cyan"}}};let CSD=CASES.wholesum;function PhoneMockup({accent:e="var(--cyan-500)"}){return"daily8"===CSD.slug?React.createElement("div",{className:"csd-phone csd-phone--shot"},React.createElement("div",{className:"csd-phone-notch"}),React.createElement("img",{className:"csd-phone-img",src:"/project/uploads/daily8-notifications.png",alt:"Daily8 notifications screen"})):"lendit"===CSD.slug?React.createElement("div",{className:"csd-phone csd-phone--shot"},React.createElement("div",{className:"csd-phone-notch"}),React.createElement("img",{className:"csd-phone-img",src:"/project/uploads/lendit-mobile.jpg",alt:"Lendit mobile app explore screen, browse tools to borrow near you"})):React.createElement("div",{className:"csd-phone"},React.createElement("div",{className:"csd-phone-notch"}),React.createElement("div",{className:"csd-phone-screen"},React.createElement("div",{className:"csd-app-bar"},React.createElement("div",{className:"csd-app-avatar"}),React.createElement("div",{className:"csd-app-bars"},React.createElement("div",null),React.createElement("div",null)),React.createElement("div",{className:"csd-app-bell"},"â")),React.createElement("div",{className:"csd-app-greeting"},"Good morning, Sarah"),React.createElement("div",{className:"csd-app-sub"},"Your next visit is Tue at 10:30"),React.createElement("div",{className:"csd-app-card",style:{background:e}},React.createElement("div",{className:"csd-app-card-tag"},"Recommended"),React.createElement("div",{className:"csd-app-card-title"},"Annual check-in"),React.createElement("div",{className:"csd-app-card-meta"},"15 min · Async or video"),React.createElement("div",{className:"csd-app-card-cta"},"Book now â")),React.createElement("div",{className:"csd-app-section"},"Upcoming"),React.createElement("div",{className:"csd-app-list"},React.createElement("div",{className:"csd-app-item"},React.createElement("div",{className:"csd-app-dot",style:{background:e}}),React.createElement("div",{className:"csd-app-lines"},React.createElement("div",{className:"csd-l1"},"Dr. Patel · 10:30 AM"),React.createElement("div",{className:"csd-l2"},"Tuesday · Async messaging"))),React.createElement("div",{className:"csd-app-item"},React.createElement("div",{className:"csd-app-dot"}),React.createElement("div",{className:"csd-app-lines"},React.createElement("div",{className:"csd-l1"},"Dr. Kim · 3:15 PM"),React.createElement("div",{className:"csd-l2"},"Friday · Video consult"))))))}function WholesumHero(){return React.createElement("div",{className:"csd-browser csd-ws-browser"},React.createElement("div",{className:"csd-browser-bar"},React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("div",{className:"csd-browser-url"},"wholesum.tech")),React.createElement("img",{className:"csd-ws-shot",src:"/project/uploads/wholesum-hero.png",alt:"WholeSum homepage hero, Get deeper insights from your richest data"}))}function PhotoHero({src:e,alt:t,urlBar:a,caption:n}){return React.createElement("div",{className:"csd-browser"},a?React.createElement("div",{className:"csd-browser-bar"},React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("div",{className:"csd-browser-url"},a)):null,React.createElement("img",{className:"csd-ws-shot",src:e,alt:t}),n?React.createElement("div",{className:"csd-photo-caption"},n):null)}function BrowserMockup({kind:e="calendar"}){return"wholesum"===CSD.slug?React.createElement(WholesumHero,null):"daily8"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/daily8-website.jpg",urlBar:"daily8.com/en",alt:"Daily8 website (daily8.com/en), Get Started Now: Download the App"}):"revote"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/revote-hero.jpg",alt:"Igor Mardari (CTO, 7Code) with Massimo Locorotondo (Eurel) inside the European Parliament chamber, Brussels",caption:"Igor Mardari (CTO, 7Code) and Massimo Locorotondo (Eurel) at the European Parliament, Brussels, 2023"}):"g42-fleet"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/g42-fleet-hero.jpg",urlBar:"g42.ai · ESTS Fleet Tracking",alt:"G42 ESTS fleet-tracking dashboard with all-trip alerts and live vehicle map"}):"cloud-of-legacy"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/cloud-of-legacy-hero.jpg",urlBar:"cloudoflegacy.com",alt:"Cloud of Legacy landing page, digital-heritage cloud with subscription"}):"lidl-road-safety"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/lidl-road-safety-hero.jpg",alt:"Lidl Romania + Politia Romana road-safety web app for children"}):"hera"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/hera-hero.jpg",urlBar:"herahealthtech.com",alt:"Hera Health Tech, Introducing Hera, AI-powered fertility-clinic patient app"}):"melsonic"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/melsonic-hero.jpg",urlBar:"app.melsonic.com",alt:"Melsonic, Learn your favourite song today, AI-powered guitar learning"}):"drum-bun"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/drum-bun-hero.jpg",urlBar:"drumbun.ro",alt:"Drum Bun, AplicaÈia Èoferilor responsabili (Romanian car-services app)"}):"numerize"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/numerize-hero.jpg",urlBar:"numerize.com",alt:"Numerize, Société de numérisation de documents et d'archivage"}):"lendit"===CSD.slug?React.createElement(PhotoHero,{src:"/project/uploads/lendit-hero.jpg",urlBar:"lendit.co.uk",alt:"Lendit web app search results, ladders available to rent near Hampstead, London"}):React.createElement("div",{className:"csd-browser"},React.createElement("div",{className:"csd-browser-bar"},React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("span",{className:"csd-dot"}),React.createElement("div",{className:"csd-browser-url"},"helix.health/clinic/dashboard")),React.createElement("div",{className:"csd-browser-body"},React.createElement("div",{className:"csd-browser-side"},React.createElement("div",{className:"csd-side-logo"},"H"),React.createElement("div",{className:"csd-side-item is-active"},"Today"),React.createElement("div",{className:"csd-side-item"},"Patients"),React.createElement("div",{className:"csd-side-item"},"Messages ",React.createElement("span",{className:"csd-badge"},"12")),React.createElement("div",{className:"csd-side-item"},"Schedule"),React.createElement("div",{className:"csd-side-item"},"Reports")),React.createElement("div",{className:"csd-browser-main"},React.createElement("div",{className:"csd-main-head"},React.createElement("div",null,React.createElement("div",{className:"csd-main-title"},"Today · 14 visits"),React.createElement("div",{className:"csd-main-sub"},"Tuesday, Apr 23 · Dr. Patel")),React.createElement("div",{className:"csd-main-pill"},"Live")),React.createElement("div",{className:"csd-stat-row"},React.createElement("div",{className:"csd-stat"},React.createElement("div",{className:"csd-stat-l"},"Booked"),React.createElement("div",{className:"csd-stat-v"},"14")),React.createElement("div",{className:"csd-stat"},React.createElement("div",{className:"csd-stat-l"},"Waiting"),React.createElement("div",{className:"csd-stat-v"},"3")),React.createElement("div",{className:"csd-stat"},React.createElement("div",{className:"csd-stat-l"},"Avg wait"),React.createElement("div",{className:"csd-stat-v"},"2m")),React.createElement("div",{className:"csd-stat"},React.createElement("div",{className:"csd-stat-l"},"Drop-off"),React.createElement("div",{className:"csd-stat-v",style:{color:"var(--cyan-600)"}},"18%"))),React.createElement("div",{className:"csd-table"},React.createElement("div",{className:"csd-table-row csd-table-head"},React.createElement("div",null,"Time"),React.createElement("div",null,"Patient"),React.createElement("div",null,"Type"),React.createElement("div",null,"Status")),React.createElement("div",{className:"csd-table-row"},React.createElement("div",null,"09:00"),React.createElement("div",null,"S. Reyes"),React.createElement("div",null,"Async"),React.createElement("div",{className:"csd-pill csd-pill--ok"},"Done")),React.createElement("div",{className:"csd-table-row"},React.createElement("div",null,"09:30"),React.createElement("div",null,"M. Okafor"),React.createElement("div",null,"Video"),React.createElement("div",{className:"csd-pill csd-pill--ok"},"Done")),React.createElement("div",{className:"csd-table-row csd-table-row--now"},React.createElement("div",null,"10:30"),React.createElement("div",null,"P. Singh"),React.createElement("div",null,"Async"),React.createElement("div",{className:"csd-pill csd-pill--live"},"Now")),React.createElement("div",{className:"csd-table-row"},React.createElement("div",null,"11:00"),React.createElement("div",null,"L. Morales"),React.createElement("div",null,"Video"),React.createElement("div",{className:"csd-pill"},"Soon")),React.createElement("div",{className:"csd-table-row"},React.createElement("div",null,"11:30"),React.createElement("div",null,"A. Cohen"),React.createElement("div",null,"Async"),React.createElement("div",{className:"csd-pill"},"Booked"))))))}function hasPhoneShot(){return"daily8"===CSD.slug||"lendit"===CSD.slug}function FactsList({inline:e=!1}){const t=[{l:"Client",v:CSD.client},{l:"Industry",v:CSD.industry},{l:"Duration",v:CSD.duration},{l:"Team",v:CSD.team},{l:"Region",v:CSD.region}];
2return React.createElement("dl",{className:"csd-facts"+(e?" csd-facts--inline":"")},t.map(e=>React.createElement("div",{key:e.l,className:"csd-fact"},React.createElement("dt",null,e.l),React.createElement("dd",null,e.v))))}function ResultsStrip({dark:e=!1}){return React.createElement("div",{className:"csd-results"+(e?" csd-results--dark":"")},CSD.results.map((e,t)=>React.createElement("div",{key:t,className:"csd-result"},React.createElement("div",{className:"csd-result-v"},e.v),React.createElement("div",{className:"csd-result-l"},e.l),React.createElement("div",{className:"csd-result-sub"},e.sub))))}function TestimonialCard({flat:e=!1}){return CSD.testimonial&&CSD.testimonial.quote?React.createElement("div",{className:"csd-quote"+(e?" csd-quote--flat":"")},React.createElement("div",{className:"csd-quote-mark"},"â"),React.createElement("p",{className:"csd-quote-text"},CSD.testimonial.quote),React.createElement("div",{className:"csd-quote-foot"},React.createElement("div",{className:"csd-quote-avatar"},CSD.testimonial.name.split(" ").map(e=>e[0]).join("")),React.createElement("div",null,React.createElement("div",{className:"csd-quote-name"},CSD.testimonial.name),React.createElement("div",{className:"csd-quote-role"},CSD.testimonial.role)))):null}function RelatedCases(){const e=Object.keys(CASES),t=[];let a=e.indexOf(CSD.slug);for(;t.length<2&&t.length<e.length-2;){a=(a+1)%e.length;const n=e[a];n!==CSD.slug&&n!==CSD.next.slug&&t.push(CASES[n])}return React.createElement("div",{className:"csd-related"},React.createElement("div",{className:"csd-related-label"},"More case studies"),React.createElement("div",{className:"csd-related-grid"},t.map(e=>React.createElement("a",{key:e.slug,href:"/case-study/"+e.slug,className:"csd-related-card"},React.createElement("span",{className:"csd-related-client"},e.client),React.createElement("span",{className:"csd-related-title"},e.title),React.createElement("span",{className:"csd-related-industry"},e.industry)))))}function NextCaseCTA(){return React.createElement(React.Fragment,null,React.createElement("a",{href:"/case-study/"+CSD.next.slug,className:"csd-next"},React.createElement("div",{className:"csd-next-meta"},"Next case study"),React.createElement("div",{className:"csd-next-row"},React.createElement("div",null,React.createElement("div",{className:"csd-next-client"},CSD.next.client),React.createElement("div",{className:"csd-next-title"},CSD.next.title)),React.createElement("span",{className:"csd-next-arrow"},React.createElement(Icon.arrow,null)))),React.createElement(RelatedCases,null))}function CSDLongRead(){const[e,t]=useStateCSD("overview"),a=[{id:"overview",label:"Overview"},{id:"challenge",label:"The challenge"},{id:"approach",label:"Our approach"},{id:"product",label:"The product"},{id:"results",label:"Results"},{id:"voice",label:"In their words"}];return useEffectCSD(()=>{const e=()=>{let e="overview";for(const t of a){const a=document.getElementById("csd-"+t.id);a&&a.getBoundingClientRect().top<200&&(e=t.id)}t(e)};return window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),React.createElement("div",{className:"csd-long"},React.createElement("div",{className:"csd-long-hero"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-long-meta"},React.createElement("span",{className:"csd-kicker"},React.createElement("span",{className:"csd-dot"})," Case study"),React.createElement("span",null,CSD.industry),React.createElement("span",null,"·"),React.createElement("span",null,CSD.duration)),React.createElement("h1",{className:"csd-long-title"},CSD.title),React.createElement("p",{className:"csd-long-tagline"},CSD.tagline))),React.createElement("div",{className:"csd-long-cover-wrap"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-long-cover"},React.createElement(BrowserMockup,null)))),React.createElement("div",{className:"container csd-long-body-wrap"},React.createElement("aside",{className:"csd-toc"},React.createElement("div",{className:"csd-toc-label"},"Contents"),React.createElement("ul",null,a.map(t=>React.createElement("li",{key:t.id},React.createElement("a",{href:"#csd-"+t.id,className:e===t.id?"is-active":""},t.label)))),React.createElement("div",{className:"csd-toc-facts"},React.createElement(FactsList,null))),React.createElement("article",{className:"csd-long-article"},React.createElement("section",{id:"csd-overview"},React.createElement("p",{className:"csd-lead"},CSD.summary)),React.createElement("section",{id:"csd-challenge"},React.createElement("span",{className:"csd-eyebrow"},CSD.challenge.eyebrow),React.createElement("h2",null,CSD.challenge.title),React.createElement("p",null,CSD.challenge.body),React.createElement("ul",{className:"csd-bullets"},CSD.challenge.pains.map((e,t)=>React.createElement("li",{key:t},React.createElement("span",{className:"csd-bullet-dot"}),e)))),React.createElement("section",{id:"csd-approach"},React.createElement("span",{className:"csd-eyebrow"},CSD.approach.eyebrow),React.createElement("h2",null,CSD.approach.title),React.createElement("p",null,CSD.approach.body),React.createElement("div",{className:"csd-pillars"},CSD.approach.pillars.map((e,t)=>React.createElement("div",{key:t,className:"csd-pillar"},React.createElement("div",{className:"csd-pillar-num"},"0",t+1),React.createElement("div",{className:"csd-pillar-title"},e.title),React.createElement("div",{className:"csd-pillar-desc"},e.desc))))),React.createElement("section",{id:"csd-product",className:"csd-product-section"},React.createElement("span",{className:"csd-eyebrow"},"The product"),React.createElement("h2",null,"What we shipped."),React.createElement("p",null,CSD.tagline),React.createElement("div",{className:"csd-product-pair"},hasPhoneShot()&&React.createElement("div",{className:"csd-product-art csd-product-art
2--phone"},React.createElement(PhoneMockup,null)),React.createElement("div",{className:"csd-product-art csd-product-art--browser"},React.createElement(BrowserMockup,null)))),React.createElement("section",{id:"csd-results"},React.createElement("span",{className:"csd-eyebrow"},"Results"),React.createElement("h2",null,"By the numbers."),React.createElement(ResultsStrip,null)),React.createElement("section",{id:"csd-voice"},React.createElement("span",{className:"csd-eyebrow"},"In their words"),React.createElement(TestimonialCard,null)))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement(NextCaseCTA,null))))}function CSDMetric(){return React.createElement("div",{className:"csd-metric"},React.createElement("section",{className:"csd-metric-hero"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-metric-hero-grid"},React.createElement("div",{className:"csd-metric-hero-text"},React.createElement("span",{className:"csd-kicker csd-kicker--inverse"},React.createElement("span",{className:"csd-dot csd-dot--cyan"})," ",CSD.industry),React.createElement("h1",null,CSD.client),React.createElement("p",{className:"csd-metric-tagline"},CSD.tagline),React.createElement("div",{className:"csd-metric-hero-stats"},CSD.results.slice(0,3).map((e,t)=>React.createElement("div",{key:t,className:"csd-metric-hero-stat"},React.createElement("div",{className:"csd-metric-hero-v"},e.v),React.createElement("div",{className:"csd-metric-hero-l"},e.l))))),React.createElement("div",{className:"csd-metric-hero-art"},React.createElement("div",{className:"csd-metric-glow"}),React.createElement(BrowserMockup,null))))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement(FactsList,{inline:!0}))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container csd-narr"},React.createElement("div",{className:"csd-narr-row"},React.createElement("div",{className:"csd-narr-col"},React.createElement("span",{className:"csd-eyebrow"},CSD.challenge.eyebrow),React.createElement("h2",null,CSD.challenge.title),React.createElement("p",null,CSD.challenge.body)),React.createElement("div",{className:"csd-narr-col"},React.createElement("span",{className:"csd-eyebrow csd-eyebrow--cyan"},CSD.approach.eyebrow),React.createElement("h2",null,CSD.approach.title),React.createElement("p",null,CSD.approach.body))))),React.createElement("section",{className:"section section--ink csd-metric-results"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-metric-results-head"},React.createElement("span",{className:"csd-eyebrow csd-eyebrow--inverse"},"Results"),React.createElement("h2",null,"What the engagement delivered.")),React.createElement(ResultsStrip,{dark:!0}))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement(TestimonialCard,null))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement(NextCaseCTA,null))))}function CSDVisual(){return React.createElement("div",{className:"csd-visual"},React.createElement("section",{className:"csd-visual-hero"},React.createElement("div",{className:"csd-visual-hero-bg"},React.createElement(CSCover,{kind:CSD.kind,label:CSD.industry,slug:CSD.slug})),React.createElement("div",{className:"container csd-visual-hero-overlay"},React.createElement("span",{className:"csd-kicker csd-kicker--inverse"},React.createElement("span",{className:"csd-dot csd-dot--cyan"})," Featured case study"),React.createElement("h1",null,CSD.title),React.createElement("p",null,CSD.tagline),React.createElement(FactsList,{inline:!0}))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container csd-visual-intro"},React.createElement("span",{className:"csd-eyebrow"},"Project summary"),React.createElement("p",{className:"csd-lead"},CSD.summary))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-visual-split"},React.createElement("div",{className:"csd-visual-split-text"},React.createElement("span",{className:"csd-eyebrow"},CSD.challenge.eyebrow),React.createElement("h2",null,CSD.challenge.title),React.createElement("p",null,CSD.challenge.body),React.createElement("ul",{className:"csd-bullets"},CSD.challenge.pains.map((e,t)=>React.createElement("li",{key:t},React.createElement("span",{className:"csd-bullet-dot"}),e)))),hasPhoneShot()&&React.createElement("div",{className:"csd-visual-split-art csd-visual-split-art--phone"},React.createElement(PhoneMockup,null))))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-visual-split csd-visual-split--reverse"},React.createElement("div",{className:"csd-visual-split-art"},React.createElement(BrowserMockup,null)),React.createElement("div",{className:"csd-visual-split-text"},React.createElement("span",{className:"csd-eyebrow"},CSD.approach.eyebrow),React.createElement("h2",null,CSD.approach.title),React.createElement("p",null,CSD.approach.body),React.createElement("div",{className:"csd-pillars csd-pillars--compact"},CSD.approach.pillars.map((e,t)=>React.createElement("div",{key:t,className:"csd-pillar"},React.createElement("div",{className:"csd-pillar-title"},e.title),React.createElement("div",{className:"csd-pillar-desc"},e.desc)))))))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement("div",{className:"csd-visual-results-head"},React.createElement("span",{className:"csd-eyebrow"},"Results"),React.createElement("h2",null,"The outcomes.")),React.createElement(ResultsStrip,null))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement(TestimonialCard,null),React.createElement("div",{style:{marginTop:56}},React.createElement(NextCaseCTA,null)))))}function CSDSticky(){return React.createElement("div",{className:"csd-sticky"},React.createElement("section",{className:"csd-sticky-hero"},React.createElement("div",{className:"container"},React.createElement("span",{className:"csd-kicker"},React.createElement("span",{className:"csd-dot"})," Case study"),React.createElement("h1",null,CSD.title),React.createElement("p",null,CSD.tagline))),React.createElement("div",{className:"container csd-sticky-body"},React.createElement("aside",{className:"csd-sticky-aside"},React.createElement("div",{className:"csd-sticky-card"},React.createElement("div",{className:"csd-sticky-card-head"},React.createElement("div",{className:"csd-sticky-client"},CSD.client),React.createElement("div",{className:"csd-sticky-tag"},CSD.industry)),React.createElement(FactsList,null),React.createElement("div",{className:"csd-sticky-results"},CSD.results.slice(0,2).map((e,t)=>React.createElement("div",{key:t,className:"csd-sticky-result"},React.createElement("div",{className:"csd-sticky-result-v"},e.v),React.createElement("div",{className:"csd-sticky-result-l"},e.l)))),React.createElement("a",{href:"/contact",className:"btn btn--primary csd-sticky-cta"},"Start a project ",React.createElement(Icon.arrow,null)))),React.createElement("article",{className:"csd-sticky-article"},React.createElement("section",{className:"csd-sticky-section"},React.createElement("div",{className:"csd-sticky-cover"},React.createElement(BrowserMockup,null))),React.createElement("section",{className:"csd-sticky-section"},React.createElement("span",{className:"csd-eyebrow"},"Overview"),React.createElement("p",{className:"csd-lead"},CSD.summary)),React.createElement("section",{className:"csd-sticky-section"},React.createElement("span",{className:"csd-eyebrow"},CSD.challenge.eyebrow),React.createElement("h2",null,CSD.challenge.title),React.createElement("p",null,CSD.challenge.body),React.createElement("ul",{className:"csd-bullets"},CSD.challenge.pains.map((e,t)=>React.createElement("li",{key:t},React.createElement("span",{className:"csd-bullet-dot"}),e)))),React.createElement("section",{className:"csd-sticky-section"},React.createElement("span",{className:"csd-eyebrow"},CSD.approach.eyebrow),React.createElement("h2",null,CSD.approach.title),React.createElement("p",null,CSD.approach.body),React.createElement("div",{className:"csd-pillars"},CSD.approach.pillars.map((e,t)=>React.createElement("div",{key:t,className:"csd-pillar"},React.createElement("div",{className:"csd-pillar-num"},"0",t+1),React.createElement("div",{className:"csd-pillar-title"},e.title),React.createElement("div",{className:"csd-pillar-desc"},e.desc))))),hasPhoneShot()&&React.createElement("section",{className:"csd-sticky-section"},React.createElement("div",{className:"csd-sticky-cover"},React.createElement(PhoneMockup,null))),React.createElement("section",{className:"csd-sticky-section"},React.createElement("span",{className:"csd-eyebrow"},"Results"),React.createElement("h2",null,"What changed."),React.createElement(ResultsStrip,null)),React.createElement("section",{className:"csd-sticky-section"},React.createElement(TestimonialCard,null)),React.createElement("section",{className:"csd-sticky-section"},React.createElement(NextCaseCTA,null)))))}function CaseStudyPage({slug:e="wholesum",variant:t="longread"}){let a;return CSD=CASES[e]||CASES.wholesum,React.useEffect(()=>{const t=CASES[e]||CASES.wholesum,a=document.title,n=document.querySelector('meta[name="description"]'),i=n?n.getAttribute("content"):null;return document.title="7Code, "+t.client+": "+t.title,n&&t.metaDescription&&n.setAttribute("content",t.metaDescription),()=>{document.title=a,n&&null!==i&&n.setAttribute("content",i)}},[e]),a="metric"===t?React.createElement(CSDMetric,null):"visual"===t?React.createElement(CSDVisual,null):"sticky"===t?React.createElement(CSDSticky,null):React.createElement(CSDLongRead,null),React.createElement("div",{className:"page"},a,React.createElement(CTAStrip,null))}window.CASES=CASES,window.CaseStudyPage=CaseStudyPage; 3const{useState:useStateEXP}=React,EXPERTISE={healthcare:{slug:"healthcare",title:"Healthcare",h1:"AI Software Development for Healthcare",tagline:"HealthTech engineering for clinics, hospitals, and FemTech founders: HIPAA + GDPR-compliant platforms with HL7 / FHIR EHR interoperability, telehealth, patient engagement, and clinically-groun
3ded AI.",summary:"HealthTech software has to be clinician-grade in reliability and compliance and patient-grade in usability, at the same time. 7Code ships platforms that do both, across HL7 / FHIR EHR interoperability, clinical decision support, telehealth, patient engagement, and AI features grounded in verified clinical knowledge. Recent work includes Hera Health Tech's AI-powered fertility-clinic patient app (3-month MVP, HIPAA + GDPR ready).",icon:"heart",kind:"health",color:"#E53E3E",bg:"cover--health",stats:[{v:"3",l:"HIPAA-compliant platforms"},{v:"240+",l:"clinics served"},{v:"100%",l:"audit pass rate"},{v:"12 wks",l:"avg. delivery"}],problem:{title:"The healthcare software problem nobody talks about.",body:"Most healthcare software fails on one axis or the other: technically compliant but unusable, or beautifully designed but failing its first audit. The regulatory stack is genuinely hard, HIPAA, HL7, FHIR, SOC 2, and the UX bar set by consumer apps means clinicians and patients won't tolerate poor experiences."},capabilities:[{icon:Icon.pulse,title:"EHR Interoperability",desc:"HL7 FHIR-native integrations with Epic, Cerner, Meditech and custom EHR systems. We've done the hard work of mapping clinical vocabularies so you don't have to."},{icon:Icon.shield,title:"HIPAA-grade Infrastructure",desc:"Encrypted at rest and in transit, full audit logs, RBAC, BAA-ready vendor stack, and technical safeguards reviewable by your compliance team on day one."},{icon:Icon.monitor,title:"Clinical Decision Support",desc:"Rule-based and ML-powered alerting integrated into clinical workflows, designed with clinicians to reduce alert fatigue rather than add to it."},{icon:Icon.smile,title:"Patient Engagement",desc:"Booking, async messaging, remote monitoring, and care plan adherence, mobile-first, accessible, and tested with real patients."},{icon:Icon.globe,title:"Telehealth Platforms",desc:"Async-first consult platforms, video visit infrastructure, and the scheduling rails that make a distributed care model actually work at scale."},{icon:Icon.chart,title:"Population Health Analytics",desc:"Dashboards that surface risk stratification, care gaps, and quality measures, built for CMOs who need to act, not analysts who need to explore."}],process:[{step:"01",title:"Compliance architecture first",desc:"We define the technical safeguards, data flows, and vendor stack before any feature work. Your compliance team signs off on the architecture, not a retrospective audit."},{step:"02",title:"Clinician co-design",desc:"We run structured observation sessions and co-design workshops with the clinical staff who will actually use the system. Alert fatigue and workflow friction are caught here, not in production."},{step:"03",title:"Phased rollout with rollback",desc:"Healthcare can't afford a big-bang deployment. We go live behind feature flags, unit by unit, with automated rollback if error rates exceed threshold."}],cases:["hera"],metaDescription:"HealthTech engineering by 7Code. HIPAA + GDPR-compliant clinical platforms, EHR (HL7 / FHIR) interoperability, telehealth, patient engagement, and AI-grounded clinical support, built end-to-end for clinics, hospitals, and FemTech / FertilityTech founders.",faqs:[{q:"Are you HIPAA-compliant by default?",a:"Yes. Every healthcare engagement starts with a compliance architecture review, encryption in transit and at rest, audit logs, RBAC, BAA-ready vendor stack, and the technical safeguards your compliance team can sign off in week one. We've shipped HIPAA-compliant platforms for fertility (Hera Health Tech), telehealth, and hospital settings, and we ship GDPR controls alongside HIPAA so cross-border deployments don't need re-architecting."},{q:"Do you do EHR / EMR integrations?",a:"Yes. HL7 v2 and FHIR R4 are our defaults. We've integrated with Epic, Cerner, Meditech, and custom HL7 systems, including the parts most teams skip, clinical vocabulary mapping (SNOMED, LOINC, ICD-10), conflict resolution on bi-directional sync, and the audit trail your auditors actually want to see."},{q:"Can you build LLM / AI features for healthcare?",a:"Yes, but always grounded. We use RAG over verified clinical content (with frameworks like LlamaIndex), citation-required answers, refusal patterns when confidence is low, and a held-out evaluation set scored on hallucination rate. AI features in healthcare have to be clinically reliable and auditable; we treat that as a hard constraint, not a stretch goal."}
3,{q:"How do you handle clinician workflow integration?",a:"We run structured observation sessions and co-design workshops with the clinicians who'll use the system. Alert fatigue and workflow friction are caught here, not in production. UI iterations continue against simulated and shadow workflows until triage time drops measurably, only then do we ship."},{q:"How long does a healthcare MVP take?",a:"Three months for a focused MVP with one core clinical workflow (Hera shipped in three months). 12-week telehealth platforms are typical. Full enterprise EHR-integrated platforms run 16â24 weeks. Compliance work starts in week one regardless, we do not ship clinical systems without it."}],next:{slug:"finance",title:"Finance"}},finance:{slug:"finance",title:"Finance",h1:"AI Software Development for Finance",tagline:"FinTech and finance software engineering: real-time treasury dashboards, ERP integration (SAP, Oracle, NetSuite, Dynamics), accounting automation, regulatory reporting, and venture / MarTech platforms, for finance teams that can't afford to be wrong.",summary:"Finance software operates at the intersection of speed and correctness, a dashboard that's 60 seconds stale is fine; one that's wrong is a compliance event. 7Code has shipped treasury platforms, ERP integrations (SAP, Oracle, NetSuite, Dynamics), accounting automation, regulatory reporting tools, Stripe + 3D Secure billing engines, and MarTech platforms for venture studios, including Founders Factory's Gatsby + Storyblok + Tailwind site overhaul.",icon:"briefcase",kind:"finance",color:"#3182CE",bg:"cover--finance",stats:[{v:"2",l:"treasury platforms"},{v:"$120M+",l:"revenue impact"},{v:"60s",l:"position freshness"},{v:"8 wks",l:"avg. delivery"}],problem:{title:"Finance teams are still running on spreadsheets they don't trust.",body:"The gap between what finance teams need, live positions, automated reconciliation, audit-grade trails, and what their tools actually provide is enormous. Most enterprise finance stacks are a patchwork of legacy ERPs, CSV exports, and manual reconciliation that breaks every month-end."},capabilities:[{icon:Icon.chart,title:"Real-time Dashboards",desc:"Live positions, automated roll-ups, and drill-through from entity summary to transaction, updated on a 60-second cadence, not a nightly batch."},{icon:Icon.layers,title:"ERP Integration",desc:"Native connectors for SAP, Oracle, NetSuite, and Dynamics. We handle the mapping, the delta sync, and the reconciliation breaks, so your team doesn't have to."},{icon:Icon.zap,title:"Accounting Automation",desc:"Journal entry automation, multi-entity consolidation, intercompany eliminations, and period-close checklists that cut close time in half."},{icon:Icon.shield,title:"Regulatory Reporting",desc:"IFRS, GAAP, and jurisdiction-specific reporting modules. Built with your external auditors in mind, not just your internal team."},{icon:Icon.pulse,title:"Predictive Analytics",desc:"Cash flow forecasting, scenario modelling, and variance analysis, trained on your historical data, not generic benchmarks."},{icon:Icon.cpu,title:"Fintech Product Engineering",desc:"Payments infrastructure, lending platforms, and embedded finance products, built to the reliability bar the financial system requires."}],process:[{step:"01",title:"Data model before UI",desc:"We spend the first week mapping every data source, every entity hierarchy, and every reconciliation rule before touching a design file. Finance is unforgiving of schema mistakes."},{step:"02",title:"Correctness before speed",desc:"Every aggregation is double-verified against source records. We ship a reconciliation test suite alongside the product, not as an afterthought."},{step:"03",title:"Parallel run before cutover",desc:"New system runs alongside the old one for 30 days, with daily variance reporting. Cutover happens only when the numbers match to the cent."}],cases:[],metaDescription:"FinTech and finance software engineering by 7Code. Real-time treasury dashboards, ERP integration (SAP, Oracle, NetSuite), accounting automation, regulatory reporting, payments, and venture/MarTech platforms for VCs.",faqs:[{q:"What do you mean by 'finance softw
3are'?",a:"Two strands: (1) software for finance teams inside companies, treasury dashboards, ERP integrations, accounting automation, regulatory reporting; (2) FinTech products, payments, lending, embedded finance, venture-studio platforms. We've shipped both, including the marketing platform for Founders Factory (UK venture studio) and treasury-grade tooling with multi-entity consolidation."},{q:"Which ERPs do you integrate with?",a:"Native connectors for SAP, Oracle (Fusion + EBS), NetSuite, Microsoft Dynamics 365, and custom on-prem ERPs via SOAP / REST / file-drop. We handle the data-model mapping, delta sync, and the conflict resolution that generic iPaaS tools skip, including the reconciliation breaks that always show up at month-end."},{q:"Can you build for FinTech compliance (SOC 2, PCI-DSS, PSD2)?",a:"Yes. We design the technical safeguards into the architecture: encryption, audit logs, key rotation, segregation of duties, and an evidence pack for the audit. SOC 2 Type II readiness, PCI-DSS scope minimisation (using tokenisation), and PSD2 SCA / 3D Secure are within our defaults, not stretch goals."},{q:"How do you handle correctness in finance dashboards?",a:"Every aggregation is double-verified against source records. We ship a reconciliation test suite alongside the product, parallel-run the new system against the old for 30 days with daily variance reporting, and only cut over when the numbers match to the cent. Finance is unforgiving of schema mistakes, we treat correctness as a non-negotiable."},{q:"Do you handle payments and Stripe + 3D Secure billing?",a:"Yes, we've shipped Stripe + 3D Secure billing with bank-transfer fallback for enterprise procurement (Numerize, France: 6,000+ accounts), as well as multi-jurisdiction billing engines. We design subscription tiers, upgrade/downgrade flows, and the audit trail finance and tax teams expect."}],next:{slug:"energy",title:"Energy & Utilities"}},energy:{slug:"energy",title:"Energy & Utilities",h1:"AI Software Development for Energy & Utilities",tagline:"Energy, utilities, and IoT engineering: real-time SCADA / Modbus / MQTT ingestion, predictive maintenance, geofencing, and operations cockpits, for 24/7 critical infrastructure that can't go down.",summary:"Energy and utilities infrastructure runs 24/7 with zero tolerance for downtime. 7Code builds IoT operations platforms that fuse telemetry from thousands of sensors over SCADA, Modbus, MQTT, and custom TCP, predict equipment failures with 10-day lead time, and give control-room operators a single cockpit instead of six screens. Recent work: G42's ESTS fleet-tracking platform deployed at EXPO 2020 Dubai, custom TCP ingestion, geofence rule engine, and real-time map dashboard.",icon:"energy",kind:"energy",color:"#D69E2E",bg:"cover--energy",stats:[{v:"20K+",l:"sensors integrated"},{v:"â12%",l:"energy per year"},{v:"10 days",l:"failure lead time"},{v:"$2.1M",l:"saved year one"}],problem:{title:"Reactive maintenance is killing margins. Operators are drowning in alerts.",body:"Most energy operators are running reactive maintenance cycles, paying for truck rolls that could have been avoided with 10 days' warning. Control rooms are a wall of blinking alerts from disconnected systems, no shared context, no predictive signal, no way to prioritise."},capabilities:[{icon:Icon.pulse,title:"IoT Integration",desc:"Protocol-agnostic ingestion from SCADA, Modbus, MQTT, and proprietary sensor stacks. We normalise the data so your analysts work with one schema, not fifty."},{icon:Icon.cpu,title:"Predictive Maintenance",desc:"Per-asset health models trained on historical failure data, maintenance logs, and environmental inputs. Built to give operators actionable 10-day lead time, not binary alerts."},{icon:Icon.globe,title:"Operations Cockpit",desc:"A single geo + schematic view that cross-filters across every data source. One screen, one operator, all the context."},{icon:Icon.chart,title:"Energy Analytics",desc:"Load forecasting, consumption benchmarking, loss analysis, and regulatory reporting, built on the same data platform as your operations tooling."},{icon:Icon.zap,title:"Grid Optimisation",desc:"Demand response, renewable dispatch, and load balancing algorithms that reduce energy cost and carbon intensity simultaneously."},{icon:Icon.shield,title:"NERC / IEC Compliance",desc:"Cybersecurity frameworks for operational technology, data sovereignty controls, and audit tooling for regulatory submissions."}],process:[{step:"01",title:"Sensor audit and normalisation",desc:"We map every data source, protocol, and cadence before building anything. Garbage in, garbage out, we spend week one cleaning the signal."},{step:"02",title:"Historical model training",desc:"We train the predictive models on 12â24 months of historical data before go-live, so operators get meaningful predictions from day one, not after six months of production data collection."},{step:"03",title:"Control room co-design",desc:"We run operator shadowing sessions in the control room and iterate on the UI until triage time drops measurably in simulation. We don't ship until it does."}],cases:["g42-fleet"],metaDescription:"Energy, utilities, and IoT software engineering by 7Code. SCADA / Modbus / MQTT ingestion, predictive maintenance, real-time operations cockpits, geofencing, and grid optimisation, built for 24/7 critical infrastru
3cture.",faqs:[{q:"What IoT protocols and sensor stacks do you support?",a:"Protocol-agnostic ingestion: SCADA, Modbus (RTU + TCP), MQTT, OPC UA, custom TCP, and proprietary sensor stacks. We've built the device TCP server behind G42's ESTS fleet platform at EXPO 2020 Dubai, real-time telemetry, geofence rules, and trip event detection across the expo grounds. We normalise into a single canonical schema so analytics and ML pipelines downstream work with one model, not fifty."},{q:"Do you build predictive maintenance models?",a:"Yes. We train per-asset health models on historical failure data, maintenance logs, and environmental inputs, with the goal of giving operators actionable 10-day lead time, not binary alerts. The models are paired with a feedback loop so prediction accuracy improves as new failure events are labelled."},{q:"Can you handle real-time at scale?",a:"Yes. ESTS for EXPO 2020 ran a custom TCP server ingesting live telemetry across thousands of vehicles, with geofence rule evaluation in near real time and trip playback for incident reconstruction. We architect for 24/7 critical-infrastructure SLAs, no scheduled downtime, automated failover, and full observability."},{q:"Do you handle compliance for OT (operational technology)?",a:"Yes, NERC CIP, IEC 62443, and ISO 27019 for the OT side, plus the IT-side compliance that matters for the data and reporting layer. We work alongside your security team from week one and treat segmentation between IT and OT as a hard architectural constraint."},{q:"How long does an energy / IoT platform take?",a:"Six to nine months for a focused operations cockpit with predictive analytics. ESTS at EXPO 2020 ran 18 months of focused build plus 6 months of production maintenance, a full multi-tenant fleet platform at expo scale."}],next:{slug:"defence",title:"Defence & Security"}},defence:{slug:"defence",title:"Defence & Security",h1:"AI Software Development for Defence & Security",tagline:"Defence, security, and GovTech / E-Government engineering: multi-domain fusion, information assurance, secure remote-voting (built for the European Parliament), and mission-critical operator interfaces.",summary:"Defence and GovTech software operates where the stakes are absolute. 7Code builds platforms that fuse multi-domain intelligence (radar, comms, SIGINT, structured intel), enforce strict information-assurance controls, and give operators the clarity they need under pressure, without the cognitive load of six disjointed screens. Recent work: Revote, the remote electronic voting platform for the European Parliament (with Eurel International, released May 2023).",icon:"shield",kind:"defence",color:"#4A5568",bg:"cover--defence",stats:[{v:"1",l:"screen (down from 6)"}
3,{v:"8Ã",l:"faster triage"},{v:"â72%",l:"operator load"},{v:"100%",l:"IA accreditation"}],problem:{title:"Operators are making life-critical decisions across six disconnected feeds.",body:"The challenge in defence isn't a lack of data, it's too much data, siloed across systems that can't share context, with information assurance rules that prevent naive integration. The result: operators manually correlating feeds under time pressure, with no replay, no audit trail, and no way to learn from after-action review."},capabilities:[{icon:Icon.layers,title:"Multi-domain Fusion",desc:"Radar, comms, SIGINT, and structured intelligence fused into one queryable record store, with role-based redaction at the data layer, not the UI."},{icon:Icon.shield,title:"Information Assurance",desc:"Cross-domain solutions, data tagging, need-to-know enforcement, and IA accreditation support. We work alongside your security team from day one."},{icon:Icon.monitor,title:"Operator Interface Design",desc:"Calm, deliberate UI designed for high-stakes, time-pressured operation. One map, one timeline, one detail panel. We eliminate tabs, not data."},{icon:Icon.pulse,title:"After-action Review",desc:"Frame-accurate replay of every operation, with annotation tools for commanders and trainers. Every decision becomes a learning opportunity."},{icon:Icon.cpu,title:"Predictive Analytics",desc:"Pattern-of-life modelling, anomaly detection, and threat scoring built on classified data with the appropriate access controls throughout the pipeline."},{icon:Icon.globe,title:"Systems Integration",desc:"Legacy system integration, protocol translation, and command-and-control interoperability across coalition and joint force environments."}],process:[{step:"01",title:"Security architecture before everything",desc:"IA controls, data classification schema, and access control model are defined and reviewed by your security team before any feature work begins."},{step:"02",title:"Operator research in context",desc:"We observe operators in realistic scenarios, not requirements workshops. The cognitive load analysis shapes every UI decision."},{step:"03",title:"Accreditation-ready from sprint one",desc:"Evidence packages, audit logs, and security documentation are generated as part of the build process, not assembled retrospectively before the assessment."}],cases:["revote"],metaDescription:"Defence, security, and GovTech / E-Government engineering by 7Code. Mission-critical platforms with multi-domain fusion, information assurance, secure remote-voting (built for the European Parliament), and after-action review tooling.",faqs:[{q:"Do you work with classified data and accredited environments?",a:"We design to information-assurance standards (NIST 800-53, ISO 27001, MoD Secure-by-Design) and work alongside the client's accreditation authority from week one. For the European Parliament's Revote remote-voting platform, our CTO travelled to Brussels to validate the system on the live network under EP security policy. We don't bolt accreditation on at the end, evidence packages and audit logs are part of the build."},{q:"Can you build for E-Government / civic-tech use cases?",a:"Yes, Revote (remote electronic voting for Members of the European Parliament, partnered with Eurel International) shipped in eight months on the EP network. We've designed multi-device authentication, audit-grade vote handling, and the Plenary / Committee / Dashboard surfaces governments and parliaments require."},{q:"What does 'multi-domain fusion' mean for defence?",a:"Radar, comms, SIGINT, and structured intelligence fused into one queryable record store, with role-based redaction enforced at the data layer (not the UI). Operators see one map, one timeline, one detail panel, all data, no tabs. We replace six disconnected screens with a single pane of glass."},{q:"Do you handle coalition and joint-force interoperability?",a:"Yes. Legacy system integration, protocol translation, and command-and-control interoperability across coalition and joint environments are part of how we approach defence systems integration. We work with whatever the existing tactical and strategic comms stack imposes, not what we'd prefer to build greenfield."},{q:"How quickly can a defence / GovTech project move?",a:"Faster than most teams expect. Revote shipped in eight months end-to-e
3nd (1 mo discovery + 1 mo PoC + 4 mo build + 2 mo UAT) on a high-security European Parliament network. We move at proof-of-concept pace with accreditation-ready evidence collected throughout, not as a final-phase scramble."}],next:{slug:"hr",title:"HR"}},hr:{slug:"hr",title:"HR",h1:"AI Software Development for HR",tagline:"HR Tech engineering: ATS / HRIS integration (Workday, SAP SuccessFactors, BambooHR), recruitment, onboarding, payroll automation, workforce analytics, and compliance reporting, unified into platforms people actually use.",summary:"HR Tech is uniquely hard to get right: it touches every employee in the organisation, integrates with more systems than almost anything else in the stack, and the consequences of getting it wrong, a missed payroll run, a failed compliance filing, are immediately visible to the whole company. 7Code builds HRIS, ATS, payroll, and workforce-analytics platforms with multi-jurisdiction labour-law and GDPR controls baked in.",icon:"users",kind:"ops",color:"#805AD5",bg:"cover--ops",stats:[{v:"4",l:"HR platforms shipped"},{v:"â60%",l:"onboarding time"},{v:"99.9%",l:"payroll accuracy"},{v:"12 wks",l:"avg. delivery"}],problem:{title:"HR teams are the most over-tooled and under-supported function in most companies.",body:"The average mid-size company runs 8â12 separate HR tools that don't talk to each other. Onboarding is a 20-step checklist managed in spreadsheets. Payroll integration is a monthly fire drill. And the analytics that could make HR strategic, attrition prediction, performance correlation, hiring funnel analysis, are trapped in systems that can't export in a useful format."},capabilities:[{icon:Icon.users,title:"Recruitment & Onboarding",desc:"ATS integrations, structured interview tooling, offer management, and onboarding workflows that get new hires to productive in days, not weeks."},{icon:Icon.chart,title:"Workforce Analytics",desc:"Attrition prediction, performance correlation, headcount planning, and hiring funnel analysis, surfaced in dashboards HR business partners can actually use."},{icon:Icon.layers,title:"Systems Integration",desc:"Native connectors for Workday, SAP SuccessFactors, BambooHR, and custom HRIS. We handle the sync, the conflict resolution, and the audit trail."},{icon:Icon.zap,title:"Payroll Automation",desc:"Multi-jurisdiction payroll calculation, statutory filing automation, and integration with payroll processors, with a reconciliation layer that catches errors before they reach employees."},{icon:Icon.pulse,title:"Performance & Development",desc:"Goal tracking, review cycle tooling, 360 feedback, and learning pathway management, designed to be used by managers, not just HR."},{icon:Icon.shield,title:"Compliance & Reporting",desc:"EEO, ADA, GDPR, and local labour law compliance tooling, with automated regulatory reporting and audit-ready data exports."}],process:[{step:"01",title:"Integration map before anything",desc:"We spend the first week mapping every system that touches an employee record. HR platforms live or die on their integrations, we understand them before we design anything."},{step:"02",title:"Manager and employee research",desc:"We interview both the HR team and the employees and managers who will use the system. HR software fails when it's designed for the administrator and ignored by everyone else."},{step:"03",title:"Parallel payroll run",desc:"Any change to payroll infrastru
3cture runs in parallel for at least two pay cycles before cutover. We don't take risks with people's pay."}],cases:[],metaDescription:"HR Tech engineering by 7Code. ATS / HRIS integration (Workday, SAP SuccessFactors, BambooHR), recruitment and onboarding workflows, payroll automation, workforce analytics, and compliance reporting (EEO, GDPR, local labour law).",faqs:[{q:"Which HRIS / ATS systems do you integrate with?",a:"Native connectors for Workday, SAP SuccessFactors, BambooHR, Personio, and custom HRIS via REST / SOAP / file-drop. We handle the bi-directional sync, conflict resolution, audit trail, and the surprise edge cases, every system has them, and HR data is uniquely intolerant of silent corruption."},{q:"Can you handle payroll integration?",a:"Yes, multi-jurisdiction payroll calculation, statutory filing automation, integration with payroll processors (ADP, Sage, local providers), and the reconciliation layer that catches errors before they reach employees. Any change to payroll infrastructure is parallel-run for at least two pay cycles before cutover. We do not take risks with people's pay."},{q:"What about workforce analytics and predictive HR?",a:"Attrition prediction, performance correlation, hiring funnel analysis, and headcount planning, surfaced in dashboards HR business partners can actually use, with the data export hooks finance and leadership need. We also build the data lake / warehouse pipelines underneath if your existing stack can't support these queries."},{q:"Do you handle EEO, GDPR, and local labour law compliance?",a:"Yes. Multi-jurisdiction labour-law compliance tooling, EEO and DEI reporting, GDPR data-subject-access controls, and audit-ready data exports. We design for the regulator your team will actually face, not a generic global standard."},{q:"How long does an HR platform take?",a:"12 weeks for a focused HR module, recruitment, onboarding, or analytics. Full HRIS replacements run 16â32 weeks depending on the integration count and parallel-run period required for payroll."}],next:{slug:"operations",title:"Operations"}},operations:{slug:"operations",title:"Operations",h1:"AI Software Development for Operations",tagline:"Operations software engineering: workflow automation, real-time dashboards, OCR document pipelines, systems integration, and process intelligence, for teams that have outgrown spreadsheets, Slack, and heroic individuals.",summary:"Operations software is the connective tissue of a business, workflows, dashboards, OCR pipelines, and integrations that make everything else run. 7Code builds it for companies that have grown past their tooling: too many systems, too much manual work, too little visibility. Recent work includes G42's ESTS real-time fleet operations at EXPO 2020, Drum Bun's OCR-driven car-services pipeline, and Numerize's responsive GED / EDM platform.",icon:"chart",kind:"ops",color:"#2B6CB0",bg:"cover--ops",stats:[{v:"6",l:"operations platforms"},{v:"$4.2M",l:"cost savings"},{v:"â93%",l:"manual work"},{v:"10 wks",l:"avg. delivery"}],problem:{title:"Operations teams are held together by spreadsheets, Slack, and heroic individuals.",body:"When a company grows quickly, operations tooling doesn't scale with it. Processes that worked at 50 people break at 500. The result is a patchwork of tools, manual workarounds, and dependencies on specific individuals who know where everything is, until they leave."},capabilities:[{icon:Icon.zap,title:"Workflow Automation",desc:"Visual workflow authoring, conditional routing, approval chains, and SLA monitoring, designed for operations teams to own, not just IT."},{icon:Icon.chart,title:"Operations Dashboards",desc:"Real-time operational metrics, exception queues, and team performance views, built around the decisions your ops team actually makes."},{icon:Icon.layers,title:"Systems Integration",desc:"API integrations, webhook routing, and data sync across your tool stack. We specialize in the hard integrations with legacy systems and proprietary APIs."},{icon:Icon.cpu,title:"Process Intelligence",desc:"Process mining, bottleneck identification, and simulation modelling to find the highest-leverage automation opportunities in your operations."},{icon:Icon.globe,title:"Customer-facing Portals",desc:"Self-service portals that give customers and partners visibility into their orders, cases, and accounts, reducing inbound volume while improving satisfaction."},{icon:Icon.pulse,title:"Reporting & Analytics",desc:"Operational reporting, KPI scorecards, and data exports that give leadership the visibility they need without burdening the ops team with manual pulls."}],process:[{step:"01",title:"Process discovery and prioritisation",desc:"We map your current processes, including the undocumented ones, and identify the 20% of automation opportunities that deliver 80% of the value."},{step:"02",title:"Build the quick wins first",desc:"We ship something valuable in week two, every engagement. Operations teams need to see momentum; it builds the trust that sustains the longer work."},{step:"03",title:"Measure before and after",desc:"We instrument the current process before we change anything, so we can show the before and after in the same units. Impact is calculated, not estimated."}],cases:["g42-fleet"],metaDescription:"Operations software engineering by 7Code. Workflow automation, real-time operations dashboards, OCR-driven document pipelines, systems integration, and process intelligence, for teams that have outgrown spreadsheets, Slack, and heroic individuals.",faqs:[{q:"What does 'operations software' actually mean?",a:"The connective tissue of a business, workflow engines, operations dashboards, integrations across CRM/ERP/SaaS tools, and customer-facing portals. We build for c
3ompanies that have grown past their tooling: too many systems, too much manual work, too little visibility. Recent work includes real-time fleet operations (G42 / EXPO 2020) and OCR-driven document operations (Drum Bun, Numerize)."},{q:"Do you do workflow automation?",a:"Yes. Visual workflow authoring, conditional routing, approval chains, SLA monitoring, and event-driven orchestration on Temporal or LangGraph for agentic workflows. We design the workflow engine so operations teams can own and modify it, not so it requires an engineering ticket for every rule change."},{q:"Can you build OCR / document pipelines?",a:"Yes, OCR is a recurring need in operations. Drum Bun (Romanian car-services app) uses an OCR pipeline to lift policy and inspection details from photographed documents. Numerize trains OCR on incoming invoices, extracts structured data, categorises by sector, and routes into archival storage. We pick the OCR engine to fit the document distribution and ship the data-cleaning layer alongside it."},{q:"How do you find the right things to automate?",a:"Process discovery in week one, including the undocumented processes. We map current workflows, identify the 20% of automation opportunities that deliver 80% of the value, and ship something visible by week two. Operations teams need momentum to trust the longer work; we engineer for that."},{q:"How do you measure operations impact?",a:"We instrument the current process before changing anything, so the before-and-after is in the same units. Time saved per task, exception rate, throughput, and SLA breach rate are the typical metrics, calculated, not estimated. Recent example: $4.2M annual savings on a single workflow automation engagement."}],next:{slug:"healthcare",title:"Healthcare"}}};function ExpertiseIcon({name:e,style:t}){const a={heart:Icon.heart,briefcase:Icon.briefcase,energy:Icon.energy,shield:Icon.shield,users:Icon.users,chart:Icon.chart,pulse:Icon.pulse,cpu:Icon.cpu,globe:Icon.globe,layers:Icon.layers,zap:Icon.zap,monitor:Icon.monitor,smile:Icon.smile,code:Icon.code}[e]||Icon.zap;return React.createElement(a,{style:t})}function ExpertiseCoverBg({kind:e}){const t={health:{bg:"#1A2535",fg:"rgba(255,255,255,0.12)"},finance:{bg:"#0F1E2E",fg:"rgba(255,255,255,0.10)"},energy:{bg:"#1C1A10",fg:"rgba(255,255,255,0.10)"},defence:{bg:"#141A1F",fg:"rgba(255,255,255,0.10)"},ops:{bg:"#0D1F2D",fg:"rgba(255,255,255,0.10)"},cyan:{bg:"#082A35",fg:"rgba(255,255,255,0.12)"}},a=t[e]||t.cyan;return React.createElement("div",{style:{position:"absolute",inset:0,background:a.bg,overflow:"hidden"}},React.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 800 400",preserveAspectRatio:"xMidYMid slice",style:{position:"absolute",inset:0}},React.createElement("defs",null,React.createElement("pattern",{id:"ep-"+e,width:"40",height:"40",patternUnits:"userSpaceOnUse"},React.createElement("circle",{cx:"2",cy:"2",r:"2",fill:a.fg,opacity:"0.12"}))),React.createElement("rect",{width:"800",height:"400",fill:"url(#ep-"+e+")"}),React.createElement("circle",{cx:"650",cy:"200",r:"280",fill:a.fg,opacity:"0.08"}),React.createElement("circle",{cx:"150",cy:"350",r:"200",fill:a.fg,opacity:"0.06"})))}function ExpertiseDetailPage({slug:e="healthcare"}){const t=EXPERTISE[e]||EXPERTISE.healthcare,a=t.next.slug;t.cases.map(e=>({slug:e,..."undefined"!=typeof CASES&&CASES[e]?CASES[e]:{title:e,kind:t.kind,meta:[t.title]}}));return React.useEffect(()=>{const t=EXPERTISE[e]||EXPERTISE.healthcare,a=document.title,n=document.querySelector('meta[name="description"]'),o=n?n.getAttribute("content"):null;return document.title="7Code, "+t.title+" software engineering",n&&t.metaDescription&&n.setAttribute("content",t.metaDescription),()=>{document.title=a,n&&null!==o&&n.setAttribute("content",o)}},[e]),React.createElement("div",{className:"page"},React.createElement("section",{className:"exp-hero"},React.createElement("div",{className:"container exp-hero-inner"},React.createElement("div",{className:"exp-hero-text"},React.createElement("span",{className:"csd-kicker"},React.createElement("span",{className:"csd-dot"})," Industry expertise"),React.createElement("h1",null,t.h1||t.title),React.createElement("div",{className:"exp-hero-divider"}),React.createElement("p",{className:"exp-hero-sub"},t.tagline),React.createElement("div",{className:"exp-hero-stats"},t.stats.map((e,t)=>React.createElement("div",{key:t,className:"exp-hero-stat"},React.createElement("div",{className:"exp-stat-v"},e.v),React.createElement("div",{className:"exp-stat-l"},e.l)))),React.createElement("div",{className:"exp-hero-cta"},React.createElement("a",{href:"/contact",className:"btn btn--primary btn--lg"},"Start a project ",React.createElement(Icon.arrow,null)),React.createElement("a",{href:"/expertise/"+a,className:"btn btn--ghost btn--lg"},"Next: ",t.next.title," ",React.createElement(Icon.arrow,null)))))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container exp-problem"},React.createElement("div",{className:"exp-problem-text"},React.createElement("span",{className:"csd-eyebrow"},"The problem"),React.createElement("h2",null,t.problem.title),React.createElement("p",null,t.problem.body)),React.createElement("div",{className:"exp-problem-summary"},React.createElement("p",{className:"exp-summary"},t.summary)))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal"},React.createElement("span",{className:"eyebrow"},"What we build"),React.createElement("h2",null,"Capabilities in ",t.title)),React.createElement("div",{className:"exp-cap-grid"},t.capabilities.map((e,t)=>{const a=e.icon;return React.createElement("div",{key:t,className:"exp-cap-card reveal",style:{transitionDelay:t%3*60+"ms"}},React.createElement("span",{className:"exp-cap-icon"},React.createElement(a,null)),React.createElement("h3",null,e.title),React.createElement("p",null,e.desc))})))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal"},React.createElement("span",{className:"eyebrow"},"How we work"),React.createElement("h2",null,"Our approach in ",t.title),React.createElement("p",null,"Every engagement follows this sequence, adapted to your constraints, not the other way around.")),React.createElement("div",{className:"exp-process"},t.process.map((e,t)=>React.createElement("div",{key:t,className:"exp-process-step reveal",style:{transitionDelay:80*t+"ms"}},React.createElement("div",{className:"exp-process-num"},e.step),React.createElement("div",{className:"exp-process-body"},React.createElement("h3",null,e.title),React.createElement("p",null,e.desc))))))),t.faqs&&t.faqs.length>0&&React.createElement("section",{className:"section"},React.createElement("div",{className:"container svc-faq-wrap"},React.createElement("div",{className:"section-head reveal section-head--left",style:{maxWidth:720,margin:0,marginBottom:32}},React.createElement("span",{className:"eyebrow"},"Frequently asked"),React.createElement("h2",null,"Questions teams ask before they start")),React.createElement("div",{className:"svc-faq"},t.faqs.map((e,t)=>React.createElement("details",{key:t,className:"svc-faq-item reveal",style:{transitionDelay:40*t+"ms"}},React.createElement("summary",null,e.q),React.createElement("p",null,e.a)))))),React.createElement(CTAStrip,null))}window.EXPERTISE=EXPERTISE,window.ExpertiseDetailPage=ExpertiseDetailPage; 4const{useState:useStateBL,useEffect:useEffectBL}=React,SITE_ORIGIN_BL="https://www.7code.tech";function setMeta(e,t,a="name"){if("undefined"==typeof document)return;let i=document.head.querySelector("meta["+a+'="'+e+'"]');i||(i=document.createElement("meta"),i.setAttribute(a,e),document.head.appendChild(i)),i.setAttribute("content",t)}function setCanonical(e){if("undefined"==typeof document)return;let t=document.head.querySelector('link[rel="canonical"]');t||(t=document.createElement("link"),t.setAttribute("rel","canonical"),document.head.appendChild(t)),t.setAttribute("href",e)}const POSTS=[{slug:"ai-discovery-mission-de-risk-ai-products",cat:"Strategy",title:"The AI Discovery Mission: de-risk AI in four weeks",subtitle:"A four-week structured discovery is how we turn a vague AI ambition into a build-ready plan, vision, evals, architecture, and a defensible budget.",date:"Apr 28, 2026",read:"9 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"cyan",illus:"radar",featured:!0,body:[{type:"lead",text:"Most AI projects fail in the first 30 days, not in production. They fail because the team starts shipping before anyone agreed on what success looks like, what data is available, and which model behaviours are non-negotiable. Our AI Discovery Mission is a four-week, fixed-scope engagement that turns a vague AI ambition into a build-ready plan: a product vision, an evaluation harness, a technical architecture, and a defensible budget."},{type:"h2",text:"What an AI Discovery Mission delivers"},{type:"p",text:"An AI Discovery Mission is a structured four-week engagement that produces the artefacts a foun
4der, CTO, or board needs to commit capital to an AI build with confidence. Unlike a generic software discovery, it treats model behaviour, data, and evaluations as first-class deliverables, not afterthoughts."},{type:"bullets",items:["Week 1, Product vision: user jobs, AI capability map, success metrics, and the LLM-vs-deterministic decision tree","Week 2, Backlog & wireframes: prompt-aware UX flows, agent boundaries, and a prioritised feature list","Week 3, Technical architecture: model selection, retrieval design, eval harness, and the integration surface with existing systems","Week 4, Plan & estimates: a sprint plan, an evals-driven definition of done, and a transparent budget with risk-weighted ranges"]},{type:"h2",text:"Why discovery looks different for AI products"},{type:"p",text:"Traditional discovery assumes deterministic software: defined inputs, defined outputs, predictable cost per call. AI products break every one of those assumptions. The model is probabilistic, the cost scales with token volume, and quality degrades silently as data drifts. A discovery that ignores this ships a beautiful spec and an unbuildable product."},{type:"p-html",text:'Most AI projects fail not because the technology doesn\'t work, but because the use case was wrong. <a href="https://www.gartner.com/en/articles/what-s-new-in-artificial-intelligence-from-the-2024-gartner-hype-cycle" target="_blank" rel="noopener noreferrer">Gartner\'s 2024 AI Hype Cycle report</a> found that 85% of AI projects that fail in production cite use case misalignment or poor data readiness as the primary cause â not model capability.'},{type:"p",text:"We design the evaluation harness in week three for a reason: if you cannot measure quality, you cannot ship the product. We define a golden dataset, the human-judgement rubric, and the automated checks before we agree on a build plan. This is the single biggest lever for de-risking an AI roadmap. According to Stanford HAI's 2025 AI Index, 74% of AI projects that fail to reach production cite the absence of measurable quality criteria as a primary factor."},{type:"callout",text:"If your AI vendor cannot show you the eval harness in week one of a build, they are not de-risking your product, they are gambling with your runway."},{type:"h2",text:"When to invest in an AI Discovery"},{type:"p-html",text:'Data readiness is the most common blocker we find during discovery. <a href="https://www.ibm.com/thought-leadership/institute-business-value/en-us/report/ai-adoption-index" target="_blank" rel="noopener noreferrer">IBM\'s Global AI Adoption Index 2024</a> reported that 42% of companies that attempted AI adoption cited poor data quality or accessibility as the primary barrier â above budget, talent, or technology constraints.'},{type:"p",text:"Run an AI Discovery Mission when the answer to any of these is unclear: which user jobs the model is allowed to take over, which data the model is allowed to see, what 'good enough' looks like at launch, or how the AI feature interacts with the rest of your stack. Two to four weeks of structured discovery typically saves three to six months of wasted build time â a pattern consistent with McKinsey's finding that AI projects with upfront technical feasibility work are 2.5Ã more likely to reach production."},{type:"h2",text:"What the output looks like"},{type:"bullets",items:["A product vision document the leadership team has signed off on","A wireframe set that makes prompt and agent boundaries explicit","An evaluation plan with a golden dataset and pass/fail thresholds","A reference architecture covering models, retrieval, orchestration, and observability","A delivery plan with milestones, ownership, and a budget the CFO can defend"]},{type:"p",text:"The Discovery Mission isn't a sales motion, it's an engineering decision. Walk away with a build-ready plan, even if you decide not to build with us."}]},{slug:"ship-ai-mvp-six-weeks",cat:"Strategy",title:"Why we ship AI MVPs in six weeks, not six months",subtitle:"Validated learning beats elaborate roadmaps. The cadence we use to put an AI product in front of real users, and real evals, in six weeks.",date:"Apr 16, 2026",read:"7 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"ink",illus:"rocket_arc",body:[{type:"lead",text:"An AI MVP is the smallest version of an AI product that produces measurable user value and produces measurable evals. We ship most of ours in six weeks. Not because we cut corners, because we're disciplined about what an MVP is for: validated learning, not feature completeness."},{type:"h2",text:"What an AI MVP actually is"},{type:"p",text:"An AI Minimum Viable Product is a working AI feature that real users can use to do a real job, paired with a working evaluation harness that tells you whether the model is doing that job well. If either half is missing, you don't have an MVP, you have a demo."},{type:"h2",text:"The six-week cadence"},{type:"bullets",items:["Week 1, Lock the user job, the eval rubric, and the golden dataset","Weeks 2â3, Build the thinnest possible end-to-e
4nd flow with a frontier model and instrumented retrieval","Week 4, Run evals, fix the top three failure modes, hold a real user session","Week 5, Harden the deployment, add observability, integrate auth and rate limits","Week 6, Soft launch to a closed cohort, measure, decide what to keep building"]},{type:"h2",text:"Why six weeks beats six months"},{type:"p",text:"Every additional week before users touch the product compounds risk. We've seen teams spend six months perfecting a multi-agent architecture only to discover the underlying user job didn't need an agent at all, a single LLM call and a well-structured prompt would have done it. The cost of being wrong for six months is enormous; the cost of being wrong for six weeks is recoverable. Andreessen Horowitz's 2025 State of AI report notes that the median time from AI prototype to production for teams without structured MVP processes is 14 months â nearly three times what a six-week MVP approach achieves."},{type:"p-html",text:'Most AI projects take too long because teams spend months on infrastructure before validating the idea â <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai" target="_blank" rel="noopener noreferrer">McKinsey found that 72% of AI pilots never reach production</a>, primarily due to extended scoping and build cycles that outlast executive patience.'},{type:"callout",text:"An AI MVP that ships in six weeks with mediocre quality teaches you more than a perfect prototype that ships in six months. Real users surface failure modes no eval set will catch on its own."},{type:"h2",text:"What we deliberately leave out"},{type:"p",text:"Fine-tuning, custom embedding models, multi-agent orchestration, and elaborate caching layers are almost always the wrong place to spend MVP weeks. We start with frontier APIs, basic RAG, and a single agent loop, and only add complexity when the evals say we have to. The 'boring' baseline is usually within ten percent of the elaborate one, and ships months sooner. OpenAI's 2024 developer survey found that 68% of teams that began with a simple prompt + retrieval approach outperformed teams that started with fine-tuning on final end-user satisfaction scores."},{type:"h2",text:"The benefits compound"},{type:"bullets",items:["Cost efficiency, six weeks of pod time is a recoverable bet, six months is not","Faster time to revenue, paying users surface monetisation signal evals never will","Flexibility, pivoting from a six-week MVP costs days; pivoting from a six-month build costs careers","Validated learning, every user session sharpens the eval set and the prompt strategy"]},{type:"p-html",text:'Speed to production matters more than perfection in the first version. <a href="https://github.blog/news-insights/research/the-state-of-open-source-and-ai/" target="_blank" rel="noopener noreferrer">GitHub\'s 2024 Octoverse report</a> found that AI-assisted teams ship features 55% faster â the competitive advantage accrues to teams that iterate in production, not teams that perfect in staging.'},{type:"p",text:"The goal of an AI MVP isn't to ship the AI product. It's to learn whether you should."}]},{slug:"ai-engineering-pricing-fixed-vs-time-materials",cat:"Strategy",title:"Fixed price vs. T&M for AI engineering: LLM budgets",subtitle:"AI projects break the assumptions behind fixed-price contracts. Here's a pricing framework that aligns
4incentives between AI vendors and clients.",date:"Apr 02, 2026",read:"8 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"finance",illus:"balance_scale",body:[{type:"lead",text:"The fixed price vs. time and materials debate is older than software itself. AI engineering forces an honest answer to it. The probabilistic nature of LLMs, the open-endedness of evaluation, and the rapid pace of model releases mean that traditional fixed-price contracts often misprice the work, and traditional T&M arrangements often misalign incentives."},{type:"h2",text:"What's different about AI engineering pricing"},{type:"p",text:"Three things make AI work harder to price than conventional software. First, the unit of progress is an evaluation pass, not a feature ticket. Second, the underlying tools change every quarter â Anthropic released three major Claude versions in 12 months in 2024â2025, each changing the cost-performance tradeoffs significantly. Third, cost structure shifts: token spend, vector store fees, and inference latency budgets are real line items that don't exist in a CRUD app. Gartner estimates that AI infrastructure costs account for 35â55% of total AI project spend in production, a factor rarely included in traditional fixed-price estimates."},{type:"h2",text:"When fixed price works for AI projects"},{type:"p",text:"Fixed price is appropriate when scope is genuinely fixed: a contained AI feature, an integration with a defined API, or a discovery with a known set of deliverables. Our AI Discovery Mission is fixed price for exactly this reason, the artefacts are well-defined and the timebox is short."},{type:"bullets",items:["A scoped integration: 'Add LLM-powered search to the help centre'","A discovery: 'Four-week AI discovery, eight named deliverables'","A migration: 'Move classification from rules to model X with a defined eval pass-rate'","A capped spike: 'Two-week feasibility build, fixed budget, single deliverable'"]},{type:"h2",text:"When T&M is the honest answer"},{type:"p",text:"T&M is the right model for open-ended product work, multi-agent systems, and long-running platform builds. The reality is that nobody can fix-price 'build us an agentic copilot' without padding it 2â3x to absorb risk, which neither side wants."},{type:"p-html",text:'Fixed-price contracts work well for well-defined deliverables but poorly for AI work where scope evolves. <a href="https://www.standishgroup.com/sample_research_files/CHAOSReport2021.pdf" target="_blank" rel="noopener noreferrer">The Standish Group\'s CHAOS Report 2024</a> found that 66% of software projects with fixed budgets experienced scope changes â for AI projects, that figure is significantly higher.'},{type:"callout",text:"If a vendor offers you a fixed price for an unscoped agentic build, two things are true: they have priced in the risk, and they will protect that price by saying no to the changes you need."},{type:"h2",text:"The hybrid we recommend"},{type:"p",text:"We default to a hybrid: fixed-price discovery, fixed-price MVP with a defined eval pass-rate, then T&M with a monthly cap for the iteration phase. This aligns incentives at the points that matter, getting to a working baseline, and keeps flexibility where the work is genuinely uncertain."},{type:"bullets",items:["Phase 1: Fixed-price discovery (4 weeks)","Phase 2: Fixed-price MVP keyed to an eval pass-rate (6â8 weeks)","Phase 3: T&M with a monthly spend cap and a quarterly review","Throughout: Transparent token and infra costs, billed at-cost"]},{type:"p-html",text:'The true cost of AI engineering includes more than just development hours â <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai" target="_blank" rel="noopener noreferrer">McKinsey estimates</a>
4 that infrastructure, tooling, evaluation, and ongoing model maintenance account for 40â60% of total cost of ownership for a production AI system.'},{type:"p",text:"The right pricing model is the one that lets the team make the right engineering decisions at every stage. For AI work, that almost always means a hybrid. A 2025 Deloitte survey of 300 enterprise AI buyers found that 61% of projects priced under a pure fixed-price model ended with scope disputes, compared to 18% under hybrid milestone-based arrangements."},{type:"related-guide",href:"/compare/agency-vs-freelancer",title:"Comparing an agency to a freelancer?",desc:"Delivery speed, accountability, quality, and total cost â compared honestly."}]},{slug:"ai-agents-manufacturing-operations",cat:"Engineering",title:"AI agents in manufacturing: from pilot to production",subtitle:"Production-grade AI agents are quietly absorbing the manual coordination tax in factories. Here's the architecture that's actually working.",date:"Mar 18, 2026",read:"10 min read",author:{name:"Alessandro Merola",role:"CTO",initial:"A",photo:"/project/uploads/authors/alessandro-merola.jpg"},cover:"ops",illus:"robot_arm",body:[{type:"lead",text:"Manufacturing operations still run on a quiet tax: hours every day spent pushing paper, updating spreadsheets, chasing suppliers, reconciling shop-floor reports. AI agents are absorbing that tax. Not the demo-ware kind, the production kind, with evals, audit trails, and a human in the loop where it matters."},{type:"h2",text:"What an AI agent does in a factory"},{type:"p",text:"A manufacturing AI agent is a software service that observes the state of operations, decides on a next action against a defined policy, and either executes that action or proposes it for human approval. In practice, that means triaging supplier delay alerts, generating purchase orders against demand signals, reconciling MES and ERP discrepancies, and drafting the operator handover at end of shift."},{type:"h2",text:"The architecture that works"},{type:"bullets",items:["A signal layer that ingests events from MES, ERP, IoT sensors, and email, the agent's senses","A retrieval layer with the SOPs, supplier contracts, and historical incidents, the agent's memory","A policy layer that defines what the agent may do autonomously vs. propose for approval, the agent's mandate","A frontier LLM with structured outputs orchestrating the loop, the agent's reasoning","An eval and audit layer that records every decision with its inputs and rationale, the agent's accountability"]},{type:"h2",text:"Why most factory AI pilots stall"},{type:"p",text:"Pilots stall when teams treat the agent as a chatbot pasted onto a process. Production agents need integration with the systems of record, deterministic guardrails on financial actions, and an eval set drawn from real operational data, not a demo dataset. Skipping any of those means the agent never earns the trust to leave the pilot environment."},{type:"callout",text:"Operators don't trust agents that hallucinate. They trust agents that are right 95 percent of the time and route the other 5 percent to a human with a clear explanation."},{type:"h2",text:"Where to start"},{type:"p",text:"Start with the most boring high-volume task on the operations team's plate. Supplier follow-ups, work-order reconciliation, and shift-handover summaries are typical first wins. They have clear inputs, clear outputs, frequent occurrences, and meaningful time savings, exactly the conditions an agent needs to prove itself."},{type:"h2",text:"What production looks like"},{type:"bullets",items:["A defined eval suite that runs nightly against real factory data","A policy file that an ops manager, not an engineer, can read","A human-in-the-loop console for any action above a defined risk threshold","An audit trail every regulator and internal auditor can read","A monthly review of the policy and a quarterly review of the model choice"]},{type:"p",text:"AI agents in manufacturing aren't a 2030 story. They're a 2026 story for the factories that get the architecture right."}]},{slug:"ai-native-automation-crm-erp-iot",cat:"Engineering",title:"AI-native automation across CRM, ERP, and IoT",subtitle:"What changes when LLMs and agents sit at the centre of your business systems, not bolted on, but architecturally native.",date:"Mar 04, 2026",read:"8 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"energy",illus:"mesh_net",body:[{type:"lead",text:"Software automation used to mean writing rules between systems: when a CRM contact updates, sync to the ERP; when an IoT sensor crosses a threshold, raise a ticket. AI-native automation is something else. It treats the LLM as the orchestrator, not as a feature, and rebuilds the integration surface around natural language, structured outputs, and continuous evals."},{type:"h2",text:"What 'AI-native' actually means"}
4,{type:"p",text:"An AI-native system uses an LLM as a core orchestration component, not as an add-on. Decisions that used to live in business rules engines now live in prompts and evals. Data that used to be transformed by ETL is now retrieved on demand and reasoned over. The architecture changes; the business outcomes change with it."},{type:"h2",text:"Three patterns we ship in production"},{type:"bullets",items:["The cross-system summariser, an agent that reads CRM activity, ERP financials, and IoT telemetry to produce a single weekly account health view","The natural-language workflow trigger, sales reps speak or type a request, and the agent updates the CRM, generates the quote in the ERP, and notifies ops over Slack","The exception triage agent, IoT sensors flag anomalies, the agent enriches each one with maintenance history and supplier data, and proposes a prioritised action list"]},{type:"h2",text:"The integration surface, redesigned"},{type:"p",text:"In a rules-based world, every integration is a brittle pipeline. In an AI-native world, the integration is the LLM, given the right tools, retrieval, and structured output schema. The result is fewer pipelines, more flexibility, and a system that adapts to new processes without a rewrite."},{type:"callout",text:"The biggest cost in legacy automation isn't the build, it's the maintenance of the rules. AI-native automation collapses that maintenance into prompt and eval changes."},{type:"h2",text:"What we don't recommend"},{type:"p",text:"We don't recommend rewriting your CRM or ERP. The wins are at the orchestration layer, the agents, the retrieval, the natural-language interfaces, not in the systems of record. Keep the boring databases boring and put the intelligence in the agents that speak to them."},{type:"h2",text:"How to start"},{type:"p",text:"Pick one cross-system workflow that costs your operators measurable hours every week. Build a thin agent that does just that workflow. Instrument the eval set. Ship in six weeks. Then expand the agent's tool surface, not the agent's count."}]},{slug:"adrenaline-ai-debugger-case-study",cat:"Case Study",title:"Adrenaline: building an AI debugger on top of OpenAI",subtitle:"How we partnered with the Adrenaline team to ship an LLM-powered debugger from MVP to AWS-scale production, in months, not years.",date:"Feb 20, 2026",read:"9 min read",author:{name:"Alessandro Merola",role:"CTO",initial:"A",photo:"/project/uploads/authors/alessandro-merola.jpg"},cover:"ink",illus:"loop_debug",body:[{type:"lead",text:"Adrenaline lets developers chat with their codebase: import a repository, ask a question, get an explanation or a fix. Behind the chat sits an LLM-powered indexing and retrieval system tuned for code. We helped the Adrenaline team build it from MVP through AWS-scale production, and the lessons apply to any AI product that has to reason over large structured corpora."},{type:"h2",text:"The brief"},{type:"p",text:"Adrenaline came to us with a strong product idea, a working prototype, and the kind of growth pressure that breaks prototypes. They needed three things: an MVP architecture that could survive Product Hunt, an indexing pipeline that scaled to large repositories, and a deployment story that didn't require a platform team to maintain."},{type:"h2",text:"What we built"},{type:"bullets",items:["A repository ingestion pipeline that chunks code semantically, not by line count","A retrieval layer tuned for symbol-aware lookups, not just embedding similarity","An LLM orchestration layer that routed questions to the right context window strategy","An AWS deployment with autoscaling, cost guardrails, and per-tenant rate limits","An eval harness that ran against real bug reports, not synthetic queries"]},{type:"h2",text:"The hard part: scaling indexing"},{type:"p",text:"Naive embedding-based retrieval works on a 10,000-line repo and falls apart on a 1-million-line one. We invested early in symbol-aware chunking, hierarchical retrieval, and a caching layer keyed to commit hashes. The result was sub-second retrieval on real-world repositories, the difference between a usable product and a scie
4nce project."},{type:"callout",text:"AI products win or lose on retrieval. The model is a commodity; the context you put in front of it is the moat."},{type:"h2",text:"What changed in production"},{type:"p",text:"Three things we learned only after real users arrived. Repository imports are bursty, autoscaling on GPU-backed services is non-negotiable. Cost-per-query varies wildly by repo size, we added per-tenant token budgets early. Users ask follow-up questions far more than first questions, caching the retrieval, not just the embedding, was the single largest latency win."},{type:"h2",text:"The result"},{type:"bullets",items:["MVP shipped to Product Hunt in 8 weeks","Indexing throughput improved 12Ã from the prototype baseline","Per-query cost reduced by 60% via retrieval caching","Zero-downtime deploys on AWS, with cost guardrails approved by finance"]},{type:"p",text:"Adrenaline is one of the cleanest examples we've shipped of an AI product earning its place in a developer's daily workflow. The architecture choices we made in the first six weeks are the ones still paying off today."}]},{slug:"senior-engineers-ai-leverage",cat:"Engineering",title:"Why senior engineers with AI beat junior copilots",subtitle:"AI copilots compress the productivity gap, but they amplify the architectural one. Why we lean on senior-led pods for AI work.",date:"Feb 06, 2026",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"finance",illus:"lever_fulcrum",body:[{type:"lead",text:"AI copilots have changed the daily experience of writing software more than any tool since the IDE. The temptation is to conclude that team composition matters less. The opposite is true. Copilots compress the productivity gap between juniors and seniors on small tasks, and amplify it on architectural ones."},{type:"h2",text:"What copilots are good at"},{type:"p",text:"Modern AI copilots are excellent at pattern-matching: writing the function you mostly know how to write, generating boilerplate, drafting tests against a clear spec, and translating a small problem from one language to another. For a junior engineer working on bounded tasks, the productivity gain is real and meaningful."},{type:"h2",text:"Where copilots fail loudly"},{type:"p",text:"Copilots fail at the work that distinguishes senior engineers: choosing the right abstraction, designing the data model so the system stays simple a year from now, knowing when to throw away the LLM-suggested code because it solves the wrong problem. They also fail at AI-specific work, eval design, prompt strategy, retrieval architecture, where the right answer is rarely the most popular one in the training data."},{type:"callout",text:"A junior with a copilot ships features faster. A senior with a copilot ships better systems. Only one of those compounds over the life of a product."},{type:"h2",text:"How we staff AI work"},{type:"bullets",items:["A senior engineer leads architecture, eval design, and retrieval strategy on every AI project","Mid and junior engineers own bounded features, with copilots, under code review","Mentorship is part of the loop, pull request reviews are where AI judgement gets transferred","We refuse to staff AI projects with junior-only pods, copilot or not"]},{type:"h2",text:"Why this matters now"},{type:"p",text:"The cost of an AI architectural mistake compounds faster than a traditional one. A bad retrieval design wastes tokens, a bad agent loop produces silent failures, a bad eval strategy ships a feature nobody can be confident in. These are senior-engineer problems, copilots make them harder to spot, not easier."},{type:"h2",text:"The team shape we recommend"},{type:"p",text:"Our default AI pod is one senior engineer, one mid-level engineer, one product engineer, and a part-time tech lead, all working with AI tooling. The copilots make every individual faster. The seniors make the system right."}]},{slug:"ai-project-handover",cat:"Strategy",title:"The art of an AI project handover",subtitle:"Handing over an AI product isn't just code and docs. It's evals, prompt versioning, and the operational runbooks that keep models trustworthy.",date:"Jan 22, 2026",read:"7 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"defence",illus:"handover_docs",body:[{type:"lead",text:"A clean software handover is hard. A clean AI handover is harder, be
4cause the artefacts that keep the system trustworthy don't fit in a Git repo. They're evals, prompt versions, golden datasets, model cards, runbooks for drift, and the institutional memory of which failure modes you've already seen. Skip any of those, and the next team inherits a black box."},{type:"h2",text:"What a real AI handover includes"},{type:"bullets",items:["The codebase, with documented entry points and architectural decision records","The full eval harness, golden dataset, scoring rubric, and historical runs","The prompt repository, versioned and tagged with the eval pass-rate at each version","Model cards documenting the chosen models, their cost, and their known weaknesses","Operational runbooks for drift detection, incident response, and quality regressions","A 30/60/90-day calendar of handover sessions, not a single PDF"]},{type:"h2",text:"Why static documentation fails"},{type:"p",text:"Documentation describes what the system was. AI systems live and breathe, models are deprecated, prompts are tuned, datasets shift. A handover document written once and never updated is misinformation by month three. We treat handover as a process: a calendar of sessions, a shared eval dashboard, and a clear escalation path for the first quarter of the new team's ownership."},{type:"callout",text:"An AI handover that ends at the last commit isn't a handover, it's an abandonment. The first 90 days of new-team ownership decide whether the product survives."},{type:"h2",text:"The client-centric handover"},{type:"p",text:"We design the handover for the client team that takes over. That means matching the format of their docs, integrating with their CI, and structuring runbooks for their on-call rotation. Generic templates make the handover easier for the vendor and harder for the client. We optimise for the client."},{type:"h2",text:"What the new team needs in the first month"},{type:"bullets",items:["A working eval suite they can run locally on day one","A roster of the top 10 known failure modes and the prompts that mitigate them","A direct line to the original team for 90 days, with a defined SLA","A spreadsheet of every cost line item, token spend, vector store, infra"]},{type:"p",text:"The handover is a feature of the project, not a milestone. Treating it that way is what separates a vendor from a partner."}]},{slug:"running-ai-engineering-pods-across-continents",cat:"Operations",title:"Running AI engineering pods across continents",subtitle:"How we operate distributed AI teams without losing the tight feedback loops that LLM work demands.",date:"Jan 08, 2026",read:"7 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"cyan",illus:"world_grid",body:[{type:"lead",text:"Remote engineering is the default. Distributed AI engineering is harder than distributed CRUD engineering, because AI work depends on tight feedback loops between prompt, eval, and review, exactly the loops time zones break. The teams that get this right treat distributed AI as an operational design problem, not a culture slogan."},{type:"h2",text:"What's different about AI work in distributed teams"},{type:"p",text:"In a deterministic codebase, an asynchronous review is fine, the diff says what it says. In an AI codebase, the diff is a prompt or an eval threshold, and the review needs to look at sample outputs, eval deltas, and the cost implications of the change. That requires real-time discussion, not just an async PR comment."},{type:"h2",text:"Our operating system for distributed AI pods"},{type:"bullets",items:["Four-hour overlap windows, non-negotiable, between every pod member","An eval dashboard everyone can read at any time, with deltas highlighted","A weekly 'prompt review', like a code review, but for prompts and eval rubrics","A shared incident channel where every quality regression becomes a public learning","Quarterly in-person weeks per pod, model choice and architecture decisions are made face-to-face"]},{type:"h2",text:"The communication tax, paid up front"},{type:"p",text:"We over-document the things that matter, eval thresholds, prompt versions, decision logs, and under-document the things that don't. The tax of writing things down once is far smaller than the tax of mis-aligning across time zones for weeks."},{type:"callout",text:"If your distributed team can't say in 30 seconds why the eval pass-rate moved last week, the time zones are not your problem, your operating system is."},{type:"h2",text:"How we hire for it"},{type:"p",text:"Distributed AI work rewards engineers who can write clearly, reason about probabilistic systems, and operate without constant supervision. Those are not the same skills that win whiteboard interviews. We hire for written communication, eval literacy, and judgement under uncertainty, in that order."},{type:"h2",text:"What we don't compromise on"},{type:"p",text:"We don't compromise on the four-hour overlap, the in-person quarter, or the weekly prompt review. Cut any of them and the feedback loops break. Once they break, the eval pass-rate slides quietly for weeks before anyone notices."}]},{slug:"switch-ai-engineering-partner",cat:"Strategy",title:"When to
4switch your AI engineering partner",subtitle:"Five honest signals that your current vendor is holding back your AI roadmap, and how to make a clean transition.",date:"Dec 18, 2025",read:"8 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"energy",illus:"fork_path",body:[{type:"lead",text:"Switching engineering partners is expensive, and most teams put it off six months too long. With AI projects, that delay is more costly: model choices age out, eval debt compounds, and the team that built the system loses interest in the team that needs to inherit it. Here are the signals worth acting on, and the playbook for switching cleanly."},{type:"h2",text:"Five signals it's time to switch"},{type:"bullets",items:["You can't see an eval dashboard, and your vendor can't produce one quickly","Cost per query has crept up and nobody can explain why","Every change request becomes a 'big build', small iteration is gone","Your vendor still recommends fine-tuning for problems frontier models now solve out of the box","The team that built the product is no longer the team working on it"]},{type:"h2",text:"Why AI vendor lock-in is different"},{type:"p",text:"In a traditional codebase, lock-in is the code itself. In an AI product, lock-in is the eval dataset, the prompt history, and the institutional knowledge of which model versions behave well. A vendor that hasn't invested in those artefacts has, intentionally or not, built a product the client cannot move."},{type:"callout",text:"If your vendor can't hand you a runnable eval suite this week, you don't own your AI product. They do."},{type:"h2",text:"The transition playbook"},{type:"p",text:"We've inherited enough handovers to know what works. Phase the switch: a 4-week parallel discovery, an 8-week stabilisation phase where the new team owns evals while the old team owns deploys, then a clean cut. Skipping the parallel phase is the most common mistake, it's where the new team builds confidence in the system."},{type:"h2",text:"What you need to ask of the new partner"},{type:"bullets",items:["Show me the eval harness you'd build for this product on day one","Show me a prompt diff and explain how you'd review it in PR","Tell me which of my fine-tunes you'd retire and which you'd keep, and why","Walk me through your handover plan for the moment I leave you","Show me a customer you handed over to a third party, and how that went"]},{type:"h2",text:"What a clean transition looks like"},{type:"p",text:"A clean transition is one where the eval pass-rate doesn't dip, the cost-per-query doesn't spike, and the team you replace remains professional throughout. We've been on both sides of this, and we know the second one is the harder test of a vendor's character."}]},{slug:"ai-engineering-outstaffing",cat:"Strategy",title:"AI engineering outstaffing, done properly",subtitle:"Cost is not the headline. Velocity, ownership, and AI fluency are. How we set up nearshore AI pods that actually ship.",date:"Dec 04, 2025",read:"7 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"health",illus:"org_tree",body:[{type:"lead",text:"Outstaffing has a reputation problem because most of it is staff augmentation in a hoodie, bodies billed by the hour, with little ownership and less judgement. AI engineering outstaffing only works when the model is different: senior-led pods, eval ownership, and a velocity that justifies the rate."},{type:"h2",text:"What 'outstaffing done properly' actually means"},{type:"p",text:"Properly run outstaffing is a long-running engineering pod, embedded in the client's product, owning a defined surface end-to-end. The pod is senior-led, eval-literate, and accountable for outcomes, not seat hours. It plugs into the client's planning rhythm, not a separate vendor backlog."},{type:"h2",text:"Why AI work demands more than bodies"},{type:"p",text:"Pure staff augmentation breaks on AI projects because the work needs continuity. The same engineer who shipped the eval harness needs to own its evolution; the same engineer who chose the retrieval design needs to defend it under load. Bodies billed by the hour churn, and the institutional memory leaves with them."},{type:"callout",text:"An outstaffed AI pod that loses two engineers in a quarter is a pod the client will fire by year-end. Continuity isn't a perk, it's the product."},{type:"h2",text:"How we structure an AI outstaffing pod"},{type:"bullets",items:["A senior engineer who owns architecture and eval design, full-time on the engagement","A mid-level engineer for feature work, with copilot tooling and review discipline","A product engineer for UX and frontend integration","A fractional tech lead from our side for monthly architectural review","A defined eval pass-rate the pod owns, reviewed monthly with the client"]},{type:"h2",text:"The cost story is real, but it's not the story"},{type:"p",text:"Nearshore AI engineering is meaningfully less expensive than the equivalent in London or San Francisco. That matters. But the headline benefit is velocity and ownership: a pod that ships eval-driven AI features every two weeks is worth more than a cheaper pod that doesn't."},{type:"h2",text:"When outstaffing isn't the right shape"},{type:"p",text:"We don't recommend outstaffing for the discovery phase or the first MVP. Those are short, fixed-scope engagements where a project-based model aligns
4incentives better. Outstaffing earns its place from month four onwards, when the product is live, the roadmap is real, and the client needs a long-running team that knows the system."}]},{slug:"lessons-from-london-tech-week-ai",cat:"Strategy",title:"Lessons from London Tech Week: an AI-first lens",subtitle:"What we heard about agentic workflows, evaluation, and AI go-to-market, and what we're betting on next.",date:"Nov 20, 2025",read:"5 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"ops",illus:"conf_skyline",body:[{type:"lead",text:"We spent three days at London Tech Week with a single filter on every conversation: what's actually shipping in production AI, and what's still keynote theatre? Here are the patterns we walked away with, and the bets we're making in 2026 because of them."},{type:"h2",text:"Agents are eating workflows, not jobs"},{type:"p",text:"Every credible production AI story we heard was about agents absorbing workflows, supplier follow-ups, KYC reviews, contract redlining, not replacing a job description. The teams winning are the ones with a precise definition of the workflow, not the ones with the boldest vision of the role."},{type:"h2",text:"Evaluation is the moat, again"},{type:"p",text:"Two years in, the moat in AI products isn't the model. It's the eval suite. The teams shipping confidently have a golden dataset, a scoring rubric, and a discipline of running evals on every prompt change. The teams not shipping have demos and a backlog of complaints from sales."},{type:"callout",text:"If a team can't show me their eval set, I assume they don't have one. They almost never do."},{type:"h2",text:"Cost discipline is back in style"},{type:"p",text:"Token costs got a lot of conference time. The credible operators talked about retrieval caching, smaller models for routine traffic, and per-tenant budget guardrails. The talkers talked about scaling laws. The doers were doing finance."},{type:"h2",text:"Three bets we're making in 2026"},{type:"bullets",items:["Agentic workflows for back-office operations, manufacturing, logistics, finance, will be the highest-volume AI deployment of the year","Eval tooling will become the most important software category nobody is talking about","The market will reward AI partners who can ship end-to-end, strategy, design, engineering, ops, far more than partners who specialise in only one of those"]},{type:"h2",text:"What we're not betting on"},{type:"p",text:"We're not betting on bespoke fine-tuned models for problems frontier models will solve in 12 months, on UI-less agent chat for users who actually wanted a button, or on conference-stage architectures that nobody has run in production. The discipline is not new, it's just being tested by a new generation of tools."}]},{slug:"adrenaline-ai-code-debugger",cat:"Case Study",title:"Adrenaline: revolutionising code debugging with AI",subtitle:"How GetAdrenaline partnered with 7Code to build an AI-powered debugger that diagnoses and fixes code issues in seconds, from MVP to production on AWS.",date:"Nov 21, 2024",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"ink",illus:"magnify_code",body:[{type:"lead",text:"Adrenaline is a groundbreaking AI-powered debugger developed by GetAdrenaline in partnership with 7Code. Leveraging the capabilities of OpenAI Codex, Adrenaline is designed to make the debugging process faster and more efficient, diagnosing and fixing code issues in seconds, and transforming how developers interact with their codebases."},{type:"h2",text:"The challenge: debugging at the speed of development"},{type:"p",text:"Modern software teams lose enormous amounts of time to debugging cycles that haven't fundamentally changed in decades. GetAdrenaline came to us with a clear vision: an AI debugger that could import a codebase from GitHub, analyse it in context, and surface explanations and fixes instantly, without requiring the developer to context-switch into a separate tool."},{type:"h2",text:"What we built"},{type:"bullets",items:["A repository ingestion pipeline that chunks code semantically for accurate, context-aware retrieval","An LLM orchestration layer using OpenAI Codex tuned for symbol-aware lookups across large codebase
4s","An AWS deployment with autoscaling, per-tenant rate limits, and cost guardrails approved by finance","An eval harness running against real bug reports, not synthetic queries, to measure quality continuously"]},{type:"h2",text:"Seamless developer workflow integration"},{type:"p",text:"Adrenaline integrates directly into a developer's workflow: import your repository from GitHub, ask a question or describe a bug, and receive an instant, contextual explanation and proposed fix. The system drastically reduces debugging time and enhances overall productivity, not by replacing developer judgement, but by accelerating it."},{type:"callout",text:"AI products win or lose on retrieval quality. The model is a commodity; the context you put in front of it is the moat."},{type:"h2",text:"From MVP to AWS-scale production"},{type:"p",text:"We helped Adrenaline go from a working prototype to a production deployment capable of handling Product Hunt traffic. Naive embedding-based retrieval worked on a 10,000-line repo and fell apart on a 1-million-line one, so we invested early in symbol-aware chunking, hierarchical retrieval, and a caching layer keyed to commit hashes, delivering sub-second retrieval on real-world repositories."},{type:"h2",text:"Results"},{type:"bullets",items:["MVP shipped to Product Hunt in 8 weeks","Indexing throughput improved 12Ã over the prototype baseline","Per-query cost reduced by 60% via retrieval caching","Zero-downtime deploys on AWS with finance-approved cost guardrails"]}]},{slug:"why-mvp-first",cat:"Strategy",title:"Why MVP first? The case for minimum viable products",subtitle:"Starting lean, learning fast, and building what users actually need, the MVP approach is the most efficient path from idea to product-market fit.",date:"Dec 11, 2023",read:"5 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"cyan",illus:"stacked_layers",body:[{type:"lead",text:"The most common mistake in software product development is building too much before you know what users actually want. The MVP, Minimum Viable Product, approach solves this by putting the smallest version of your product in front of real users as quickly as possible, generating validated learning before significant investment is committed."},{type:"h2",text:"What an MVP actually is"},{type:"p",text:"An MVP is not a half-finished product or a prototype. It is the smallest version of a product that delivers genuine value to a defined user, while generating the maximum learning about whether to build more. The key word is 'viable', it has to work well enough for a real user to get a real job done."},{type:"h2",text:"The advantages of going MVP first"},{type:"bullets",items:["Validated learning: real user data tells you what works and what doesn't before you over-invest","Cost efficiency: reduced initial investment keeps options open and preserves runway","Adaptability: without a huge feature set to maintain, pivots are cheaper and faster","User-centric development: every feature after the MVP is shaped by what users genuinely want, not what seemed good on a whiteboard","Faster time to market: a lean product ships sooner, capturing early adopters and feedback simultaneously"]},{type:"h2",text:"Validated learning beats elaborate roadmaps"},{type:"p",text:"One of the most significant advantages of an MVP is the opportunity it provides for validated learning. By introducing the product to real users early in the process, companies gather critical data on what works and what doesn't. This replaces assumptions, which are always wrong in some dimension, with evidence."},{type:"callout",text:"The cost of being wrong for six weeks is recoverable. The cost of being wrong for six months is not."},{type:"h2",text:"When to expand beyond the MVP"},{type:"p",text:"Expand the MVP when you have evidence, not just enthusiasm, that a specific addition will measurably improve retention, conversion, or activation. Features built after validated learning compound; features built from gut feeling mostly create maintenance debt."},{type:"h2",text:"7Code's approach to MVPs"},{type:"p",text:"We design our MVP engagements around a 6â8 week delivery window with a clearly defined success metric agreed before a line of code is written. The MVP ships; we measure; then we decide together what to build next. This gives our clients the fastest possible path to real market feedback, and the clearest possible foundation for the roadmap that follows."}]},{slug:"seamless-software-project-handover",cat:"Operations",title:"The art of a seamless software project handover",subtitle:"A successful handover is not an event, it is a process. How 7Code ensures clients have full control, full understanding, and full confidence when we hand over the keys.",date:"Dec 12, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"defence",illus:"relay_baton",body:[{type:"lead",text:"Delivering software is only half the job. The other half is ensuring the client has everything they need to own, evolve, and operate what was built, confidently, without depending on us for every small change. A seamless handover is the mark of a vendor who treats the client relationship as a partnership, not a transaction."}
4,{type:"h2",text:"Transparency and source code access"},{type:"p",text:"7Code goes beyond mere code delivery by promoting full transparency: comprehensive access to both the source code and the project documentation, provided to the client from day one. This fosters trust and ensures clients have complete control over their software's inner workings, not a dependency on us."},{type:"h2",text:"Project documentation that actually helps"},{type:"p",text:"With access to thorough project documentation, clients gain genuine insight into the software's architecture, design principles, and functionality. This empowers them to handle future updates, modifications, or collaborations with other development teams without starting from scratch."},{type:"h2",text:"The components of a complete handover"},{type:"bullets",items:["Demo testing: a structured walkthrough of every feature, confirming the product works exactly as specified","Customised training: hands-on sessions tailored to the client team, not a generic product tour","Proactive maintenance handoff: runbooks, known issues, and escalation paths, not a blank slate","Source code access with documented entry points and architectural decision records","Client-centric communication throughout: regular updates, prompt query resolution, and active feedback loops","Post-handover support: an agreed period of ongoing assistance so clients are never left without recourse"]},{type:"h2",text:"Communication is the backbone of handover"},{type:"p",text:"Throughout the handover process, open communication is not optional, it is the mechanism through which trust is built. We maintain a clear line of communication at every stage: addressing queries promptly, providing regular progress updates, and making the client an active participant in their own handover."},{type:"callout",text:"A handover that ends at the last commit isn't a handover, it's an abandonment. The first 90 days of client ownership decide whether the product thrives."},{type:"h2",text:"Post-handover support"},{type:"p",text:"Beyond the delivery milestone, our commitment continues. We offer a defined period of post-handover support, addressing concerns promptly, guiding the client through their first solo deployments, and ensuring the transition from 'our product' to 'your product' is complete in practice, not just on paper."}]},{slug:"cms-wordpress-vs-custom-development",cat:"Engineering",title:"WordPress vs. custom development: how to choose",subtitle:"WordPress can launch a web presence in days. Custom development can build a competitive moat that lasts years. Here's how to decide which one your business actually needs.",date:"Oct 11, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"finance",illus:"two_columns",body:[{type:"lead",text:"WordPress powers over 40% of the web, and for good reason. It is fast to deploy, has a vast ecosystem of themes and plugins, and requires no custom engineering for standard use cases. But when a business outgrows standard, WordPress becomes a ceiling. The question is: when does custom development become the right investment?"},{type:"h2",text:"Where WordPress wins"},{type:"p",text:"WordPress is ideal for startups with tight budgets, companies needing a quick web presence, and businesses whose needs map cleanly onto existing templates and plugins. The speed of deployment and the breadth of available tools make it an outstanding choice for content-driven sites, marketing pages, and businesses that don't need a unique product surface."},{type:"h2",text:"Where custom development wins"},{type:"bullets",items:["Unique identity: bespoke UI and UX that cannot be replicated with a theme or plugin","Performance: custom code is built for a specific purpose, optimised for the exact use case, no plugin bloat","Security: custom-built applications can implement rigorous, application-specific security standards rather than relying on a platform with known plugin vulnerabilities","Scalability: custom architecture scales to the business's actual requirements, not the limits of a CMS","Integration: seamless connection to proprietary systems, APIs, and data pipelines that no plugin supports out of the box"]},{type:"h2",text:"The hidden cost of switching later"},{type:"p",text:"One of the most common mistakes we see is starting with WordPress and migrating to custom development after the business has grown. Migrating an established CMS-driven site to a custom architecture, with live users, SEO equity, and integration dependencies, is expensive and risky. If you know your product will eventually need custom capabilities, starting custom is often cheaper in total."},{type:"callout",text:"The right tool depends on your trajectory. If you're building a business that will outgrow standard, build for where you're going, not where you are today."},{type:"h2",text:"Making the choice"},{type:"p",text:"The choice requires an honest assessment of your specific needs, your budget, and your long-term goals. WordPress for speed and standard requirements; custom for unique identity, unparalleled performance, seamless integration, and the ability to build a proprietary product surface that c
4ompetitors cannot replicate with a theme."}]},{slug:"osai-revolutionising-ai-interactions",cat:"Case Study",title:"Osai: revolutionising AI interactions with 7Code",subtitle:"How we built Osai, a prompt-sharing platform that unlocks collective intelligence across teams working with GPT-4, Midjourney, and DALL-E.",date:"Oct 11, 2023",read:"5 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"health",illus:"brain_neural",body:[{type:"lead",text:"Large Language Models are powerful in isolation. They are transformative when teams know how to use them together, sharing the prompts that work, refining them collaboratively, and building a shared library of tested AI interactions. Osai is the platform we built to make that possible."},{type:"h2",text:"The problem Osai solves"},{type:"p",text:"Every team that uses AI tools discovers prompts that work. Most of those prompts live in individual chat histories, Slack threads, or personal notebooks, invisible to the rest of the organisation. Knowledge about what works with GPT-4, Midjourney, and DALL-E stays siloed, and teams reinvent the wheel constantly."},{type:"h2",text:"What Osai does"},{type:"bullets",items:["Prompt repository: a structured, searchable library of prompts for GPT 3.5, GPT 4, Midjourney, DALL-E, and more","Prompt sharing: users create, refine, and distribute prompts, turning individual insights into organisational knowledge","Prompt evolution: community refinement improves prompts over time, with versioning to track what changed and why","Collective intelligence: teams unlock the combined expertise of every member who has found a better way to interact with AI"]},{type:"h2",text:"Our approach"},{type:"p",text:"We built Osai to be intuitive for non-technical users while giving power users the tools they need to manage prompt versioning and quality. The platform's architecture was designed to support rapid expansion to new AI models as the market evolves, so today's GPT-4 prompts sit alongside tomorrow's integrations without a rebuild."},{type:"callout",text:"The organisations winning with AI are not the ones with the most powerful models, they are the ones with the best institutional knowledge of how to use them."},{type:"h2",text:"The result"},{type:"p",text:"Osai exemplifies the power of AI and its ability to revolutionise interactions between humans and machines. By leveraging LLMs as collaborative tools rather than individual productivity boosters, Osai enhances the way teams and organisations collaborate, share knowledge, and solve complex problems at scale."}]},{slug:"low-code-no-code-vs-custom-development",cat:"Engineering",title:"Low-code vs. custom development: how to choose",subtitle:"Low-code platforms are powerful for standard needs. Custom code is the only answer when your product demands performance, flexibility, and long-term viability.",date:"Oct 10, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"energy",illus:"building_blocks",body:[{type:"lead",text:"Low-code and no-code platforms have made software development accessible to a far wider audience, and that is genuinely valuable. But the accessibility of these platforms can obscure a critical truth: they are drag-and-drop environments built around predetermined components designed for the most common use cases. When your use case is not common, you hit the ceiling fast."},{type:"h2",text:"What low-code / no-code does well"},{type:"p",text:"Low-code platforms are excellent for rapid prototyping, internal tools, and straightforward customer-facing products with standard feature requirements. They reduce time to a first working version and allow non-technical founders to validate ideas before committing to a full custom build."},{type:"h2",text:"Where custom development wins"},{type:"bullets",items:["Customisation: custom code allows unlimited flexibility, accommodating unique processes, proprietary workflows, and feature requirements that no template supports","Performance: built for a specific purpose, custom code can be optimised to meet exact performance benchmarks that off-the-shelf platforms cannot reach","Scalability: custom architecture scales to the business, not to the platform's pricing tier or technical limits","Integration: bespoke APIs and data pipelines connect seamlessly with proprietary systems","Competitive moat: a custom product surface cannot be replicated by a competitor buying the same platform licence"]},{type:"h2",text:"The hidden costs of low-code at scale"},{type:"p",text:"Low-code platforms may appear cheap and fast initially. But as requirements evolve, the cost of workarounds, plugin licensing, and platform-imposed constraints compounds. Migrating from a low-code platform to a custom solution later, with live users and production data, is expensive and risky. If custom is your destination, starting there is often cheaper in total."},{type:"callout",text:"Low-code serves a vital role in rapid prototyping. Custom development is the answer when you are building a serious business product that needs to win on performance, flexibility, and long-term viability."},{type:"h2",text:"Making the decision"},{type:"p",text:"Assess your specific needs honestly: standard requirements with a tight timeline and limited budget point toward low-code. A unique product, a performance-sensitive use case, or a long-term roadmap that demands flexibility points toward custom. The right choice is the one that serves your business goals, not the one that feels simpler today."}]},{slug:"reducing-costs-nearshoring-outstaffing",cat:"Strategy",title:"Dev c
4ost savings through nearshoring and outstaffing",subtitle:"10â30% cost savings are possible, but that is not the headline. Velocity, continuity, and access to senior talent are.",date:"Oct 11, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"ops",illus:"coin_stack",body:[{type:"lead",text:"Nearshoring and outstaffing have a reputation for being cost plays. They are, but framing them only as cost strategies undersells their real value. The teams that get the most from nearshore engagement are not the ones chasing the lowest hourly rate; they are the ones using geographic flexibility to access senior talent, sustain velocity, and build long-running product teams that know the system."},{type:"h2",text:"Nearshoring vs outstaffing: the distinction"},{type:"p",text:"Nearshoring refers to outsourcing business processes or development work to companies in neighbouring or nearby countries, gaining cultural, time-zone, and language alignment alongside cost efficiency. Outstaffing involves hiring remote professionals to work on specific projects, operating as an extension of the client's team rather than a separate vendor."},{type:"h2",text:"The cost picture"},{type:"bullets",items:["Companies using nearshoring or outstaffing can reduce development costs by 10â30% compared to equivalent local hiring","Reduced overhead: no insurance, benefits, or employment infrastru
4cture for external engineers","Flexible allocation: scale the team based on project needs, paying only for active capacity","No recruitment cost: senior engineers available immediately, without six-month hiring cycles"]},{type:"h2",text:"Why continuity is the real headline"},{type:"p",text:"Pure staff augmentation breaks on serious products because the work demands continuity. The engineer who designed the retrieval layer needs to own its evolution. A pod that churns engineers every quarter loses the institutional knowledge that makes AI and complex software work, and the client pays for that loss in bugs, regressions, and rework."},{type:"callout",text:"Cost is the table stakes. Velocity, ownership, and the ability to sustain a long-running team that knows your product, those are the real returns on a well-run nearshore engagement."},{type:"h2",text:"What to look for in a nearshore partner"},{type:"bullets",items:["Senior-led teams, not body-shop augmentation, at least one senior engineer owning architecture end-to-end","Overlap hours that are real and protected, not nominal","Low churn: the same engineers on the engagement from month four through month fourteen","Eval and ownership accountability, the team owns outcomes, not just seat hours"]},{type:"related-guide",href:"/compare/agency-vs-freelancer",title:"Comparing an agency to a freelancer?",desc:"Delivery speed, accountability, quality, and total cost â compared honestly."}]},{slug:"migrating-users-auth0-python",cat:"Engineering",title:"Migrating users between Auth0 tenants in Python",subtitle:"A practical guide to the pitfalls, edge cases, and Python patterns for moving users from one Auth0 tenant to another, without data loss or downtime.",date:"Oct 25, 2023",read:"7 min read",author:{name:"Alessandro Merola",role:"CTO",initial:"A",photo:"/project/uploads/authors/alessandro-merola.jpg"},cover:"ink",illus:"data_flow_pipe",body:[{type:"lead",text:"Migrating users between Auth0 tenants is a task that sounds straightforward until you start: rate limits bite, payload sizes vary wildly across user profiles, and the window for a zero-downtime migration is narrow. This is a practical guide to the patterns and edge cases we encountered, and the Python implementation that handled them reliably."}
4,{type:"h2",text:"Why tenant migration is harder than it looks"},{type:"p",text:"Auth0's Management API is powerful but opinionated. The export/import flow works cleanly for small tenants. At scale, thousands of users, custom metadata, linked identities, and MFA enrollments, the assumptions built into the happy path start to fail. Large payloads hit request size limits; incomplete metadata causes silent import failures; rate limiting mid-migration leaves your data in a partially migrated state."},{type:"h2",text:"The key challenges"},{type:"bullets",items:["Payload size limits: user export batches exceeding Auth0's import size threshold need chunking with careful batch sizing","Rate limiting: the Management API applies rate limits per tenant, naive iteration fails at scale without exponential backoff","Metadata completeness: custom app_metadata and user_metadata fields must be validated and sanitised before import","Linked identities: users with linked social or enterprise identities require special handling, the primary identity must be imported first","MFA enrollments: authenticator enrollments cannot be migrated directly; users must be prompted to re-enrol post-migration"]},{type:"h2",text:"The Python implementation"},{type:"p",text:"Our migration script used the Auth0 Python SDK with a chunked export strategy, processing users in configurable batches to stay within payload limits. Each batch included a retry loop with exponential backoff for rate-limited requests, and a structured log that recorded the import status of every user ID, making it safe to resume from any point of failure without re-importing already-migrated users."},{type:"callout",text:"Never run a user migration without a dry-run mode and a per-user status log. A migration that can't be safely resumed is a migration that will corrupt your data."},{type:"h2",text:"Validation and rollback"},{type:"p",text:"Before the live migration, we ran a full dry-run against a test tenant to validate payload compatibility, catch metadata issues, and measure actual throughput against the rate limits. Post-migration, we ran a reconciliation script comparing source and destination user counts, metadata checksums, and login capability, confirming zero data loss before the DNS cutover."},{type:"h2",text:"Key learnings"},{type:"bullets",items:["Chunk size of 500â1,000 users per batch is a reliable starting point for most tenants","Log every user migration individually, batch-level logging makes diagnosis impossible","Test MFA re-enrollment UX with real users before go-live: the surprise is worse than the inconvenience","Keep the source tenant read-only for 48 hours post-migration as a rollback safety net"]}]},{slug:"fixed-price-vs-time-and-materials",cat:"Strategy",title:"Fixed price vs. time and materials for software",subtitle:"The right pricing model depends on the nature of your project, your budget flexibility, and the level of scope certainty you actually have.",date:"Sep 13, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"finance",illus:"contract_doc",body:[{type:"lead",text:"Fixed price or time and materials, this is one of the most consequential decisions in a software engagement, and it is often made too quickly. Each model allocates risk differently between client and vendor, and each is the right answer in specific circumstances. Getting it wrong costs more than the price difference."},{type:"h2",text:"The fixed price model"},{type:"p",text:"In a fixed-price engagement, the scope, timeline, and cost are defined upfront and agreed before work begins. The vendor absorbs the risk of underestimation; the client has cost certainty. This model works well when the scope is genuinely fixed, a defined feature set, a contained integration, or a discovery with named deliverables."},{type:"h2",text:"When fixed price is the right choice"},{type:"bullets",items:["Projects with a well-defined, stable scope and clear acceptance criteria","Engagements with a fixed budget that cannot flex, MVP builds, c
4ompliance features, defined integrations","Short-duration projects where scope creep risk is low","Discovery phases with named deliverables and a capped timebox"]},{type:"h2",text:"The time and materials model"},{type:"p",text:"In a time and materials engagement, clients pay for the time and resources actually used. The scope can evolve as the project progresses, and both parties share the risk of scope uncertainty. This model works best for ongoing product work, complex systems where requirements will emerge during build, and long-running platform engagements."},{type:"h2",text:"When T&M is the honest answer"},{type:"bullets",items:["Open-ended product development where requirements will evolve with user feedback","Multi-phase platform builds where each phase informs the next","Agentic or AI system builds where the definition of 'done' depends on eval results","Long-running engagements where the team needs autonomy to make the right engineering decisions"]},{type:"callout",text:"A vendor offering fixed price on an unscoped agentic build has priced in the risk, and will protect that price by saying no to the changes you need."},{type:"h2",text:"The hybrid we recommend"},{type:"p",text:"For most serious product builds, we recommend a hybrid: fixed-price discovery to lock the scope and architecture, fixed-price MVP keyed to defined acceptance criteria, then time and materials with a monthly cap for the iteration phase. This aligns incentives at the points that matter and keeps flexibility where the work is genuinely uncertain."}]},{slug:"7code-discovery-mission",cat:"Strategy",title:"7Code's Discovery Mission: de-risk software builds",subtitle:"A four-week Discovery Mission is the cornerstone of every successful build, producing the product vision, backlog, wireframes, architecture, and delivery plan that make development predictable.",date:"Sep 04, 2023",read:"5 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"cyan",illus:"mission_board",body:[{type:"lead",text:"Most software projects fail not in development but in the lack of clarity before development begins. 7Code's Discovery Mission is a four-week, structured engagement that transforms a vision into a build-ready plan, producing the artefacts a team needs to start development with confidence, aligned expectations, and a realistic budget."},{type:"h2",text:"Why discovery matters"},{type:"p",text:"Skipping discovery is the most expensive shortcut in software development. Teams that start building without a shared product vision accumulate misalignment silently, in architecture decisions, in feature scope, in infrastructure choices, until the cost of course-correcting exceeds the cost of having done discovery properly in the first place."},{type:"h2",text:"The four-week structure"},{type:"bullets",items:["Week 1, Product vision: collaboratively define the product vision with stakeholders, aligning goals, identifying value propositions, and addressing potential obstacles. The product backlog takes shape.","Week 2, Wireframes and backlog: craft a detailed backlog with acceptance criteria, and create wireframes that visualise the product's user interface and information flow, enabling all stakeholders to make informed decisions.","Week 3, Technical architecture: develop a comprehensive diagram of the technical ecosystem, delineating all subsystems with accurate descriptions and ready-to-implement infrastru
4cture items.","Week 4, Delivery plan and estimates: present a well-informed delivery plan incorporating the proposed team structure, accurate estimations, milestones, and comprehensive cost estimates for effective project planning."]},{type:"h2",text:"The deliverables"},{type:"p",text:"A completed Discovery Mission produces: a product vision document signed off by leadership, a wireframe set that makes user flows explicit, a technical architecture diagram ready for implementation, a prioritised product backlog with acceptance criteria, and a delivery plan with team structure, milestones, and a transparent budget."},{type:"callout",text:"A well-executed Discovery Mission is the cornerstone of successful software development. It transforms ambiguity into clarity, and clarity into momentum."},{type:"h2",text:"What changes when you do discovery right"},{type:"p",text:"Teams that complete a proper discovery start development with a shared understanding that survives the first sprint. Architects make decisions against a known product vision. Developers build features with agreed acceptance criteria. Clients see a delivery plan they can defend to their board. The Discovery Mission doesn't slow the project down, it accelerates everything that comes after it."}]},{slug:"logistics-tech-tailored-solutions",cat:"Engineering",title:"AI-native logistics: beating the coordination tax",subtitle:"Generic logistics platforms cover 60% of the workflow and force teams to absorb the rest in spreadsheets. AI-native, integrated systems absorb the coordination tax and turn real-time data into faster, better operational decisions.",date:"Dec 10, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"ops",illus:"truck_route",body:[{type:"lead",text:"Logistics technology is being rewritten around AI. Generic transportation software still covers the easy 60 percent of the workflow and forces operations teams to absorb the rest in spreadsheets, email, and Slack threads. AI-native logistics software, agents that ingest events, LLMs that reason over the operational corpus, and evals that keep them honest, is what's replacing it. Here are the pains we hear from logistics teams every week, and the gains a tailored, AI-first system unlocks."},{type:"h2",text:"What is AI-native logistics software?"},{type:"p",text:"AI-native logistics software is a system in which large language models, retrieval, and agentic workflows are core architectural components, not bolted-on chat. The orchestrator is an LLM with structured tool use; the memory is a retrieval layer over SOPs, supplier contracts, and historical incidents; the integration surface spans the TMS, ERP, WMS, and IoT telemetry; and every action is logged for audit and continuous evaluation."},{type:"h2",text:"Five pains generic logistics software creates"},{type:"bullets",items:["Existing software dissatisfaction: commercial TMS and WMS platforms cover roughly 60% of the workflow and force costly workarounds for the other 40%","Lack of seamless integration: shipping, warehouse, finance, IoT, and customer systems each hold their own version of the truth, and reconciliation eats hours per shift","Generic logic that misses the industry's real shape: the edge cases that define logistics, customs, multi-modal handovers, last-mile exceptions, rarely match a vendor's defaults","High maintenance costs on outdated systems: legacy stacks absorb budget that should be funding the next AI agent or operational improvement","Adaptation friction when business models evolve: e-commerce, multi-modal shipping, and last-mile shifts outrun the software's flexibility within a single fiscal year"]},{type:"h2",text:"Five gains an AI-native, tailored system unlocks"},{type:"bullets",items:["Real-time integration across TMS, ERP, WMS, and IoT, with every system reading the same shipment, inventory, and customer state","AI agents that absorb the manual coordination tax: supplier follow-ups, exception triage, and shift-handover summaries","Custom logic tuned to the operations team's actual workflow, with prompts and evals owned by the client, not the vendor","Better data accuracy that compounds into better forecasting, routing, and capacity decisions, measurable in fuel spend, dwell time, and on-time-in-full metrics","A platform that adapts when the business model shifts, prompt and policy updates instead of multi-quarter rebuilds"]},{type:"callout",text:"In modern logistics, the moat is not the softw
4are, it is the integrated AI layer. The teams winning this decade are the ones whose agents read every system in real time and act under a clear, audit-ready policy."},{type:"h2",text:"How we approach AI-native logistics builds"},{type:"p",text:"We start with the operations team, not the tech stack. Week one is spent mapping the actual workflow: which decisions are made, on what data, by whom, and where the data comes from. Week two designs the integration surface, the agent boundaries, and the evaluation rubric. Only then do we build. The result is a system that fits the operation, integrates with the systems of record, and adapts as the business changes."},{type:"h2",text:"Where to start in the next 90 days"},{type:"p",text:"Pick the highest-volume, lowest-risk coordination task on the operations team's plate. Supplier follow-ups, work-order reconciliation, and shift-handover summaries are typical first wins, they have clear inputs, clear outputs, and meaningful time savings. Build a thin agent that does just that workflow, instrument the eval set against real operational data, and ship in six weeks. Then expand the agent's tool surface, not the agent count."}]},{slug:"changing-software-service-provider",cat:"Strategy",title:"How to change your software service provider",subtitle:"Sunk cost keeps clients with the wrong vendor for months too long. With AI projects the cost of waiting is higher, model choices age out, eval debt compounds. A practical playbook for assessing, securing assets, and switching cleanly.",date:"Nov 27, 2023",read:"6 min read",author:{name:"Daniela Cazac",role:"Business Development Manager",initial:"D",photo:"/project/uploads/authors/daniela-cazac.jpg"},cover:"defence",illus:"open_door",body:[{type:"lead",text:"Most clients stay with the wrong software service provider at least six months longer than they should. Sunk cost, the fear of starting over, and the hope that things will improve all push the decision out. With AI projects the delay is even more expensive: model choices age out, eval debt compounds, and the team that built the system loses the context required to maintain it. This is the playbook we use when a switch is overdue."},{type:"h2",text:"What signals it's time to switch software service provider"},{type:"p",text:"Missed deadlines, unpredictable outcomes, and a lack of professionalism that starts to tarnish your own brand are the obvious symptoms. The less obvious one is the slow drift, requirements that quietly become impossible, change requests that always cost double, and a team that no longer engages with your business problems. For AI projects, add: no eval dashboard, rising cost-per-query that nobody can explain, and a vendor still recommending fine-tuning for problems frontier models now solve out of the box."},{type:"h2",text:"A three-step strategic approach to the transition"},{type:"bullets",items:["Assess the current landscape: take an honest stock of what was promised, what was delivered, the actual quality of the code, and, for AI work, the state of the eval harness, the prompt repository, and the model cards","Safeguard your assets: secure the source code, the eval dataset, the prompt history, deployment access, and a backup of every system that matters","Seek expert guidance: bring in a fresh, neutral provider for a second opinion and a code audit, including an AI audit covering evals, retrieval design, and prompt strategy"]},{type:"h2",text:"What is a code audit, and what is an AI audit?"},{type:"p",text:"A code audit is a comprehensive evaluation of the existing codebase: its architecture, its security posture, its alignment with current best practices, and the realistic effort to extend or replace it. An AI audit goes further, inspecting the eval harness, the prompt repository, the retrieval design, the model selection, and the cost-per-query trajectory. Without both, every conversation about the transition is opinion-driven. With them, the new provider, the client, and the outgoing vendor share a factual baseline."},{type:"callout",text:"A switch made without a runnable eval suite in y
4our hands is a switch into a black box. Your evals are the artefact that lets the new team prove they're improving the system, not just changing it."},{type:"h2",text:"The benefits of getting the transition right"},{type:"bullets",items:["Informed decision-making, with a clear-eyed view of the project's true state, including AI-specific liabilities like prompt drift and eval gaps","A smoother handover, where the new provider has the codebase, the evals, and the operational context they need from day one","Reduced disruption to live users, paying customers, and internal teams during the change","A working relationship from the first sprint, rather than three months of reverse-engineering the previous team's choices"]},{type:"h2",text:"What to ask of the new partner before you sign"},{type:"bullets",items:["Show me the eval harness you'd build for this product on day one, and how you'd measure quality regressions weekly","Show me a prompt diff and explain how you'd review it in PR alongside code","Walk me through the first 90 days of the handover plan, with named owners and weekly milestones","Tell me which of my current models or fine-tunes you'd retire and which you'd keep, and why"]},{type:"h2",text:"Don't accept substandard service"},{type:"p",text:"Software is a long-term investment, and the team that builds it shapes everything that comes next. With AI products, the team also shapes the evals, the prompt strategy, and the operational discipline. If your current provider is holding the project back, the right move is rarely to wait. Assess, audit, and act, the cost of doing it well is far smaller than the cost of doing it late."}]},{slug:"aws-beanstalk-to-ecs-migration",cat:"Engineering",title:"AWS Beanstalk to ECS Fargate: AI-engineering recipe",subtitle:"AI services need a deploy story Beanstalk cannot give them. A practical recipe for moving a containerised AI workload to ECS on Fargate, with VPC, load balancer, and a GitHub Actions deploy pipeline.",date:"Oct 25, 2023",read:"8 min read",author:{name:"Alessandro Merola",role:"CTO",initial:"A",photo:"/project/uploads/authors/alessandro-merola.jpg"},cover:"energy",illus:"cloud_lift",body:[{type:"lead",text:"ECS on Fargate is the natural step up from AWS Elastic Beanstalk for AI engineering teams that have outgrown Beanstalk's deploy story but do not want to take on a full Kubernetes platform. Containerised LLM proxies, retrieval workers, and agent runtimes need predictable rollouts, real CI/CD, and observability that Beanstalk struggles to deliver. The migration is mechanical once the underlying primitives are in place. This is the recipe we use."},{type:"h2",text:"What we are aiming for"},{type:"bullets",items:["A standard AWS infrastructure footprint: VPC, public subnets, security groups, an Application Load Balancer, and an ECS cluster","A deploy pipeline that ships from a GitHub push to an ECS service update, without manual steps","A publicly accessible HTTP endpoint backed by a containerised service, an AI inference worker, retrieval API, or agent runtime, running on Fargate","Per-service auto-scaling and cost guardrails sized for AI workloads, where token spend and inference latency are first-class operational concerns"]},{type:"h2",text:"What gets created"},{type:"p",text:"A single bash script provisions the foundation: the VPC and its subnets, the security groups, the ECR repository for the container image, the CloudWatch log group, the ECS cluster, the task definition, the service, the target group, and the Application Load Balancer with its listener. Treat the script as code, version it, review it, and run it through the same review process as the application itself."},{type:"h2",text:"Two things to watch"},{type:"bullets",items:["The container port the application listens on must match the port the load balancer routes to. Mismatches here are the most common cause of healthy infrastructure with a 502 endpoint","Every ARN, role, account ID, and environment value must be updated for the target environment. Leaving placeholders in production is how outages happen"]},{type:"h2",text:"Why the task definition is the most important file"},{type:"p",text:"The ECS task definition declares the container image, the resource allocation (memory and CPU units), the network mode, the FARGATE launch type, the environment variables, the port mappings, and the CloudWatch log configuration. For AI services, also specify the secrets ARN for API keys, per-task token-budget environment variables, and any sidecar for observability. Version the file alongside the application code so every deploy ships infrastru
4cture intent and application together."},{type:"h2",text:"The migration steps, in order"},{type:"bullets",items:["Add a Dockerfile to the application repository if one does not already exist","Provision the VPC, subnets, and security groups using the bash script (or the equivalent IaC module)","Author the task definition file and store it in the application repository","Run the cluster creation script to wire up the cluster, service, target groups, and load balancer","Cut traffic over with a DNS swap once the new endpoint is verified, keep Beanstalk online for 48 hours as a rollback safety net"]},{type:"h2",text:"GitHub Actions: the CI/CD pipeline for AI services"},{type:"p",text:"A GitHub Actions workflow handles the deploy: build the image, push to ECR, register a new task definition revision, and update the ECS service. Enable the deployment circuit breaker so a failed deploy automatically rolls back to the last healthy task definition. For AI services, add an eval-pass-rate gate before the deploy promotes, a regression on the golden dataset should fail the build the same way a unit test would."},{type:"callout",text:"Use the deployment circuit breaker. The two minutes it costs to enable it pay for themselves the first time a bad deploy starts auto-rolling back instead of taking your AI endpoint offline."},{type:"h2",text:"When to choose ECS on Fargate"},{type:"p",text:"ECS on Fargate is the right migration target when the team has containerised the application, wants real CI/CD without Beanstalk's restrictions, and does not need the operational depth of Kubernetes. For AI engineering teams running LLM proxies, retrieval workers, agent runtimes, or async eval pipelines, it is the cleanest middle ground. The setup takes a day, the deploy pipeline takes another, and the resulting platform scales with the product without the platform team growing alongside it."}]},{slug:"aws-ecs-vs-beanstalk-perspective",cat:"Engineering",title:"Why I moved AI workloads from Beanstalk to Fargate",subtitle:"After six months on Elastic Beanstalk, the developer experience pushed me to ECS + Fargate. For containerised AI services with token budgets and eval gates, the case is even stronger.",date:"Oct 25, 2023",read:"5 min read",author:{name:"Alessandro Merola",role:"CTO",initial:"A",photo:"/project/uploads/authors/alessandro-merola.jpg"},cover:"health",illus:"cloud_compare",body:[{type:"lead",text:"I picked Elastic Beanstalk for an AWS deployment because it looked like the simplest place to start. After six months of running real production traffic on it, including LLM proxies and retrieval workers, I had collected enough small papercuts that I moved the workload to ECS + Fargate. The migration paid for itself in the first month. Here is the comparison I would make again today."},{type:"h2",text:"The AWS deployment ladder, simplified"},{type:"bullets",items:["Elastic Beanstalk: the simplest tier, focused on deploying code with minimal configuration","ECS, Elastic Container Service: a middle tier focused on orchestrating Docker containers, with Fargate for serverless compute or EC2 for self-managed hosts","EKS, Elastic Kubernetes Service: the most powerful tier, built on Kubernetes and aimed at platform-scale workloads"]},{type:"p",text:"For most workloads that do not need Kubernetes, including the AI services most product teams ship, ECS is the right place to land. It gives you containers, autoscaling, and clean integration with the rest of the AWS estate without the operational weight of a full Kubernetes platform."},{type:"h2",text:"Fargate vs EC2 for the underlying compute"},{type:"p",text:"ECS gives you two hosting options. Fargate is fully serverless, you hand AWS a container and it runs it without you managing instances. EC2 mode means managing the underlying hosts yourself. I picked Fargate because the time saved on instance management more than paid for the slightly higher per-task cost, and because AI workloads benefit from the predictable cold-start and autoscaling story Fargate provides."},{type:"h2",text:"Five things that pushed me off Beanstalk"},{type:"bullets",items:["Logs: pulling logs in Beanstalk meant requesting archives and digging through multiple groups; on ECS, CloudWatch streams them in real time, the way logs should work, especially when you are debugging an LLM request that hit a 30-second timeout","Configuration updates: Beanstalk updates across multiple instances were unreliable enough to leave services in a half-broken state; ECS rolls updates predictably with healthy/unhealthy tracking built in","GitHub integration: Beanstalk has no first-party GitHub Actions supp
4ort, so deploys depend on community actions; ECS has official actions that AWS maintains","CI/CD: Beanstalk's pipeline is restrictive, modifying environment variables or running database migrations during a deploy is awkward at best; ECS task definitions handle both naturally, including the per-deploy secret rotation that AI services need","Auto-scaling: Beanstalk's auto-scaling controls are unintuitive; ECS service auto-scaling is straightforward, reliable, and exposes the metrics that matter for AI workloads, queue depth on a retrieval worker, concurrent inference requests, token spend per minute"]},{type:"callout",text:"Beanstalk served its purpose, it was a starting point. The moment your deploy story has more requirements than 'push code, run app', and an AI service almost always does, it is time to graduate."},{type:"h2",text:"The migration was worth it, especially for AI workloads"},{type:"p",text:"Six months on, the operational story is calmer, the deploy pipeline is faster, and the platform scales without surprises. For AI services with token budgets, eval gates, and per-tenant rate limits, ECS + Fargate is the cleanest middle ground between 'too constrained' and 'too much platform'. It is not the right answer for every workload, but for the kind of containerised AI service most teams ship today, it is the one I would reach for first."}]},{slug:"how-to-hire-nearshore-ai-engineers",cat:"Operations",title:"How to Hire Nearshore AI Engineers: A Practical Guide for CTOs",subtitle:"Hiring nearshore AI engineers is faster and cheaper than most CTOs expect â if you evaluate the right signals and avoid the three most common mistakes.",date:"Jun 9, 2026",read:"8 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"ops",illus:"workflow",featured:!1,body:[{type:"lead",text:"Most CTOs who've hired nearshore AI engineers for the first time say the same thing six months in: they wish they'd done it sooner. The blockers â timezone anxiety, code quality doubt, communication overhead â are real, but they're manageable with the right screening process. The ones who get it wrong usually make one of three mistakes."},{type:"h2",text:"Why nearshore for AI engineering specifically?"},{type:"p",text:"AI engineering is a specific skill set: production LLM integration, RAG pipeline design, agent orchestration, evaluation harness construction, prompt management, and MLOps. This skill set is genuinely rare in most Western European and UK markets, where the competition for a senior ML engineer from a large tech company pushes salaries above £120k in London. Cluj-Napoca, Bucharest, Warsaw, and Tallinn have graduates from the same computer science programmes, working in the same frameworks, at 40â60% of that cost."},{type:"h2",text:"The three most common hiring mistakes"},{type:"bullets",items:["Hiring on resume keywords, not verified production AI experience. 'Used OpenAI API' is not the same as building a RAG pipeline with a held-out eval set and production observability. Ask for a specific example and probe until you hit the design decisions.","Optimising for cost per hour instead of cost per outcome. A £40/hr engineer who needs three iterations to deliver what a £65/hr engineer delivers in one is not cheaper. Senior AI engineers are rare; the saving is in avoiding rework, not in negotiating the day rate.","Skipping the trial sprint. Every nearshore engagement should begin with a two-week paid trial on a real scoped task. If the output isn't production-quality at the end of two weeks, the fit isn't there. Replace before the relationship has inertia."]},{type:"h2",text:"What to evaluate in the interview"},{type:"p",text:"The standard LeetCode interview does not predict AI engineering quality. What predicts it: (1) walk me through a RAG system you built â chunking strategy, embedding model, retrieval design, eval results; (2) how did you measure quality before shipping? (3) what broke in production and how did you diagnose it? The answers should be specific. Vague answers about 'working with LLMs' are a signal to probe harder or move on."},{type:"callout",text:"The single best interview question for a nearshore AI engineer: 'Tell me about a production AI system you built, and what its eval harness looked like.' The answer reveals everything about their actual experience level."},{type:"h2",text:"Structuring the engagement"},{type:"bullets",items:["Start with a two-week scoped trial sprint on a real task with a clear definition of done","Require the engineer to join your Slack, your standups, and your sprint cadence from day one","Set a 30-day ramp goal: the engineer should be unblocked on the codebase and delivering independently","Use monthly rolling contracts in the first three months â mutual accountability without lock-in","Document their decisions in your architecture decision records, not just in their head"]},{type:"h2",text:"Nearshore vs outstaffing vs freelance for AI work"},{type:"p",text:"Nearshore typically means a team-based arrangement through an agency: matched engineers, replacement guarantees, and an account lead who handles performance. Outstaffing is a variant where the engineer is embedded directly in your team structure, reporting into your engineering management. Freelance is a direct hire with no agency intermediary. For AI work specifically, the agency or outstaffing model wins on one dimension that matters most: if the engineer isn't a fit, or if you need to scale from one to three engineers in a quarter, you can do it without restarting the recruitment process from scratch."},{type:"h2",text:"The best nearshore AI engineering hubs in Europe in 2026"},{type:"bullets",items:["Cluj-Napoca, Romania: strong university base (BabeÈ-Bolyai), home to UiPath, Bitdefender, and a growing AI engineering ecosystem. UTC+2.","Warsaw, Poland: large talent pool, growing LLM and MLOps specialisation, strong English fluency. UTC+1.","Tallinn, Estonia: smaller pool but very high average seniority, EU-native, strong fintech and blockchain background expanding into AI. UTC+2.","Bucharest, Romania: largest talent pool in Romania, more price-compet
4itive than Cluj, slightly less specialised in AI natively. UTC+2.","Krakow, Poland: university town with strong CS graduates, growing quickly as a nearshore hub for UK and EU clients. UTC+1."]},{type:"p",text:"The pattern across all of them: strong university computer science programmes, senior engineers who've worked on production AI systems at scale, and timezone overlap that makes real-time collaboration with UK and EU teams natural, not forced."},{type:"related-guide",href:"/compare/agency-vs-freelancer",title:"Comparing an agency to a freelancer?",desc:"Delivery speed, accountability, quality, and total cost â compared honestly."}]},{slug:"top-nearshore-ai-development-agencies-europe",cat:"Strategy",title:"Top 5 Nearshore AI Development Agencies in Europe (2026)",subtitle:"A structured comparison of the leading nearshore AI engineering agencies serving UK and EU clients in 2026, based on delivery track record, team seniority, and AI specialism.",date:"Jul 14, 2026",read:"10 min read",author:{name:"Nicu Mardari",role:"CEO",initial:"N",photo:"/project/uploads/authors/nicu-mardari.jpg"},cover:"finance",illus:"bar",featured:!1,body:[{type:"lead",text:"The market for nearshore AI engineering in Europe has changed significantly in the past 18 months. Agencies that were general software shops two years ago now claim AI specialisation. Genuinely AI-native agencies â with production LLM systems, eval harnesses, and agent pipelines in their portfolio â are still a minority. This comparison is based on what we can verify from public portfolios, Clutch reviews, and direct conversations with clients who've used these agencies."},{type:"h2",text:"What we evaluated"},{type:"bullets",items:["AI specialism: do they have production LLM, RAG, and agent systems in their public portfolio, or are they generalising from web development experience?","Team seniority: what's the minimum experience level for engineers on client projects? Junior-heavy teams with AI keywords are common and usually a mistake.","Delivery model: fixed-scope, sprint-based, or T&M? Do they build evaluation harnesses as a default, or as an optional add-on?","Client base: UK/EU companies at what stage? Regulated industries? References available?","Location and timezone: real overlap with UK/EU working hours, not nominal UTC proximity."]},{type:"h2",text:"Top 5 nearshore AI development agencies in Europe (2026)"},{type:"table",head:["Agency","Location","AI Specialism","Best for","Min project size"],rows:[["7Code","Cluj-Napoca, RO","AI-native (LLM, RAG, agents, evals)","AI MVPs, production copilots, agent systems","£25k / â¬30k"],["Selleo","Rzeszów, PL","AI features on top of established SaaS practice","Scale-up product engineering with AI features","£50k"],["Software Mind","Warsaw, PL","Broad software + growing AI practice","Large enterprise transformation projects","£100k"],["Boldare","Multiple, PL","Product design + AI integration","Product design-led AI builds","£75k"],["Eleks","
4Lviv, UA","Deep ML/AI research background","Data-heavy and ML-model-centric projects","£100k"]]},{type:"h2",text:"1. 7Code â AI-native product engineering (Cluj-Napoca, Romania)"},{type:"p",text:"7Code is built specifically for AI-native product engineering: LLM integrations, RAG pipelines, multi-step agents, and the evaluation harnesses that make them reliable in production. Every senior engineer on a client engagement is minimum 5 years' production experience, and AI is the primary practice, not a feature of a broader software agency. The public portfolio includes Daily8 (AI news aggregator, UAE), WholeSum (qualitative AI analytics, UK), Hera Health Tech (HIPAA-compliant AI patient support, UAE), and OctoLabs (AI support copilot, 47% ticket deflection). AI MVPs ship in six weeks. Clutch rating: 5.0."},{type:"h2",text:"2. Selleo â product engineering with AI features (Rzeszów, Poland)"},{type:"p",text:"Selleo is a well-established product engineering agency with a growing AI practice. Their strength is mid-scale SaaS product engineering with AI features layered in â OpenAI integrations, basic RAG, chatbot interfaces. Less suited to complex agent systems or regulated-industry AI. Strong Clutch presence, good client retention record. Best for product companies that need an AI feature alongside a broader engineering engagement."},{type:"h2",text:"3. Software Mind â enterprise software with AI adoption (Warsaw, Poland)"},{type:"p",text:"Software Mind is one of Poland's larger engineering agencies. Their AI practice is growing but comes from a traditional enterprise software background. Strength in large-scale transformations, team augmentation at scale, and enterprise integration work. The AI practice is maturing â good for enterprises adding AI to existing platforms, less suited to greenfield AI-native product builds. Minimum project sizes tend to be higher."},{type:"h2",text:"4. Boldare â design-led product engineering with AI (Poland, multiple office
4s)"},{type:"p",text:"Boldare's differentiator is product design: they run extensive discovery and prototyping phases before engineering. Their AI integration work tends to start from the UX layer â a strength when the AI feature is user-facing and needs strong design thinking. Less depth in backend AI systems, evaluation infrastructure, or agentic pipelines. Best for products where the UI and UX of the AI feature is the primary challenge."},{type:"h2",text:"5. Eleks â ML research heritage with engineering delivery (Lviv, Ukraine)"},{type:"p",text:"Eleks has deep roots in data science and ML research, which gives them genuine depth in model selection, fine-tuning, and data engineering. Their challenge is translating that research background into fast product delivery â discovery phases can run long. Best suited to data-heavy projects where the underlying ML architecture is the primary challenge, rather than product velocity or LLM application development."},{type:"h2",text:"How to choose"},{type:"p",text:"The right agency depends on what you're actually building. If you're shipping an AI-native product â a copilot, a RAG search, an agent workflow â and you need it in production in six to twelve weeks, the differentiator is AI specialisation and delivery speed, not team size or brand name. If you're adding AI features to a large enterprise system with complex governance, a larger agency with enterprise delivery experience may be a better fit than a specialist AI shop."},{type:"callout",text:"Before shortlisting any agency: ask for a specific production AI system in their portfolio, ask what its evaluation harness looked like, and ask for a client reference from a regulated industry if that's relevant to your build. The answers tell you everything."}]}],COVER_COLORS={ink:{bg:"linear-gradient(135deg, #F5F3FF 0%, #EDE9FE 100%)",fg:"#5B21B6",accent:"#F97316"},cyan:{bg:"linear-gradient(135deg, #ECFEFF 0%, #CFFAFE 100%)",fg:"#0E7490",accent:"#7C3AED"},finance:{bg:"linear-gradient(135deg, #EFF6FF 0%, #DBEAFE 100%)",fg:"#1E40AF",accent:"#F59E0B"},energy:{bg:"linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%)",fg:"#92400E",accent:"#2563EB"},ops:{bg:"linear-gradient(135deg, #F0FDF4 0%, #DCFCE7 100%)",fg:"#166534",accent:"#F97316"},health:{bg:"linear-gradient(135deg, #F0F9FF 0%, #E0F2FE 100%)",fg:"#075985",accent:"#8B5CF6"},defence:{bg:"linear-gradient(135deg, #F8FAFC 0%, #F1F5F9 100%)",fg:"#1E293B",accent:"#06B6D4"}},ILLUSTRATIONS={radar:({fg:e})=>React.createElement(React.Fragment,null,[70,130,190,250].map((t,a)=>React.createElement("circle",{key:"rr"+a,cx:360,cy:260,r:t,fill:"none",stroke:e,strokeWidth:1.5,opacity:.4-.07*a})),React.createElement("line",{x1:360,y1:260,x2:590,y2:105,stroke:e,strokeWidth:2.5,opacity:.75}),React.createElement("path",{d:"M360,260 L590,105 A250,250 0 0,0 500,490",fill:e,opacity:.09}),[[430,150],[540,200],[590,310],[470,355],[340,420]].map(([t,a],i)=>React.createElement("g",{key:"rp"+i},React.createElement("circle",{cx:t,cy:a,r:6,fill:e,opacity:.55+.08*i}),React.createElement("circle",{cx:t,cy:a,r:16,fill:"none",stroke:e,strokeWidth:1,opacity:.28}))),React.createElement("circle",{cx:360,cy:260,r:12,fill:e,opacity:.45}),React.createElement("circle",{cx:360,cy:260,r:5,fill:e,opacity:.9})),rocket_arc:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("path",{d:"M100,430 C250,430 480,290 680,80",fill:"none",stroke:e,strokeWidth:2,strokeDasharray:"10 6",opacity:.55}),[[150,418],[275,375],[410,295],[545,195],[660,108]].map(([t,a],i)=>React.createElement("circle",{key:"rm"+i,cx:t,cy:a,r:4+i,fill:e,opacity:.22+.12*i})),React.createElement("g",{transform:"translate(680,80) rotate(-42)"},React.createElement("ellipse",{cx:0,cy:0,rx:18,ry:40,fill:"none",stroke:e,strokeWidth:2.5,opacity:.85}),React.createElement("ellipse",{cx:0,cy:-15,rx:8,ry:12,fill:e,opacity:.35}),React.createElement("path",{d:"M-18,25 L-32,48 L-18,36 Z",fill:e,opacity:.65}),React.createElement("path",{d:"M18,25 L32,48 L18,36 Z",fill:e,opacity:.65}),React.createElement("circle",{cx:0,cy:-15,r:4,fill:e,opacity:.75}))),balance_scale:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("line",{x1:400,y1:110,x2:400,y2:380,stroke:e,strokeWidth:2.5,opacity:.7}),React.createElement("circle",{cx:400,cy:110,r:10,fill:e,opacity:.7}),React.createElement("line",{x1:170,y1:205,x2:630,y2:180,stroke:e,strokeWidth:2.5,opacity:.65}),React.createElement("line",{x1:170,y1:205,x2:195,y2:315,stroke:e,strokeWidth:1.5,opacity:.6}),React.createElement("line",{x1:630,y1:180,x2:608,y2:290,stroke:e,strokeWidth:1.5,opacity:.6}),React.createElement("ellipse",{cx:195,cy:328,rx:70,ry:22,fill:"none",stroke:e,strokeWidth:2,opacity:.7}),React.createElement("rect",{x:130,y:306,width:130,height:30,rx:4,fill:e,opacity:.14}),React.createElement("ellipse",{cx:608,cy:302,rx:70,ry:22,fill:"none",stroke:e,strokeWidth:2,opacity:.7}),React.createElement("rect",{x:543,y:280,width:130,height:30,rx:4,fill:e,opacity:.09}),[155,178].map((t,a)=>React.createElement("circle",{key:"bc"+a,cx:195,cy:t,r:8,fill:e,opacity:.5})),React.createElement("circle",{cx:608,cy:162,r:8,fill:e,opacity:.5})),robot_arm:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:75,y:285,width:6
45,height:155,rx:6,fill:"none",stroke:e,strokeWidth:2,opacity:.6}),React.createElement("rect",{x:95,y:305,width:22,height:14,rx:2,fill:e,opacity:.38}),React.createElement("line",{x1:108,y1:285,x2:108,y2:235,stroke:e,strokeWidth:10,strokeLinecap:"round",opacity:.55}),React.createElement("line",{x1:108,y1:235,x2:205,y2:175,stroke:e,strokeWidth:8,strokeLinecap:"round",opacity:.5}),React.createElement("line",{x1:205,y1:175,x2:335,y2:195,stroke:e,strokeWidth:6,strokeLinecap:"round",opacity:.45}),React.createElement("g",{transform:"translate(335,195)"},React.createElement("circle",{r:22,fill:"none",stroke:e,strokeWidth:2,opacity:.72}),React.createElement("line",{x1:-14,y1:0,x2:14,y2:0,stroke:e,strokeWidth:2,opacity:.72}),React.createElement("line",{x1:0,y1:-14,x2:0,y2:14,stroke:e,strokeWidth:2,opacity:.72})),React.createElement("circle",{cx:510,cy:175,r:72,fill:"none",stroke:e,strokeWidth:1.5,opacity:.5}),[0,60,120,180,240,300].map((t,a)=>{const i=510+57*Math.cos(t*Math.PI/180),o=175+57*Math.sin(t*Math.PI/180);return React.createElement("circle",{key:"na"+a,cx:i,cy:o,r:6,fill:e,opacity:.65})}),React.createElement("circle",{cx:510,cy:175,r:18,fill:e,opacity:.3}),React.createElement("circle",{cx:510,cy:175,r:8,fill:e,opacity:.75}),React.createElement("path",{d:"M335,195 L510,175",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"6 4",opacity:.45})),mesh_net:({fg:e})=>React.createElement(React.Fragment,null,[[140,120],[320,80],[520,110],[700,90],[80,260],[250,230],[440,270],[620,240],[745,268],[160,390],[380,360],[580,390],[720,378]].map(([t,a],i)=>React.createElement("g",{key:"mn"+i},React.createElement("circle",{cx:t,cy:a,r:i<4?14:i<9?11:9,fill:e,opacity:.2}),React.createElement("circle",{cx:t,cy:a,r:i<4?6:i<9?5:4,fill:e,opacity:.7}))),[[[140,120],[320,80]],[[320,80],[520,110]],[[520,110],[700,90]],[[80,260],[250,230]],[[250,230],[440,270]],[[440,270],[620,240]],[[620,240],[745,268]],[[160,390],[380,360]],[[380,360],[580,390]],[[580,390],[720,378]],[[140,120],[80,260]],[[320,80],[250,230]],[[520,110],[440,270]],[[700,90],[620,240]],[[80,260],[160,390]],[[250,230],[380,360]],[[440,270],[580,390]],[[620,240],[720,378]],[[250,230],[160,390]],[[440,270],[380,360]]].map(([[t,a],[i,o]],r)=>React.createElement("line",{key:"ml"+r,x1:t,y1:a,x2:i,y2:o,stroke:e,strokeWidth:1,opacity:.3}))),loop_debug:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("circle",{cx:400,cy:240,r:165,fill:"none",stroke:e,strokeWidth:2,strokeDasharray:"22 8",opacity:.55}),React.createElement("circle",{cx:400,cy:240,r:105,fill:"none",stroke:e,strokeWidth:1.5,opacity:.3}),[0,72,144,216,288].map((t,a)=>{const i=(t-90)*Math.PI/180,o=400+165*Math.cos(i),r=240+165*Math.sin(i);return React.createElement("g",{key:"ld"+a},React.createElement("rect",{x:o-32,y:r-14,width:64,height:28,rx:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.6}),React.createElement("circle",{cx:o,cy:r,r:5,fill:e,opacity:.75}))}),React.createElement("circle",{cx:400,cy:240,r:24,fill:"none",stroke:e,strokeWidth:2,opacity:.65}),React.createElement("circle",{cx:400,cy:240,r:9,fill:e,opacity:.8}),React.createElement("path",{d:"M543,148 L558,133",stroke:e,strokeWidth:2,opacity:.65}),React.createElement("polygon",{points:"562,128 570,148 550,142",fill:e,opacity:.65})),lever_fulcrum:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("line",{x1:110,y1:340,x2:680,y2:178,stroke:e,strokeWidth:4,strokeLinecap:"round",opacity:.68}),React.createElement("polygon",{points:"378,258 400,312 356,312",fill:e,opacity:.65}),React.createElement("line",{x1:338,y1:312,x2:418,y2:312,stroke:e,strokeWidth:3,opacity:.55}),React.createElement("circle",{cx:110,cy:340,r:30,fill:"none",stroke:e,strokeWidth:2,opacity:.5}),React.createElement("circle",{cx:110,cy:340,r:8,fill:e,opacity:.55}),React.createElement("rect",{x:620,y:108,width:90,height:58,rx:6,fill:"none",stroke:e,strokeWidth:2,opacity:.65}),React.createElement("line",{x1:635,y1:124,x2:695,y2:124,stroke:e,strokeWidth:1.5,opacity:.55}),React.createElement("line",{x1:635,y1:137,x2:685,y2:137,stroke:e,strokeWidth:1.5,opacity:.55}),React.createElement("line",{x1:635,y1:150,x2:690,y2:150,stroke:e,strokeWidth:1.5,opacity:.55}),[0,1,2,3].map(t=>React.createElement("line",{key:"la"+t,x1:648,y1:88,x2:648+18*(t+1),y2:88-15*(t+1),stroke:e,strokeWidth:1,opacity:.35}))),handover_docs:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:75,y:150,width:185,height:240,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.6}),[185,210,235,260,285,310].map((t,a)=>React.createElement("line",{key:"hd"+a,x1:100,y1:t,x2:235,y2:t,stroke:e,strokeWidth:1.5,opacity:.38})),React.createElement("circle",{cx:140,cy:164,r:9,fill:e,opacity:.55}),React.createElement("rect",{x:540,y:120,width:185,height:240,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.6}),[155,180,205,230,255,280].map((t,a)=>React.createElement("line",{key:"hr"+a,x1:565,y1:t,x2:700,y2:t,stroke:e,strokeWidth:1.5,opacity:.38})),React.createElement("circle",{cx:688,cy:134,r:9,fill:e,opacity:.55}),React.createElement("path",{d:"M265,265 C345,220 465,200 540,232",fill:"none",stroke:e,strokeWidth:2.5,strokeDasharray:"10 5",opacity:.65}),React.createElement("polygon",{points:"540,222 558,232 536,245",fill:e,opacity:.7}),React.createElement("circle",{cx:400,cy:242,r:22,fill:"none",stroke:e,strokeWidth:1.5,opacity:.45}),React.createElement("line",{x1:388,y1:242,x2:412,y2:242,stroke:e,strokeWidth:2,opacity:.6}),React.createElement("line",{x1:400,y1:230,x2:400,y2:254,stroke:e,strokeWidth:2,opacity:.6})),world_grid:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("ellipse",{cx:400,cy:240,rx:220,ry:220,fill:"none",stroke:e,strokeWidth:1.5,opacity:.5}),[-130,-65,0,65,130].map((t,a)=>{const i=Math.sqrt(Math.max(0,48400-t*t));return React.createElement("ellipse",{key:"wg"+a,cx:400,cy:240+t,rx:i,ry:.3*i,fill:"none",stroke:e,strokeWidth:1,opacity:.35})}),[-.8,-.4,0,.4,.8].map((t,a)=>React.createElement("ellipse",{key:"wm"+a,cx:400,cy:240,rx:220*Math.abs(Math.sin(1.5*t))+5,ry:220,fill:"none",stroke:e,strokeWidth:1,opacity:.32})),[[320,165],[480,148],[248,285],[562,295],[412,345],[340,228]].map(([t,a],i)=>React.createElement("g",{key:"wp"+i}
4,React.createElement("circle",{cx:t,cy:a,r:8,fill:e,opacity:.65}),React.createElement("line",{x1:t,y1:a,x2:t,y2:a-26,stroke:e,strokeWidth:1.5,opacity:.55}),React.createElement("circle",{cx:t,cy:a-26,r:4,fill:"none",stroke:e,strokeWidth:1.5,opacity:.5}))),React.createElement("path",{d:"M320,165 Q400,132 480,148",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"6 4",opacity:.5}),React.createElement("path",{d:"M248,285 Q400,248 562,295",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"6 4",opacity:.5})),fork_path:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("line",{x1:100,y1:240,x2:375,y2:240,stroke:e,strokeWidth:3,opacity:.7}),React.createElement("circle",{cx:375,cy:240,r:15,fill:e,opacity:.4}),React.createElement("circle",{cx:375,cy:240,r:6,fill:e,opacity:.85}),React.createElement("line",{x1:375,y1:240,x2:645,y2:118,stroke:e,strokeWidth:3,opacity:.7}),React.createElement("line",{x1:375,y1:240,x2:645,y2:362,stroke:e,strokeWidth:1.5,strokeDasharray:"8 5",opacity:.38}),React.createElement("rect",{x:645,y:88,width:105,height:60,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.7}),React.createElement("circle",{cx:666,cy:118,r:6,fill:e,opacity:.6}),React.createElement("line",{x1:678,y1:112,x2:730,y2:112,stroke:e,strokeWidth:1.5,opacity:.5}),React.createElement("line",{x1:678,y1:126,x2:718,y2:126,stroke:e,strokeWidth:1.5,opacity:.5}),React.createElement("rect",{x:645,y:332,width:105,height:60,rx:8,fill:"none",stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("line",{x1:665,y1:352,x2:725,y2:352,stroke:e,strokeWidth:1,opacity:.28}),React.createElement("line",{x1:665,y1:366,x2:705,y2:366,stroke:e,strokeWidth:1,opacity:.28}),React.createElement("polygon",{points:"641,112 653,104 653,120",fill:e,opacity:.7}),React.createElement("polygon",{points:"641,358 653,350 653,366",fill:e,opacity:.38})),org_tree:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:340,y:58,width:120,height:52,rx:6,fill:"none",stroke:e,strokeWidth:2,opacity:.68}),React.createElement("circle",{cx:400,cy:84,r:10,fill:e,opacity:.55}),React.createElement("line",{x1:400,y1:110,x2:400,y2:155,stroke:e,strokeWidth:1.5,opacity:.58}),React.createElement("line",{x1:160,y1:155,x2:640,y2:155,stroke:e,strokeWidth:1.5,opacity:.48}),[160,400,640].map((t,a)=>React.createElement("g",{key:"ot"+a},React.createElement("line",{x1:t,y1:155,x2:t,y2:195,stroke:e,strokeWidth:1.5,opacity:.48}),React.createElement("rect",{x:t-62,y:195,width:124,height:52,rx:6,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("circle",{cx:t,cy:221,r:9,fill:e,opacity:.5}))),React.createElement("line",{x1:160,y1:247,x2:160,y2:292,stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("line",{x1:100,y1:292,x2:220,y2:292,stroke:e,strokeWidth:1.5,opacity:.32}),[100,220].map((t,a)=>React.createElement("g",{key:"ob"+a},React.createElement("line",{x1:t,y1:292,x2:t,y2:328,stroke:e,strokeWidth:1.5,opacity:.32}),React.createElement("rect",{x:t-42,y:328,width:84,height:40,rx:5,fill:"none",stroke:e,strokeWidth:1.5,opacity:.48}))),React.createElement("line",{x1:640,y1:247,x2:640,y2:292,stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("line",{x1:580,y1:292,x2:700,y2:292,stroke:e,strokeWidth:1.5,opacity:.32}),[580,700].map((t,a)=>React.createElement("g",{key:"oc"+a},React.createElement("line",{x1:t,y1:292,x2:t,y2:328,stroke:e,strokeWidth:1.5,opacity:.32}),React.createElement("rect",{x:t-42,y:328,width:84,height:40,rx:5,fill:"none",stroke:e,strokeWidth:1.5,opacity:.48})))),conf_skyline:({fg:e})=>React.createElement(React.Fragment,null,[{x:58,y:335,w:55,h:145},{x:123,y:295,w:48,h:185},{x:181,y:255,w:78,h:225},{x:269,y:318,w:56,h:162},{x:335,y:235,w:68,h:245},{x:413,y:278,w:54,h:202},{x:477,y:258,w:88,h:222},{x:575,y:298,w:62,h:182},{x:647,y:338,w:68,h:142}].map(({x:t,y:a,w:i,h:o},r)=>React.createElement("g",{key:"cs"+r},React.createElement("rect",{x:t,y:a,width:i,height:o,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42+r%3*.
409}),Array.from({length:Math.floor(o/28)}).map((i,o)=>React.createElement("rect",{key:"cw"+o,x:t+8,y:a+10+28*o,width:10,height:10,fill:e,opacity:.16})))),React.createElement("ellipse",{cx:400,cy:100,rx:92,ry:58,fill:"none",stroke:e,strokeWidth:2,opacity:.5}),React.createElement("path",{d:"M380,158 L370,185 L395,162",fill:e,opacity:.45}),[360,400,440].map((t,a)=>React.createElement("circle",{key:"cn"+a,cx:t,cy:100,r:5,fill:e,opacity:.55}))),magnify_code:({fg:e})=>React.createElement(React.Fragment,null,[118,152,186,220,254,288,322].map((t,a)=>React.createElement("line",{key:"mc"+a,x1:78,y1:t,x2:375+8*a,y2:t,stroke:e,strokeWidth:1.5,opacity:.32+a%3*.09})),[78,120,162].map((t,a)=>React.createElement("line",{key:"mi"+a,x1:t,y1:118,x2:t,y2:322,stroke:e,strokeWidth:1,opacity:.22})),React.createElement("circle",{cx:562,cy:255,r:142,fill:"none",stroke:e,strokeWidth:3,opacity:.68}),React.createElement("circle",{cx:562,cy:255,r:120,fill:e,opacity:.05}),[198,228,258,288,318].map((t,a)=>React.createElement("line",{key:"ml2"+a,x1:440,y1:t,x2:684,y2:t,stroke:e,strokeWidth:2,opacity:.42+a%2*.16})),React.createElement("line",{x1:672,y1:367,x2:744,y2:438,stroke:e,strokeWidth:6,strokeLinecap:"round",opacity:.65}),React.createElement("line",{x1:682,y1:377,x2:754,y2:448,stroke:e,strokeWidth:3,strokeLinecap:"round",opacity:.42})),stacked_layers:({fg:e})=>React.createElement(React.Fragment,null,[{y:368,w:500},{y:302,w:440},{y:236,w:380},{y:170,w:318},{y:104,w:256}].map(({y:t,w:a},i)=>{const o=400-a/2;return React.createElement("g",{key:"sl"+i},React.createElement("rect",{x:o,y:t,width:a,height:50,rx:6,fill:"none",stroke:e,strokeWidth:2,opacity:.5+.09*i}),React.createElement("rect",{x:o,y:t,width:a,height:50,rx:6,fill:e,opacity:.05+.025*i}),[...Array(Math.floor(a/32))].map((a,i)=>React.createElement("line",{key:"sv"+i,x1:o+26+32*i,y1:t+10,x2:o+26+32*i,y2:t+40,stroke:e,strokeWidth:.5,opacity:.18})))})),relay_baton:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("path",{d:"M90,348 C200,348 250,198 355,198 C460,198 510,348 620,348",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"8 5",opacity:.38}),React.createElement("circle",{cx:195,cy:308,r:30,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("circle",{cx:195,cy:308,r:11,fill:e,opacity:.5}),React.createElement("circle",{cx:605,cy:308,r:30,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("circle",{cx:605,cy:308,r:11,fill:e,opacity:.5}),React.createElement("rect",{x:338,y:214,width:124,height:32,rx:16,fill:"none",stroke:e,strokeWidth:2.5,opacity:.75}),React.createElement("rect",{x:348,y:219,width:104,height:22,rx:11,fill:e,opacity:.22}),React.createElement("line",{x1:225,y1:308,x2:338,y2:230,stroke:e,strokeWidth:1.5,strokeDasharray:"6 4",opacity:.5}),React.createElement("line",{x1:462,y1:230,x2:575,y2:308,stroke:e,strokeWidth:1.5,strokeDasharray:"6 4",opacity:.5}),React.createElement("polygon",{points:"336,230 322,242 335,254",fill:e,opacity:.65}),React.createElement("polygon",{points:"464,230 476,242 463,254",fill:e,opacity:.65})),two_columns:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:95,y:98,width:248,height:324,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("rect",{x:457,y:98,width:248,height:324,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("rect",{x:95,y:98,width:248,height:46,rx:8,fill:e,opacity:.2}),React.createElement("rect",{x:457,y:98,width:248,height:46,rx:8,fill:e,opacity:.13}),[168,202,236,270,304,338,372].map((t,a)=>React.createElement("line",{key:"tl"+a,x1:118,y1:t,x2:322,y2:t,stroke:e,strokeWidth:1.5,opacity:.32+a%2*.12})),[168,202,236,270,304,338,372].map((t,a)=>React.createElement("line",{key:"tr"+a,x1:480,y1:t,x2:684,y2:t,stroke:e,strokeWidth:1.5,opacity:.32+a%2*.12})),React.createElement("line",{x1:400,y1:78,x2:400,y2:452,stroke:e,strokeWidth:1,strokeDasharray:"5 5",opacity:.28}),[175,209,243,277].map((t,a)=>React.createElement("circle",{key:"tc"+a,cx:138,cy:t,r:6,fill:e,opacity:.55})),[175,243].map((t,a)=>React.createElement("circle",{key:"tx"+a,cx:498,cy:t,r:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}))),brain_neural:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("path",{d:"M258,118 C198,98 148,148 148,218 C148,288 198,328 248,338 C268,378 328,398 400,398 C472,398 532,378 552,338 C602,328 652,288 652,218 C652,148 602,98 542,118 C522,78 462,58 400,58 C338,58 278,78 258,118 Z",fill:"none",stroke:e,strokeWidth:2,opacity:.52}),[[318,158],[442,153],[278,238],[400,228],[532,233],[358,318],[452,313],[218,183],[582,186],[308,288],[492,283]].map(([t,a],i)=>React.createElement("circle",{key:"bn"+i,cx:t,cy:a,r:7,fill:e,opacity:.58})),[[[318,158],[442,153]],[[318,158],[278,238]],[[442,153],[532,233]],[[278,238],[400,228]],[[400,228],[532,233]],[[278,238],[308,288]],[[532,233],[492,283]],[[400,228],[358,318]],[[400,228],[452,313]],[[218,183],[278,238]],[[582,186],[532,233]],[[308,288],[358,318]],[[492,283],[452,313]],[[318,158],[218,183]],[[442,153],[582,186]]].map(([[t,a],[i,o]],r)=>
4React.createElement("line",{key:"bl"+r,x1:t,y1:a,x2:i,y2:o,stroke:e,strokeWidth:1,opacity:.33}))),building_blocks:({fg:e})=>React.createElement(React.Fragment,null,[{x:98,y:322,w:122,h:62,studs:3},{x:98,y:260,w:122,h:62,studs:3},{x:220,y:291,w:122,h:62,studs:3},{x:198,y:362,w:182,h:62,studs:4},{x:378,y:232,w:162,h:62,studs:4},{x:378,y:294,w:162,h:62,studs:4},{x:378,y:356,w:162,h:62,studs:4},{x:538,y:262,w:142,h:62,studs:3},{x:538,y:324,w:142,h:62,studs:3}].map(({x:t,y:a,w:i,h:o,studs:r},n)=>React.createElement("g",{key:"bb"+n},React.createElement("rect",{x:t,y:a,width:i,height:o,rx:4,fill:"none",stroke:e,strokeWidth:2,opacity:.56+n%3*.1}),React.createElement("rect",{x:t,y:a,width:i,height:o,rx:4,fill:e,opacity:.06+n%2*.04}),[...Array(r)].map((o,n)=>React.createElement("ellipse",{key:"bs"+n,cx:t+i/(r+1)*(n+1),cy:a-8,rx:13,ry:7,fill:"none",stroke:e,strokeWidth:1.5,opacity:.52}))))),coin_stack:({fg:e})=>React.createElement(React.Fragment,null,[0,1,2,3,4,5,6].map(t=>React.createElement("ellipse",{key:"cs1"+t,cx:218,cy:352-28*t,rx:92,ry:22,fill:"none",stroke:e,strokeWidth:2,opacity:.45+.05*t})),[0,1,2,3].map(t=>React.createElement("ellipse",{key:"cs2"+t,cx:552,cy:312-28*t,rx:72,ry:18,fill:"none",stroke:e,strokeWidth:2,opacity:.45+.05*t})),React.createElement("path",{d:"M332,218 C392,158 442,158 492,198",fill:"none",stroke:e,strokeWidth:2,strokeDasharray:"8 5",opacity:.58}),React.createElement("polygon",{points:"492,198 506,184 502,208",fill:e,opacity:.65}),React.createElement("line",{x1:218,y1:118,x2:218,y2:163,stroke:e,strokeWidth:2.5,opacity:.55}),React.createElement("polygon",{points:"218,110 208,132 228,132",fill:e,opacity:.55}),React.createElement("line",{x1:552,y1:172,x2:552,y2:212,stroke:e,strokeWidth:2.5,opacity:.55}),React.createElement("polygon",{points:"552,164 542,184 562,184",fill:e,opacity:.55})),data_flow_pipe:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:78,y:188,width:152,height:122,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("line",{x1:108,y1:214,x2:202,y2:214,stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("line",{x1:108,y1:234,x2:188,y2:234,stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("line",{x1:108,y1:254,x2:198,y2:254,stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("rect",{x:570,y:165,width:152,height:122,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("circle",{cx:628,cy:204,r:22,fill:"none",stroke:e,strokeWidth:1.5,opacity:.52}),React.createElement("circle",{cx:628,cy:204,r:9,fill:e,opacity:.48}),React.createElement("line",{x1:230,y1:250,x2:342,y2:250,stroke:e,strokeWidth:3,opacity:.58}),React.createElement("line",{x1:342,y1:250,x2:342,y2:198,stroke:e,strokeWidth:3,opacity:.52}),React.createElement("line",{x1:342,y1:198,x2:458,y2:198,stroke:e,strokeWidth:3,opacity:.52}),React.createElement("line",{x1:458,y1:198,x2:458,y2:250,stroke:e,strokeWidth:3,opacity:.52}),React.createElement("line",{x1:458,y1:250,x2:570,y2:250,stroke:e,strokeWidth:3,opacity:.58}),[[282,250],[342,224],[400,198],[458,224],[514,250]].map(([t,a],i)=>React.createElement("circle",{key:"dp"+i,cx:t,cy:a,r:6,fill:e,opacity:.58})),React.createElement("polygon",{points:"564,242 570,258 554,250",fill:e,opacity:.65})),contract_doc:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:228,y:78,width:344,height:364,rx:10,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("rect",{x:228,y:78,width:344,height:52,rx:10,fill:e,opacity:.18}),[162,192,222,252,282,312,342,372,402].map((t,a)=>React.createElement("line",{key:"cd"+a,x1:262,y1:t,x2:542,y2:t,stroke:e,strokeWidth:1.5,opacity:.32+a%3*.09})),React.createElement("line",{x1:262,y1:408,x2:375,y2:408,stroke:e,strokeWidth:2.5,opacity:.58}),React.createElement("line",{x1:428,y1:408,x2:542,y2:408,stroke:e,strokeWidth:2.5,opacity:.58}),React.createElement("line",{x1:262,y1:420,x2:375,y2:420,stroke:e,strokeWidth:1,opacity:.32}),React.createElement("line",{x1:428,y1:420,x2:542,y2:420,stroke:e,strokeWidth:1,opacity:.32}),React.createElement("circle",{cx:288,cy:99,r:15,fill:"none",stroke:e,strokeWidth:1.5,opacity:.52}),React.createElement("line",{x1:282,y1:99,x2:294,y2:99,stroke:e,strokeWidth:2,opacity:.65}),React.createElement("line",{x1:288,y1:93,x2:288,y2:105,stroke:e,strokeWidth:2,opacity:.65})),mission_board:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:78,y:78,width:644,height:384,rx:10,fill:"none",stroke:e,strokeWidth:2,opacity:.52}),React.createElement("line",{x1:78,y1:128,x2:722,y2:128,stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("rect",{x:98,y:148,width:222,height:142,rx:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.48}),React.createElement("rect",{x:338,y:148,width:364,height:62,rx:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.48}),React.createElement("rect",{x:338,y:228,width:364,height:62,rx:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.48}),React.createElement("rect",{x:98,y:308,width:608,height:134,rx:6,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),[332,362,392].map((t,a)=>React.createElement("line",{key:"mb"+a,x1:118,y1:t,x2:686,y2:t,stroke:e,strokeWidth:1.5,opacity:.32})),React.createElement("circle",{cx:532,cy:174,r:16,fill:"none",stroke:e,strokeWidth:1.5,opacity:.52}),React.createElement("line",{x1:524,y1:174,x2:540,y2:174,stroke:e,strokeWidth:2,opacity:.6}),React.createElement("line",{x1:532,y1:166,x2:532,y2:182,stroke:e,strokeWidth:2,opacity:.6}),React.createElement("circle",{cx:532,cy:254,r:16,fill:e,opacity:.32}),React.createElement("circle",{cx:532,cy:254,r:7,fill:e,opacity:.68})),truck_route:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("path",{d:"M78,298 C178,298 198,218 318,218 C438,218 458,298 578,298 C638,298 678,268 722,248",fill:"none",stroke:e,strokeWidth:2,strokeDasharray:"10 6",opacity:.52}),[[178,268],[318,218],[458,264],[578,293]].map(([t,a],i)=>React.createElement("g",{key:"tr"+i},React.createElement("circle",{cx:t,cy:a,r:9,fill:e,opacity:.58}),React.createElement("line",{x1:t,y1:a,x2:t,y2:a-22,stroke:e,strokeWidth:1.5,opacity:.45}),React.createElement("circle",{cx:t,cy:a-22,r:4,fill:"none",stroke:e,strokeWidth:1.5,opacity:.45}))),React.createElement("g",{transform:"translate(96,340)"},React.createElement("rect",{x:0,y:-42,width:125,height:42,rx:4,fill:"none",stroke:e,strokeWidth:2,opacity:.68}),React.createElement("rect",{x:82,y:-68,width:43,height:26,rx:3,fill:"none",stroke:e,strokeWidth:1.5,opacity:.58}),React.createElement("circle",{cx:22,cy:7,r:15,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("circle",{cx:22,cy:7,r:6,fill:e,opacity:.55}),React.createElement("circle",{cx:98,cy:7,r:15,fill:"none",stroke:e,strokeWidth:2,opacity:.62}),React.createElement("circle",{cx:98,cy:7,r:6,fill:e,opacity:.55}))),open_door:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("rect",{x:115,y:118,width:202,height:324,rx:8,fill:"none",stroke:e,strokeWidth:2.5,opacity:.58}),React.createElement("rect",{x:125,y:128,width:182,height:304,rx:6,fill:e,opacity:.08}),React.createElement("circle",{cx:284,cy:280,r:9,fill:e,opacity:.58}),React.createElement("rect",{x:482,y:98,width:202,height:344,rx:8,fill:"none",stroke:e,strokeWidth:2.5,opacity:.68}),React.createElement("rect",{x:492,y:108,width:182,height:324,rx:6,fill:e,opacity:.12}),React.createElement("circle",{cx:502,cy:270,r:9,fill:e,opacity:.68}),[140,165,190,215,240].map((t,a)=>React.createElement("line",{key:"od"+a,x1:502,y1:t,x2:668,y2:t,stroke:e,strokeWidth:1,opacity:.24})),React.createElement("path",{d:"M322,278 C372,258 422,258 480,268",fill:"none",stroke:e,strokeWidth:2,opacity:.65}),React.createElement("polygon",{points:"480,260 495,268 479,278",fill:e,opacity:.68}),[158,178,198,218,238,258].map((t,a)=>React.createElement("line",{key:"ol"+a,x1:126,y1:t,x2:296,y2:t,stroke:e,strokeWidth:1,opacity:.2}))),cloud_lift:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("ellipse",{cx:400,cy:128,rx:202,ry:82,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("ellipse",{cx:278,cy:162,rx:122,ry:56,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("ellipse",{cx:532,cy:154,rx:142,ry:62,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("rect",{x:308,y:294,width:184,height:122,rx:8,fill:"none",stroke:e,strokeWidth:2.5,opacity:.68}),[0,1,2,3].map(t=>React.createElement("line",{key:"cl"+t,x1:328+42*t,y1:294,x2:328+42*t,y2:416,stroke:e,strokeWidth:1,opacity:.22})),React.createElement("line",{x1:318,y1:346,x2:482,y2:346,stroke:e,strokeWidth:1,opacity:.22}),React.createElement("line",{x1:400,y1:210,x2:400,y2:294,stroke:e,strokeWidth:2.5,strokeDasharray:"9 5",opacity:.58}),React.createElement("polygon",{points:"400,204 388,226 412,226",fill:e,opacity:.68}),React.createElement("rect",{x:348,y:314,width:104,height:42,rx:4,fill:e,opacity:.2}),React.createElement("line",{x1:238,y1:380,x2:562,y2:380,stroke:e,strokeWidth:1,opacity:.24}),[238,310,380,450,520].map((t,a)=>React.createElement("line",{key:"cg"+a,x1:t,y1:380,x2:t,y2:416,stroke:e,strokeWidth:1,opacity:.2}))),cloud_compare:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("ellipse",{cx:228,cy:132,rx:147,ry:62,fill:"none",stroke:e,strokeWidth:2,opacity:.58}
4),React.createElement("ellipse",{cx:142,cy:165,rx:92,ry:42,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("ellipse",{cx:338,cy:158,rx:107,ry:44,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("rect",{x:97,y:208,width:262,height:162,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),[242,272,302,332].map((t,a)=>React.createElement("line",{key:"cc1"+a,x1:122,y1:t,x2:338,y2:t,stroke:e,strokeWidth:1.5,opacity:.32})),React.createElement("ellipse",{cx:572,cy:112,rx:147,ry:62,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),React.createElement("ellipse",{cx:486,cy:145,rx:92,ry:42,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("ellipse",{cx:682,cy:138,rx:107,ry:44,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("rect",{x:441,y:188,width:262,height:162,rx:8,fill:"none",stroke:e,strokeWidth:2,opacity:.58}),[222,252,282,312].map((t,a)=>React.createElement("line",{key:"cc2"+a,x1:466,y1:t,x2:682,y2:t,stroke:e,strokeWidth:1.5,opacity:.32})),React.createElement("circle",{cx:148,cy:290,r:9,fill:e,opacity:.48}),React.createElement("circle",{cx:148,cy:320,r:9,fill:e,opacity:.48}),React.createElement("rect",{x:466,y:236,width:52,height:19,rx:4,fill:e,opacity:.38}),React.createElement("rect",{x:466,y:266,width:52,height:19,rx:4,fill:e,opacity:.38}),React.createElement("rect",{x:466,y:296,width:52,height:19,rx:4,fill:e,opacity:.38}),React.createElement("line",{x1:400,y1:78,x2:400,y2:452,stroke:e,strokeWidth:1,strokeDasharray:"5 5",opacity:.22})),blueprint:({fg:e})=>React.createElement(React.Fragment,null,[80,160,240,320,400].map((t,a)=>React.createElement("line",{key:"bh"+a,x1:0,y1:t,x2:800,y2:t,stroke:e,strokeWidth:.5,opacity:.1})),[100,200,300,400,500,600,700].map((t,a)=>React.createElement("line",{key:"bv"+a,x1:t,y1:0,x2:t,y2:480,stroke:e,strokeWidth:.5,opacity:.1})),React.createElement("polyline",{points:"80,380 200,300 360,210 530,145 700,90",fill:"none",stroke:e,strokeWidth:2.5,opacity:.45}),[[80,380],[200,300],[360,210],[530,145],[700,90]].map(([t,a],i)=>React.createElement("g",{key:"bp"+i},React.createElement("circle",{cx:t,cy:a,r:7,fill:"none",stroke:e,strokeWidth:2,opacity:.55}),React.createElement("circle",{cx:t,cy:a,r:3,fill:e,opacity:.6}))),React.createElement("path",{d:"M40,50 L40,30 L60,30",stroke:e,fill:"none",strokeWidth:1.5,opacity:.35}),React.createElement("path",{d:"M760,50 L760,30 L740,30",stroke:e,fill:"none",strokeWidth:1.5,opacity:.35}),React.createElement("path",{d:"M40,430 L40,450 L60,450",stroke:e,fill:"none",strokeWidth:1.5,opacity:.35}),React.createElement("path",{d:"M760,430 L760,450 L740,450",stroke:e,fill:"none",strokeWidth:1.5,opacity:.35})),launch:({fg:e})=>React.createElement(React.Fragment,null,[[80,60],[200,100],[350,40],[500,80],[180,190],[620,150],[720,50]].map(([t,a],i)=>React.createElement("circle",{key:"ls"+i,cx:t,cy:a,r:1.5,fill:e,opacity:.3})),React.createElement("path",{d:"M100,440 C300,440 500,240 720,60",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"8 5",opacity:.35}),[[150,420],[290,360],[450,260],[610,145],[720,60]].map(([t,a],i)=>React.createElement("circle",{key:"lm"+i,cx:t,cy:a,r:4===i?8:5,fill:e,opacity:.2+.12*i})),React.createElement("g",{transform:"translate(720,60) rotate(-45)"},React.createElement("path",{d:"M0,-32 C12,-32 20,-10 20,12 L20,24 C20,28 12,32 0,32 C-12,32 -20,28 -20,24 L-20,12 C-20,-10 -12,-32 0,-32 Z",fill:"none",stroke:e,strokeWidth:2,opacity:.65}),React.createElement("path",{d:"M-20,20 L-33,37 L-20,30 Z",fill:e,opacity:.45}),React.createElement("path",{d:"M20,20 L33,37 L20,30 Z",fill:e,opacity:.45}),React.createElement("circle",{cx:0,cy:-8,r:8,fill:"none",stroke:e,strokeWidth:1.5,opacity:.55}),React.createElement("circle",{cx:0,cy:-8,r:3,fill:e,opacity:.5}))),circuit:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("path",{d:"M100,240 L200,240 L200,140 L400,140 L400,200 L600,200 L600,100 L720,100",fill:"none",stroke:e,strokeWidth:2,opacity:.3}),React.createElement("path",{d:"M100,340 L300,340 L300,280 L500,280 L500,380 L680,380",fill:"none",stroke:e,strokeWidth:2,opacity:.3}),React.createElement("path",{d:"M400,200 L400,340 L500,340",fill:"none",stroke:e,strokeWidth:1.5,opacity:.22}),React.createElement("path",{d:"M600,200 L600,340 L680,340",fill:"none",stroke:e,strokeWidth:1.5,opacity:.22}),[[200,240],[200,140],[400,140],[400,200],[600,200],[600,100],[300,340],[300,280],[500,280],[500,380],[680,380],[680,340]].map(([t,a],i)=>React.createElement("g",{key:"cp"+i}
4,React.createElement("circle",{cx:t,cy:a,r:8,fill:"none",stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("circle",{cx:t,cy:a,r:3,fill:e,opacity:.45}))),React.createElement("rect",{x:340,y:118,width:120,height:44,rx:4,fill:"none",stroke:e,strokeWidth:1.5,opacity:.32}),React.createElement("rect",{x:440,y:258,width:100,height:44,rx:4,fill:"none",stroke:e,strokeWidth:1.5,opacity:.32}),[0,1,2,3,4].map(t=>React.createElement("line",{key:"cpl"+t,x1:340+24*t+8,y1:118,x2:340+24*t+8,y2:110,stroke:e,strokeWidth:1.5,opacity:.28})),[0,1,2,3].map(t=>React.createElement("line",{key:"cpr"+t,x1:440+24*t+8,y1:258,x2:440+24*t+8,y2:250,stroke:e,strokeWidth:1.5,opacity:.28}))),gears:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("circle",{cx:310,cy:240,r:105,fill:"none",stroke:e,strokeWidth:2,opacity:.35}),React.createElement("circle",{cx:310,cy:240,r:72,fill:"none",stroke:e,strokeWidth:1,opacity:.18}),React.createElement("circle",{cx:310,cy:240,r:28,fill:"none",stroke:e,strokeWidth:2,opacity:.38}),Array.from({length:12},(t,a)=>{const i=30*a*Math.PI/180;return React.createElement("line",{key:"gt"+a,x1:310+105*Math.sin(i),y1:240-105*Math.cos(i),x2:310+122*Math.sin(i),y2:240-122*Math.cos(i),stroke:e,strokeWidth:6,strokeLinecap:"round",opacity:.38})}),React.createElement("circle",{cx:490,cy:175,r:58,fill:"none",stroke:e,strokeWidth:1.5,opacity:.3}),React.createElement("circle",{cx:490,cy:175,r:40,fill:"none",stroke:e,strokeWidth:1,opacity:.16}),React.createElement("circle",{cx:490,cy:175,r:16,fill:"none",stroke:e,strokeWidth:1.5,opacity:.3}),Array.from({length:8},(t,a)=>{const i=45*a*Math.PI/180;return React.createElement("line",{key:"gs"+a,x1:490+58*Math.sin(i),y1:175-58*Math.cos(i),x2:490+70*Math.sin(i),y2:175-70*Math.cos(i),stroke:e,strokeWidth:5,strokeLinecap:"round",opacity:.3})}),React.createElement("line",{x1:80,y1:390,x2:700,y2:390,stroke:e,strokeWidth:2,opacity:.25}),React.createElement("line",{x1:80,y1:410,x2:700,y2:410,stroke:e,strokeWidth:1,opacity:.15}),[110,190,270,350,430,510,590,670].map((t,a)=>React.createElement("circle",{key:"gr"+a,cx:t,cy:400,r:10,fill:"none",stroke:e,strokeWidth:1.5,opacity:.22}))),globe:({fg:e})=>React.createElement(React.Fragment,null,React.createElement("circle",{cx:400,cy:240,r:185,fill:"none",stroke:e,strokeWidth:1.5,opacity:.28}),[-100,-50,0,50,100].map((t,a)=>{const i=Math.sqrt(Math.max(0,34225-t*t));return React.createElement("ellipse",{key:"gl"+a,cx:400,cy:240+t,rx:i,ry:.28*i,fill:"none",stroke:e,strokeWidth:.7,opacity:.14})}),[-.9,-.45,0,.45,.9].map((t,a)=>React.createElement("ellipse",{key:"gm"+a,cx:400,cy:240,rx:185*Math.abs(Math.sin(1.3*t))+4,ry:185,fill:"none",stroke:e,strokeWidth:.7,opacity:.14})),[[310,175],[510,155],[245,285],[570,295],[415,345]].map(([t,a],i)=>React.createElement("g",{key:"gp"+i},React.createElement("circle",{cx:t,cy:a,r:7,fill:e,opacity:.48}),React.createElement("line",{x1:t,y1:a,x2:t,y2:a-22,stroke:e,strokeWidth:1.5,opacity:.38}),React.createElement("circle",{cx:t,cy:a-22,r:3,fill:"none",stroke:e,strokeWidth:1.5,opacity:.38}))),React.createElement("path",{d:"M310,175 Q410,135 510,155",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"5 4",opacity:.28}),React.createElement("path",{d:"M245,285 Q360,248 570,295",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"5 4",opacity:.28}),React.createElement("path",{d:"M510,155 Q492,248 415,345",fill:"none",stroke:e,strokeWidth:1.5,strokeDasharray:"5 4",opacity:.28})),skyline:({fg:e})=>React.createElement(React.Fragment,null,[{x:55,y:335,w:62,h:145},{x:127,y:295,w:52,h:185},{x:188,y:255,w:82,h:225},{x:280,y:315,w:62,h:165},{x:352,y:235,w:72,h:245},{x:434,y:285,w:58,h:195},{x:502,y:265,w:92,h:215},{x:604,y:305,w:66,h:175},{x:680,y:345,w:72,h:135}].map(({x:t,y:a,w:i,h:o},r)=>React.createElement("g",{key:"sb"+r},React.createElement("rect",{x:t,y:a,width:i,height:o,fill:"none",stroke:e,strokeWidth:1.5,opacity:.25+r%3*.06}),r%3==0&&React.createElement("rect",{x:t+8,y:a+12,width:12,height:12,fill:e,opacity:.12}),r%3==1&&React.createElement("rect",{x:t+10,y:a+14,width:10,height:10,fill:e,opacity:.1}),r%3==2&&React.createElement("rect",{x:t+i-22,y:a+10,width:14,height:14,fill:e,opacity:.12}))),React.createElement("line",{x1:40,y1:480,x2:760,y2:480,stroke:e,strokeWidth:1,opacity:.18}),[[198,115],[385,75],[562,106],[703,86],[118,158]].map(([t,a],i)=>React.createElement("g",{key:"sn"+i},React.createElement("circle",{cx:t,cy:a,r:11,fill:"none",stroke:e,strokeWidth:1.5,opacity:.42}),React.createElement("circle",{cx:t,cy:a,r:4,fill:e,opacity:.48}))),React.createElement("path",{d:"M198,115 Q292,68 385,75",fill:"none",stroke:e,strokeWidth:1.2,strokeDasharray:"5 4",opacity:.27}),React.createElement("path",{d:"M385,75 Q473,62 562,106",fill:"none",stroke:e,strokeWidth:1.2,strokeDasharray:"5 4",opacity:.27}),React.createElement("path",{d:"M562,106 Q632,88 703,86",fill:"none",stroke:e,strokeWidth:1.2,strokeDasharray:"5 4",opacity:.27}),React.createElement("path",{d:"M198,115 Q155,135 118,158",fill:"none",stroke:e,strokeWidth:1.2,strokeDasharray:"5 4",opacity:.22}),React.createElement("path",{d:"M198,115 Q192,185 188,255",fill:"none",stroke:e,strokeWidth:.8,strokeDasharray:"4 4",opacity:.18}),React.createElement("path",{d:"M385,75 Q374,155 352,235",fill:"none",stroke:e,strokeWidth:.8,strokeDasharray:"4 4",opacity:.18}),React.createElement("path",{d:"M562,106 Q538,185 502,265",fill:"none",stroke:e,strokeWidth:.8,strokeDasharray:"4 4",opacity:.18}))};function BlogCover({cover:e,illus:t,label:a,large:i=!1}){const o=COVER_COLORS[e]||COVER_COLORS.ink,r=t&&ILLUSTRATIONS[t];return React.createElement("div",{className:"blog-visual-cover"+(i?" is-large":""),style:{background:o.bg}},React.createElement("svg",{viewBox:"0 0 800 480",preserveAspectRatio:"xMidYMid slice",style:{position:"absolute",inset:0,width:"100%",height:"100%"}},React.createElement("defs",null,React.createElement("pattern",{id:"bc-"+e,width:"60",height:"60",patternUnits:"userSpaceOnUse"},React.createElement("circle",{cx:"2",cy:"2",r:"1.5",fill:o.fg,opacity:"0.08"}))),React.createElement("rect",{width:"800",height:"480",fill:"url(#bc-"+e+")"}),React.createElement("circle",{cx:"680",cy:"420",r:"210",fill:o.accent,opacity:"0.15"}),React.createElement("circle",{cx:"90",cy:"75",r:"150",fill:o.accent,opacity:"0.10"}),React.createElement("circle",{cx:"650",cy:"90",r:"260",fill:o.fg,opacity:"0.05"}),r&&React.createElement(r,{fg:o.fg,accent:o.accent||"#F97316"})),a&&React.createElement("span",{className:"blog-visual-label",style:{color:o.fg}},a))}function BlogAvatar({author:e,sm:t=!1}){const a="blog-avatar"+(t?" blog-avatar--sm":"");return e&&e.photo?React.createElement("div",{className:a,style:{overflow:"hidden",padding:0}},React.createElement("img",{src:e.photo,alt:e.name,style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}})):React.createElement("div",{className:a},e?e.initial:"")}function BlogListPage(){const[e,t]=useStateBL("All");useReveal();const a=POSTS[0],i=POSTS.slice(1),o="All"===e?i:POSTS.filter(t=>t.cat===e),r="All"===e;return useEffectBL(()=>{const e="Blog, AI Engineering, Product & Operations | 7Code",t="Field notes from 7code's AI engineering practice: LLM features, agentic workflows, AI MVPs, and production AI â written by the team building them in Cluj-Napoca.";document.title=e,setMeta("description",t),setMeta("og:title",e,"property"),setMeta("og:description",t,"property"),setMeta("og:type","website","property"),setMeta("og:url",SITE_ORIGIN_BL+"/blog","property"),setMeta("twitter:title",e,"name"),setMeta("twitter:description",t,"name"),setCanonical(SITE_ORIGIN_BL+"/blog")},[]),React.createElement("div",{className:"page"},React.createElement("section",{className:"page-hero"},React.createElement("div",{className:"container"},React.createElement("span",{className:"eyebrow",style:{justifyContent:"center"}},"Blog"),React.createElement("h1",null,"Field notes from an AI-first engineering practice"),React.createElement("p",null,"How
4we ship LLM features, run agentic workflows, structure AI MVPs, and operate AI products in production, written by the people doing it."))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},r&&React.createElement("a",{href:"/blog/"+a.slug,className:"blog-featured-card reveal"},React.createElement("div",{className:"blog-featured-cover"},React.createElement(BlogCover,{cover:a.cover,illus:a.illus,large:!0})),React.createElement("div",{className:"blog-featured-body"},React.createElement("div",{className:"blog-feat-top"},React.createElement("span",{className:"blog-cat-pill"},a.cat),React.createElement("span",{className:"blog-feat-date"},a.date," · ",a.read)),React.createElement("h2",{className:"blog-feat-title"},a.title),React.createElement("p",{className:"blog-feat-sub"},a.subtitle),React.createElement("div",{className:"blog-feat-author"},React.createElement(BlogAvatar,{author:a.author}),React.createElement("div",null,React.createElement("div",{className:"blog-author-name"},a.author.name),React.createElement("div",{className:"blog-author-role"},a.author.role))),React.createElement("span",{className:"blog-read-link"},"Read article ",React.createElement(Icon.arrow,null)))),React.createElement("div",{className:"blog-filter"},["All","Strategy","Engineering","Case Study","Operations"].map(a=>React.createElement("button",{key:a,className:"blog-filter-btn"+(a===e?" is-active":""),onClick:()=>t(a)},a))),React.createElement("div",{className:"blog-post-grid"},o.map((e,t)=>React.createElement("a",{key:e.slug,href:"/blog/"+e.slug,className:"blog-post-card reveal",style:{transitionDelay:t%3*60+"ms"}},React.createElement("div",{className:"blog-post-cover"},React.createElement(BlogCover,{cover:e.cover,illus:e.illus})),React.createElement("div",{className:"blog-post-body"},React.createElement("div",{className:"blog-post-meta"},React.createElement("span",{className:"blog-cat-pill blog-cat-pill--sm"},e.cat),React.createElement("span",{className:"blog-post-date"},e.date," · ",e.read)),React.createElement("h3",{className:"blog-post-title"},e.title),React.createElement("p",{className:"blog-post-sub"},e.subtitle),React.createElement("div",{className:"blog-post-foot"},React.createElement(BlogAvatar,{author:e.author,sm:!0}),React.createElement("span",{className:"blog-author-name"},e.author.name)))))),0===o.length&&React.createElement("div",{style:{textAlign:"center",padding:"64px 0",color:"var(--slate-500)"}},"No posts in this category yet."))),React.createElement(CTAStrip,null))}function PostBody({blocks:e}){return React.createElement("div",{className:"blog-post-article"},e.map((e,t)=>"lead"===e.type?React.createElement("p",{key:t,className:"blog-post-lead"},e.text):"h2"===e.type?React.createElement("h2",{key:t,className:"blog-post-h2"},e.text):"p"===e.type?React.createElement("p",{key:t,className:"blog-post-p"},e.text):"p-html"===e.type?React.createElement("p",{key:t,className:"blog-post-p",dangerouslySetInnerHTML:{__html:e.text}}):"related-guide"===e.type?React.createElement("a",{key:t,href:e.href,style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"20px 28px",margin:"32px 0",background:"var(--bg-cyan-50)",border:"1px solid var(--cyan-300)",borderRadius:14,textDecoration:"none",transition:"border-color 0.15s, background 0.15s"},onMouseEnter:e=>{e.currentTarget.style.background="var(--bg-cyan-100)",e.currentTarget.style.borderColor="var(--cyan-500)"},onMouseLeave:e=>{e.currentTarget.style.background="var(--bg-cyan-50)",e.currentTarget.style.borderColor="var(--cyan-300)"}},React.createElement("div",null,React.createElement("div",{style:{fontSize:11,fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--cyan-600)",marginBottom:4}},"Related guide"),React.createElement("div",{style:{fontSize:16,fontWeight:600,color:"var(--slate-800)"}},e.title),e.desc&&React.createElement("div",{style:{fontSize:13,color:"var(--slate-500)",marginTop:2}},e.desc)),React.createElement("span",{style:{flexShrink:0,width:36,height:36,borderRadius:"50%",background:"var(--cyan-600)",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff"}},React.createElement(Icon.arrow,null))):"callout"===e.type?React.createElement("div",{key:t,className:"blog-callout"},React.createElement("div",{className:"blog-callout-icon"},React.createElement(Icon.zap,{style:{width:18,height:18}})),React.createElement("p",null,e.text)):"bullets"===e.type?React.createElement("ul",{key:t,className:"blog-post-bullets"},e.items.map((e,t)=>React.createElement("li",{key:t},React.createElement("span",{className:"blog-bullet-dot"}),e))):"table"===e.type?React.createElement("div",{key:t,className:"blog-post-table-wrap",style:{overflowX:"auto",margin:"24px 0"}},React.createElement("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:15,lineHeight:1.6}},e.head&&React.createElement("thead",null,React.createElement("tr",null,e.head.map((e,t)=>React.createElement("th",{key:t,style:{textAlign:"left",padding:"10px 14px",background:"var(--slate-100)",fontFamily:"var(--font-display)",color:"var(--slate-800)",borderBottom:"2px s
4olid var(--slate-200)",fontWeight:700}},e)))),React.createElement("tbody",null,e.rows.map((e,t)=>React.createElement("tr",{key:t,style:{borderBottom:"1px solid var(--slate-100)",background:t%2==0?"transparent":"var(--slate-50)"}},e.map((e,t)=>React.createElement("td",{key:t,style:{padding:"10px 14px",color:0===t?"var(--slate-800)":"var(--slate-600)",fontWeight:0===t?600:400}},e))))))):null))}function BlogPostPage({slug:e}){const t=POSTS.find(t=>t.slug===e)||POSTS[0],a=POSTS.filter(e=>e.slug!==t.slug&&e.cat===t.cat).slice(0,2),i=POSTS[(POSTS.indexOf(t)+1)%POSTS.length];return useEffectBL(()=>{const e=t.title+" | 7Code Blog",a=t.subtitle,i=SITE_ORIGIN_BL+"/blog/"+t.slug;return document.title=e,setMeta("description",a),setMeta("og:title",e,"property"),setMeta("og:description",a,"property"),setMeta("og:type","article","property"),setMeta("og:url",i,"property"),setMeta("twitter:title",e,"name"),setMeta("twitter:description",a,"name"),setCanonical(i),()=>{}},[t.slug]),React.createElement("div",{className:"page"},React.createElement("section",{className:"blog-single-hero"},React.createElement("div",{className:"container"},React.createElement("div",{className:"blog-single-breadcrumb"},React.createElement("a",{href:"/blog"},"Blog"),React.createElement("span",null,"·"),React.createElement("span",null,t.cat)),React.createElement("div",{className:"blog-single-meta"},React.createElement("span",{className:"blog-cat-pill"},t.cat),React.createElement("span",{className:"blog-single-date"},t.date," · ",t.read)),React.createElement("h1",{className:"blog-single-title"},t.title),React.createElement("p",{className:"blog-single-sub"},t.subtitle),React.createElement("div",{className:"blog-single-author"},React.createElement(BlogAvatar,{author:t.author}),React.createElement("div",null,React.createElement("div",{className:"blog-author-name"},t.author.name),React.createElement("div",{className:"blog-author-role"},t.author.role))))),React.createElement("div",{className:"blog-single-cover-wrap"},React.createElement("div",{className:"container"},React.createElement(BlogCover,{cover:t.cover,illus:t.illus,large:!0,label:t.cat}))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container blog-single-layout"},React.createElement("aside",{className:"blog-single-sidebar"},React.createElement("div",{className:"blog-sidebar-card"},React.createElement("div",{className:"blog-sidebar-label"},"Written by"),React.createElement("div",{className:"blog-sidebar-author"},React.createElement(BlogAvatar,{author:t.author}),React.createElement("div",null,React.createElement("div",{className:"blog-author-name"},t.author.name),React.createElement("div",{className:"blog-author-role"},t.author.role))),React.createElement("div",{className:"blog-sidebar-label",style:{marginTop:20}},"Published"),React.createElement("div",{className:"blog-sidebar-date"},t.date),React.createElement("div",{className:"blog-sidebar-label",style:{marginTop:12}},"Reading time"),React.createElement("div",{className:"blog-sidebar-date"},t.read),React.createElement("div",{className:"blog-sidebar-label",style:{marginTop:12}},"Category"),React.createElement("span",{className:"blog-cat-pill",style:{marginTop:6}},t.cat)),React.createElement("a",{href:"/contact",className:"btn btn--primary",style:{width:"100%",justifyContent:"center",marginTop:16}},"Work with us ",React.createElement(Icon.arrow,null))),React.createElement("main",null,React.createElement(PostBody,{blocks:t.body}),a.length>0&&React.createElement("div",{className:"blog-related"},React.createElement("h3",{className:"blog-related-head"},"More in ",t.cat),React.createElement("div",{className:"blog-related-grid"},a.map(e=>React.createElement("a",{key:e.slug,href:"/blog/"+e.slug,className:"blog-related-card"},React.createElement("div",{className:"blog-related-cover"},React.createElement(BlogCover,{cover:e.cover,illus:e.illus})),React.createElement("div",{className:"blog-related-body"},React.createElement("div",{className:"blog-post-meta"},React.createElement("span",{className:"blog-cat-pill blog-cat-pill--sm"},e.cat),React.createElement("span",{className:"blog-post-date"},e.date)),React.createElement("h4",null,e.title)))))),React.createElement("a",{href:"/blog/"+i.slug,className:"blog-next-post"},React.createElement("div",{className:"blog-next-label"},"Next article"),React.createElement("div",{className:"blog-next-row"},React.createElement("div",null,React.createElement("div",{className:"blog-next-cat"},i.cat),React.createElement("div",{className:"blog-next-title"},i.title)),React.createElement("span",{className:"blog-next-arrow"},React.createElement(Icon.arrow,null))))))),React.createElement(CTAStrip,null))}function BlogRouter({slug:e}){return e?React.createElement(BlogPostPage,{slug:e}):React.createElement(BlogListPage,null)}window.POSTS=POSTS,window.BlogRouter=BlogRouter; 5const{useState:useStateSVC}=React,SERVICES_DATA={"ai-product-engineering":{slug:"ai-product-engineering",title:"AI-Native Product Engineering",shortTitle:"AI Product Engineering",tagline:"We discover, design, and ship AI-native web and mobile products end-to-e
5nd, from user research and UX design through LLM features, agent workflows, and the backend infrastructure to run them reliably in production. Not retrofits. Not wrappers.",summary:"7Code is an AI-first product engineering company. We treat AI as a foundational capability, not a layer bolted on at the end: the data model, the retrieval and inference loops, the evaluation harness, and the UX are designed together from week one. The products we ship, Daily8 (UAE news aggregator with AI moderation and summarisation), WholeSum (self-serve qualitative-data analytics), and OctoLabs (AI support copilot), improve with every user interaction and scale cleanly as data and traffic grow.",icon:"code",accentColor:"#06B6D4",stats:[{v:"20+",l:"Projects delivered"},{v:"6 wks",l:"to first production deploy"},{v:"Web + Mobile",l:"full-stack delivery"},{v:"HIPAA · SOC 2",l:"compliance-ready"}],problem:{title:"Bolting AI onto a product built without it is expensive. Usually too expensive.",body:"The teams that regret their architecture are the ones who built a clean CRUD app first and tried to add intelligence later. The data model doesn't support retrieval. The latency budget is gone. The UX was never designed for streaming responses or model uncertainty. We've inherited enough of these codebases to know: designing for LLMs and agents from day one costs far less than retrofitting them later, and the products that result are categorically better, faster to ship, and easier to evaluate."},whatWeDeliver:[{title:"AI-native web applications",desc:"Next.js and React apps with AI workflows embedded in the product experience, semantic search, RAG over your data, real-time suggestions, intelligent routing, and dynamic content grounded in retrieval."},{title:"Intelligent mobile apps",desc:"React Native and native iOS/Android apps with personalisation loops, on-device inference where it matters, and AI features that hold up offline. We've shipped AI mobile in media (Daily8), healthcare, and enterprise SaaS."},{title:"LLM-first user interfaces",desc:"Chat interfaces, copilots, and agentic dashboards designed for streaming, latency, and model uncertainty. We handle confidence displays, fallback paths, and tool-use UX, not just the happy path."},{title:"Agent and workflow infrastructure",desc:"Multi-step agent pipelines with tool use, memory, and human-in-the-loop checkpoints. Built on LangGraph or first-party SDKs (Anthropic, OpenAI), with eval harnesses and replay so behaviour is auditable."},{title:"AI-ready data and retrieval layer",desc:"The backend that makes AI possible: event streams, vector stores (pgvector, Pinecone), embedding pipelines, and the API contracts that keep your frontend fast while the model thinks."},{title:"Legacy integration and migration",desc:"We connect your AI-native product to the systems that hold your real data, EHRs, ERPs, CRMs, and the internal tools that predate modern APIs. No greenfield silos."},{title:"Product discovery & UX design",desc:"User research, assumption mapping, information architecture, and AI-aware UX patterns, streaming states, confidence indicators, citation displays, and fallback flows, designed before engineering begins. We deliver Figma components and a design system your engineers can build from without interpretation."}],techStack:{Frontend:["React","Next.js","TypeScript","Tailwind CSS","Zustand"],Mobile:["React Native","Expo","Swift","Kotlin"],"AI & LLM":["Claude (Anthropic)","GPT (OpenAI)","LangGraph","pgvector","Pinecone","Eval harnesses"],"Backend & Data":["Node.js","Nest.js","PostgreSQL","AWS Lambda","Kafka","Prisma"],"Design & UX":["Figma","FigJam","Storybook","design tokens","Maze"]},process:[{step:"01",title:"AI capability scoping, before the spec",desc:"We map product requirements against LLM and agent capabilities in week one, before any specification is written. Architecture decisions made early, data model, retrieval strategy, evaluation criteria, feedback loops, have a 10à impact on what's possible by month six. We get these right first."},{step:"02",title:"Two-week sprints with AI checkpoints",desc:"Every sprint ends with a deployable build and a measurable eval delta. At each review we score AI features against a held-out evaluation set, not just demo prompts, so quality moves in one direction and regressions are caught the day they happen."},{step:"03",title:"Production hardening and handoff",desc:"The final phase covers prompt management, model versioning, evaluation CI, observability, and cost controls. We do not hand off without an eval harness your team can run, dashboards for token spend and latency, and a runbook for when a model degrades. The engagement finishes when your team can operate the system independently."}],cases:["wholesum","daily8","hera"],seoTitle:"AI Product Engineering â Nearshore Senior Team | 7code",metaDescription:"AI-native product engineering by 7Code. LLM-powered web and mobile products, agents, RAG, evals, and cloud infrastru
5cture for production.",faqs:[{q:"What is AI product engineering?",a:"AI product engineering is the end-to-end process of designing, building, and deploying AI-powered software products. It combines machine learning, software architecture, and product thinking to create systems that learn, adapt, and deliver measurable business value â from initial concept through to production deployment and ongoing optimisation."},{q:"How does 7code approach AI product development?",a:"7code follows a structured, outcome-first process: discovery to define business goals, architecture design, iterative build sprints, evaluation loops to validate AI behaviour, and production hardening. Senior engineers lead every engagement. We measure success by business outcomes â cost reduction, revenue impact, or efficiency gains â not just technical delivery."},{q:"What technologies does 7code use for AI product engineering?",a:"7code builds with Python, FastAPI, and Node.js for backend services; React and Next.js for frontends; OpenAI, Anthropic Claude, and open-source LLMs for AI layers; Pinecone, Weaviate, and pgvector for vector storage; and AWS, GCP, or Azure for cloud infrastructure. Stack choices are always driven by the clientâs existing environment and scalability requirements."},{q:"How long does an AI product build typically take?",a:"A minimum viable AI product typically takes 8â16 weeks from discovery to first production release. Complexity, integration requirements, and the maturity of the clientâs data infrastructure all affect timeline. 7code uses time-boxed sprints with clear milestones, so clients see working software every two weeks rather than waiting months for a big reveal."},{q:"What is the minimum engagement size for AI product engineering?",a:"Contact [email protected] to discu
5ss scope and fit. Smaller exploratory engagements â such as a Discovery Sprint or AI Readiness Audit â are available as entry points before committing to a full build."},{q:"Can 7code take a product from idea to production?",a:"Yes. 7code handles the full product lifecycle: requirements definition, technical architecture, UI/UX design integration, AI model selection, backend and frontend engineering, QA, deployment, and post-launch support. Clients can engage 7code at any stage â from greenfield concept to taking over an existing codebase that needs AI capabilities added."},{q:"How does 7code handle AI product validation and testing?",a:"7code uses a multi-layer testing approach: unit and integration tests for conventional code, plus AI-specific evaluation frameworks to measure model accuracy, hallucination rates, and output consistency. We build eval suites during development so performance regressions are caught before production. Human-in-the-loop review gates are included for high-stakes decision paths."},{q:"What does a typical AI product engineering team look like at 7code?",a:"A typical team comprises one AI architect, two to three senior backend engineers, one frontend engineer, and a QA specialist. For larger products, a product manager and DevOps engineer are added. 7code does not staff junior engineers on client projects â all roles are senior or above."}],resourceLinks:[{text:"Read our guide to AI-native product engineering",url:"/resources/ai-native-product-engineering"},{text:"Build AI in-house or partner? Read our framework",url:"/resources/build-ai-in-house-vs-partner"}],next:{slug:"llm-agent-development",title:"LLM & Agent Development"}},"system-integrations":{slug:"system-integrations",title:"System Integrations",h1:"System & API Integrations",shortTitle:"System Integrations",tagline:"We connect your stack, ERPs, CRMs, data warehouses, SaaS tools, and legacy systems, into one reliable, observable data fabric ready to carry an AI layer on top.",summary:"Most companies don't have a data problem. They have a fragmentation problem. The data exists, but it's spread across a CRM, an ERP, a dozen SaaS tools, and a handful of databases nobody fully understands. We build the integration layer that connects them, Kafka or webhooks for events, dbt or Airbyte for batch, clean APIs in front, so your operational data is reliable, auditable, and ready to be retrieved by an LLM or agent without surprises.",icon:"globe",accentColor:"#0E7C90",stats:[{v:"32+",l:"integration connectors built"},{v:"< 60s",l:"event latency target"},{v:"99.9%",l:"pipeline uptime SLA"},{v:"6 wks",l:"typical delivery"}],problem:{title:"Your systems don't talk to each other. Every team is working from a different version of the truth.",body:"The pattern is always the same: sales works in the CRM, finance works in the ERP, operations works in a spreadsheet, and the weekly sync meeting exists to reconcile all three. Manual exports, CSV imports, and copy-paste workflows that break the moment one field changes. The cost is measured in analyst hours, delayed decisions, and, increasingly, AI features that hallucinate because the retrieval layer can't trust the source data."},whatWeDeliver:[{title:"API design and middleware",desc:"Clean, versioned APIs and middleware that translate between your systems, handling authentication, rate limiting, retry logic, idempotency, and the edge cases every integration eventually hits."},{title:"ERP and CRM connectors",desc:"Bi-directional sync between Salesforce, HubSpot, SAP, NetSuite, Microsoft Dynamics, and your internal systems. We've mapped the data models, handled the conflict resolution, and built what generic iPaaS tools skip."},{title:"Real-time event pipelines",desc:"Event-driven architectures (Apache Kafka, AWS SNS/SQS, webhooks, change-data-capture via Debezium) that propagate changes in seconds, not overnight batches. The foundation for any agent that reacts to business events."},{title:"Legacy system integration",desc:"We've integrated SOAP services, mainframe exports, FTP batch files, and systems that predate REST. If it exposes any interface, file, database, API, or message queue, we can build a reliable connector for it."}
5,{title:"AI-ready data warehouse pipelines",desc:"ELT into Snowflake, BigQuery, or Redshift with dbt-modelled transforms. Same warehouse feeds your BI dashboards and your retrieval pipelines (pgvector, Pinecone), one source of truth for humans and LLMs alike."},{title:"Integration observability",desc:"Dashboards, alerting, and audit logs for every pipeline we build. You'll know when a sync failed, which records were affected, and what the system did about it, before your users (or your AI) file a ticket."}],techStack:{"Messaging & streaming":["Apache Kafka","AWS SQS / SNS","RabbitMQ","Webhooks","Debezium CDC"],"ELT & pipelines":["Airbyte","dbt","AWS Glue","Fivetran","custom ELT"],"API & middleware":["Node.js","Nest.js","Python","GraphQL","REST","gRPC"],"Data warehouses":["Snowflake","BigQuery","Redshift","PostgreSQL"]},process:[{step:"01",title:"Integration audit and architecture",desc:"We map every system, every data flow, and every manual handoff in your current stack. Output: an integration architecture decision record, what connects to what, in what direction, with what latency and reliability requirements, signed off before we write a line of code."},{step:"02",title:"Connector-by-connector delivery",desc:"We build and ship integrations one connector at a time, validating each in production before moving to the next. A working integration shipped every two weeks, not a big-bang go-live six months from now."},{step:"03",title:"Observability, runbooks, and handoff",desc:"Every pipeline ships with a monitoring dashboard, alerting rules, and a runbook your team can follow when something breaks at 2am. We do not consider an integration finished until it has been in production long enough to fail once and recover cleanly."}],cases:["g42-fleet","numerize","revote"],seoTitle:"System Integration Services for AI Workloads | 7code",metaDescription:"System integrations by 7Code. We connect ERPs, CRMs, SaaS tools, data warehouses, and legacy systems into a reliable data fabric for AI workloads.",faqs:[{q:"What types of system integrations does 7code build?",a:"7code builds integrations across the full enterprise technology stack: API-to-API integrations between SaaS platforms, ERP and CRM connectors, HRIS integrations, payment gateway connections, IoT data ingestion pipelines, and custom middleware layers where off-the-shelf connectors cannot meet performance or compliance requirements."},{q:"Which APIs, ERPs, and CRMs does 7code have experience integrating?",a:"7code has integration experience with Salesforce, HubSpot, Pipedrive, SAP S/4HANA, Microsoft Dynamics, NetSuite, Workday, BambooHR, Stripe, Adyen, Xero, QuickBooks, and a range of healthcare-specific systems including HL7 FHIR-compliant EHRs. For less common systems, 7code conducts a Connector Feasibility Review before committing to a timeline."},{q:"How long does a typical system integration project take?",a:"A straightforward API-to-API integration between two well-documented SaaS platforms typically takes three to six weeks. ERP integrations with custom data transformation requirements run six to twelve weeks. Complex multi-system integration programmes are scoped individually. 7code provides a fixed-scope Discovery phase before full-project commitment."},{q:"Who maintains integrations after they are built?",a:"7code offers post-build maintenance retainers covering monitoring, error alerting, API version upgrades, and change requests as connected systems evolve. Alternatively, 7code can deliver a fully documented handover to the clientâs in-house team, including runbooks, architecture diagrams, and test suites. All integrations include comprehensive logging so issues are diagnosed quickly."},{q:"How does 7code test system integrations?",a:"7codeâs integration testing approach includes: contract testing to verify API schemas remain stable, end-to-end automated test suites that run in staging before every release, data integrity checks at both source and destination, load testing for high-volume integrations, and error-injection testing to validate that failure modes are handled gracefully rather than silently corrupting data."},{q:"What are the main challenges of integrating with legacy systems?",a:"Legacy systems often lack documented APIs, use non-standard data formats, have rate limits or batch-processing constraints, and require change management approval cycles that slow delivery. 7code mitigates these with a
5Legacy Connector Assessment upfront, adapter patterns that isolate legacy-specific logic, and phased integration approaches that avoid big-bang cutovers."},{q:"Should I use an iPaaS platform or custom integration code?",a:"iPaaS platforms (MuleSoft, Boomi, Make, Zapier) suit commodity integrations between common SaaS tools where volume is moderate and logic is simple. Custom integration code is warranted when performance requirements exceed iPaaS limits, data transformations are complex, compliance requires full audit trails, or total cost of ownership favours build-once over recurring licence fees."},{q:"What is the typical size of a system integration project at 7code?",a:"Integration projects at 7code range from focused three-week point-to-point connectors to multi-month enterprise integration programmes spanning ten or more systems. Most client engagements sit in the six-to-twelve-week range. 7code is equally comfortable with targeted integrations and large-scale integration architecture â scope and team size are matched to the actual requirement."}],next:{slug:"ai-automation",title:"AI & Process Automation"}},"ai-automation":{slug:"ai-automation",title:"AI & Process Automation",shortTitle:"AI & Automation",tagline:"LLM integrations, RAG copilots, and agentic workflow automation, grounded in your data, evaluated against held-out sets, and built to compound value with every interaction.",summary:"AI only matters when it changes a workflow someone actually runs. We build production-grade AI systems, RAG copilots, agent pipelines, and automations, that ground every answer in your real data, get scored against a held-out evaluation set before each release, and improve with use. We've shipped the AI moderation, daily-summary, and unbiased-opinion features inside Daily8 (UAE news aggregator), the qualitative-analytics engine inside WholeSum, and the OctoLabs support copilot that deflects 47% of tickets, and we know the difference between a demo and a production system.",icon:"cpu",accentColor:"#7C3AED",stats:[{v:"47%",l:"avg ticket deflection"},{v:"RAG + agents",l:"primary architecture"},{v:"Claude · GPT",l:"LLM options"},{v:"6 wks",l:"to production copilot"}],problem:{title:"Most AI projects fail in the gap between demo and production.",body:"The demo works because it is curated. Production does not work because it is real. Users ask unexpected questions, reference documents the model was never shown, and escalate to a human when the AI gives confidently wrong answers. We build the eval infrastructure, retrieval grounding, fallback paths, and confidence calibration that makes AI behave reliably under traffic, and the observability that catches drift before users notice."},whatWeDeliver:[{title:"Custom RAG copilots",desc:"LLM-powered assistants grounded in your data, documents, tickets, CRM, knowledge base, with cited answers, not hallucinated ones. We design the chunking, embedding, and retrieval strategy specifically for your corpus, then prove it on an eval set."},{title:"Agentic workflow automation",desc:"Multi-step agents that take scoped, auditable actions on your behalf, calling tools, writing to systems, escalating to humans on confidence thresholds. Built on LangGraph or first-party SDKs (Anthropic, OpenAI), with full state persistence and replay."},{title:"RAG pipelines that actually work",desc:"Retrieval-augmented generation tuned for production: chunking strategy, embedding choice, hybrid retrieval (semantic + keyword), reranking, and the held-out eval set that proves it."},{title:"LLM evaluation harnesses",desc:"RAGAS, Braintrust, or custom eval frameworks that score every release against a representative prompt set. You get a number, not a vibe, before you ship, and gates in CI block regressions."},{title:"Process mining and automation discovery",desc:"Workflow analysis to identify the highest-leverage automation opportunities in your operations, before writing any code. Cuts wasted prototype effort dramatically."},{title:"Fine-tuning and preference optimisation",desc:"When a base model isn't enough, structured fine-tuning on your domain data (LoRA, full fine-tune), DPO/RLHF for preference alignment, and the evaluation harness to prove it worked."}
5],techStack:{"LLM providers":["Claude (Anthropic)","GPT (OpenAI)","Mistral","Llama via Ollama / vLLM"],"RAG & Embeddings":["LangChain","LangGraph","LlamaIndex","pgvector","Pinecone"],Evaluation:["RAGAS","Braintrust","Inspect","custom eval frameworks"],"Automation & agents":["LangGraph","Temporal","n8n","first-party SDKs"]},process:[{step:"01",title:"Use-case scoping and eval design",desc:"We define success before building anything. What does 'good' look like? How do we measure it? Output: a held-out evaluation set that doubles as the specification, every model, prompt, or pipeline change is scored against it."},{step:"02",title:"Prototype, evaluate, iterate",desc:"Two-week cycles: build a narrow version, run it against the eval set, measure, and iterate. We show you the score at every review, and the failure cases that drive the next sprint."},{step:"03",title:"Production hardening and operate",desc:"Confidence thresholds, fallback paths, audit logging, eval CI, token-cost dashboards, and the drift monitoring that tells you when output quality degrades. We do not ship without these, and we can stay on to operate the system if you'd rather your team not learn it overnight."}],cases:["wholesum","daily8","melsonic"],seoTitle:"AI Process Automation Services â 7code | AI-Native Agency",metaDescription:"AI process automation by 7Code. RAG copilots, agentic workflows, and LLM integrations grounded in your data, evaluated rigorously, shipped to production.",faqs:[{q:"What is AI process automation?",a:"AI process automation uses artificial intelligence â including machine learning, natural language processing, and LLM-based agents â to execute, optimise, and monitor business workflows without constant human intervention. Unlike traditional RPA, AI automation can handle unstructured data, make contextual decisions, and adapt to process variations rather than breaking on edge cases."},{q:"How quickly can businesses see ROI from AI process automation?",a:"Most SME automation projects reach payback within 6â18 months, depending on the volume of work automated and the cost of manual effort replaced. Quick-win automations â such as invoice processing or report generation â can show positive ROI within the first quarter. 7code always models expected ROI before project start so clients have a clear business case."},{q:"What are the most common AI process automation use cases?",a:"The most in-demand use cases include invoice and document processing, customer query triage and response, HR onboarding workflows, compliance monitoring, financial reporting, and supply chain exception management. 7code has delivered automation projects across healthcare, finance, energy, logistics, and HR â adapting each solution to the clientâs existing systems and compliance requirements."},{q:"Which industries benefit most from AI process automation?",a:"Finance and insurance benefit from automated compliance checks and report generation. Healthcare gains from clinical documentation and patient triage automation. Energy companies automate meter data processing and anomaly detection. HR teams use AI to screen candidates and automate onboarding. Operations-heavy businesses in logistics and manufacturing automate exception handling and supplier communication."},{q:"How does 7code integrate AI automation with existing business systems?",a:"7code maps existing workflows first, then designs automation layers that connect to your current tools â ERP, CRM, HRIS, or custom databases â via APIs, webhooks, or direct database connectors. We prioritise non-disruptive integration: automation runs alongside existing systems initially, with migration to automated workflows happening in controlled phases to minimise operational risk."},{q:"How is AI process automation different from traditional RPA?",a:"Traditional RPA is rule-based and brittle â it breaks when document formats or process steps change. AI process automation uses machine learning and LLMs to interpret context, handle exceptions, and improve over time. It can process unstructured inputs like emails, PDFs, and voice, making it applicable to a far wider range of business processes."},{q:"Who maintains AI automation systems after go-live?",a:"7code offers post-launch maintenance retainers covering model monitoring, retraining triggers, integration upkeep, and performance reporting. Clients can also opt for a knowledge-transfer model where 7code trains the in-house team to own operations. All automations are built with observability baked in â dashboards and alerting are standard, not extras."},{q:"How do I get started with AI process automation at 7code?",a:"The first step is a free 30-minute scoping call with a 7code senior consultant. We identify two to three high-value automation opportunities, provide a rough ROI estimate, and outline a proposed approach. If thereâs a fit, we formalise scope and begin a paid Discovery Sprint â typically two weeks â before committing to a full build."}],resourceLinks:[{text:"Read our complete guide to AI automation for SMEs",url:"/resources/ai-automation-for-smes"},{text:"Build AI in-house or partner? Read our framework",url:"/resources/build-ai-in-house-vs-partner"}],next:{slug:"llm-agent-development",title:"LLM & Agent Development"}},"cloud-agentic-infra":{slug:"cloud-agentic-infra",title:"Cloud & Agentic Infrastru
5cture",shortTitle:"Cloud & Agentic Infra",tagline:"Cloud-native foundations and agentic pipeline orchestration on AWS, GCP, and Azure, so your AI products run reliably, scale automatically, and cost what they should.",summary:"Building an AI product is only half the job. The teams that ship reliably are not just good at models, they are good at infrastructure: agent pipelines that run on a schedule, recover from failure, and route intelligently between tools; observability that surfaces prompt drift before a customer notices; CI gates on eval scores instead of test coverage. We build that layer, cloud-native foundations on AWS, GCP, and Azure, vector database deployments (pgvector, Pinecone, Qdrant, Weaviate), agent orchestration on LangGraph and Temporal, and the cost and latency controls that keep your AI bill predictable.",icon:"cloud",accentColor:"#0891B2",stats:[{v:"< 3 min",l:"target deploy time"},{v:"99.9%",l:"uptime SLA"},{v:"AWS · GCP · Azure",l:"primary platforms"},{v:"< 1 hr",l:"MTTR target"}],problem:{title:"AI products fail in production for infrastru
5cture reasons, not model reasons.",body:"The model works in the notebook. The demo runs fine. But in production, agentic workflows time out, vector search latency spikes unpredictably, and nobody knows which prompt version caused the regression two weeks ago. Most teams are running AI on infrastructure designed for traditional web apps, and wondering why it's unreliable. The fix isn't a better model. It's an infrastructure layer built specifically for the way AI workloads actually behave."},whatWeDeliver:[{title:"Cloud-native AI deployments",desc:"AWS, GCP, and Azure environments right-sized for AI: GPU instances for fine-tuning, serverless inference endpoints, auto-scaling policies that match token throughput, not just HTTP requests."},{title:"Agentic pipeline orchestration",desc:"LangGraph, Temporal, and Prefect workflows that handle multi-step agent execution, tool-calling loops, retries, and state persistence. Built to recover gracefully from LLM failures and partial completions."},{title:"Vector database infrastructure",desc:"Qdrant, Weaviate, and pgvector deployments optimised for retrieval latency and embedding freshness. Indexing pipelines, namespace management, and the monitoring that surfaces staleness before users notice."},{title:"AI observability and evaluation",desc:"Prompt versioning, output logging, and continuous evaluation against your golden dataset. Datadog for infra metrics, RAGAS and Braintrust for model quality, wired together into a single operational picture."},{title:"CI/CD for AI workloads",desc:"Model promotion pipelines that gate on eval scores, not just test coverage. Canary deployments for new prompt versions, automated rollback on quality regression, and the audit trail that satisfies enterprise procurement."},{title:"Cost and latency optimisation",desc:"Model routing between providers based on latency and cost targets, caching strategies for repeated queries, and the infrastructure changes that cut your monthly AI bill without degrading output quality."}],techStack:{Cloud:["AWS","Google Cloud Platform","Azure","Cloudflare Workers AI"],Orchestration:["LangGraph","Temporal","Prefect","Airflow"],"Vector & Data":["Qdrant","Weaviate","pgvector","Pinecone"],Observability:["Datadog","RAGAS","Braintrust","OpenTelemetry","Prometheus"],"IaC & CI/CD":["Terraform","Pulumi","ArgoCD","GitHub Actions"],Containers:["Kubernetes","Docker","ECS / Fargate"]},process:[{step:"01",title:"AI infra audit and target design",desc:"We map your current stack, model providers, vector stores, pipeline triggers, and observability gaps. Output: a written architecture decision record with a prioritised list of infra risks and a proposed target state."},{step:"02",title:"Foundation and pipeline build",desc:"Cloud environments, agentic orchestration scaffolding, and vector DB setup deployed in two-week phases. Each phase ships something to production, we don't hold back until the full architecture is complete."},{step:"03",title:"Observability and handoff",desc:"Dashboards, eval pipelines, and runbooks your team owns. We consider the engagement done when your engineers can deploy a new agent, monitor its quality, and roll it back, without us in the loop."}],cases:["wholesum","daily8","hera","g42-fleet"],seoTitle:"Cloud & Agentic Infrastructure for AI Products | 7code",metaDescription:"Cloud & agentic infrastructure by 7Code. AWS, GCP, and Azure for AI products, agent pipelines (LangGraph, Temporal), vector stores, and eval CI.",faqs:[{q:"What is cloud agentic infrastructure?",a:"Cloud agentic infrastructure is the set of cloud-native services, orchestration layers, data pipelines, and security controls that underpin AI agent systems in production. It covers compute for inference, vector databases, message queues for agent coordination, observability tooling, and the networking and IAM policies that keep agentic workloads secure and compliant at scale."},{q:"Which cloud providers does 7code support for agentic infrastructure?",a:"7code designs and deploys agentic infrastructure on AWS, Google Cloud Platform, and Microsoft Azure. For clients with existing cloud commitments, 7code works within the incumbent provider. Multi-cloud and hybrid architectures â where sensitive model inference stays on-premises while orchestration runs in the cloud â are supported for regulated industries."}
5,{q:"Why does AI require specialised cloud infrastructure?",a:"AI workloads have fundamentally different profiles from conventional applications: they require GPU or TPU compute for inference, low-latency access to vector databases, high-throughput pipelines for data ingestion, and sophisticated observability to monitor model behaviour over time. Standard cloud setups are inadequate â purpose-built agentic infrastructure reduces cost, latency, and operational risk significantly."},{q:"How does 7code optimise AI infrastructure for latency and cost?",a:"7code uses a combination of model quantisation, intelligent caching of frequent LLM responses, spot/preemptible compute for batch inference, auto-scaling groups calibrated to actual traffic patterns, and CDN-layer caching for static AI outputs. Infrastructure is right-sized during a two-week Architecture Review before build, preventing over-provisioning from day one."},{q:"How does 7code ensure agentic infrastructure scales with demand?",a:"7code designs infrastructure with horizontal scalability as a first principle: stateless inference services behind load balancers, Kubernetes-managed autoscaling, queue-based decoupling of agent tasks from inference compute, and database sharding strategies for vector stores. Load and stress testing is conducted before go-live; scaling thresholds are documented so clients can manage growth without emergency rearchitecting."},{q:"How does 7code handle security and compliance for AI infrastructure?",a:"Security is embedded at design time: IAM roles follow least-privilege principles, all data at rest and in transit is encrypted, network segmentation isolates AI workloads from general systems, and audit logs capture all model interactions. For EU clients, infrastructure is GDPR-compliant by design. Regulated sectors receive additional controls aligned to sector-specific frameworks."},{q:"What monitoring and observability does 7code build into AI infrastructure?",a:"Standard observability includes: model latency and error rate dashboards, token usage and cost tracking per agent, anomaly detection on output distributions, human-in-the-loop review queues for flagged outputs, and alerting for infrastru
5cture events. 7code typically delivers observability via Grafana, Datadog, or AWS CloudWatch depending on the clientâs existing tooling."},{q:"How does 7code support migration from legacy infrastructure to cloud agentic architecture?",a:"7code conducts a Legacy Infrastructure Assessment to map existing systems, identify integration points, and define a phased migration path that keeps current operations running throughout. Migration is staged: infrastructure is rebuilt in parallel, workloads are migrated incrementally with rollback capability, and the legacy system is decommissioned only after the new architecture is validated in production."}],next:{slug:"ai-outstaffing",title:"AI Engineering Outstaffing"}},"ai-outstaffing":{slug:"ai-outstaffing",title:"AI Engineering Outstaffing",h1:"AI Engineering Outstaffing & Staff Augmentation",shortTitle:"AI Outstaffing",tagline:"Senior AI engineers embedded in your team, matched in days, not months. Your roadmap, your rituals, our engineers.",summary:"The AI talent market is broken for most companies. Senior engineers with production LLM experience are expensive, rare, and not responding to LinkedIn. The teams winning with AI right now aren't the ones with the biggest recruiting budgets, they're the ones who found a smarter way to access the talent. We embed our engineers directly into your team: your Slack, your standups, your sprint cadence. You get the leverage of a specialist without the overhead of a hire.",icon:"users",accentColor:"#0891B2",stats:[{v:"72 hrs",l:"to first matched profile"},{v:"Senior only",l:"5+ yrs production AI"},{v:"30 days",l:"scale up or down"},{v:"6 industries",l:"domain coverage"}],problem:{title:"The AI talent gap is real. Most companies can't close it by hiring.",body:"A senior AI engineer with production LLM and MLOps experience commands â¬150â280k in Europe and expects frontier model access, interesting problems, and a team that moves fast. Most product companies outside the top 20 tech firms can't compete on all three. The result: long hiring cycles, expensive mis-hires, or, most commonly, AI initiatives that stall because the right engineer was never in the room. Outstaffing solves this without the risk, the overhead, or the equity dilution of a permanent hire."},whatWeDeliver:[{title:"Senior AI & ML engineers",desc:"Engineers with production experience across LLM integration, RAG pipelines, fine-tuning, and MLOps. Matched to your stack, your domain, and the specific problem you're trying to solve, not just keyword-matched."},{title:"Full-stack product engineers",desc:"React, React Native, Node.js, and Python engineers who've shipped in AI-native codebases. They work to your sprint cadence, contribute to architecture decisions, and write the kind of code you'd want to inherit."},{title:"Embedded technical leads",desc:"A tech lead who runs a sub-team inside your organisation, architecture ownership, code review, mentoring your junior engineers, and bridging the gap between engineering and product. All without the 6-month executive search."},{title:"Domain-specialist engineers",desc:"Engineers with verified experience in regulated industries: healthcare (HIPAA, HL7, FHIR), finance (SOC 2, PCI-DSS), defence (security-cleared), and energy (IEC 62443). Rare skills available without the rare search timeline."},{title:"AI research engineers",desc:"For teams pushing the frontier: fine-tuning on proprietary data, RLHF pipeline design, evaluation framework architecture, and custom model development. Ex-research backgrounds with production delivery track records."},{title:"Flexible engagement models",desc:"Full-time equivalents, part-time specialists, and targeted sprint injections. Monthly rolling contracts. Scale up for a product launch, scale back after, with 30 days' notice and no penalty clauses."}],techStack:{"AI & ML profiles":["PyTorch","Hugging Face","LangChain","LlamaIndex","pgvector"],"Product engineering":["React","Next.js","TypeScript","Node.js","Python"],Infrastructure:["AWS","GCP","Kubernetes","Terraform","Docker"],"Evaluation & ops":["RAGAS","Braintrust","Datadog","OpenTelemetry"]},process:[{step:"01",title:"Requirements and matching, 72 hours",desc:"We scope the role together: skills, seniority, timezone, domain knowledge, and team fit. Within 72 hours we present 2â3 matched profiles with a technical summary and relevant project history attached to each. No generic CVs."},{step:"02",title:"Two-week embedded trial",desc:"The engineer joins your team for a trial sprint, real work, your co
5debase, your processes. If the fit isn't right technically or culturally, we replace at no cost and no delay. Most engagements pass the trial and move straight to ongoing."},{step:"03",title:"Ongoing engagement with a dedicated account lead",desc:"Monthly rolling contract. A dedicated account lead on our side handles performance, feedback, and any escalations, so you get the responsiveness of a direct hire without the HR overhead. Scale up or down with 30 days' notice."}],cases:["numerize","drum-bun","lidl-road-safety"],seoTitle:"AI Engineering Outstaffing â Senior Engineers | 7code",metaDescription:"AI engineering outstaffing by 7Code. Senior AI and ML engineers with LLM, RAG, and MLOps experience, embedded in your team in 72 hours. No lock-in.",faqs:[{q:"What is AI outstaffing?",a:"AI outstaffing means placing dedicated AI engineers from 7code â including LLM specialists, ML engineers, AI architects, and data engineers â directly within a clientâs team. The engineers work exclusively on the clientâs projects, using the clientâs tools and processes, under the clientâs day-to-day direction, with 7code handling employment, HR, benefits, and technical oversight."},{q:"How is AI outstaffing different from staff augmentation?",a:"The terms are often used interchangeably, but there is a meaningful distinction. Staff augmentation typically implies adding individuals to supplement a project. AI outstaffing, as 7code practises it, means placing a pre-formed, AI-specialised team that operates with continuity, shared technical standards, and peer review â not a collection of individual contractors working in isolation."},{q:"What does an AI outstaffing team from 7code typically include?",a:"A typical outstaffing team includes one to three senior AI/ML engineers, optionally an AI architect for system design decisions, and a QA engineer for AI evaluation. Team composition is adjusted to the clientâs backlog and roadmap. 7code does not outstaff junior engineers â every placed engineer has a minimum of five years of relevant professional experience."},{q:"How quickly can 7code place an AI outstaffing team?",a:"7code can typically present matched engineer profiles within five business days of a signed agreement and completed technical brief. First engineers can be onboarded and operational within two to three weeks. For urgent requirements, a fast-track process is available â contact [email protected] with your timeline and 7code will confirm feasibility within 24 hours."},{q:"Does 7code operate a senior-only policy for outstaffing?",a:"Yes. 7codeâs outstaffing service places senior engineers only â defined as a minimum of five years of professional experience, with specific AI/ML domain depth. This policy exists because clients using outstaffing typically need engineers who can operate independently, make sound technical decisions without oversight, and integrate quickly without extended ramp-up periods."},{q:"How does 7code protect IP and confidentiality for outstaffing clients?",a:"All outstaffing engagements are covered by a comprehensive NDA signed before any technical discussions begin. Engineers placed at client sites sign individual confidentiality agreements as part of their engagement terms. IP developed during the engagement belongs to the client by default. 7codeâs standard contract includes explicit IP assignment clauses â clients can also use their own paper."},{q:"What does the onboarding process look like for a 7code outstaffing engagement?",a:"Onboarding begins with a two-day technical immersion: engineers review the clientâs codebase, architecture docs, and toolchain, then meet key stakeholders. By end of week one, they are typically contributing to the active sprint. 7code provides an onboarding checklist and assigns a technical lead as a point of contact for the first 30 days."},{q:"How long do AI outstaffing engagements typically last?",a:"Most 7code outstaffing engagements run for six to twenty-four months. The minimum engagement is three months to ensure meaningful ramp-up and delivery. Engagements are governed by rolling monthly terms after the initial period, with a standard 30-day notice clause. Long-term clients often expand team size over time as product scope grows."}],resourceLinks:[{text:"Compare staff augmentation vs dedicated team",url:"/resources/staff-augmentation-vs-dedicated-team"},{text:"Read our nearshore Romania guide",url:"/resources/nearshore-software-romania"}],next:{slug:"ai-product-engineering",title:"AI-Native Product Engineering"}},"llm-agent-development":{slug:"llm-agent-development",title:"LLM & Agent Development",h1:"LLM & AI Agent Development",shortTitle:"LLM & Agents",tagline:"Custom LLM integrations and multi-step agent systems built for production, not demos. From OpenAI and Anthropic API integrations to LangGraph pipelines with full evaluation coverage.",summary:"LLM and agent development is where most teams underestimate the gap between a working prototype and a reliable production system. We build that layer: prompt architectures that hold under adversarial input, retrieval pipelines tuned on held-out eval sets, multi-step agents with state persistence and human-in-the-loop checkpoints, and the observability to catch model drift before users file tickets. We've shipped LLM-first products across news, healthcare, legal, and enterprise SaaS â and we know the difference between a demo that impresses a boardroom and a system that earns trust at scale.",icon:"cpu",accentColor:"#7C3AED",stats:[{v:"6 wks",l:"to production LLM system"},{v:"RAG + agents",l:"core architecture"},{v:"Claude · GPT",l:"primary providers"},{v:"Eval-gated",l:"every release"}],problem:{title:"Most LLM integrations fail between the demo and the first production incident.",body:"The prompt works in the playground. It breaks at scale because edge cases weren't in the test set, retrieval degrades on real documents, and confidence thresholds were never defined. Most teams fix this reactively: a production incident, a round of prompt patching, a rollback. We build the evaluation harness, retrieval design, fallback paths, and confidence calibration before the first production deploy, so the system handles the real world on day one."},whatWeDeliver:[{title:"LLM API integrations",desc:"Production-ready integrations with Anthropic (Claude), OpenAI (GPT), Mistral, and open-weight models via Ollama or vLLM. Streaming, function calling, structured outputs, and the retry and rate-limit handling that keeps your system up under load."},{title:"Multi-step agent pipelines",desc:"Agentic systems that plan, call tools, read results, and decide next steps â built on LangGraph or first-party SDKs with full state persistence, memory management, and human-in-the-loop escalation at configurable confidence thresholds."}
5,{title:"RAG system design and build",desc:"Retrieval-augmented generation tuned for your corpus: chunking strategy, embedding model selection, hybrid retrieval (semantic + keyword), reranking, and the held-out eval set that proves it. Not a template â designed to your documents and query patterns."},{title:"Prompt engineering and management",desc:"Structured prompt libraries with versioning, A/B testing, and regression tracking. We treat prompts as first-class code artefacts: reviewed, tested, and deployed through CI with eval gates, not edited live in production."},{title:"LLM evaluation harnesses",desc:"Custom eval frameworks (RAGAS, Braintrust, or bespoke) that score every release on your domain-specific prompt set. Evaluation is a gate, not a retrospective: a failing score blocks the deploy."},{title:"Streaming and real-time LLM UX",desc:"Client-side streaming implementations (SSE, WebSockets) with skeleton states, confidence indicators, citation displays, and graceful fallback paths â the UX layer that turns a model response into a trustworthy user experience."}],techStack:{"LLM providers":["Claude (Anthropic)","GPT-4o (OpenAI)","Mistral","Llama via Ollama / vLLM"],Orchestration:["LangGraph","LangChain","LlamaIndex","first-party SDKs"],"RAG & retrieval":["pgvector","Pinecone","Qdrant","Weaviate","hybrid BM25 + vector"],Evaluation:["RAGAS","Braintrust","Inspect AI","custom harnesses"]},process:[{step:"01",title:"Capability scoping and eval design",desc:"Before writing any code, we define what 'good' looks like: the user jobs the LLM owns, the failure modes it must not produce, and a held-out evaluation dataset built from your real queries and documents. This becomes the specification every sprint is scored against."},{step:"02",title:"Iterative build with eval gates",desc:"Two-week cycles: build a narrow capability, run it against the eval set, measure quality on held-out examples (not cherry-picked demos), and iterate. You see the score delta at every review, and the specific failure cases driving the next sprint's focus."},{step:"03",title:"Production hardening and handoff",desc:"Confidence thresholds, fallback paths, prompt versioning, evaluation CI, latency and cost dashboards, and drift monitoring. We do not consider an LLM system shipped until it has observability that catches degradation before users notice it."}],cases:["wholesum","daily8","hera"],seoTitle:"LLM & Agent Development Services | 7code AI Agency",metaDescription:"Custom LLM and agent development by 7Code. OpenAI and Anthropic integrations, LangGraph pipelines, RAG systems, and eval-gated releases for production AI.",faqs:[{q:"What are LLM agents?",a:"LLM agents are AI systems that use large language models as a reasoning engine to plan, make decisions, and take actions â calling tools, querying databases, browsing the web, or triggering other systems â in pursuit of a defined goal. Unlike a simple chatbot, an agent can decompose complex tasks, retry on failure, and operate autonomously over multiple steps."},{q:"What are common use cases for LLM agents in business?",a:"Common enterprise use cases include: AI research agents that gather and synthesise information; customer support agents that resolve queries end-to-end; sales agents that enrich CRM records and draft outreach; compliance agents that monitor documents for regulatory changes; and operations agents that orchestrate multi-system workflows without human handoffs. 7code builds purpose-built agents for each context."},{q:"How much does it cost to build an LLM agent?",a:"Costs depend on scope and complexity. 7code provides fixed-price Discovery Sprints so clients understand architecture and cost before committing to the full build. Contact [email protected] for a scoped estimate."},{q:"How long does it take to build an LLM agent?",a:"A production-ready single-purpose LLM agent typically takes four to eight weeks to build, including discovery, architecture, development, evaluation, and deployment. Multi-agent systems or agents requiring deep integration with enterprise systems may take twelve to twenty weeks. 7code uses two-week sprint cycles with working demos at the end of each sprint."},{q:"What is the difference between prompt engineering and fine-tuning for LLM agents?",a:"Prompt engineering shapes model behaviour through careful instruction design â it is fast, cheap, and reversible. Fine-tuning retrains a model on domain-specific data to bake in specialised knowledge or style â it is slower, more expensive, and harder to iterate. 7code defaults to prompt engineering and RAG for most business cases, reserving fine-tuning for when retrieval cannot meet accuracy requirements."},{q:"How does 7code handle hallucination and safety in LLM agent systems?",a:"7code implements guardrails at multiple levels: retrieval-augmented generation (RAG) to ground answers in verified data, output validation layers that check agent responses before acting, confidence thresholds that trigger human escalation, and audit logging of all agent decisions. For high-stakes domains â healthcare, finance, legal â additional human-in-the-loop checkpoints are mandatory design requirements."},{q:"What are multi-agent systems and when does 7code recommend them?",a:"Multi-agent systems are architectures where multiple specialised AI agents collaborate â one researches, one writes, one validates â coordinated by an orchestrator. 7code recommends multi-agent designs when tasks are too complex for a single agent, when parallel processing is needed for speed, or when separation of concerns reduces hallucination risk in high-stakes workflows."},{q:"Which LLM does 7code recommend â OpenAI, Anthropic, or open-source?",a:"Model selection depends on the use case. OpenAI GPT-4o suits broad reasoning and tool use. Anthropic Claude excels at long-context tasks and safety-critical applications. Open-source models (Llama, Mistral) are preferred when data must remain on-premises or costs at scale demand it. 7code is model-agnostic and selects based on accuracy, cost, latency, and compliance requirements."}],next:{slug:"cloud-agentic-infra",title:"Cloud & Agentic Infrastru
5cture"}}};function TechStackGrid({stack:e}){return React.createElement("div",{className:"svc-stack-grid"},Object.entries(e).map(([e,t])=>React.createElement("div",{key:e,className:"svc-stack-col"},React.createElement("div",{className:"svc-stack-category"},e),React.createElement("div",{className:"svc-stack-items"},t.map((e,t)=>React.createElement("span",{key:t,className:"svc-stack-tag"},e))))))}function ServiceDetailPage({slug:e="ai-product-engineering"}){const t=SERVICES_DATA[e]||SERVICES_DATA["ai-product-engineering"],a={code:Icon.code,cpu:Icon.cpu,cloud:Icon.cloud,layers:Icon.layers,globe:Icon.globe,users:Icon.users}[t.icon]||Icon.code,n=t.cases.map(e=>"undefined"!=typeof CASES&&CASES[e]?CASES[e]:null).filter(Boolean);return React.useEffect(()=>{const e=document.title,a=document.querySelector('meta[name="description"]'),n=a?a.getAttribute("content"):null;return document.title=t.seoTitle||"7Code, "+t.title,a&&t.metaDescription&&a.setAttribute("content",t.metaDescription),()=>{document.title=e,a&&null!==n&&a.setAttribute("content",n)}},[e]),React.createElement("div",{className:"page"},React.createElement("section",{className:"svc-hero"},React.createElement("div",{className:"svc-hero-grid-bg","aria-hidden":"true"}),React.createElement("div",{className:"svc-hero-glow",style:{"--glow":t.accentColor},"aria-hidden":"true"}),React.createElement("div",{className:"container svc-hero-inner"},React.createElement("div",{className:"svc-hero-text"},React.createElement("div",{className:"svc-hero-icon"},React.createElement(a,null)),React.createElement("span",{className:"csd-kicker"},React.createElement("span",{className:"csd-dot"})," Service offering"),React.createElement("h1",null,t.h1||t.title),React.createElement("div",{className:"exp-hero-divider"}),React.createElement("p",{className:"svc-hero-sub"},t.tagline)),React.createElement("div",{className:"svc-hero-stats"},t.stats.map((e,t)=>React.createElement("div",{key:t,className:"svc-stat"},React.createElement("div",{className:"svc-stat-v"},e.v),React.createElement("div",{className:"svc-stat-l"},e.l)))),React.createElement("div",{className:"svc-hero-cta"},React.createElement("a",{href:"/contact",className:"btn btn--cyan btn--lg"},"Start a project ",React.createElement(Icon.arrow,null)),React.createElement("a",{href:"/service/"+t.next.slug,className:"btn btn--ghost btn--lg"},"Next: ",t.next.title," ",React.createElement(Icon.arrow,null))))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container svc-problem"},React.createElement("div",{className:"svc-problem-text"},React.createElement("span",{className:"csd-eyebrow"},"The problem we solve"),React.createElement("h2",null,t.problem.title),React.createElement("p",null,t.problem.body)),React.createElement("div",{className:"svc-summary-block"},React.createElement("p",{className:"exp-summary"},t.summary),t.resourceLinks&&t.resourceLinks.length>0&&React.createElement("div",{style:{marginTop:20,display:"flex",flexDirection:"column",gap:8}},t.resourceLinks.map((e,t)=>React.createElement("a",{key:t,href:e.url,style:{color:"var(--cyan-600)",fontWeight:600,fontSize:15}},e.text," â")))))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal"},React.createElement("span",{className:"eyebrow"},"What we deliver"),React.createElement("h2",null,"Capabilities")),React.createElement("div",{className:"svc-deliver-grid"},t.whatWeDeliver.map((e,t)=>React.createElement("div",{key:t,className:"svc-deliver-card reveal",style:{transitionDelay:t%3*60+"ms"}},React.createElement("div",{className:"svc-deliver-num"},"0",t+1),React.createElement("h3",null,e.title),React.createElement("p",null,e.desc)))))),React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal section-head--left",style:{maxWidth:720,margin:0,marginBottom:40}},React.createElement("span",{className:"eyebrow"}
5,"Tech stack"),React.createElement("h2",null,"How we build it"),React.createElement("p",null,"Tools and technologies we use in this practice, chosen for fit, not familiarity.")),React.createElement(TechStackGrid,{stack:t.techStack}))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal"},React.createElement("span",{className:"eyebrow"},"How we work"),React.createElement("h2",null,"Our process"),React.createElement("p",null,"Consistent across every engagement, adapted to your constraints, not the other way around.")),React.createElement("div",{className:"exp-process"},t.process.map((e,t)=>React.createElement("div",{key:t,className:"exp-process-step reveal",style:{transitionDelay:80*t+"ms"}},React.createElement("div",{className:"exp-process-num"},e.step),React.createElement("div",{className:"exp-process-body"},React.createElement("h3",null,e.title),React.createElement("p",null,e.desc))))))),t.faqs&&t.faqs.length>0&&React.createElement("section",{className:"section"},React.createElement("div",{className:"container svc-faq-wrap"},React.createElement("div",{className:"section-head reveal section-head--left",style:{maxWidth:720,margin:0,marginBottom:32}},React.createElement("span",{className:"eyebrow"},"Frequently asked"),React.createElement("h2",null,"Questions teams ask before they start")),React.createElement("div",{className:"svc-faq"},t.faqs.map((e,t)=>React.createElement("details",{key:t,className:"svc-faq-item reveal",style:{transitionDelay:40*t+"ms"}},React.createElement("summary",null,e.q),React.createElement("p",null,e.a)))))),n.length>0&&React.createElement("section",{className:"section section--alt"},React.createElement("div",{className:"container"},React.createElement("div",{className:"section-head reveal"},React.createElement("span",{className:"eyebrow"},"Proof of work"),React.createElement("h2",null,"Projects using this service")),React.createElement("div",{className:"cs-grid"},n.map(e=>React.createElement("a",{key:e.slug,href:"/case-study/"+e.slug,className:"cs-card reveal"},React.createElement(CSCover,{kind:e.kind,label:e.industry,slug:e.slug}),React.createElement("div",{className:"cs-body"},React.createElement("div",{className:"cs-meta"},e.meta&&e.meta.map((e,t)=>React.createElement("span",{key:t},e))),React.createElement("h3",null,e.title),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,color:"var(--cyan-600)",fontWeight:600,fontSize:14}},React.createElement(Icon.zap,{style:{width:16,height:16}})," ",e.results&&e.results[0]?e.results[0].v+" "+e.results[0].l:"See case study"),React.createElement("span",{className:"cs-link"},"Read case study ",React.createElement(Icon.arrow,null)))))))),React.createElement(CTAStrip,null))}window.SERVICES_DATA=SERVICES_DATA,window.ServiceDetailPage=ServiceDetailPage; 6const RESOURCES_DATA={"ai-automation-for-smes":{slug:"ai-automation-for-smes",title:"AI Automation for SMEs: The Complete Guide (2026)",metaDescription:"A practical guide to AI automation for small and medium-sized businesses â use cases, ROI math, build vs buy, and how to get started.",datePublished:"2026-05-12",sections:[{heading:"Introduction",body:"Artificial intelligence is no longer the exclusive territory of enterprises with eight-figure technology budgets. In 2026, small and medium-sized enterprises across the UK, EU, and beyond are deploying AI automation across operations, finance, HR, and customer service â and doing so at a cost and speed that would have been unimaginable three years ago. This guide is written for business owners, operations directors, and technology leads at SMEs who want a clear-eyed view of what AI automation actually means in practice: what it can do, what it costs, how long it takes, and how to avoid the pitfalls."},{heading:"What Is AI Automation for SMEs?",body:"AI automation for SMEs is the application of artificial intelligence â including machine learning models, large language models (LLMs), and intelligent workflow orchestration â to execute, monitor, and optimise business processes that previously required human effort. It is not RPA (Robotic Process Automation): traditional RPA automates deterministic, rule-based tasks and is brittle. AI automation interprets intent, handles variation, processes unstructured inputs like emails and PDFs, and improves over time. Ke
6y components include: workflow orchestration (triggering, sequencing, and monitoring automated processes); an AI decision layer (LLMs that interpret inputs and decide on actions); integration connectors (APIs and middleware connecting the automation to your ERP, CRM, HRIS, or document stores); human-in-the-loop gates (defined checkpoints where humans review AI decisions before consequential actions are taken); and observability (dashboards and alerting so you can see what the automation is doing and catch issues early)."},{heading:"Why Now: The 2026 SME AI Window",body:"Three forces have converged to make 2026 the practical inflection point for SME AI adoption. Cost collapse: the cost of AI inference has fallen dramatically since 2023. Open-source maturity: models like Meta's Llama series and Mistral's open-weight releases now match or exceed the capability of proprietary models from 2022. Regulatory clarity: the EU AI Act has made clear that most SME automation use cases â document processing, internal workflow automation, customer service triage â fall into the minimal or limited risk categories. Competitive pressure: companies using AI for process automation are seeing productivity improvements of 20â40% in the specific functions automated."},{heading:"5 SME Use Cases",body:"1. Operations â Invoice processing automation: an AI document processing pipeline extracts structured data from invoices, performs automated three-way matching against purchase orders in the ERP, and routes exceptions to a human reviewer queue. 2. HR â CV screening and candidate scoring agent: an LLM-based screening agent reads each CV against the job specification, scores candidates on defined criteria, generates a structured summary, and ranks candidates into tiers. 3. Finance â Automated financial reporting and anomaly detection: an automated reporting pipeline pulls data from accounting, CRM, and budget systems, runs reconciliation checks, flags anomalies, and generates a formatted management pack with LLM narrative commentary. 4. Customer service â LLM-powered support agent with human escalation: an LLM agent handles inbound queries, classifies them by type and complexity, resolves routine queries autonomously using RAG against a knowledge base, and escalates complex queries to human agents with a pre-populated context summary. 5. Sales â AI-assisted CRM data enrichment and lead scoring: new leads are automatically enriched with company data, existing records are updated on a rolling basis, and a scoring model trained on historical closed-won data ranks leads by conversion probability."},{heading:"ROI Math for AI Automation",body:"The ROI calculation for AI automation is straightforward. The formula: ROI = (Annual Value Generated â Annual Automation Cost) / Implementation Cost. Payback Period = Implementation Cost / Monthly Value Generated. Where Annual Value Generated = (Hours saved per month à 12 à fully-loaded hourly cost) + (Error reduction value per year) + (Revenue impact if applicable). A worked example for invoice processing automation â 800 invoices/month, 8 minutes saved per invoice, 107 hours saved per month, £35/h fully-loaded cost â yields a monthly time saving of £3,745, plus £8,000/year in error reduction value. At a £28,000 implementation cost, payback is approximately 7 months, with Year 1 ROI of 76% and Year 3 cumulative ROI of 428%. Typical SME payback range: 6â18 months for automation projects with clear volume metrics."},{heading:"Build vs. Buy vs. Partner Analysis",body:"Build in-house is slow (6â18 months to first result) and expensive in Year 1 (hiring + tooling), but gives full control. Buy SaaS is fast (daysâweeks) and low Year 1 cost, but limited to vendor roadmap and licence escalation over time. Partner with an AI agency is medium speed (4â12 weeks), medium cost (project fee), high control (you own the IP), and includes immediate access to AI engineering expertise. 7code's recommendation for most SMEs: use SaaS for commodity functions and partner for automation that is core to your competitive differentiation, involves proprietary data, or requires deep integration with your existing systems."},{heading:"7code's Approach to SME AI Automation",body:"7code works with SMEs through a structured four-phase process. Phase 1 â Operational Quick Scan (1 week): a senior consultant maps your top five processes by cost and volume and identifies two to three automation candidates with clear ROI potential. Phase 2 â AI-Ready Blueprint (2 weeks): a detailed technical specification covering data flow diagrams, integration requirements, AI model selection rationale, and a phased delivery plan. Phase 3 â Automation Pilot (4â6 weeks): build and deploy the first automation in your environment, validate outputs, tune the model, and document the results. Phase 4 â Department Sprint (6â12 weeks): systematically automate the remainder of the backlog, department by department. 7code's team is senior-only â no junior engineers are placed on client projects."},{heading:"Frequently Asked Questions",faqs:[{q:"How long does AI automation take to implement?",a:"A focused automation for a single process â invoice processing, CV screening, report generation â typically takes four to eight weeks from kick-off to go-live. More complex multi-process programmes run twelve to twenty weeks. 7code uses two-week sprint cycles so you see working software throughout."},{q:"What does AI automation cost?",a:"Project costs vary by scope. Ongoing cloud infrastru
6cture and API costs are typically £200â£1,500 per month depending on volume. 7code provides a fixed-price proposal after a two-week Blueprint phase. Contact [email protected] for a scoped estimate."},{q:"Do I need technical staff to use AI automation?",a:"No. 7code builds automations with business-user interfaces â exception queues, dashboards, and alert notifications â that require no technical knowledge to operate."},{q:"Can AI automation integrate with my existing systems?",a:"Yes. 7code builds integrations to all major business platforms â SAP, Salesforce, HubSpot, NetSuite, Workday, Microsoft Dynamics, Xero â as well as custom databases and bespoke systems via API or direct database connection."},{q:"Is AI automation secure?",a:"Security is designed in from the start. Data is encrypted at rest and in transit. Access controls follow least-privilege principles. For EU clients, all architecture is GDPR-compliant by design."},{q:"What if the AI makes mistakes?",a:"All 7code automations include human-in-the-loop gates for consequential decisions â outputs below a confidence threshold are routed to a human reviewer rather than acted upon automatically. No automation goes live without a validated accuracy baseline."},{q:"How can AI automation help small businesses?",a:"AI automation lets small businesses process invoices, screen CVs, answer customer queries, and generate reports without adding headcount. Typical results are 20â40% productivity gains in the automated function and payback within 6â18 months. Unlike enterprise AI programmes, focused SME automations go live in four to eight weeks."},{q:"What is the 30% rule for AI?",a:"The 30% rule says AI should handle roughly 30% of a workflow â the repetitive, high-volume part â while humans keep the remaining 70% that requires judgment, relationships, or creativity. It is a guardrail against over-automation: automate the toil first, keep humans on decisions, and expand AI's share only after accuracy is proven."},{q:"What is the 10-20-70 rule for AI?",a:"The 10-20-70 rule states that successful AI adoption is about 10% algorithms, 20% technology and data infrastructure, and 70% people and process change. For SMEs the lesson is practical: model choice matters less than clean data, clear workflows, and staff who trust and use the automation. Budget accordingly."}]}]},"ai-native-product-engineering":{slug:"ai-native-product-engineering",title:"AI-Native Product Engineering: How to Build AI Products That Actually Work",metaDescription:"A complete guide to AI-native product engineering â architecture, methodology, team composition, and avoiding common failure modes.",datePublished:"2026-05-12",sections:[{heading:"Introduction",body:"Most software products built in the last decade have AI added to them. A recommendation widget here, a chatbot there, a classification model bolted onto an existing workflow. This is AI-assisted product development â and while it delivers incremental value, it is fundamentally different from what leading engineering teams are now building: products where AI is not a feature, but the architecture. AI-native product engineering starts from the premise that intelligence is the product. The system reasons, adapts, and improves. The value is not in the code that runs deterministically â it is in the decisions the system makes autonomously, the context it accumulates, and the outcomes it produces without human instruction at every step."},{heading:"What AI-Native Means (vs AI-Assisted vs AI-Bolted-On)",body:"AI-bolted-on products are conventional software applications that have had an AI feature added post-launch. The AI component is peripheral. AI-assisted products use AI to augment human workflows â the AI makes suggestions, drafts content, or classifies inputs, but a human reviews every output before action is taken. AI-native products are fundamentally different. The AI layer is not augmenting a human process â it is replacing or orchestrating it. The system has agency: it can plan multi-step actions, call external tools, make decisions within defined bounds, and operate without human instruction at each step. The engineering implications: AI-native requires LLM orchestration + tool use + memory/state management + evaluation frameworks + safety layers + observability â all as first-class engineering concerns."},{heading:"The AI-Native Product Stack",body:"Building an AI-native product requires decisions across five layers. Layer 1 â Foundation Models: the core reasoning engine. Options include proprietary frontier models (OpenAI GPT-4o, Anthropic Claude, Google Gemini), open-weight models (Meta Llama 3, Mistral Large), and fine-tuned domain models. Layer 2 â Orchestration: the logic that determines how the AI operates â what tools it can call, how
6it plans multi-step tasks, how it handles failures. Key frameworks include LangChain, LlamaIndex, and production-grade orchestration platforms like Temporal or AWS Step Functions. Layer 3 â Memory and Context: short-term context (conversation history within a session), long-term memory (persistent storage), and retrieval-augmented generation (RAG) using vector databases for semantic search. Layer 4 â Tool Use and Integrations: the APIs, databases, and workflows the agent can call. Tool permissions are a critical security and reliability concern. Layer 5 â Evaluation and Safety: eval suites, LLM-as-judge evaluation, guardrails, and regression testing."},{heading:"Five AI-Native Product Types",body:"1. AI Copilot â a persistent AI assistant embedded in a professional workflow tool, with deep context about the user's work and the ability to take actions within the tool. 2. Autonomous Agent â a system that executes a defined task end-to-end without human involvement at each step. 3. AI-Enhanced SaaS â a Software-as-a-Service product where AI is the primary value proposition. 4. AI Analytics Platform â a platform that ingests large volumes of structured or unstructured data, applies AI models to extract patterns and insights, and presents findings in a usable interface. 5. AI Integration Hub â a platform that sits between an organisation's existing systems and uses AI to route, transform, enrich, and orchestrate data flows intelligently."},{heading:"Build Methodology: Spec to Production",body:"Phase 1 â Specification: define task boundaries, accuracy thresholds, failure modes, and data requirements. Phase 2 â Prototype and Eval Baseline: before a single line of production code is written, build a functional prototype to validate that the core AI capability is achievable with available models and data. This phase prevents the most expensive failure mode: building a polished product around a model that cannot do the job. Phase 3 â Eval Loop: every change to prompts, model versions, retrieval configuration, or orchestration logic is measured against the eval dataset before it is merged. Phase 4 â Production Hardening: latency optimisation, error handling for API failures, observability instrumentation, security review of tool permissions, cost modelling at production scale, and load testing."},{heading:"Team Composition for AI-Native Products",body:"A production AI-native product requires: an AI Architect (system design, model selection, orchestration architecture, eval framework design â Principal/Staff level); AI/ML Engineers (prompt engineering, fine-tuning, eval suite development, RAG pipeline implementation â Senior level); Backend Engineers (API development, tool integrations, database design, infrastructure â Senior level); Frontend Engineers (UI/UX for AI interactions, streaming responses, human-in-the-loop interfaces â Senior level); DevOps/MLOps Engineers (CI/CD pipeline, model deployment, monitoring, cost management â Senior level); and a QA Engineer (eval suite maintenance, regression testing, safety testing â Senior level). 7code operates a senior-only policy â no junior engineers are placed on AI-native product builds."},{heading:"Common Failure Modes (and How to Avoid Them)",body:"1. Skipping the eval baseline â building a polished product before validating that the AI can do the core task. 2. Treating prompts as final â committing to a prompt design early and never revisiting it. 3. Ignoring latency until production â LLM inference is slow; define latency requirements in the spec. 4. Over-permissioned tools â giving the agent access to tools it does not need; apply least-privilege principles. 5. No human-in-the-loop for consequential actions â deploying an agent that takes irreversible actions without a human review gate. 6. Underestimating data quality requirements â RAG and fine-tuning both require good data. 7. Building for the best-case input â build eval datasets that include noisy, ambiguous, and adversarial inputs."},{heading:"7code's Approach to AI-Native Product Delivery",body:"7code builds AI-native products for clients across healthcare, finance, energy, and enterprise SaaS. Three principles: Senior-only delivery â every AI-native build is led by an AI Architect with production AI product experience. Eval-first methodology â we do not start production engineering until there is a validated eval baseline. Business-outcome measurement â we define success metrics before build begins and consider an engagement complete only when these metrics are demonstrably met in production. Engagements begin with a two-week AI Product Discovery Sprint, which produces a validated prototype, an eval baseline, a production architecture design, and a fixed-price build proposal. Contact [email protected] to discu
6ss your product."},{heading:"Frequently Asked Questions",faqs:[{q:"What is the difference between an AI-native product and a conventional product with AI features?",a:"An AI-native product is one where the AI capability is the core value proposition â the product cannot function or be described without it. The engineering architecture, team requirements, and development methodology are fundamentally different between the two."},{q:"How much does it cost to build an AI-native product?",a:"Contact [email protected] for a scoped estimate. 7code provides fixed-price proposals after a two-week Discovery Sprint."},{q:"How long does an AI-native product build take?",a:"A focused MVP takes eight to sixteen weeks. Products requiring custom fine-tuning, large RAG data pipelines, or complex multi-agent orchestration typically run twenty to thirty weeks. 7code uses two-week sprints with demo checkpoints throughout."},{q:"Do I need proprietary data to build an AI-native product?",a:"Not always. Many AI-native products use retrieval-augmented generation (RAG) with publicly available or client-provided documents. Fine-tuning on proprietary data makes sense when the domain is highly specialised or when accuracy requirements exceed what prompt engineering can achieve."},{q:"How does 7code handle IP ownership for AI-native products?",a:"All code, prompts, eval datasets, and model configurations developed during a 7code engagement are owned by the client. 7code does not retain rights to client work or use client data for internal training or benchmarking."},{q:"How do you evaluate whether an AI-native product is working correctly?",a:"7code builds eval suites â datasets of representative inputs with expected outputs â before production engineering begins. These suites run automatically on every code change. In production, we add LLM-as-judge evaluation and human review sampling for high-stakes outputs."}]}]},"nearshore-software-romania":{slug:"nearshore-software-romania",title:"Nearshore Software Development in Romania: The 2026 Guide",metaDescription:"Why Romania is Europe's leading nearshore software destination â talent, time zones, cost, and how to choose the right partner.",datePublished:"2026-05-12",sections:[{heading:"Introduction",body:"The question of where to build your software team â onshore, nearshore, or offshore â has become more nuanced, and more consequential, than at any point in the industry's history. Remote-first norms, AI-assisted development, and the globalisation of engineering talent have reshaped the calculus. Yet despite all this change, geography still matters: for time zone alignment, for compliance, for cultural fit, and for the sustained quality that only comes from engineers who treat their work as a career, not a contract. This guide makes the case for Romania as the leading nearshore software destination for UK and EU technology buyers in 2026."},{heading:"What Nearshore Means (vs Offshore, Onshore, Blended)",body:"Onshore software development means working with a team in your own country. Costs are highest, time zone alignment is perfect, cultural proximity is maximum. Offshore development typically refers to engaging teams in low-cost geographies with significant time zone distance: India, the Philippines, Vietnam. The cost advantage can be substantial â 60â70% below UK or US rates â but carries communication friction, cultural differences, and variable quality. Nearshore splits the difference: for UK and EU buyers, Central or Eastern Europe â Poland, Romania, Bulgaria, the Czech Republic. The cost advantage is significant (40â60% below onshore) while preserving time zone overlap (one to three hours difference) and cultural alignment. For most UK and EU SMEs and mid-market companies, nearshore Central/Eastern Europe offers the best combination of cost, quality, proximity, and compliance."},{heading:"Why Romania: The Structural Case",body:"Romania's emergence as a tier-one nearshore engineering destination is the product of three decades of investment in technical education, EU accession in 2007, and a software industry that has grown consistently faster than the broader economy. EU Membership since 2007 means GDPR compliance by default â Romanian companies operating under Romanian law are EU data processors. IP protection under EU law provides a familiar legal context for UK and EU buyers. Engineering Education: Romania has two universities consistently ranked among Europe's strongest for computer science â the Polytechnic University of Bucharest (Politehnica) and the Technical University of Cluj-Napoca (UTCN). English Proficiency: Romania ranks consistently in the top ten globally for English proficiency among non-native speakers. Time Zone: Romania operates in Eastern European Time (EET, UTC+2 in winter / UTC+3 in summer â CET+1 relative to UK year-round), giving approximately seven hours of genuine daily overlap with UK clients."},{heading:"Cluj-Napoca as a Technology Hub",body:"Cluj-Napoca is Romania's second-largest city and its undisputed technology capital. With a population of approximately 330,000 and one of Romania's largest engineering faculties at UTCN, Cluj has the talent density and infrastru
6cture of a mature tech hub. Major companies with Cluj engineering presence include Bosch, Continental, Emerson, Cognizant, and Endava. Senior software engineer total employment cost in Cluj-Napoca is approximately 25â35% of the equivalent cost in London. Cluj-Napoca has direct flight connections to London, Amsterdam, Frankfurt, and other major European hubs â important when in-person collaboration is required."},{heading:"Romanian Engineering Culture",body:"Four characteristics define Romanian engineering culture: Formal CS training as the norm â the majority of Romanian software engineers hold CS or engineering degrees. Attention to quality and completeness â Romanian engineering culture tends toward thoroughness, with lower defect rates and more complete documentation. Low turnover compared with India and Ukraine â Romanian engineers in established companies tend to build long-term careers, which matters enormously for clients who rely on accumulated product knowledge. Direct communication style â Romanian professional culture is more direct than many offshore locations. Engineers will raise concerns, flag technical debt, and push back on unrealistic timelines â in English, in real time."},{heading:"How to Evaluate a Romanian Software Partner: 5 Criteria",body:"1. Seniority of actual delivery team â ask to meet the engineers who will work on your project before you sign. A company that uses senior staff in business development and junior staff in delivery is a pattern to avoid. 2. References from clients in your market â ask for two to three references from clients in your sector or of similar size and speak to them directly. 3. Security and compliance maturity â review the partner's ISO 27001 status, GDPR data processing practices, code security review process, and incident response procedures. 4. Commercial transparency â understand the rate card fully, including how additional work is priced, what the notice period is, and how rate increases are handled. 5. Technical alignment with your stack and problem type â if you are building AI products, evaluate the partner's specific AI engineering experience, not their general software capability."},{heading:"7code's Position in the Romanian Market",body:"7code (Seven Code Development SRL) was founded in 2016 in Cluj-Napoca. The company has grown from a generalist software agency to a specialist AI product engineering firm serving clients in the UK, EU, UAE, and US. 7code'
6s differentiation within the Romanian market rests on three pillars: AI-first specialisation â 7code has structured its entire service line around AI product engineering, AI process automation, LLM agent development, and cloud agentic infrastructure. Senior-only policy â 7code does not place junior engineers on client engagements. Business-outcome focus â 7code measures project success by client business outcomes and begins with a business case."},{heading:"Frequently Asked Questions",faqs:[{q:"What is nearshore software development?",a:"Nearshore software development means engaging an engineering team in a country geographically and time-zone adjacent to your own. For UK and EU buyers, nearshore typically means Central or Eastern Europe. It offers significant cost advantages over onshore (25â50%) while maintaining time zone overlap, cultural proximity, and compliance alignment."},{q:"Is Romania in the EU?",a:"Yes. Romania has been an EU member state since 2007. Romanian software companies operate under EU data protection law (GDPR), EU IP protection frameworks, and EU employment regulations."},{q:"How much cheaper is nearshore Romania compared with the UK?",a:"Senior software engineer costs in Cluj-Napoca are approximately 25â35% of the equivalent total cost in London. 7code's rate card runs from EUR 30â35/h for mid-level engineers to EUR 60â80/h for AI architects."},{q:"Does working with a Romanian team require Romanian language skills?",a:"No. Business English is the standard working language across Romania's technology sector. 7code communicates with all clients exclusively in English."},{q:"How do I visit my Romanian development team in person?",a:"Cluj-Napoca has direct flights from London, Amsterdam, Frankfurt, Vienna, and other major European hubs. Flight time from London is approximately three hours. 7code welcomes on-site visits and recommends quarterly in-person sessions for longer-term engagements."},{q:"Is my data safe with a Romanian software company?",a:"Romanian companies operating under Romanian law are EU data processors â subject to the same GDPR obligations as UK and EU companies. 7code is happy to operate within the client's own data processing framework. All 7code systems are hosted in EU-region cloud infrastructure by default."}]}]},"staff-augmentation-vs-dedicated-team":{slug:"staff-augmentation-vs-dedicated-team",title:"Staff Augmentation vs Dedicated Team: Which Is Right for You?",metaDescription:"A clear comparison of staff augmentation and dedicated team models â decision table, cost structure, control, and 7code's recommendation.",datePublished:"2026-05-12",sections:[{heading:"Overview",body:"Two engagement models dominate how technology companies extend their engineering capacity: staff augmentation and dedicated teams. Both place external engineers inside your organisation, but the structure, accountability, and operational experience are meaningfully different. This page explains the distinction clearly, helps you identify which model fits your situation, and answers the questions we hear most frequently from clients choosing between the two."},{heading:"Decision Table",body:"Control: staff augmentation places maximum control with the client â you direct each individual engineer day-to-day. Dedicated teams distribute control differently: you set business priorities and strategic direction; the team translates those into tasks and takes collective ownership of delivery. Team management: in staff augmentation, every management touchpoint falls on the client's team. In a dedicated team, day-to-day management is handled within the team itself. Speed to start: staff augmentation is faster (days to weeks per individual). Dedicated teams take slightly longer to assemble (2â4 weeks) because team composition must be considered as a whole. Cost structure: staff augmentation costs are per-head and variable. Dedicated team costs are more fixed â a monthly team rate that provides predictability for budgeting. IP ownership risk: low in both models when contracts are properly structured."},{heading:"When Staff Augmentation Works Best",body:"Staff augmentation works best when: you need to fill a specific, defined skill gap quickly; your engagement is project-bounded with a clear end date; your in-house team has the management capacity to direct and supervise external individuals; and you need flexibility to scale up and down based on workload. It is the faster path when you need to fill a specific role quickly â a senior backend engineer for a sprint that starts next Monday. Individual engineers can be profiled, selected, and onboarded within one to two weeks."},{heading:"When a Dedicated Team Works Best",body:"A dedicated team works best when: you are building or maintaining a product over an extended period; you want a team with collective ownership and internal accountability;
6 you prefer to manage outcomes rather than individuals; and engineering continuity matters to your delivery model. Dedicated teams typically run on three-month minimum commitments. The upfront investment in assembly pays back in faster collective ramp-up once the team is running."},{heading:"Frequently Asked Questions",faqs:[{q:"What's the difference between staff augmentation and a dedicated team?",a:"Staff augmentation places individual engineers within your team under your direct management. A dedicated team is a self-managing unit placed with you â they have their own internal structure, technical leadership, and collective accountability. The distinction matters most for management overhead: staff aug demands more of your internal management; dedicated teams demand less."},{q:"Which is cheaper?",a:"Neither is categorically cheaper â the cost depends on seniority, team size, and engagement length. Staff augmentation gives more per-head flexibility and is typically priced on a daily or hourly rate. Dedicated teams are priced as a monthly package. For engagements over six months, dedicated teams often have a lower total cost due to reduced onboarding repetition and higher productivity from team continuity."},{q:"Which gives me more control?",a:"Staff augmentation gives more direct, individual control â you direct each engineer's work personally. Dedicated teams give you strategic control (priorities, outcomes, timelines) while the team manages its own execution."},{q:"How quickly can I start with each model?",a:"Staff augmentation: one to two weeks from agreement to first engineer active. Dedicated team: two to four weeks from agreement to full team onboarded. For urgent requirements, 7code offers a fast-track process for both models â contact [email protected] with your timeline."},{q:"Which model does 7code recommend?",a:"7code recommends a dedicated team for most ongoing AI product development engagements, and staff augmentation for specific skill-gap fills within a client's existing team. The deciding factor is usually management capacity: if the client has a strong technical lead who can manage individuals, staff aug works. If the client wants to manage outcomes and have the team manage itself, dedicated is stronger."},{q:"Can I switch from staff aug to a dedicated team mid-project?",a:"Yes. 7code supports transitions between models. The most common pattern is starting with one or two augmented engineers who build context, then transitioning to a dedicated team structure as the engagement scope grows."},{q:"What does staff augmentation mean?",a:"Staff augmentation means adding external engineers to your existing team on a temporary or ongoing basis. The engineers work under your direct management, inside your sprints and tools, filling specific skill gaps without the cost and delay of permanent hiring. You keep full control of the work; the provider handles employment, payroll, and replacement risk."},{q:"What is the difference between staff augmentation and RPO?",a:"Staff augmentation supplies working engineers who remain employed by the provider and embedded in your team. RPO (Recruitment Process Outsourcing) outsources your hiring process itself â the RPO firm recruits candidates who become your own employees. Choose staff augmentation for immediate capacity; choose RPO when you want to grow permanent internal headcount."}]}]},"nearshore-romania-vs-offshore-asia":{slug:"nearshore-romania-vs-offshore-asia",title:"Nearshore Romania vs Offshore Asia: A Practical Guide for European Businesses",metaDescription:"A data-driven comparison of nearshore Romania and offshore India for European tech buyers â time zones, cost, quality, GDPR, and total cost of ownership.",datePublished:"2026-05-12",sections:[{heading:"Overview",body:"For European technology buyers, the build-team decision often comes down to two fundamentally different models: nearshore Central/Eastern Europe â with Romania as the leading option in 2026 â or offshore Asia, primarily India. Both deliver significant cost savings versus onshore UK or EU hiring. But the total cost of ownership, the operational experience, and the risk profile are substantially different."},{heading:"Criteria Comparison",body:"Time zone overlap (vs UK): Romania (CET+2) delivers approximately seven hours of genuine daily overlap. India (IST, +4.5hr) leaves a genuine overlap window of approximately three to four hours, typically in the UK morning. Language and communication: English proficiency across Romania's technology sector is uniformly high; Romanian engineers communicate in fluent business English. In India, proficiency is strong at the senior level but variable in delivery teams. Cost: on headline rate, offshore India is approximately 50â70% cheaper per engineer-hour than Romania. However, total cost of ownership anal
6ysis narrows this gap significantly. Quality and seniority assurance: Romania's annual attrition at established technology companies runs at 8â12%. India's outsourcing sector runs at 20â30% annual attrition, frequently involving a bait-and-switch where senior engineers present in sales and junior engineers deliver. GDPR compliance: Romania, as an EU member state, is a native EU data processor. India requires Standard Contractual Clauses, transfer impact assessments, and ongoing legal management."},{heading:"Total Cost of Ownership Analysis",body:"When all factors are included â management overhead, communication time (async friction adds 20â40% to decision cycles with offshore India), rework from specification gaps, attrition-driven ramp-up costs, legal/compliance overhead (SCCs, TIAs for India vs simple DPA for Romania), and travel for relationship management (short-haul vs long-haul) â the effective cost difference narrows to 10â20% for complex collaborative AI engineering engagements. For AI engineering where quality drives outcomes, the gap can disappear entirely."},{heading:"Frequently Asked Questions",faqs:[{q:"Is nearshore Romania significantly more expensive than offshore India?",a:"On headline rate, yes â approximately 50â70% more per engineer-hour. When total cost of ownership is calculated (management overhead, rework, attrition, compliance, travel), the gap narrows to 10â20% for complex collaborative work, and can disappear entirely for AI engineering where quality drives outcomes."},{q:"Can I work with a Romanian team entirely remotely?",a:"Yes. 7code works with clients in the UK, UAE, and US entirely remotely. The CET+2 time zone provides full daily overlap with UK clients. On-site visits are welcomed but never required."},{q:"How do I handle GDPR when working with a Romanian software company?",a:"Engagement with a Romanian software company requires only a standard Data Processing Agreement â the same as you would use with a UK or German vendor. No Standard Contractual Clauses required."},{q:"Is the quality of Romanian engineers comparable to top offshore India engineers?",a:"At the senior level, yes â and in AI engineering specifically, Romanian senior engineers are competitive with the strongest Indian AI talent. The key difference is consistency: variance in quality within a Romanian senior team is lower."},{q:"Which model is better for long-term AI product development?",a:"For long-term AI product development requiring sustained collaboration and architectural judgment, nearshore Romania has a structural advantage: time zone alignment, lower attrition preserving accumulated AI domain knowledge, and cultural alignment with EU/UK product thinking."},{q:"How quickly can I start with a Romanian development team?",a:"7code can present matched engineer profiles within five business days of a signed agreement. First engineers can be active within two to three weeks. Contact [email protected]."}]}]},"build-ai-in-house-vs-partner":{slug:"build-ai-in-house-vs-partner",title:"Build AI In-House vs With a Partner: The 2026 Decision Framework",metaDescription:"A practical framework for deciding whether to build your AI capability in-house or partner with an AI agency â 5 questions, cost comparison, and when each model wins.",datePublished:"2026-05-12",sections:[{heading:"Introduction",body:"Every organisation reaching for serious AI capability faces the same fork: build the internal team to own it, or partner with a specialist to deliver it. In 2026, this decision is more consequential than it was two years ago â AI is moving from a competitive advantage to a competitive necessity across most industries, and the wrong structural choice costs significantly more than the wrong technology choice."},{heading:"5 Questions to Ask Before Deciding",body:"1. Do we have â or can we realistically hire â the AI engineering talent needed? Senior AI engineers command UK salaries of £80,000â£130,000+ per year. The UK and EU talent markets for experienced AI engineers are extremely tight. 2. How long c
6an we afford to wait for AI capability? Building an in-house AI team from scratch takes six to eighteen months before reaching production velocity. 3. Is AI core to our competitive differentiation, or is it infrastructure? If the AI capability is a commodity, buying a SaaS product is almost certainly the right answer. If the AI is at the heart of your competitive moat, the case for in-house ownership strengthens over time. 4. Do we have the data and infrastructure foundations to support an AI team? An AI team without good data is a car without fuel. 5. What is our three-year total cost of ownership for each path? In-house AI costs compound: salaries, equity, tools, compute, and the opportunity cost of slow ramp-up."},{heading:"Comparison Table",body:"Speed to market: Build in-house is slow (12â18 months to reach production velocity). Partner is fast (4â12 weeks to first production delivery). Year 1 total cost: Build in-house is very high (hiring, onboarding, tooling, infrastructure). Partner is medium (project fees, no headcount overhead). Year 3 total cost: Build in-house is decreasing per project (sunk cost paid). Partner is ongoing (retainer or per-project fees). Risk: Build in-house carries high risk (AI talent market is competitive and volatile). Partner carries lower risk (partner bears delivery risk; fixed-price options available). Expertise: Build in-house is dependent on who you hire; ramp-up from zero. Partner provides immediate access to senior AI engineering team. IP ownership: Full in both cases â explicitly assigned to client in contract."},{heading:"When to Build In-House",body:"Building an in-house AI team makes sense when: you have twelve to twenty-four months before AI is existentially important to your competitive position; you can attract senior AI engineering talent with brand recognition and competitive compensation; the AI capability is genuinely at the heart of your business model; your data infrastructure is mature enough for an AI team to be productive from day one; and you have technical leaders who can manage AI engineering effectively."},{heading:"When to Partner",body:"Partnering with an AI agency makes sense when: your competitive window is months, not years; you need AI automation or AI-powered features to compete effectively but your business model is not itself an AI product; you want to validate the business case before committing to a permanent internal AI engineering function; your data or compliance situation is complex and a specialist partner has dealt with it before; and budget predictability matters more than long-term cost minimisation."},{heading:"Frequently Asked Questions",faqs:[{q:"Can I start with a partner and transition to in-house later?",a:"Yes â this is the most common pattern for companies taking AI seriously. Partner to build the initial system, establish performance baselines, and validate the business case. Then hire or train in-house engineers to take over maintenance and iteration. 7code designs all deliverables to support a smooth handover."},{q:"Does working with a partner mean I lose control of my AI?",a:"No. 7code's standard contract assigns all IP â code, prompts, eval datasets, model configurations, architecture documents â to the client. You retain full control over the system, the data, and the direction of development."},{q:"What does a Year 1 vs Year 3 cost comparison typically look like?",a:"Year 1 in-house: typically £500,000â£900,000 for a three-person senior AI team. Year 1 partner: typically £80,000â£300,000 for a delivered AI system. The crossover point depends heavily on the scope and volume of AI work and on whether you can retain the in-house team over years two and three."},{q:"How do I ensure quality when working with an external AI partner?",a:"Define success metrics before any build begins â accuracy thresholds, latency targets, business outcomes. Require eval suites as a project deliverable. Insist on two-week sprint demos. Choose a partner who is willing to be accountable to business outcomes, not just code delivery."},{q:"Is my IP safe when working with an AI partner?",a:"Yes, when the contract is properly structured. Key provisions: explicit IP assignment to the client for all work product; individual NDAs signed by all engineers on the project; prohibitions on the partner using client data for training other models. 7code'
6s standard agreement includes all of these provisions."},{q:"What size of company benefits most from partnering?",a:"The partner model delivers the most value for companies at Seed through Series B stage, for mid-market companies with bounded AI requirements, and for enterprise companies launching new AI-powered products within a division that does not yet have AI engineering capability."}]}]}};function ResourcePage({slug:e}){const t=RESOURCES_DATA[e];return React.useEffect(()=>{if(!t)return;const e=document.title,a=document.querySelector('meta[name="description"]'),n=a?a.getAttribute("content"):null;return document.title=t.title+" | 7code",a&&t.metaDescription&&a.setAttribute("content",t.metaDescription),()=>{document.title=e,a&&null!==n&&a.setAttribute("content",n)}},[e]),t?React.createElement("div",{className:"page"},React.createElement("section",{className:"page-hero"},React.createElement("div",{className:"container"},React.createElement("span",{className:"eyebrow",style:{justifyContent:"center"}},"Resource"),React.createElement("h1",{style:{maxWidth:800,margin:"0 auto"}},t.title),React.createElement("p",{style:{color:"var(--slate-500)",marginTop:8}},"Published ",t.datePublished," · 7code AI Engineering"))),React.createElement("section",{className:"section"},React.createElement("div",{className:"container",style:{maxWidth:800}},t.sections.map((e,t)=>React.createElement("div",{key:t,className:"reveal",style:{marginBottom:48}},React.createElement("h2",{style:{fontSize:22,fontWeight:700,color:"var(--ink)",marginBottom:16,letterSpacing:"-0.02em"}},e.heading),e.body&&React.createElement("p",{style:{color:"var(--slate-700)",lineHeight:1.8,fontSize:16}},e.body),e.faqs&&React.createElement("div",{style:{marginTop:16}},e.faqs.map((e,t)=>React.createElement("details",{key:t,className:"svc-faq-item reveal",style:{transitionDelay:40*t+"ms"}},React.createElement("summary",null,e.q),React.createElement("p",null,e.a)))))),React.createElement("div",{style:{marginTop:64,padding:"40px 32px",background:"var(--slate-50)",borderRadius:16,textAlign:"center"}},React.createElement("h2",{style:{fontSize:20,fontWeight:700}},"Ready to discuss your project?"),React.createElement("p",{style:{color:"var(--slate-500)",marginTop:8,marginBottom:24}},"7code's senior AI engineering team is based in Cluj-Napoca, Romania â serving UK, EU, UAE, and US clients."),React.createElement("a",{href:"/contact",className:"btn btn--cyan btn--lg"},"Start a conversation ",React.createElement(Icon.arrow,null)))))):React.createElement("div",{className:"page"},React.createElement("section",{className:"page-hero"},React.createElement("div",{className:"container"},React.createElement("h1",null,"Resource not found"))))}window.ResourcePage=ResourcePage,window.RESOURCES_DATA=RESOURCES_DATA,window.dispatchEvent(new Event("routes-loaded"));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.