syntaxai/tdd.md · main · public / images / git-url-redirect.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 600" width="1200" height="600">
<rect width="1200" height="600" fill="#0a0a0a"/>
<!-- Header -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="80" y="46" font-size="20" font-weight="600" fill="#909090">Shipping the URL change — one regex, not 49 redirects</text>
<text x="80" y="92" font-size="32" font-weight="700" fill="#e8e8e8">Inbound links survive. SEO juice carries over.</text>
<text x="80" y="120" font-size="15" fill="#7a7a7a">A single regex in d21_handlers_fallback.ts rewrites every old URL to the new shape with a 301. No hand-maintained map.</text>
</g>
<!-- Old URL box (320 wide, 60..380) -->
<rect x="60" y="170" width="320" height="100" fill="#1a1a1a" stroke="#b8794a" stroke-width="1.5" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="80" y="195" font-size="12" fill="#b8794a" letter-spacing="1">INBOUND · cached externally</text>
<text x="80" y="223" font-size="13" fill="#c8c8c8">GET /GIT/syntaxai/tdd.md/</text>
<text x="80" y="241" font-size="13" fill="#c8c8c8">blob/main/src/</text>
<text x="80" y="259" font-size="13" fill="#c8c8c8">b32_sama_v2_verify.ts</text>
</g>
<!-- Arrow 1: 380..430 -->
<line x1="386" y1="220" x2="424" y2="220" stroke="#8a8a8a" stroke-width="1.5"/>
<polygon points="420,215 432,220 420,225" fill="#8a8a8a"/>
<!-- Regex matcher box (340 wide, 430..770) -->
<rect x="430" y="170" width="340" height="100" fill="#1a1a1a" stroke="#4a8a8a" stroke-width="1.5" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="450" y="195" font-size="12" fill="#4a8a8a" letter-spacing="1">FALLBACK HANDLER · one regex</text>
<text x="450" y="223" font-size="13" fill="#c8c8c8">/^\/GIT\/syntaxai\/tdd\.md\/</text>
<text x="450" y="241" font-size="13" fill="#c8c8c8">(.+)$/</text>
<text x="450" y="261" font-size="12" fill="#8a8a8a">→ rewrite /GIT/tdd.md/$1, 301</text>
</g>
<!-- Arrow 2: 770..820 -->
<line x1="776" y1="220" x2="814" y2="220" stroke="#8a8a8a" stroke-width="1.5"/>
<polygon points="810,215 822,220 810,225" fill="#8a8a8a"/>
<!-- New URL box (320 wide, 820..1140) -->
<rect x="820" y="170" width="320" height="100" fill="#1a1a1a" stroke="#7ec77e" stroke-width="1.5" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="840" y="195" font-size="12" fill="#7ec77e" letter-spacing="1">301 · Location header</text>
<text x="840" y="223" font-size="13" fill="#c8c8c8">/GIT/tdd.md/blob/main/</text>
<text x="840" y="241" font-size="13" fill="#c8c8c8">src/</text>
<text x="840" y="259" font-size="13" fill="#c8c8c8">b32_sama_v2_verify.ts</text>
</g>
<!-- Curl example -->
<rect x="60" y="296" width="1080" height="146" fill="#101010" stroke="#1f1f1f" stroke-width="1" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="13">
<text x="80" y="322" fill="#6a6a6a">$ curl -I https://tdd.md/GIT/syntaxai/tdd.md/blob/main/src/b32_sama_v2_verify.ts</text>
<text x="80" y="344" fill="#7ec77e">HTTP/2 301</text>
<text x="80" y="362" fill="#c8c8c8">location: /GIT/tdd.md/blob/main/src/b32_sama_v2_verify.ts</text>
<text x="80" y="380" fill="#6a6a6a">cache-control: public, max-age=86400</text>
<text x="80" y="408" fill="#6a6a6a">$ curl -L https://tdd.md/GIT/syntaxai/tdd.md/blob/main/src/b32_sama_v2_verify.ts</text>
<text x="80" y="426" fill="#7ec77e">HTTP/2 200</text>
</g>
<!-- Anti-fudge -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="80" y="476" font-size="16" font-weight="600" fill="#e8e8e8">Why one regex, not 49 entries</text>
<text x="80" y="500" font-size="13" fill="#8a8a8a">A hand-maintained URL map would need updating every time a new file is added (49 grows to 50, 60, 80…).</text>
<text x="80" y="520" font-size="13" fill="#8a8a8a">The regex matches the path PATTERN, so any future URL — even ones that don't exist yet — automatically redirects.</text>
<text x="80" y="540" font-size="13" fill="#8a8a8a">Cost: 1 commit. Lifetime maintenance: 0. The anti-fudge clause in /goal forbids the hand-maintained alternative.</text>
</g>
<!-- Watermark -->
<text x="1120" y="584" text-anchor="end" font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="12" fill="#5a5a5a">https://tdd.md</text>
</svg>