docs(release-flow): make timeline image and cards clickable

This commit is contained in:
h3p 2026-03-10 11:48:30 +01:00
parent 3ddf50e485
commit 91eef18c18
5 changed files with 321 additions and 82 deletions

View file

@ -361,7 +361,7 @@
CODE_SIGNING_ALLOWED = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 475;
CURRENT_PROJECT_VERSION = 476;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = CS727NF72U;
ENABLE_APP_SANDBOX = YES;
@ -444,7 +444,7 @@
CODE_SIGNING_ALLOWED = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 475;
CURRENT_PROJECT_VERSION = 476;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = CS727NF72U;
ENABLE_APP_SANDBOX = YES;

View file

@ -62,18 +62,20 @@
## Table of Contents
- [Start Here](#start-here)
- [Release Channels](#release-channels)
- [Download Metrics](#download-metrics)
- [Project Docs](#project-docs)
- [Features](#features)
- [Platform Matrix](#platform-matrix)
- [Roadmap (Near Term)](#roadmap-near-term)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Changelog](#changelog)
- [Contributing Quickstart](#contributing-quickstart)
- [Support & Feedback](#support--feedback)
<p align="center">
<a href="#start-here">Start Here</a> ·
<a href="#release-channels">Release Channels</a> ·
<a href="#download-metrics">Download Metrics</a> ·
<a href="#project-docs">Project Docs</a> ·
<a href="#features">Features</a> ·
<a href="#platform-matrix">Platform Matrix</a><br>
<a href="#roadmap-near-term">Roadmap (Near Term)</a> ·
<a href="#troubleshooting">Troubleshooting</a> ·
<a href="#faq">FAQ</a> ·
<a href="#changelog">Changelog</a> ·
<a href="#contributing-quickstart">Contributing Quickstart</a> ·
<a href="#support--feedback">Support & Feedback</a>
</p>
## Release Channels
@ -424,12 +426,15 @@ Most editor features are shared across macOS, iOS, and iPadOS.
## Release Flow (Completed + Upcoming)
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/images/neon-vision-release-history-0.1-to-0.5.svg">
<source media="(prefers-color-scheme: light)" srcset="docs/images/neon-vision-release-history-0.1-to-0.5-light.svg">
<img src="docs/images/neon-vision-release-history-0.1-to-0.5-light.svg" alt="Neon Vision Editor release flow timeline with upcoming milestones" width="100%">
</picture>
<a href="docs/images/neon-vision-release-history-0.1-to-0.5-light.svg">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/images/neon-vision-release-history-0.1-to-0.5.svg">
<source media="(prefers-color-scheme: light)" srcset="docs/images/neon-vision-release-history-0.1-to-0.5-light.svg">
<img src="docs/images/neon-vision-release-history-0.1-to-0.5-light.svg" alt="Neon Vision Editor release flow timeline with upcoming milestones" width="100%">
</picture>
</a>
</p>
<p align="center"><sub>Click to open full-size SVG and zoom. In full view, each card links to release notes or the roadmap hub.</sub></p>
## Roadmap (Near Term)

View file

@ -13,109 +13,194 @@
<filter id="shadow" x="-20%" y="-20%" width="140%" height="160%">
<feDropShadow dx="0" dy="12" stdDeviation="18" flood-color="#000000" flood-opacity="0.12"/>
</filter>
<clipPath id="cardClip0">
<rect x="120.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip1">
<rect x="472.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip2">
<rect x="824.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip3">
<rect x="1176.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip4">
<rect x="1528.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip5">
<rect x="1880.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip6">
<rect x="2232.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip7">
<rect x="2584.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
</defs>
<rect width="100%" height="100%" fill="url(#bg)"/>
<text x="110" y="110" fill="#0F172A" font-size="62" font-weight="700" font-family="Arial, Helvetica, sans-serif">Neon Vision Editor</text>
<text x="110" y="165" fill="#334155" font-size="30" font-family="Arial, Helvetica, sans-serif">Release History · Versions 0.1 0.5 + upcoming</text>
<line x1="180" y1="800" x2="2884" y2="800" stroke="url(#lineGrad)" stroke-width="8" stroke-linecap="round"/>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.1.0">
<title>0.1 - Early Editor Foundation</title>
<g filter="url(#shadow)">
<rect x="110.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#49C6FF" stroke-width="3"/>
</g>
<text x="260.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.1</text>
<g clip-path="url(#cardClip0)">
<text x="134.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Early Editor</text>
<text x="134.0" y="426" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Foundation</text>
<line x1="134.0" y1="436" x2="386.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="134.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Initial lightweight editor core</text>
<text x="134.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Basic syntax highlighting</text>
<text x="134.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• First SwiftUI editor interface</text>
<text x="134.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Initial lightweight</text>
<text x="150.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">editor core</text>
<text x="134.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Basic syntax</text>
<text x="150.0" y="584" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">highlighting</text>
<text x="134.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• First SwiftUI editor</text>
<text x="150.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">interface</text>
<text x="134.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Early file handling</text>
</g>
<circle cx="260.0" cy="800" r="26" fill="#49C6FF" fill-opacity="0.85"/>
<text x="260.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.1</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.2.0">
<title>0.2 - Core Editing</title>
<g filter="url(#shadow)">
<rect x="462.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#66E3FF" stroke-width="3"/>
</g>
<text x="612.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.2</text>
<g clip-path="url(#cardClip1)">
<text x="486.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Core Editing</text>
<line x1="486.0" y1="436" x2="738.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="486.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Regex Find &amp; Replace</text>
<text x="486.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Bracket helper</text>
<text x="486.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Improved syntax highlighting</text>
<text x="486.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Improved syntax</text>
<text x="502.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">highlighting</text>
<text x="486.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Faster editor rendering</text>
</g>
<circle cx="612.0" cy="800" r="26" fill="#66E3FF" fill-opacity="0.85"/>
<text x="612.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.2</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.3.0">
<title>0.3 - Projects</title>
<g filter="url(#shadow)">
<rect x="814.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#9F6BFF" stroke-width="3"/>
</g>
<text x="964.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.3</text>
<g clip-path="url(#cardClip2)">
<text x="838.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Projects</text>
<line x1="838.0" y1="436" x2="1090.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="838.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Project sidebar navigation</text>
<text x="838.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Project sidebar</text>
<text x="854.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">navigation</text>
<text x="838.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Recursive folder support</text>
<text x="838.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Quick Open workflow</text>
<text x="838.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Better file loading performance</text>
<text x="838.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Better file loading</text>
<text x="854.0" y="724" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">performance</text>
</g>
<circle cx="964.0" cy="800" r="26" fill="#9F6BFF" fill-opacity="0.85"/>
<text x="964.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.3</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.4.0">
<title>0.4 - Cross-Platform</title>
<g filter="url(#shadow)">
<rect x="1166.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#FF6FD8" stroke-width="3"/>
</g>
<text x="1316.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.4</text>
<g clip-path="url(#cardClip3)">
<text x="1190.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Cross-Platform</text>
<line x1="1190.0" y1="436" x2="1442.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="1190.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• iPadOS + iOS workflow parity</text>
<text x="1190.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Toolbar and keyboard polish</text>
<text x="1190.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Reliability and performance</text>
<text x="1206.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">hardening</text>
<text x="1190.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Cross-platform Save As support</text>
<text x="1190.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• iPadOS + iOS workflow</text>
<text x="1206.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">parity</text>
<text x="1190.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Toolbar and keyboard</text>
<text x="1206.0" y="584" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">polish</text>
<text x="1190.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Reliability and</text>
<text x="1206.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">performance hardening</text>
<text x="1190.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Cross-platform Save As</text>
<text x="1206.0" y="724" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">support</text>
</g>
<circle cx="1316.0" cy="800" r="26" fill="#FF6FD8" fill-opacity="0.85"/>
<text x="1316.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.4</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.5.0">
<title>0.5 - Editor Intelligence</title>
<g filter="url(#shadow)">
<rect x="1518.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#FF5CA8" stroke-width="3"/>
</g>
<text x="1668.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.5</text>
<text x="1542.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Editor Intelligence</text>
<g clip-path="url(#cardClip4)">
<text x="1542.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Editor</text>
<text x="1542.0" y="426" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Intelligence</text>
<line x1="1542.0" y1="436" x2="1794.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="1542.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Inline code completion</text>
<text x="1542.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Optional AI assistance</text>
<text x="1542.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Markdown preview templates</text>
<text x="1542.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Diagnostics and runtime controls</text>
<text x="1542.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Markdown preview</text>
<text x="1558.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">templates</text>
<text x="1542.0" y="696" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Diagnostics and runtime</text>
<text x="1558.0" y="724" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">controls</text>
</g>
<circle cx="1668.0" cy="800" r="26" fill="#FF5CA8" fill-opacity="0.85"/>
<text x="1668.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.5</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>0.6 - Upcoming Milestone</title>
<g filter="url(#shadow)">
<rect x="1870.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#22C55E" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2020.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.6</text>
<text x="1894.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming Milestone</text>
<g clip-path="url(#cardClip5)">
<text x="1894.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming</text>
<text x="1894.0" y="426" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Milestone</text>
<line x1="1894.0" y1="436" x2="2146.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="1894.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap milestone</text>
<text x="1894.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability polishing</text>
<text x="1894.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue feedback</text>
<text x="1894.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap</text>
<text x="1910.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">milestone</text>
<text x="1894.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability</text>
<text x="1910.0" y="584" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">polishing</text>
<text x="1894.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue</text>
<text x="1910.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">feedback</text>
</g>
<circle cx="2020.0" cy="800" r="26" fill="#22C55E" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2020.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.6</text>
<text x="2020.0" y="902" text-anchor="middle" fill="#334155" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>0.7 - Upcoming Milestone</title>
<g filter="url(#shadow)">
<rect x="2222.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#F59E0B" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2372.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.7</text>
<text x="2246.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming Milestone</text>
<g clip-path="url(#cardClip6)">
<text x="2246.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming</text>
<text x="2246.0" y="426" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Milestone</text>
<line x1="2246.0" y1="436" x2="2498.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="2246.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap milestone</text>
<text x="2246.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability polishing</text>
<text x="2246.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue feedback</text>
<text x="2246.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap</text>
<text x="2262.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">milestone</text>
<text x="2246.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability</text>
<text x="2262.0" y="584" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">polishing</text>
<text x="2246.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue</text>
<text x="2262.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">feedback</text>
</g>
<circle cx="2372.0" cy="800" r="26" fill="#F59E0B" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2372.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">0.7</text>
<text x="2372.0" y="902" text-anchor="middle" fill="#334155" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>1.0 - Next Major Foundation</title>
<g filter="url(#shadow)">
<rect x="2574.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.78)" stroke="#06B6D4" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2724.0" y="330" text-anchor="middle" fill="#0F172A" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">1.0</text>
<g clip-path="url(#cardClip7)">
<text x="2598.0" y="390" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Next Major</text>
<text x="2598.0" y="426" fill="#0F172A" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Foundation</text>
<line x1="2598.0" y1="436" x2="2850.0" y2="436" stroke="#94A3B8" stroke-opacity="0.4"/>
<text x="2598.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Platform + architecture step-up</text>
<text x="2598.0" y="486" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Platform + architecture</text>
<text x="2614.0" y="514" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">step-up</text>
<text x="2598.0" y="556" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Roadmap themes converge</text>
<text x="2598.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Migration guidance in release</text>
<text x="2614.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">notes</text>
<text x="2598.0" y="626" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">• Migration guidance in</text>
<text x="2614.0" y="654" fill="#1F2937" font-size="20" font-family="Arial, Helvetica, sans-serif">release notes</text>
</g>
<circle cx="2724.0" cy="800" r="26" fill="#06B6D4" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2724.0" y="870" text-anchor="middle" fill="#0F172A" font-size="28" font-family="Arial, Helvetica, sans-serif">1.0</text>
<text x="2724.0" y="902" text-anchor="middle" fill="#334155" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -13,109 +13,194 @@
<filter id="shadow" x="-20%" y="-20%" width="140%" height="160%">
<feDropShadow dx="0" dy="12" stdDeviation="18" flood-color="#000000" flood-opacity="0.35"/>
</filter>
<clipPath id="cardClip0">
<rect x="120.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip1">
<rect x="472.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip2">
<rect x="824.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip3">
<rect x="1176.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip4">
<rect x="1528.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip5">
<rect x="1880.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip6">
<rect x="2232.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
<clipPath id="cardClip7">
<rect x="2584.0" y="356" width="280" height="354" rx="20"/>
</clipPath>
</defs>
<rect width="100%" height="100%" fill="url(#bg)"/>
<text x="110" y="110" fill="#FFFFFF" font-size="62" font-weight="700" font-family="Arial, Helvetica, sans-serif">Neon Vision Editor</text>
<text x="110" y="165" fill="#DFE8FF" font-size="30" font-family="Arial, Helvetica, sans-serif">Release History · Versions 0.1 0.5 + upcoming</text>
<line x1="180" y1="800" x2="2884" y2="800" stroke="url(#lineGrad)" stroke-width="8" stroke-linecap="round"/>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.1.0">
<title>0.1 - Early Editor Foundation</title>
<g filter="url(#shadow)">
<rect x="110.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#49C6FF" stroke-width="3"/>
</g>
<text x="260.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.1</text>
<g clip-path="url(#cardClip0)">
<text x="134.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Early Editor</text>
<text x="134.0" y="426" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Foundation</text>
<line x1="134.0" y1="436" x2="386.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="134.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Initial lightweight editor core</text>
<text x="134.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Basic syntax highlighting</text>
<text x="134.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• First SwiftUI editor interface</text>
<text x="134.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Initial lightweight</text>
<text x="150.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">editor core</text>
<text x="134.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Basic syntax</text>
<text x="150.0" y="584" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">highlighting</text>
<text x="134.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• First SwiftUI editor</text>
<text x="150.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">interface</text>
<text x="134.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Early file handling</text>
</g>
<circle cx="260.0" cy="800" r="26" fill="#49C6FF" fill-opacity="0.85"/>
<text x="260.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.1</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.2.0">
<title>0.2 - Core Editing</title>
<g filter="url(#shadow)">
<rect x="462.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#66E3FF" stroke-width="3"/>
</g>
<text x="612.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.2</text>
<g clip-path="url(#cardClip1)">
<text x="486.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Core Editing</text>
<line x1="486.0" y1="436" x2="738.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="486.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Regex Find &amp; Replace</text>
<text x="486.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Bracket helper</text>
<text x="486.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Improved syntax highlighting</text>
<text x="486.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Improved syntax</text>
<text x="502.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">highlighting</text>
<text x="486.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Faster editor rendering</text>
</g>
<circle cx="612.0" cy="800" r="26" fill="#66E3FF" fill-opacity="0.85"/>
<text x="612.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.2</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.3.0">
<title>0.3 - Projects</title>
<g filter="url(#shadow)">
<rect x="814.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#9F6BFF" stroke-width="3"/>
</g>
<text x="964.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.3</text>
<g clip-path="url(#cardClip2)">
<text x="838.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Projects</text>
<line x1="838.0" y1="436" x2="1090.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="838.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Project sidebar navigation</text>
<text x="838.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Project sidebar</text>
<text x="854.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">navigation</text>
<text x="838.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Recursive folder support</text>
<text x="838.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Quick Open workflow</text>
<text x="838.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Better file loading performance</text>
<text x="838.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Better file loading</text>
<text x="854.0" y="724" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">performance</text>
</g>
<circle cx="964.0" cy="800" r="26" fill="#9F6BFF" fill-opacity="0.85"/>
<text x="964.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.3</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.4.0">
<title>0.4 - Cross-Platform</title>
<g filter="url(#shadow)">
<rect x="1166.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#FF6FD8" stroke-width="3"/>
</g>
<text x="1316.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.4</text>
<g clip-path="url(#cardClip3)">
<text x="1190.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Cross-Platform</text>
<line x1="1190.0" y1="436" x2="1442.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="1190.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• iPadOS + iOS workflow parity</text>
<text x="1190.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Toolbar and keyboard polish</text>
<text x="1190.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Reliability and performance</text>
<text x="1206.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">hardening</text>
<text x="1190.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Cross-platform Save As support</text>
<text x="1190.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• iPadOS + iOS workflow</text>
<text x="1206.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">parity</text>
<text x="1190.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Toolbar and keyboard</text>
<text x="1206.0" y="584" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">polish</text>
<text x="1190.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Reliability and</text>
<text x="1206.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">performance hardening</text>
<text x="1190.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Cross-platform Save As</text>
<text x="1206.0" y="724" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">support</text>
</g>
<circle cx="1316.0" cy="800" r="26" fill="#FF6FD8" fill-opacity="0.85"/>
<text x="1316.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.4</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v0.5.0">
<title>0.5 - Editor Intelligence</title>
<g filter="url(#shadow)">
<rect x="1518.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#FF5CA8" stroke-width="3"/>
</g>
<text x="1668.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.5</text>
<text x="1542.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Editor Intelligence</text>
<g clip-path="url(#cardClip4)">
<text x="1542.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Editor</text>
<text x="1542.0" y="426" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Intelligence</text>
<line x1="1542.0" y1="436" x2="1794.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="1542.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Inline code completion</text>
<text x="1542.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Optional AI assistance</text>
<text x="1542.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Markdown preview templates</text>
<text x="1542.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Diagnostics and runtime controls</text>
<text x="1542.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Markdown preview</text>
<text x="1558.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">templates</text>
<text x="1542.0" y="696" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Diagnostics and runtime</text>
<text x="1558.0" y="724" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">controls</text>
</g>
<circle cx="1668.0" cy="800" r="26" fill="#FF5CA8" fill-opacity="0.85"/>
<text x="1668.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.5</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>0.6 - Upcoming Milestone</title>
<g filter="url(#shadow)">
<rect x="1870.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#22C55E" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2020.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.6</text>
<text x="1894.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming Milestone</text>
<g clip-path="url(#cardClip5)">
<text x="1894.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming</text>
<text x="1894.0" y="426" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Milestone</text>
<line x1="1894.0" y1="436" x2="2146.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="1894.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap milestone</text>
<text x="1894.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability polishing</text>
<text x="1894.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue feedback</text>
<text x="1894.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap</text>
<text x="1910.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">milestone</text>
<text x="1894.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability</text>
<text x="1910.0" y="584" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">polishing</text>
<text x="1894.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue</text>
<text x="1910.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">feedback</text>
</g>
<circle cx="2020.0" cy="800" r="26" fill="#22C55E" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2020.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.6</text>
<text x="2020.0" y="902" text-anchor="middle" fill="#DFE8FF" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>0.7 - Upcoming Milestone</title>
<g filter="url(#shadow)">
<rect x="2222.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#F59E0B" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2372.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">0.7</text>
<text x="2246.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming Milestone</text>
<g clip-path="url(#cardClip6)">
<text x="2246.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Upcoming</text>
<text x="2246.0" y="426" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Milestone</text>
<line x1="2246.0" y1="436" x2="2498.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="2246.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap milestone</text>
<text x="2246.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability polishing</text>
<text x="2246.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue feedback</text>
<text x="2246.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Planned roadmap</text>
<text x="2262.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">milestone</text>
<text x="2246.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• UX + reliability</text>
<text x="2262.0" y="584" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">polishing</text>
<text x="2246.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Scope refined via issue</text>
<text x="2262.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">feedback</text>
</g>
<circle cx="2372.0" cy="800" r="26" fill="#F59E0B" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2372.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">0.7</text>
<text x="2372.0" y="902" text-anchor="middle" fill="#DFE8FF" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
<a href="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49">
<title>1.0 - Next Major Foundation</title>
<g filter="url(#shadow)">
<rect x="2574.0" y="260" width="300" height="470" rx="30" fill="rgba(255,255,255,0.06)" stroke="#06B6D4" stroke-width="3" stroke-dasharray="12 10"/>
</g>
<text x="2724.0" y="330" text-anchor="middle" fill="#F3F7FF" font-size="48" font-weight="700" font-family="Arial, Helvetica, sans-serif">1.0</text>
<g clip-path="url(#cardClip7)">
<text x="2598.0" y="390" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Next Major</text>
<text x="2598.0" y="426" fill="#F3F7FF" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">Foundation</text>
<line x1="2598.0" y1="436" x2="2850.0" y2="436" stroke="#DBE6FF" stroke-opacity="0.4"/>
<text x="2598.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Platform + architecture step-up</text>
<text x="2598.0" y="486" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Platform + architecture</text>
<text x="2614.0" y="514" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">step-up</text>
<text x="2598.0" y="556" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Roadmap themes converge</text>
<text x="2598.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Migration guidance in release</text>
<text x="2614.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">notes</text>
<text x="2598.0" y="626" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">• Migration guidance in</text>
<text x="2614.0" y="654" fill="#E7EFFF" font-size="20" font-family="Arial, Helvetica, sans-serif">release notes</text>
</g>
<circle cx="2724.0" cy="800" r="26" fill="#06B6D4" fill-opacity="0.5" stroke-dasharray="6 6"/>
<text x="2724.0" y="870" text-anchor="middle" fill="#FFFFFF" font-size="28" font-family="Arial, Helvetica, sans-serif">1.0</text>
<text x="2724.0" y="902" text-anchor="middle" fill="#DFE8FF" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>
</a>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -40,6 +40,7 @@ class Milestone:
bullets: list[str]
is_future: bool
color: str
link: str
SEED_MINOR_TITLES: dict[tuple[int, int], tuple[str, list[str]]] = {
@ -179,11 +180,19 @@ def choose_current_minor(sections: list[ReleaseSection], explicit_tag: str | Non
def build_completed_minors(current: tuple[int, int], by_minor: dict[tuple[int, int], ReleaseSection]) -> list[tuple[int, int]]:
seeds = set(SEED_MINOR_TITLES.keys())
known = set(by_minor.keys()) | seeds
completed = [m for m in known if m <= current]
completed.sort()
if len(completed) > 8:
completed = completed[-8:]
return completed
completed = {m for m in known if m <= current}
# Keep the full historical 0.X line visible in the timeline (0.1 ... 0.N),
# even when the active release line moves beyond 0.x.
zero_minors = [minor for (major, minor) in completed if major == 0]
if current[0] == 0:
zero_end = current[1]
else:
zero_end = max(zero_minors, default=0)
for minor in range(1, zero_end + 1):
completed.add((0, minor))
return sorted(completed)
def build_future_minors(current: tuple[int, int], completed: list[tuple[int, int]]) -> list[tuple[int, int]]:
@ -203,7 +212,16 @@ def format_minor_label(m: tuple[int, int]) -> str:
def wrap_lines(text: str, width: int, max_lines: int) -> list[str]:
wrapped = textwrap.wrap(text, width=width) or [text]
return wrapped[:max_lines]
if len(wrapped) <= max_lines:
return wrapped
trimmed = wrapped[:max_lines]
last = trimmed[-1].rstrip()
if len(last) > 1:
last = (last[:-1] + "").rstrip()
else:
last = ""
trimmed[-1] = last
return trimmed
def milestone_for_minor(
@ -229,11 +247,25 @@ def milestone_for_minor(
"UX + reliability polishing",
"Scope refined via issue feedback",
]
return Milestone(label=label, title=title, bullets=bullets, is_future=True, color=color)
return Milestone(
label=label,
title=title,
bullets=bullets,
is_future=True,
color=color,
link="https://github.com/h3pdesign/Neon-Vision-Editor/issues/49",
)
if m in SEED_MINOR_TITLES:
title, bullets = SEED_MINOR_TITLES[m]
return Milestone(label=label, title=title, bullets=bullets, is_future=False, color=color)
return Milestone(
label=label,
title=title,
bullets=bullets,
is_future=False,
color=color,
link=f"https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/v{m[0]}.{m[1]}.0",
)
section = by_minor.get(m)
if section is None:
@ -243,10 +275,18 @@ def milestone_for_minor(
bullets=["See CHANGELOG for details."],
is_future=False,
color=color,
link="https://github.com/h3pdesign/Neon-Vision-Editor/blob/main/CHANGELOG.md",
)
bullets = extract_bullets(section.body, limit=4) or ["See CHANGELOG for details."]
title = milestone_title_from_section(section)
return Milestone(label=label, title=title, bullets=bullets, is_future=False, color=color)
return Milestone(
label=label,
title=title,
bullets=bullets,
is_future=False,
color=color,
link=f"https://github.com/h3pdesign/Neon-Vision-Editor/releases/tag/{section.tag}",
)
def render_svg(milestones: list[Milestone], dark: bool) -> str:
@ -284,6 +324,12 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
end_label = completed[-1].label if completed else milestones[0].label
subtitle = f"Release History · Versions {start_label} {end_label} + upcoming"
card_layout: list[tuple[float, float]] = []
for i in range(n):
cx = margin + i * (card_w + gap) + card_w / 2
rect_x = cx - card_w / 2
card_layout.append((cx, rect_x))
out: list[str] = []
out.append(f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}">')
out.extend(
@ -302,6 +348,18 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
'<filter id="shadow" x="-20%" y="-20%" width="140%" height="160%">',
f'<feDropShadow dx="0" dy="12" stdDeviation="18" flood-color="#000000" flood-opacity="{shadow_opacity}"/>',
"</filter>",
]
)
for i, (_, rect_x) in enumerate(card_layout):
out.extend(
[
f'<clipPath id="cardClip{i}">',
f'<rect x="{rect_x + 10:.1f}" y="{card_y + 96}" width="{card_w - 20}" height="{card_h - 116}" rx="20"/>',
"</clipPath>",
]
)
out.extend(
[
"</defs>",
'<rect width="100%" height="100%" fill="url(#bg)"/>',
f'<text x="{margin}" y="110" fill="{title_fill}" font-size="62" font-weight="700" font-family="Arial, Helvetica, sans-serif">Neon Vision Editor</text>',
@ -311,11 +369,12 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
)
for i, m in enumerate(milestones):
cx = margin + i * (card_w + gap) + card_w / 2
rect_x = cx - card_w / 2
cx, rect_x = card_layout[i]
stroke_dash = ' stroke-dasharray="12 10"' if m.is_future else ""
out.extend(
[
f'<a href="{escape(m.link)}">',
f'<title>{escape(m.label)} - {escape(m.title)}</title>',
'<g filter="url(#shadow)">',
(
f'<rect x="{rect_x:.1f}" y="{card_y}" width="{card_w}" height="{card_h}" rx="30" '
@ -326,7 +385,9 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
]
)
title_lines = wrap_lines(m.title, width=20, max_lines=2)
out.append(f'<g clip-path="url(#cardClip{i})">')
title_lines = wrap_lines(m.title, width=16, max_lines=2)
for idx, line in enumerate(title_lines):
out.append(
f'<text x="{rect_x + 24:.1f}" y="{card_y + 130 + idx * 36}" fill="{text_main}" font-size="30" font-weight="600" font-family="Arial, Helvetica, sans-serif">{escape(line)}</text>'
@ -337,7 +398,7 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
)
for bi, bullet in enumerate(m.bullets[:4]):
bullet_lines = wrap_lines(bullet, width=34, max_lines=2)
bullet_lines = wrap_lines(bullet, width=24, max_lines=2)
y = divider_y + 50 + bi * 70
out.append(
f'<text x="{rect_x + 24:.1f}" y="{y}" fill="{text_body}" font-size="20" font-family="Arial, Helvetica, sans-serif">• {escape(bullet_lines[0])}</text>'
@ -347,6 +408,8 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
f'<text x="{rect_x + 40:.1f}" y="{y + 28}" fill="{text_body}" font-size="20" font-family="Arial, Helvetica, sans-serif">{escape(bullet_lines[1])}</text>'
)
out.append("</g>")
node_dash = ' stroke-dasharray="6 6"' if m.is_future else ""
fill_opacity = "0.5" if m.is_future else "0.85"
out.append(f'<circle cx="{cx:.1f}" cy="{timeline_y}" r="26" fill="{m.color}" fill-opacity="{fill_opacity}"{node_dash}/>')
@ -357,6 +420,7 @@ def render_svg(milestones: list[Milestone], dark: bool) -> str:
out.append(
f'<text x="{cx:.1f}" y="{timeline_y + 102}" text-anchor="middle" fill="{subtitle_fill}" font-size="18" font-family="Arial, Helvetica, sans-serif">upcoming</text>'
)
out.append("</a>")
out.append("</svg>")
return "\n".join(out) + "\n"