@@ -2,7 +2,6 @@ import { colors, fonts, shadows, radius } from '../tokens'
22import { Header } from '../components/Header'
33import { Hero } from '../components/Hero'
44import { ProjectCard } from '../components/ProjectCard'
5- import { LatticeFlowDiagram } from '../components/LatticeFlowDiagram'
65import { Footer } from '../components/Footer'
76import { projects } from '../data/projects'
87import { blogPosts } from '../data/blog-posts'
@@ -84,7 +83,36 @@ function ValueProps() {
8483 )
8584}
8685
87- // --- How It Works ---
86+ // --- How It Works (Vertical Trace) ---
87+
88+ const traceNodes = [
89+ {
90+ type : 'Source' ,
91+ color : colors . accentBlue ,
92+ id : 'SRC-REQUIREMENTS-DRIFT' ,
93+ title : 'Requirements Documentation Drifts From Implementation' ,
94+ } ,
95+ {
96+ type : 'Thesis' ,
97+ color : colors . accentPurple ,
98+ id : 'THX-VERSION-AWARE' ,
99+ title : 'Traceability Must Be Version-Aware to Enable Drift Detection' ,
100+ } ,
101+ {
102+ type : 'Requirement' ,
103+ color : colors . accentYellow ,
104+ id : 'REQ-CORE-005' ,
105+ title : 'Automatic Drift Detection' ,
106+ } ,
107+ {
108+ type : 'Implementation' ,
109+ color : colors . accentGreen ,
110+ id : 'IMP-GRAPH-001' ,
111+ title : 'Graph Traversal and Drift Detection' ,
112+ } ,
113+ ]
114+
115+ const traceEdges = [ 'supports' , 'derives' , 'satisfies' ]
88116
89117const howStyles : Record < string , React . CSSProperties > = {
90118 section : {
@@ -139,20 +167,133 @@ const howStyles: Record<string, React.CSSProperties> = {
139167 } ,
140168}
141169
170+ const traceStyles : Record < string , React . CSSProperties > = {
171+ wrapper : {
172+ display : 'flex' ,
173+ flexDirection : 'column' as const ,
174+ alignItems : 'center' ,
175+ margin : '2rem 0' ,
176+ } ,
177+ card : {
178+ width : '100%' ,
179+ maxWidth : '520px' ,
180+ background : colors . bgCard ,
181+ borderRadius : radius ,
182+ padding : '1rem 1.25rem' ,
183+ boxShadow : shadows . sm ,
184+ border : `1px solid ${ colors . borderColor } ` ,
185+ } ,
186+ cardHeader : {
187+ display : 'flex' ,
188+ alignItems : 'center' ,
189+ gap : '0.5rem' ,
190+ marginBottom : '0.35rem' ,
191+ flexWrap : 'wrap' as const ,
192+ } ,
193+ typePill : {
194+ fontSize : '0.65rem' ,
195+ fontWeight : 700 ,
196+ letterSpacing : '0.06em' ,
197+ textTransform : 'uppercase' as const ,
198+ borderRadius : '100px' ,
199+ padding : '0.15rem 0.55rem' ,
200+ lineHeight : 1.4 ,
201+ } ,
202+ nodeId : {
203+ fontSize : '0.78rem' ,
204+ fontFamily : fonts . mono ,
205+ color : colors . textMuted ,
206+ } ,
207+ version : {
208+ fontSize : '0.72rem' ,
209+ fontFamily : fonts . mono ,
210+ color : colors . textMuted ,
211+ marginLeft : 'auto' ,
212+ } ,
213+ nodeTitle : {
214+ fontSize : '1rem' ,
215+ fontWeight : 600 ,
216+ fontFamily : fonts . system ,
217+ color : colors . textPrimary ,
218+ margin : 0 ,
219+ lineHeight : 1.35 ,
220+ } ,
221+ connector : {
222+ display : 'flex' ,
223+ flexDirection : 'column' as const ,
224+ alignItems : 'center' ,
225+ padding : '0.15rem 0' ,
226+ } ,
227+ connectorLine : {
228+ width : '2px' ,
229+ height : '12px' ,
230+ background : colors . borderColor ,
231+ } ,
232+ connectorLabel : {
233+ fontSize : '0.75rem' ,
234+ fontFamily : fonts . mono ,
235+ color : colors . textMuted ,
236+ padding : '0.1rem 0' ,
237+ } ,
238+ connectorArrow : {
239+ fontSize : '0.65rem' ,
240+ color : colors . textMuted ,
241+ lineHeight : 1 ,
242+ } ,
243+ }
244+
245+ const inlineCode : React . CSSProperties = {
246+ background : 'rgba(0,0,0,0.06)' ,
247+ color : colors . accentBlue ,
248+ padding : '0.15rem 0.4rem' ,
249+ borderRadius : '4px' ,
250+ fontSize : '0.9em' ,
251+ fontFamily : fonts . mono ,
252+ }
253+
254+ function VerticalTrace ( ) {
255+ return (
256+ < div style = { traceStyles . wrapper } >
257+ { traceNodes . flatMap ( ( node , i ) => [
258+ < div key = { node . id } style = { { ...traceStyles . card , borderLeft : `4px solid ${ node . color } ` } } >
259+ < div style = { traceStyles . cardHeader } >
260+ < span style = { { ...traceStyles . typePill , color : node . color , background : `${ node . color } 14` } } >
261+ { node . type }
262+ </ span >
263+ < span style = { traceStyles . nodeId } > { node . id } </ span >
264+ < span style = { traceStyles . version } > v1.0.0</ span >
265+ </ div >
266+ < p style = { traceStyles . nodeTitle } > { node . title } </ p >
267+ </ div > ,
268+ ...( i < traceEdges . length
269+ ? [
270+ < div key = { `edge-${ i } ` } style = { traceStyles . connector } >
271+ < div style = { traceStyles . connectorLine } />
272+ < span style = { traceStyles . connectorLabel } > { traceEdges [ i ] } </ span >
273+ < div style = { traceStyles . connectorLine } />
274+ < span style = { traceStyles . connectorArrow } > { '\u25BC' } </ span >
275+ </ div > ,
276+ ]
277+ : [ ] ) ,
278+ ] ) }
279+ </ div >
280+ )
281+ }
282+
142283function HowItWorks ( ) {
143284 return (
144285 < section style = { howStyles . section } >
145286 < div style = { howStyles . container } >
146287 < h2 style = { howStyles . sectionTitle } > How it works</ h2 >
147288 < p style = { howStyles . intro } >
148- Lattice organizes knowledge into four layers, connected by version-bound edges. When anything changes
149- upstream, you know.
289+ Lattice organizes knowledge into four layers — sources, theses, requirements, and implementations
290+ — connected by version-bound edges. Here’s a real trace from Lattice’s own knowledge graph:
150291 </ p >
151- < LatticeFlowDiagram />
292+ < VerticalTrace />
152293 < p style = { howStyles . body } >
153- Every edge records the version of both source and target nodes . When a node is updated, edges bound to the old
154- version are flagged as potentially stale. Run < code style = { inlineCode } > lattice drift</ code > to surface exactly
155- what needs review — no manual tracking, no stale docs hiding in a wiki .
294+ Every edge records the version it was bound to . When a source is updated or a thesis is revised, { ' ' }
295+ < code style = { inlineCode } > lattice drift</ code > tells you exactly which downstream requirements and
296+ implementations need review.
156297 </ p >
157298 < pre style = { howStyles . codeBlock } >
158299 < code > { `.lattice/
@@ -171,15 +312,6 @@ function HowItWorks() {
171312 )
172313}
173314
174- const inlineCode : React . CSSProperties = {
175- background : 'rgba(255,255,255,0.1)' ,
176- color : colors . accentBlue ,
177- padding : '0.15rem 0.4rem' ,
178- borderRadius : '4px' ,
179- fontSize : '0.9em' ,
180- fontFamily : fonts . mono ,
181- }
182-
183315// --- Featured Article ---
184316
185317const featuredStyles : Record < string , React . CSSProperties > = {
0 commit comments