feat(docs): version-bound release documentation served at /docs
Build & Push Docker Image / build (push) Successful in 2m35s

Adds a docs pipeline so each release has a version-bound Markdown
document (docs/releases/vX.Y.Z.md) rendered publicly in the app:

- sync-release-docs.mjs copies docs/releases/*.md into the toolrate
  public dir and generates index.json before every dev/build
- /docs lists all releases; /docs/:version renders the sanitized
  Markdown (marked + DOMPurify, typography styles)
- template + workflow documented in docs/README.md
- current release (v0.6.0) documented as the first entry
This commit is contained in:
opencode
2026-08-03 16:41:08 +02:00
parent d1dd77bc1e
commit 520f917723
14 changed files with 458 additions and 3 deletions
+32
View File
@@ -42,6 +42,9 @@ catalogs:
clsx:
specifier: 2.1.1
version: 2.1.1
dompurify:
specifier: 3.4.12
version: 3.4.12
drizzle-orm:
specifier: 0.45.2
version: 0.45.2
@@ -51,6 +54,9 @@ catalogs:
lucide-react:
specifier: 1.28.0
version: 1.28.0
marked:
specifier: 18.0.7
version: 18.0.7
react:
specifier: 19.2.8
version: 19.2.8
@@ -585,6 +591,9 @@ importers:
date-fns:
specifier: 4.4.0
version: 4.4.0
dompurify:
specifier: 'catalog:'
version: 3.4.12
embla-carousel-react:
specifier: 8.6.0
version: 8.6.0(react@19.2.8)
@@ -600,6 +609,9 @@ importers:
lucide-react:
specifier: 'catalog:'
version: 1.28.0(react@19.2.8)
marked:
specifier: 'catalog:'
version: 18.0.7
next-themes:
specifier: 0.4.6
version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
@@ -2101,6 +2113,9 @@ packages:
'@types/serve-static@2.2.0':
resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -2470,6 +2485,9 @@ packages:
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
dompurify@3.4.12:
resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==}
drizzle-kit@0.31.10:
resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==}
hasBin: true
@@ -2959,6 +2977,11 @@ packages:
resolution: {integrity: sha512-Lf8ajvVNdRpzSNB4VegxNy7gjs8gU35l4b4+ET49LrQC5PKYwLZ72u60LeJ9gv3qiaesuYjJWCyVeQmv/QWKQw==}
hasBin: true
marked@18.0.7:
resolution: {integrity: sha512-iDVQ5ldaiKXn6b2JroX5kgRfmwgqolW7NpaEzTl1k/2Zh1njIEN9yniyLV/mOvWwtsE8OGgkjsCYvijuPk1dtA==}
engines: {node: '>= 20'}
hasBin: true
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -5145,6 +5168,9 @@ snapshots:
'@types/http-errors': 2.0.5
'@types/node': 25.6.2
'@types/trusted-types@2.0.7':
optional: true
'@types/unist@3.0.3': {}
'@types/use-sync-external-store@0.0.6': {}
@@ -5412,6 +5438,10 @@ snapshots:
detect-node-es@1.1.0: {}
dompurify@3.4.12:
optionalDependencies:
'@types/trusted-types': 2.0.7
drizzle-kit@0.31.10:
dependencies:
'@drizzle-team/brocli': 0.10.2
@@ -5807,6 +5837,8 @@ snapshots:
punycode.js: 2.3.1
uc.micro: 3.0.0
marked@18.0.7: {}
math-intrinsics@1.1.0: {}
mdurl@2.1.0: {}