/* The dependency dome. Three bands radiate from the SoftVerx mark: intelligence on the outside, connected under it, core platforms nearest the centre. Arrows on the baseline run inward, because everything above writes to what is below. Phone gets the same argument as three stacked rows — a 720px dome at 390px would be unreadable, and shrinking type is the wrong lever. */ const DOME_ICON = { "ai-agents": <>, "document-intelligence": <>, "applied-ml": <>, "computer-vision": <>, "industrial-iot": <>, "energy-tech": <>, "agri-tech": <>, "erp-billing": <>, "data-platforms": <>, "cloud-devops": <>, }; const DOME_HUE = { core: "var(--sx-layer-core)", connected: "var(--sx-layer-connected)", intelligence: "var(--sx-layer-intelligence)" }; function DomeChip({ p, hue, x, y, w, mobile }) { return ( {DOME_ICON[p.slug]} {p.title} ); } function PracticeDome({ mobile }) { const groups = P.practiceGroups; const byId = { intelligence: groups[0], connected: groups[1], core: groups[2] }; const order = [["intelligence", 330, [20, 62, 118, 160]], ["connected", 240, [42, 90, 138]], ["core", 170, [28, 90, 152]]]; if (mobile) { return (
{order.map(([id], i) => (

{byId[id].label.toLowerCase()}

{byId[id].practices.map((pr) => ( {DOME_ICON[pr.slug]} {pr.title} ))}
{i === 2 ? "all of it, one team" : "writes to"}
))}
SoftVerxSoftVerx
); } const W = 820, cx = 410, cy = 380, H = 452; const rad = (d) => (d * Math.PI) / 180; const arc = (r) => `M${cx - r} ${cy} A${r} ${r} 0 0 1 ${cx + r} ${cy}`; return (
{order.map(([id]) => ( ))} {order.map(([id, r], i) => ( ))} {[[330, 240], [240, 170], [170, 92]].map(([a, b], i) => ( {[-1, 1].map((s) => ( ))} ))} every layer writes to the one beneath it — built by one team {order.map(([id, r, angles]) => byId[id].practices.map((pr, j) => { const t = rad(angles[j]); return ; }) )}
SoftVerx SoftVerx
    {[["intelligence", "intelligence"], ["connected", "connected"], ["core", "core platforms"]].map(([id, label]) => (
  • {label}
  • ))}
); } const { Annotate: PA, Eyebrow: PE, Button: PB, Card: PC, Tag: PT, SectionHeader: PSH, ChartFrame: PCF, VisionFrame: PVF, AgentTrace, DocPipeline, TimeSeriesForecast: PTS, ArchitectureTiers: PAT, Stat: PStat, CTABand: PCTA } = window.SoftVerxDesignSystem_6fd95b; const P = window.SX_DATA; const FIGURES = { agent: (m) => , doc: (m) => , forecast: (m) => , tiers: (m) => , vision: (m) => , utilities: (m) => , agri: (m) => , landing: (m) => (
    {[["device telemetry", "40–80 msgs / meter / day", "time-series store"], ["meter reads", "15-minute interval", "interval table + rolling history"], ["enterprise records", "nightly batch", "warehouse dimensions"], ["documents", "on arrival", "extracted facts + source page"]].map((r) => (
  • {r[0]} {r[1]} {r[2]}
  • ))}
), stats: (m) => (

the reference deployment

{P.projectsBySlug.lesco.metrics.map((x) => (

{x.v}

{x.l}

))}
), }; function practiceProjects(title) { return P.projects.filter((p) => p.practice === title); } function practiceSolutions(title) { return P.solutions.filter((s) => s.practice === title); } function PracticeBlock({ p, i, mobile }) { const projects = practiceProjects(p.title); const sols = practiceSolutions(p.title); const fig = window.PRACTICE_FIGURES[p.slug]; return (

{p.title}

{p.what}

{mobile && fig &&
{fig(true)}
}
    {(mobile ? p.caps.slice(0, 4) : p.caps).map((c) => (
  • {c}
  • ))}

Typical outcome — {p.outcome}

{(sols.length || projects.length) && (
{sols.length > 0 && (

solutions in this practice

)} {projects.length > 0 && (

delivered here ({projects.length})

)}
)}
{!mobile &&
{fig ? fig(mobile) : (

what you get on handover

    {["Architecture and integration documentation", "Environments provisioned and documented", "Runbooks and monitoring dashboards", "Role-based training for the operating team"].map((x) =>
  • {x}
  • )}
)}
}
); } function PracticesPage({ mobile }) { return (
Book a call{`All ${P.solutions.length} solutions`}} meta={[{ l: "practices", v: P.practices.length }, { l: "named solutions", v: P.solutions.length }, { l: "programmes delivered", v: P.projects.length }, { l: "years", v: P.company.years }]} />
{P.practices.map((p, i) => )}
); } Object.assign(window, { PracticesPage, FIGURES, practiceProjects, practiceSolutions });