mirror of
https://github.com/merlinhu1/truthmark.git
synced 2026-08-25 07:53:25 +02:00
183 lines
11 KiB
XML
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>
|