Files
truthmark/docs/assets/truthmark-workflow.svg

183 lines
11 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="820" viewBox="0 0 1440 820" role="img" aria-labelledby="title desc">
<title id="title">How Truthmark works</title>
<desc id="desc">Truthmark creates documentation from code and tests, keeps documentation current as code changes, and turns approved truth documents back into working code. Every path ends in one reviewable Git diff.</desc>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#090D1A"/>
<stop offset="0.55" stop-color="#10162B"/>
<stop offset="1" stop-color="#0B1220"/>
</linearGradient>
<radialGradient id="glowPurple" cx="0.2" cy="0.25" r="0.55">
<stop offset="0" stop-color="#8B5CF6" stop-opacity="0.22"/>
<stop offset="1" stop-color="#8B5CF6" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowCyan" cx="0.75" cy="0.3" r="0.55">
<stop offset="0" stop-color="#22D3EE" stop-opacity="0.16"/>
<stop offset="1" stop-color="#22D3EE" stop-opacity="0"/>
</radialGradient>
<linearGradient id="purple" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#A78BFA"/>
<stop offset="1" stop-color="#7C3AED"/>
</linearGradient>
<linearGradient id="cyan" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#67E8F9"/>
<stop offset="1" stop-color="#0891B2"/>
</linearGradient>
<linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#FCD34D"/>
<stop offset="1" stop-color="#D97706"/>
</linearGradient>
<linearGradient id="review" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#16A34A"/>
<stop offset="0.5" stop-color="#22C55E"/>
<stop offset="1" stop-color="#0D9488"/>
</linearGradient>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="160%">
<feDropShadow dx="0" dy="18" stdDeviation="22" flood-color="#000814" flood-opacity="0.45"/>
</filter>
<filter id="softGlow" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="7" result="blur"/>
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
<pattern id="grid" width="36" height="36" patternUnits="userSpaceOnUse">
<path d="M36 0H0V36" fill="none" stroke="#94A3B8" stroke-opacity="0.045" stroke-width="1"/>
</pattern>
<marker id="arrowPurple" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#A78BFA"/></marker>
<marker id="arrowCyan" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#67E8F9"/></marker>
<marker id="arrowAmber" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#FCD34D"/></marker>
<style>
.ui { font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
.eyebrow { font-size: 15px; font-weight: 750; letter-spacing: 2.6px; }
.headline { font-size: 42px; font-weight: 780; letter-spacing: -1px; fill: #F8FAFC; }
.subhead { font-size: 19px; font-weight: 450; fill: #94A3B8; }
.cardTitle { font-size: 30px; font-weight: 760; letter-spacing: -0.45px; fill: #F8FAFC; }
.label { font-size: 19px; font-weight: 620; fill: #E2E8F0; }
.muted { font-size: 16px; font-weight: 480; fill: #94A3B8; }
.pill { font-size: 18px; font-weight: 760; fill: #FFFFFF; }
.reviewTitle { font-size: 25px; font-weight: 820; letter-spacing: 0.2px; fill: #FFFFFF; }
.reviewSub { font-size: 17px; font-weight: 560; fill: #DCFCE7; }
</style>
</defs>
<rect width="1440" height="820" rx="28" fill="url(#bg)"/>
<rect width="1440" height="820" rx="28" fill="url(#grid)"/>
<rect width="1440" height="820" rx="28" fill="url(#glowPurple)"/>
<rect width="1440" height="820" rx="28" fill="url(#glowCyan)"/>
<g class="ui">
<g transform="translate(62 48)">
<rect x="0" y="0" width="154" height="34" rx="17" fill="#8B5CF6" fill-opacity="0.16" stroke="#A78BFA" stroke-opacity="0.45"/>
<circle cx="20" cy="17" r="5" fill="#A78BFA" filter="url(#softGlow)"/>
<text x="36" y="22" class="eyebrow" fill="#C4B5FD">TRUTHMARK</text>
<text x="0" y="78" class="headline">Create docs. Keep them true. Build from truth.</text>
<text x="0" y="112" class="subhead">A complete documentation lifecycle inside your repository.</text>
</g>
<!-- Create card -->
<g transform="translate(60 195)" filter="url(#shadow)">
<rect width="400" height="420" rx="26" fill="#141A2F" stroke="#8B5CF6" stroke-opacity="0.5" stroke-width="1.5"/>
<rect width="400" height="7" rx="3.5" fill="url(#purple)"/>
<g transform="translate(30 31)">
<rect width="62" height="62" rx="18" fill="#8B5CF6" fill-opacity="0.15" stroke="#A78BFA" stroke-opacity="0.45"/>
<path d="M20 23L12 31L20 39M42 23L50 31L42 39M36 16L26 46" fill="none" stroke="#C4B5FD" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<text x="112" y="55" class="eyebrow" fill="#A78BFA">01 · CREATE</text>
<text x="112" y="84" class="cardTitle">Create from code</text>
<rect x="30" y="126" width="340" height="63" rx="16" fill="#0C1224" stroke="#334155"/>
<text x="54" y="153" class="label">Code + tests</text>
<text x="54" y="176" class="muted">Evidence from working software</text>
<path d="M200 197V225" fill="none" stroke="#A78BFA" stroke-width="2.5" marker-end="url(#arrowPurple)"/>
<rect x="84" y="229" width="232" height="58" rx="29" fill="url(#purple)"/>
<text x="200" y="265" class="pill" text-anchor="middle">Truth Document</text>
<path d="M200 296V324" fill="none" stroke="#A78BFA" stroke-width="2.5" marker-end="url(#arrowPurple)"/>
<rect x="30" y="328" width="340" height="63" rx="16" fill="#21153E" stroke="#8B5CF6" stroke-opacity="0.55"/>
<g transform="translate(49 344)" fill="none" stroke="#C4B5FD" stroke-width="2.2">
<rect x="6" y="0" width="24" height="29" rx="3"/><path d="M11 8H25M11 14H25M11 20H21"/>
<rect x="0" y="6" width="24" height="29" rx="3" opacity="0.6"/>
</g>
<text x="101" y="355" class="label">New truth docs</text>
<text x="101" y="378" class="muted">Product + engineering</text>
</g>
<!-- Sync card -->
<g transform="translate(520 195)" filter="url(#shadow)">
<rect width="400" height="420" rx="26" fill="#141A2F" stroke="#22D3EE" stroke-opacity="0.5" stroke-width="1.5"/>
<rect width="400" height="7" rx="3.5" fill="url(#cyan)"/>
<g transform="translate(30 31)">
<rect width="62" height="62" rx="18" fill="#06B6D4" fill-opacity="0.14" stroke="#67E8F9" stroke-opacity="0.45"/>
<path d="M18 24A16 16 0 0 1 45 21L49 25M44 14L45 21L38 22M44 38A16 16 0 0 1 17 41L13 37M18 48L17 41L24 40" fill="none" stroke="#A5F3FC" stroke-width="3.2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<text x="112" y="55" class="eyebrow" fill="#67E8F9">02 · SYNC</text>
<text x="112" y="84" class="cardTitle">Stay current</text>
<rect x="30" y="126" width="340" height="63" rx="16" fill="#0C1224" stroke="#334155"/>
<text x="54" y="153" class="label">Agent changes code</text>
<text x="54" y="176" class="muted">Tests prove the behavior</text>
<path d="M200 197V225" fill="none" stroke="#67E8F9" stroke-width="2.5" marker-end="url(#arrowCyan)"/>
<rect x="101" y="229" width="198" height="58" rx="29" fill="url(#cyan)"/>
<text x="200" y="265" class="pill" text-anchor="middle">Truth Sync</text>
<path d="M200 296V324" fill="none" stroke="#67E8F9" stroke-width="2.5" marker-end="url(#arrowCyan)"/>
<rect x="30" y="328" width="340" height="63" rx="16" fill="#0B2C36" stroke="#22D3EE" stroke-opacity="0.55"/>
<g transform="translate(49 344)" fill="none" stroke="#A5F3FC" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
<path d="M2 17L11 26L30 5"/>
<rect x="0" y="0" width="35" height="35" rx="8" opacity="0.5"/>
</g>
<text x="101" y="355" class="label">Docs stay current</text>
<text x="101" y="378" class="muted">Before the agent hands off</text>
</g>
<!-- Realize card -->
<g transform="translate(980 195)" filter="url(#shadow)">
<rect width="400" height="420" rx="26" fill="#141A2F" stroke="#F59E0B" stroke-opacity="0.52" stroke-width="1.5"/>
<rect width="400" height="7" rx="3.5" fill="url(#amber)"/>
<g transform="translate(30 31)">
<rect width="62" height="62" rx="18" fill="#F59E0B" fill-opacity="0.13" stroke="#FCD34D" stroke-opacity="0.45"/>
<path d="M34 13L18 34H31L27 50L45 27H32Z" fill="#FDE68A" stroke="#FCD34D" stroke-width="1.5" stroke-linejoin="round"/>
</g>
<text x="112" y="55" class="eyebrow" fill="#FCD34D">03 · REALIZE</text>
<text x="112" y="84" class="cardTitle">Build from truth</text>
<rect x="30" y="126" width="340" height="63" rx="16" fill="#0C1224" stroke="#334155"/>
<text x="54" y="153" class="label">Approved truth docs</text>
<text x="54" y="176" class="muted">The repository contract</text>
<path d="M200 197V225" fill="none" stroke="#FCD34D" stroke-width="2.5" marker-end="url(#arrowAmber)"/>
<rect x="91" y="229" width="218" height="58" rx="29" fill="url(#amber)"/>
<text x="200" y="265" class="pill" text-anchor="middle">Truth Realize</text>
<path d="M200 296V324" fill="none" stroke="#FCD34D" stroke-width="2.5" marker-end="url(#arrowAmber)"/>
<rect x="30" y="328" width="340" height="63" rx="16" fill="#33230A" stroke="#F59E0B" stroke-opacity="0.55"/>
<g transform="translate(49 344)" fill="none" stroke="#FDE68A" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<rect x="0" y="0" width="38" height="35" rx="7"/><path d="M0 9H38M8 21L13 26L8 31M19 29H30"/>
</g>
<text x="101" y="355" class="label">Working code</text>
<text x="101" y="378" class="muted">Implemented from truth</text>
</g>
<!-- Merge lines -->
<path d="M260 615V649Q260 666 278 666H630" fill="none" stroke="#8B5CF6" stroke-opacity="0.65" stroke-width="2.3"/>
<path d="M720 615V666" fill="none" stroke="#22D3EE" stroke-opacity="0.7" stroke-width="2.3"/>
<path d="M1180 615V649Q1180 666 1162 666H810" fill="none" stroke="#F59E0B" stroke-opacity="0.65" stroke-width="2.3"/>
<!-- Git review bar -->
<g transform="translate(236 666)" filter="url(#shadow)">
<rect width="968" height="108" rx="28" fill="url(#review)"/>
<g transform="translate(35 28)" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
<circle cx="10" cy="8" r="6"/><circle cx="10" cy="44" r="6"/><circle cx="49" cy="8" r="6"/>
<path d="M10 14V38M16 8H29Q43 8 43 22V30Q43 44 29 44H16"/>
</g>
<text x="111" y="48" class="reviewTitle">ONE REVIEWABLE GIT DIFF</text>
<text x="111" y="76" class="reviewSub">Code and documentation move together with the branch.</text>
<g transform="translate(815 29)">
<rect width="114" height="50" rx="25" fill="#FFFFFF" fill-opacity="0.16" stroke="#FFFFFF" stroke-opacity="0.35"/>
<path d="M28 25H78M69 16L78 25L69 34" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</g>
</g>
</svg>