@@ -145,6 +145,59 @@ function Docs() {
145145 ) ;
146146}
147147
148+ /* ── PIPELINE ─────────────────────────────────────────────────── */
149+
150+ const pipeline = [
151+ { color : '#0a1628' , label : 'Network' , detail : 'TCP connect, mux framing, handshake v13/v14' , link : '/docs/architecture/network' } ,
152+ { color : '#0c1f3d' , label : 'ChainSync' , detail : 'Header streaming, intersection, rollback handling' , link : '/docs/spec/networking' } ,
153+ { color : '#0e2854' , label : 'BlockFetch' , detail : 'Range requests, batch retrieval, era-tagged blocks' , link : '/docs/spec/networking' } ,
154+ { color : '#10326b' , label : 'Decode' , detail : 'CBOR schema, byte-preserving walk, ConwayBlock' , link : '/docs/architecture/codec' } ,
155+ { color : '#133d82' , label : 'Consensus' , detail : 'VRF proof, KES sig, leader check, nonce evolution' , link : '/docs/spec/consensus' } ,
156+ { color : '#164899' , label : 'Validate' , detail : '19 UTxO rules, witness sigs, script data hash' , link : '/docs/spec/transactions' } ,
157+ { color : '#1953b0' , label : 'Plutus' , detail : 'V1/V2/V3 CEK eval, ScriptContext, cost models' , link : '/docs/spec/scripts' } ,
158+ { color : '#1c5ec7' , label : 'Apply' , detail : 'Consume inputs, add outputs, collect fees, certs' , link : '/docs/spec/ledger-state' } ,
159+ { color : '#2069de' , label : 'Epoch' , detail : 'Rewards, pool retirement, snapshot rotation' , link : '/docs/spec/epoch' } ,
160+ { color : '#2575f5' , label : 'Storage' , detail : 'VolatileDB, ImmutableDB, LedgerDB checkpoints' , link : '/docs/spec/storage' } ,
161+ ] ;
162+
163+ function Pipeline ( ) {
164+ const [ active , setActive ] = React . useState < number | null > ( null ) ;
165+ return (
166+ < section className = { styles . pipeline } >
167+ < div className = { styles . pipeInner } >
168+ < p className = { styles . tag } > BLOCK PIPELINE</ p >
169+ < h2 className = { styles . pipeTitle } > From TCP byte to ledger state.</ h2 >
170+ < p className = { styles . pipeSub } > Every block flows through 10 stages. Hover to explore each module.</ p >
171+ </ div >
172+ < div className = { styles . strip } >
173+ { pipeline . map ( ( p , i ) => (
174+ < Link
175+ key = { p . label }
176+ to = { useBaseUrl ( p . link ) }
177+ className = { `${ styles . cell } ${ active === i ? styles . cellActive : '' } ` }
178+ style = { { background : p . color } }
179+ onMouseEnter = { ( ) => setActive ( i ) }
180+ onMouseLeave = { ( ) => setActive ( null ) }
181+ >
182+ < span className = { styles . cellLabel } > { p . label } </ span >
183+ </ Link >
184+ ) ) }
185+ </ div >
186+ < div className = { styles . pipeDetail } >
187+ { active !== null ? (
188+ < >
189+ < span className = { styles . pipeDetailNum } > 0{ active + 1 } </ span >
190+ < h3 > { pipeline [ active ] . label } </ h3 >
191+ < p > { pipeline [ active ] . detail } </ p >
192+ </ >
193+ ) : (
194+ < p className = { styles . pipeHint } > Hover a stage above</ p >
195+ ) }
196+ </ div >
197+ </ section >
198+ ) ;
199+ }
200+
148201/* ── FOOTER ───────────────────────────────────────────────────── */
149202
150203function Footer ( ) {
@@ -199,6 +252,7 @@ export default function Home(): React.ReactNode {
199252 < main >
200253 < Hero />
201254 < Stack />
255+ < Pipeline />
202256 < Docs />
203257 </ main >
204258 < Footer />
0 commit comments