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 (
Section 03 · The journey

The High-Flyer Program Journey.

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.

{/* dashed bg line */} {/* live gradient line */} {/* active glow */} {NODES.map((n,i)=>{ const isA = i===active; return ( setActive(i)} style={{cursor:"pointer"}}> {i} ); })} {NODES.map((n,i)=>{ const p = phases[i]; const isA = i===active; const labelTop = n.side === "above" ? n.y - 96 : n.y + 26; const cardTop = n.side === "above" ? n.y - 215 : n.y + 96; return (
setActive(i)}>
PHASE {i}
{p.name}
{monthLabel(p.m)}
setActive(i)}> {firstSentence(p.desc)}
); })}
Phase {active} · selected
{phases[active].name}

{phases[active].desc}

{phases[active].arts.map((a,i)=>({a}))}
{String(active+1).padStart(2,"0")} / 09
); } const jel = document.getElementById("journey-root"); if(jel){ ReactDOM.createRoot(jel).render(); }