const { useState: jUseState } = React; /* zig-zag node positions on a 1200x720 viewBox */ const NODES = [ { x: 70, y: 560, side: "below" }, { x: 210, y: 470, side: "above" }, { x: 345, y: 545, side: "below" }, { x: 480, y: 395, side: "above" }, { x: 615, y: 470, side: "below" }, { x: 750, y: 320, side: "above" }, { x: 885, y: 395, side: "below" }, { x: 1020, y: 220, side: "above" }, { x: 1140, y: 145, side: "below" }, ]; function monthLabel(m){ return m[0]===m[1] ? `Month ${m[0]}` : `Month ${m[0]}–${m[1]}`; } function firstSentence(s){ const i = s.indexOf("."); return i>0 ? s.slice(0,i+1) : s; } function Journey(){ const [active, setActive] = jUseState(3); const phases = window.PHASES; const linePath = NODES.map((n,i)=>`${i===0?"M":"L"}${n.x} ${n.y}`).join(" "); return (
A 12-month program: 3 months preparation and selection, 1 month onboarding, 6 months OJT, and 1 month final project — followed by placement. Enough time for repeated real delivery and feedback.
{phases[active].desc}