Compare commits

..

57 Commits

Author SHA1 Message Date
semantic-release-bot
1d1baa0f2a chore(release): 0.24.0 [skip ci]
# [0.24.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.23.0...0.24.0) (2026-04-12)

### Features

* add notes ([869ff82](869ff82875))
* add notes ([1ac2f62](1ac2f62082))
* add notes to all applications ([3b2b38b](3b2b38b625))
* add rybbit tracking ([bc36b67](bc36b67320))
* remove csp ([b88b13e](b88b13ef16))
2026-04-12 00:11:43 +00:00
3b2b38b625 feat: add notes to all applications
All checks were successful
test-build / guarddog (push) Successful in 2m14s
test-build / build (push) Successful in 2m17s
release-image / guarddog (push) Successful in 45s
release-image / build (push) Successful in 1m42s
release-image / semantic-release (push) Successful in 48s
release-image / release-harbor (push) Successful in 8m54s
release-image / release-gitea (push) Successful in 3m20s
renovate / renovate (push) Successful in 1m8s
2026-04-11 18:48:55 -05:00
b88b13ef16 feat: remove csp 2026-04-11 18:48:32 -05:00
bc36b67320 feat: add rybbit tracking 2026-04-11 17:32:37 -05:00
869ff82875 feat: add notes
All checks were successful
test-build / guarddog (push) Successful in 45s
test-build / build (push) Successful in 1m0s
renovate / renovate (push) Successful in 56s
2026-04-11 12:12:14 -05:00
2a17d50122 chore(deps): update dependency prettier to v3.8.2 2026-04-11 12:12:14 -05:00
22bb54a0e2 chore(deps): update dependency bun to v1.3.12 2026-04-11 12:12:14 -05:00
1ac2f62082 feat: add notes 2026-04-11 12:12:14 -05:00
semantic-release-bot
8776b21515 chore(release): 0.23.0 [skip ci]
# [0.23.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.22.0...0.23.0) (2026-04-10)

### Bug Fixes

* **deps:** update dependency astro to v6.1.5 ([b49be7b](b49be7bc09))
* wrong source ([ddc7ec3](ddc7ec3008))

### Features

* remove dep-track ([357eaf3](357eaf37ed))
2026-04-10 01:09:03 +00:00
ddc7ec3008 fix: wrong source
All checks were successful
test-build / guarddog (push) Successful in 1m1s
test-build / build (push) Successful in 1m13s
release-image / guarddog (push) Successful in 43s
release-image / build (push) Successful in 53s
release-image / semantic-release (push) Successful in 51s
release-image / release-harbor (push) Successful in 8m24s
release-image / release-gitea (push) Successful in 3m19s
renovate / renovate (push) Successful in 1m2s
2026-04-09 19:49:45 -05:00
357eaf37ed feat: remove dep-track
All checks were successful
test-build / guarddog (push) Successful in 39s
test-build / build (push) Successful in 47s
renovate / renovate (push) Successful in 1m22s
2026-04-09 16:33:40 -05:00
b49be7bc09 fix(deps): update dependency astro to v6.1.5
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / build (pull_request) Successful in 1m24s
test-build / guarddog (push) Successful in 46s
test-build / build (push) Successful in 1m7s
test-build / guarddog (pull_request) Successful in 3m26s
renovate / renovate (push) Successful in 39s
2026-04-08 21:16:20 +00:00
320a66c0fc Merge pull request 'chore(deps): update dependency eslint-plugin-astro to v1.7.0' (#220) from renovate/eslint-plugin-astro-1.x into main
All checks were successful
test-build / guarddog (push) Successful in 36s
test-build / build (push) Successful in 1m17s
Reviewed-on: #220
2026-04-08 21:09:26 +00:00
08bba3a2bf chore(deps): update typescript-eslint monorepo to v8.58.1
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / guarddog (pull_request) Successful in 49s
test-build / guarddog (push) Successful in 32s
test-build / build (pull_request) Successful in 1m2s
test-build / build (push) Successful in 52s
2026-04-08 18:02:48 +00:00
bfa7523a2b chore(deps): update dependency eslint-plugin-astro to v1.7.0
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / guarddog (pull_request) Successful in 41s
test-build / build (pull_request) Successful in 1m6s
2026-04-08 06:02:16 +00:00
semantic-release-bot
746f948218 chore(release): 0.22.0 [skip ci]
# [0.22.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.21.0...0.22.0) (2026-04-08)

### Bug Fixes

* **deps:** update dependency @astrojs/starlight to v0.38.3 ([6607a36](6607a36ad4))
* **deps:** update dependency astro to v6.1.4 ([7502589](75025890ef))

### Features

* add more apps ([a1589ee](a1589ee88a))
* add more apps ([c1f7e19](c1f7e193fc))
* add more apps ([3b9ca7e](3b9ca7e76e))
* add more apps ([0d9a1fa](0d9a1fa93d))
* add more apps ([e04b5f0](e04b5f0e06))
* update tsconfig for v8 ([5c4a10a](5c4a10acac))
2026-04-08 02:07:11 +00:00
c56f6a07a4 Merge pull request 'main' (#219) from main into release
All checks were successful
release-image / guarddog (push) Successful in 22s
release-image / build (push) Successful in 53s
release-image / semantic-release (push) Successful in 41s
release-image / release-harbor (push) Successful in 6m50s
release-image / release-gitea (push) Successful in 6m21s
Reviewed-on: #219
2026-04-08 02:05:52 +00:00
a1589ee88a feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 2m31s
test-build / build (push) Successful in 3m52s
renovate / renovate (push) Successful in 2m32s
2026-04-07 20:45:43 -05:00
c1f7e193fc feat: add more apps
All checks were successful
test-build / build (push) Successful in 4m11s
test-build / guarddog (push) Successful in 4m14s
2026-04-07 20:20:08 -05:00
3b9ca7e76e feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 6m27s
test-build / build (push) Successful in 16m46s
2026-04-07 19:37:01 -05:00
6607a36ad4 fix(deps): update dependency @astrojs/starlight to v0.38.3
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / guarddog (pull_request) Successful in 3m23s
test-build / build (pull_request) Successful in 6m31s
test-build / guarddog (push) Successful in 7m30s
test-build / build (push) Successful in 11m10s
2026-04-08 00:01:42 +00:00
5c4a10acac feat: update tsconfig for v8
Some checks failed
test-build / guarddog (push) Successful in 2m57s
test-build / build (push) Has been cancelled
renovate / renovate (push) Successful in 1m33s
2026-04-07 18:54:56 -05:00
75025890ef fix(deps): update dependency astro to v6.1.4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / build (push) Successful in 1m32s
test-build / guarddog (pull_request) Successful in 2m31s
test-build / guarddog (push) Successful in 1m43s
test-build / build (pull_request) Successful in 6m53s
renovate / renovate (push) Successful in 57s
2026-04-07 15:27:44 +00:00
0d9a1fa93d feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 46s
test-build / build (push) Successful in 56s
renovate / renovate (push) Successful in 6m33s
2026-04-06 21:27:16 -05:00
e04b5f0e06 feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 50s
test-build / build (push) Successful in 58s
2026-04-06 20:26:30 -05:00
semantic-release-bot
772591f574 chore(release): 0.21.0 [skip ci]
# [0.21.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.20.0...0.21.0) (2026-04-07)

### Features

* add more apps ([fa91135](fa91135059))
* add more apps ([32f11ff](32f11ff679))
* add more apps ([0e04e39](0e04e396e4))
* add more apps ([451dd28](451dd2859b))
* add more apps ([ea1e36d](ea1e36da0d))
* add more apps ([94a03d0](94a03d070d))
* add more apps ([b210267](b2102678aa))
* add more apps ([c5b230e](c5b230e94e))
2026-04-07 00:19:47 +00:00
fa91135059 feat: add more apps
All checks were successful
test-build / build (push) Successful in 43s
test-build / guarddog (push) Successful in 49s
release-image / guarddog (push) Successful in 1m7s
release-image / build (push) Successful in 1m22s
release-image / semantic-release (push) Successful in 48s
release-image / release-harbor (push) Successful in 3m40s
release-image / release-gitea (push) Successful in 3m37s
2026-04-06 19:16:42 -05:00
32f11ff679 feat: add more apps 2026-04-06 19:16:42 -05:00
0e04e396e4 feat: add more apps 2026-04-06 19:16:42 -05:00
451dd2859b feat: add more apps 2026-04-06 19:16:42 -05:00
ea1e36da0d feat: add more apps 2026-04-06 19:16:42 -05:00
94a03d070d feat: add more apps 2026-04-06 19:16:42 -05:00
b2102678aa feat: add more apps 2026-04-06 19:16:42 -05:00
c5b230e94e feat: add more apps 2026-04-06 19:16:42 -05:00
semantic-release-bot
01b7552f7e chore(release): 0.20.0 [skip ci]
# [0.20.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.19.0...0.20.0) (2026-04-06)

### Features

* add more apps ([b82b3f0](b82b3f09cc))
2026-04-06 01:51:36 +00:00
c14dc38735 Merge pull request 'feat: add more apps' (#215) from main into release
All checks were successful
release-image / guarddog (push) Successful in 58s
release-image / build (push) Successful in 1m30s
release-image / semantic-release (push) Successful in 1m1s
release-image / release-harbor (push) Successful in 14m17s
release-image / release-gitea (push) Successful in 14m56s
Reviewed-on: #215
2026-04-06 01:49:20 +00:00
b82b3f09cc feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 57s
test-build / build (push) Successful in 1m51s
renovate / renovate (push) Successful in 57s
2026-04-05 20:46:55 -05:00
semantic-release-bot
51f1cb4090 chore(release): 0.19.0 [skip ci]
# [0.19.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.18.0...0.19.0) (2026-04-06)

### Features

* add more apps ([9b906fa](9b906fa18f))
* change to mdx ([53cbb04](53cbb049ed))
2026-04-06 00:10:35 +00:00
7a6e667a81 Merge pull request 'main' (#214) from main into release
All checks were successful
release-image / guarddog (push) Successful in 1m9s
release-image / build (push) Successful in 1m22s
release-image / semantic-release (push) Successful in 51s
release-image / release-harbor (push) Has been skipped
release-image / release-gitea (push) Has been skipped
Reviewed-on: #214
2026-04-06 00:08:41 +00:00
53cbb049ed feat: change to mdx
All checks were successful
test-build / guarddog (push) Successful in 1m8s
test-build / build (push) Successful in 1m52s
2026-04-05 19:05:44 -05:00
9b906fa18f feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 1m1s
test-build / build (push) Successful in 1m30s
renovate / renovate (push) Successful in 1m34s
2026-04-05 18:48:22 -05:00
semantic-release-bot
8c2d625d12 chore(release): 0.18.0 [skip ci]
# [0.18.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.17.0...0.18.0) (2026-04-05)

### Features

* add more apps ([58a8faf](58a8faf795))
* add more apps ([3f3e353](3f3e35396e))
2026-04-05 02:40:49 +00:00
0af5a69d8a Merge pull request 'main' (#213) from main into release
All checks were successful
release-image / guarddog (push) Successful in 53s
release-image / build (push) Successful in 1m33s
release-image / semantic-release (push) Successful in 59s
release-image / release-harbor (push) Successful in 5m13s
release-image / release-gitea (push) Successful in 4m54s
Reviewed-on: #213
2026-04-05 02:38:39 +00:00
58a8faf795 feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 1m17s
test-build / build (push) Successful in 1m34s
renovate / renovate (push) Successful in 39s
2026-04-04 21:35:32 -05:00
3f3e35396e feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 1m22s
test-build / build (push) Successful in 1m35s
2026-04-04 21:09:37 -05:00
semantic-release-bot
ca33145e2d chore(release): 0.17.0 [skip ci]
# [0.17.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.16.0...0.17.0) (2026-04-05)

### Features

* add more apps ([f627fbe](f627fbe316))
* add ntfy ([89649f9](89649f904f))
2026-04-05 00:46:27 +00:00
59f5f08d44 Merge pull request 'main' (#212) from main into release
Some checks failed
release-image / guarddog (push) Successful in 50s
release-image / build (push) Successful in 2m3s
release-image / semantic-release (push) Successful in 1m26s
release-image / release-harbor (push) Has been cancelled
release-image / release-gitea (push) Successful in 5m34s
Reviewed-on: #212
2026-04-05 00:43:10 +00:00
89649f904f feat: add ntfy
All checks were successful
test-build / guarddog (push) Successful in 1m0s
test-build / build (push) Successful in 7m15s
2026-04-04 19:25:55 -05:00
1b650a411e chore(deps): update dependency eslint to v10.2.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / build (pull_request) Successful in 1m55s
test-build / guarddog (pull_request) Successful in 5m13s
test-build / build (push) Successful in 1m17s
test-build / guarddog (push) Successful in 2m37s
2026-04-05 00:02:33 +00:00
f627fbe316 feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 1m9s
test-build / build (push) Successful in 4m25s
renovate / renovate (push) Successful in 2m38s
2026-04-04 17:54:45 -05:00
semantic-release-bot
f5776fdef8 chore(release): 0.16.0 [skip ci]
# [0.16.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.15.0...0.16.0) (2026-04-04)

### Features

* add more apps ([57aec90](57aec90c9e))
* add more apps ([425651b](425651bd30))
* add more apps ([2ccfeca](2ccfecaf63))
* add more apps ([76a568a](76a568a61b))
* add more apps ([09567e2](09567e2c26))
2026-04-04 01:37:32 +00:00
b16abe43c9 Merge pull request 'main' (#210) from main into release
All checks were successful
test-build / guarddog (push) Successful in 43s
test-build / build (push) Successful in 54s
release-image / guarddog (push) Successful in 3m58s
release-image / build (push) Successful in 4m12s
release-image / semantic-release (push) Successful in 2m35s
release-image / release-harbor (push) Successful in 7m51s
release-image / release-gitea (push) Successful in 6m14s
renovate / renovate (push) Successful in 1m32s
Reviewed-on: #210
2026-04-04 01:30:57 +00:00
57aec90c9e feat: add more apps
All checks were successful
test-build / build (push) Successful in 55s
test-build / guarddog (push) Successful in 2m32s
2026-04-03 20:26:08 -05:00
425651bd30 feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 33s
test-build / build (push) Successful in 4m25s
2026-04-03 19:50:16 -05:00
2ccfecaf63 feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 4m29s
test-build / build (push) Successful in 8m19s
2026-04-03 19:16:25 -05:00
76a568a61b feat: add more apps
All checks were successful
test-build / guarddog (push) Successful in 27s
test-build / build (push) Successful in 44s
renovate / renovate (push) Successful in 1m11s
2026-04-02 20:25:35 -05:00
09567e2c26 feat: add more apps
All checks were successful
test-build / build (push) Successful in 1m23s
test-build / guarddog (push) Successful in 3m40s
renovate / renovate (push) Successful in 1m59s
2026-04-01 19:46:15 -05:00
114 changed files with 2250 additions and 95 deletions

View File

@@ -24,7 +24,7 @@ jobs:
- name: Set up Bun - name: Set up Bun
uses: oven-sh/setup-bun@v2 uses: oven-sh/setup-bun@v2
with: with:
bun-version: 1.3.11 bun-version: 1.3.12
- name: Install Dependencies - name: Install Dependencies
run: bun install --frozen-lockfile run: bun install --frozen-lockfile
@@ -119,7 +119,7 @@ jobs:
- name: Set up Bun - name: Set up Bun
uses: oven-sh/setup-bun@v2 uses: oven-sh/setup-bun@v2
with: with:
bun-version: 1.3.11 bun-version: 1.3.12
- name: Install Dependencies - name: Install Dependencies
run: bun install --frozen-lockfile run: bun install --frozen-lockfile

View File

@@ -27,7 +27,7 @@ jobs:
- name: Set up Bun - name: Set up Bun
uses: oven-sh/setup-bun@v2 uses: oven-sh/setup-bun@v2
with: with:
bun-version: 1.3.11 bun-version: 1.3.12
- name: Install Dependencies - name: Install Dependencies
run: bun install --frozen-lockfile run: bun install --frozen-lockfile

View File

@@ -1,3 +1,101 @@
# [0.24.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.23.0...0.24.0) (2026-04-12)
### Features
* add notes ([869ff82](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/869ff82875c2ab9d030767e480896b29b1056f02))
* add notes ([1ac2f62](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/1ac2f62082d180d42a4baf9b330b67b3483b7a64))
* add notes to all applications ([3b2b38b](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/3b2b38b6256fbd699ce7fa5521b43761c6c6a9ed))
* add rybbit tracking ([bc36b67](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/bc36b67320b1f515a70ad4e338ce7549a153a8b6))
* remove csp ([b88b13e](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/b88b13ef1693610b06c5e99dc8906b215a5fda40))
# [0.23.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.22.0...0.23.0) (2026-04-10)
### Bug Fixes
* **deps:** update dependency astro to v6.1.5 ([b49be7b](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/b49be7bc09918c8c39572cabd903e3f73a2ef6a3))
* wrong source ([ddc7ec3](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/ddc7ec300859240497cc65070d253ba02b794b06))
### Features
* remove dep-track ([357eaf3](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/357eaf37eda2b9558b49292970f7765f07ece0c1))
# [0.22.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.21.0...0.22.0) (2026-04-08)
### Bug Fixes
* **deps:** update dependency @astrojs/starlight to v0.38.3 ([6607a36](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/6607a36ad4a6b66719685cc84af2790a210dfc7f))
* **deps:** update dependency astro to v6.1.4 ([7502589](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/75025890ef0577278c44d3678671ca518798b0ec))
### Features
* add more apps ([a1589ee](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/a1589ee88aed1c8e47d906f30b2db7ab78f274a4))
* add more apps ([c1f7e19](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/c1f7e193fc126ff4d94d2209a96fb29254c705fd))
* add more apps ([3b9ca7e](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/3b9ca7e76ea44387ca000a6b039593214891a295))
* add more apps ([0d9a1fa](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/0d9a1fa93d6b98dc6e88879b575769868bae5d57))
* add more apps ([e04b5f0](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/e04b5f0e060fe7e7b6471ff0d7c721db366412f4))
* update tsconfig for v8 ([5c4a10a](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/5c4a10acacb17d775e54f300eb280fb51e098bea))
# [0.21.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.20.0...0.21.0) (2026-04-07)
### Features
* add more apps ([fa91135](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/fa911350597b0dff19b83956b9947a9e7884ca4a))
* add more apps ([32f11ff](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/32f11ff67968b8a9239941facff679a607ca6e57))
* add more apps ([0e04e39](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/0e04e396e4bf749bde21aebd0647df6e6be4f80f))
* add more apps ([451dd28](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/451dd2859b9d5072b1ab0f41b5f7d7ba4201cb5a))
* add more apps ([ea1e36d](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/ea1e36da0d271b75852939c339f7e768964d7e2c))
* add more apps ([94a03d0](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/94a03d070d32a165f8b9e180291aad7f751b3ebe))
* add more apps ([b210267](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/b2102678aacd3e1659486740fdebfd8560015bb7))
* add more apps ([c5b230e](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/c5b230e94e985c608568c38a5c497af9b7bd5003))
# [0.20.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.19.0...0.20.0) (2026-04-06)
### Features
* add more apps ([b82b3f0](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/b82b3f09cc7a649d52f3495e5f11b1edb2856796))
# [0.19.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.18.0...0.19.0) (2026-04-06)
### Features
* add more apps ([9b906fa](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/9b906fa18fd2cb4888bccc1bf0ba51ea795a12c3))
* change to mdx ([53cbb04](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/53cbb049ed717e3b4890af864c0ce0cd205c751e))
# [0.18.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.17.0...0.18.0) (2026-04-05)
### Features
* add more apps ([58a8faf](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/58a8faf79563a7570f69a1863a3f4b056352dc2f))
* add more apps ([3f3e353](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/3f3e35396e56a91662807971e5b09e6c25bb067a))
# [0.17.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.16.0...0.17.0) (2026-04-05)
### Features
* add more apps ([f627fbe](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/f627fbe3165af551a546fff41ef26431a919ea02))
* add ntfy ([89649f9](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/89649f904f0304b5e1f41eaec4faa07a409f679d))
# [0.16.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.15.0...0.16.0) (2026-04-04)
### Features
* add more apps ([57aec90](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/57aec90c9e0c9b51c238a76a82f7d4f0a3a14195))
* add more apps ([425651b](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/425651bd309ba215ec1fbd618882e98b3fad17b4))
* add more apps ([2ccfeca](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/2ccfecaf63b623c0fc7a847d5d81ca8d54c991bd))
* add more apps ([76a568a](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/76a568a61bb35511d84deaeb86eadc2a4643b473))
* add more apps ([09567e2](http://gitea-http.gitea:3000/alexlebens/site-documentation/commit/09567e2c266fd1d2f66ba42f5ed6d3cb134216ae))
# [0.15.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.14.0...0.15.0) (2026-04-02) # [0.15.0](http://gitea-http.gitea:3000/alexlebens/site-documentation/compare/0.14.0...0.15.0) (2026-04-02)

View File

@@ -1,6 +1,6 @@
# MIT License # MIT License
Copyright (c) 2025 Alex Lebens Copyright (c) 2026 Alex Lebens
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -16,14 +16,22 @@ const getSiteURL = () => {
export default defineConfig({ export default defineConfig({
site: getSiteURL(), site: getSiteURL(),
security: { csp: true },
prefetch: true, prefetch: true,
integrations: [ integrations: [
sitemap(), sitemap(),
starlight({ starlight({
title: "Alex Lebens Docs", title: "Alex Lebens Docs",
head: [
{
tag: 'script',
attrs: {
src: 'https://rybbit.alexlebens.dev/api/script.js',
'data-site-id': 'a8768eb5f5ff',
defer: true,
},
},
],
customCss: [ customCss: [
'./src/styles/custom.css', './src/styles/custom.css',
], ],

View File

@@ -8,10 +8,10 @@
"@astrojs/mdx": "5.0.3", "@astrojs/mdx": "5.0.3",
"@astrojs/node": "10.0.4", "@astrojs/node": "10.0.4",
"@astrojs/sitemap": "3.7.2", "@astrojs/sitemap": "3.7.2",
"@astrojs/starlight": "0.38.2", "@astrojs/starlight": "0.38.3",
"@tailwindcss/postcss": "4.2.2", "@tailwindcss/postcss": "4.2.2",
"@tailwindcss/vite": "4.2.2", "@tailwindcss/vite": "4.2.2",
"astro": "6.1.3", "astro": "6.1.5",
"sanitize-html": "2.17.2", "sanitize-html": "2.17.2",
"sharp": "0.34.5", "sharp": "0.34.5",
"starlight-theme-rapide": "0.5.2", "starlight-theme-rapide": "0.5.2",
@@ -26,17 +26,17 @@
"@semantic-release/release-notes-generator": "14.1.0", "@semantic-release/release-notes-generator": "14.1.0",
"@tailwindcss/forms": "0.5.11", "@tailwindcss/forms": "0.5.11",
"@tailwindcss/typography": "0.5.19", "@tailwindcss/typography": "0.5.19",
"@typescript-eslint/parser": "8.58.0", "@typescript-eslint/parser": "8.58.1",
"eslint": "10.1.0", "eslint": "10.2.0",
"eslint-config-prettier": "10.1.8", "eslint-config-prettier": "10.1.8",
"eslint-plugin-astro": "1.6.0", "eslint-plugin-astro": "1.7.0",
"prettier": "3.8.1", "prettier": "3.8.2",
"prettier-plugin-astro": "0.14.1", "prettier-plugin-astro": "0.14.1",
"prettier-plugin-tailwindcss": "0.7.2", "prettier-plugin-tailwindcss": "0.7.2",
"semantic-release": "25.0.3", "semantic-release": "25.0.3",
"semantic-release-export-data": "1.2.0", "semantic-release-export-data": "1.2.0",
"typescript": "6.0.2", "typescript": "6.0.2",
"typescript-eslint": "8.58.0", "typescript-eslint": "8.58.1",
}, },
}, },
}, },
@@ -65,7 +65,7 @@
"@astrojs/sitemap": ["@astrojs/sitemap@3.7.2", "", { "dependencies": { "sitemap": "^9.0.0", "stream-replace-string": "^2.0.0", "zod": "^4.3.6" } }, "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA=="], "@astrojs/sitemap": ["@astrojs/sitemap@3.7.2", "", { "dependencies": { "sitemap": "^9.0.0", "stream-replace-string": "^2.0.0", "zod": "^4.3.6" } }, "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA=="],
"@astrojs/starlight": ["@astrojs/starlight@0.38.2", "", { "dependencies": { "@astrojs/markdown-remark": "^7.0.0", "@astrojs/mdx": "^5.0.0", "@astrojs/sitemap": "^3.7.1", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.41.6", "bcp-47": "^2.1.0", "hast-util-from-html": "^2.0.1", "hast-util-select": "^6.0.2", "hast-util-to-string": "^3.0.0", "hastscript": "^9.0.0", "i18next": "^23.11.5", "js-yaml": "^4.1.0", "klona": "^2.0.6", "magic-string": "^0.30.17", "mdast-util-directive": "^3.0.0", "mdast-util-to-markdown": "^2.1.0", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.3.0", "rehype": "^13.0.1", "rehype-format": "^5.0.0", "remark-directive": "^3.0.0", "ultrahtml": "^1.6.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile": "^6.0.2" }, "peerDependencies": { "astro": "^6.0.0" } }, "sha512-7AsrvG4EsXUmJT5uqiXJN4oZqKaY0wc/Ip7C6/zGnShHRVoTAA4jxeYIZ3wqbqA6zv4cnp9qk31vB2m2dUcmfg=="], "@astrojs/starlight": ["@astrojs/starlight@0.38.3", "", { "dependencies": { "@astrojs/markdown-remark": "^7.0.0", "@astrojs/mdx": "^5.0.0", "@astrojs/sitemap": "^3.7.1", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.41.6", "bcp-47": "^2.1.0", "hast-util-from-html": "^2.0.1", "hast-util-select": "^6.0.2", "hast-util-to-string": "^3.0.0", "hastscript": "^9.0.0", "i18next": "^23.11.5", "js-yaml": "^4.1.0", "klona": "^2.0.6", "magic-string": "^0.30.17", "mdast-util-directive": "^3.0.0", "mdast-util-to-markdown": "^2.1.0", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.3.0", "rehype": "^13.0.1", "rehype-format": "^5.0.0", "remark-directive": "^3.0.0", "ultrahtml": "^1.6.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile": "^6.0.2" }, "peerDependencies": { "astro": "^6.0.0" } }, "sha512-kDlJPlUDdQFWYmyFM2yUPo66yws7v067AEK+/rQjjoVyqehL3DabuOJuy6UJFFTFyGbHxYcBms/ITEgdW7tphw=="],
"@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "4.4.0", "debug": "4.4.3", "dlv": "1.1.3", "dset": "3.1.4", "is-docker": "3.0.0", "is-wsl": "3.1.1", "which-pm-runs": "1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "4.4.0", "debug": "4.4.3", "dlv": "1.1.3", "dset": "3.1.4", "is-docker": "3.0.0", "is-wsl": "3.1.1", "which-pm-runs": "1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="],
@@ -149,15 +149,15 @@
"@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
"@eslint/config-array": ["@eslint/config-array@0.23.3", "", { "dependencies": { "@eslint/object-schema": "3.0.3", "debug": "4.4.3", "minimatch": "10.2.4" } }, "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw=="], "@eslint/config-array": ["@eslint/config-array@0.23.4", "", { "dependencies": { "@eslint/object-schema": "^3.0.4", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow=="],
"@eslint/config-helpers": ["@eslint/config-helpers@0.5.3", "", { "dependencies": { "@eslint/core": "1.1.1" } }, "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw=="], "@eslint/config-helpers": ["@eslint/config-helpers@0.5.4", "", { "dependencies": { "@eslint/core": "^1.2.0" } }, "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg=="],
"@eslint/core": ["@eslint/core@1.1.1", "", { "dependencies": { "@types/json-schema": "7.0.15" } }, "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ=="], "@eslint/core": ["@eslint/core@1.2.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A=="],
"@eslint/object-schema": ["@eslint/object-schema@3.0.3", "", {}, "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ=="], "@eslint/object-schema": ["@eslint/object-schema@3.0.4", "", {}, "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw=="],
"@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "1.1.1", "levn": "0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="], "@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.0", "", { "dependencies": { "@eslint/core": "^1.2.0", "levn": "^0.4.1" } }, "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg=="],
"@expressive-code/core": ["@expressive-code/core@0.41.7", "", { "dependencies": { "@ctrl/tinycolor": "4.2.0", "hast-util-select": "6.0.4", "hast-util-to-html": "9.0.5", "hast-util-to-text": "4.0.2", "hastscript": "9.0.1", "postcss": "8.5.8", "postcss-nested": "6.2.0", "unist-util-visit": "5.1.0", "unist-util-visit-parents": "6.0.2" } }, "sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg=="], "@expressive-code/core": ["@expressive-code/core@0.41.7", "", { "dependencies": { "@ctrl/tinycolor": "4.2.0", "hast-util-select": "6.0.4", "hast-util-to-html": "9.0.5", "hast-util-to-text": "4.0.2", "hastscript": "9.0.1", "postcss": "8.5.8", "postcss-nested": "6.2.0", "unist-util-visit": "5.1.0", "unist-util-visit-parents": "6.0.2" } }, "sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg=="],
@@ -461,25 +461,25 @@
"@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/type-utils": "8.58.0", "@typescript-eslint/utils": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg=="], "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/type-utils": "8.58.1", "@typescript-eslint/utils": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ=="],
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw=="],
"@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="], "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="],
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0" } }, "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ=="], "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1" } }, "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w=="],
"@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="], "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="],
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/utils": "8.58.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg=="], "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w=="],
"@typescript-eslint/types": ["@typescript-eslint/types@8.58.0", "", {}, "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="], "@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="], "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="],
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ=="],
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="], "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="],
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
@@ -519,7 +519,7 @@
"astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="],
"astro": ["astro@6.1.3", "", { "dependencies": { "@astrojs/compiler": "^3.0.1", "@astrojs/internal-helpers": "0.8.0", "@astrojs/markdown-remark": "7.1.0", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", "devalue": "^5.6.3", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.2", "smol-toml": "^1.6.0", "svgo": "^4.0.1", "tinyclip": "^0.1.12", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.4", "unist-util-visit": "^5.1.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^7.3.1", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.3.6" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "bin/astro.mjs" } }, "sha512-FUKbBYOdYYrRNZwDd9I5CVSfR6Nj9aZeNzcjcvh1FgHwR0uXawkYFR3HiGxmdmAB2m8fs0iIkDdsiUfwGeO8qA=="], "astro": ["astro@6.1.5", "", { "dependencies": { "@astrojs/compiler": "^3.0.1", "@astrojs/internal-helpers": "0.8.0", "@astrojs/markdown-remark": "7.1.0", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", "devalue": "^5.6.3", "diff": "^8.0.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.2", "smol-toml": "^1.6.0", "svgo": "^4.0.1", "tinyclip": "^0.1.12", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.4", "unist-util-visit": "^5.1.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^7.3.1", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.3.6" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "bin/astro.mjs" } }, "sha512-AJVw/JlssxUCBFi3Hp4djL8Pt7wUQqStBBawCd8cNGBBM2lBzp/rXGguzt4OcMfW+86fs0hpFwMyopHM2r6d3g=="],
"astro-eslint-parser": ["astro-eslint-parser@1.3.0", "", { "dependencies": { "@astrojs/compiler": "2.13.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "astrojs-compiler-sync": "1.1.1", "debug": "4.4.3", "entities": "6.0.1", "eslint-scope": "8.4.0", "eslint-visitor-keys": "4.2.1", "espree": "10.4.0", "fast-glob": "3.3.3", "is-glob": "4.0.3", "semver": "7.7.4" } }, "sha512-aOLc/aDR7lTWAHlytEefwn4Y6qs6uMr69DZvUx2A1AOAZsWhGB/paiRWPtVchh9wzMvLeqr+DkbENhVreVr9AQ=="], "astro-eslint-parser": ["astro-eslint-parser@1.3.0", "", { "dependencies": { "@astrojs/compiler": "2.13.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "astrojs-compiler-sync": "1.1.1", "debug": "4.4.3", "entities": "6.0.1", "eslint-scope": "8.4.0", "eslint-visitor-keys": "4.2.1", "espree": "10.4.0", "fast-glob": "3.3.3", "is-glob": "4.0.3", "semver": "7.7.4" } }, "sha512-aOLc/aDR7lTWAHlytEefwn4Y6qs6uMr69DZvUx2A1AOAZsWhGB/paiRWPtVchh9wzMvLeqr+DkbENhVreVr9AQ=="],
@@ -743,13 +743,13 @@
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
"eslint": ["eslint@10.1.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.3", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA=="], "eslint": ["eslint@10.2.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.4", "@eslint/config-helpers": "^0.5.4", "@eslint/core": "^1.2.0", "@eslint/plugin-kit": "^0.7.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA=="],
"eslint-compat-utils": ["eslint-compat-utils@0.6.5", "", { "dependencies": { "semver": "7.7.4" }, "peerDependencies": { "eslint": "10.0.3" } }, "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ=="], "eslint-compat-utils": ["eslint-compat-utils@0.6.5", "", { "dependencies": { "semver": "7.7.4" }, "peerDependencies": { "eslint": "10.0.3" } }, "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ=="],
"eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": "10.0.3" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="], "eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": "10.0.3" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="],
"eslint-plugin-astro": ["eslint-plugin-astro@1.6.0", "", { "dependencies": { "@eslint-community/eslint-utils": "4.9.1", "@jridgewell/sourcemap-codec": "1.5.5", "@typescript-eslint/types": "8.56.1", "astro-eslint-parser": "1.3.0", "eslint-compat-utils": "0.6.5", "globals": "16.5.0", "postcss": "8.5.6", "postcss-selector-parser": "7.1.1" }, "peerDependencies": { "eslint": "10.0.3" } }, "sha512-yGIbLHuj5MOUXa0s4sZ6cVhv6ehb+WLF80tsrGaxMk6VTUExruMzubQDzhOYt8fbR1c9vILCCRSCsKI7M1whig=="], "eslint-plugin-astro": ["eslint-plugin-astro@1.7.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@jridgewell/sourcemap-codec": "^1.4.14", "@typescript-eslint/types": "^7.7.1 || ^8", "astro-eslint-parser": "^1.3.0", "eslint-compat-utils": "^0.6.0", "globals": "^16.0.0", "postcss": "^8.4.14", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "eslint": ">=8.57.0" } }, "sha512-89xpAn528UKCdmyysbg0AHHqi6sqcK89wXnJIpu4F0mFBN03zATEBNK7pRtMfl6gwtMOm5ECXs+Wz5qDHhwTFw=="],
"eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "4.3.1", "@types/estree": "1.0.8", "esrecurse": "4.3.0", "estraverse": "5.3.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], "eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "4.3.1", "@types/estree": "1.0.8", "esrecurse": "4.3.0", "estraverse": "5.3.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="],
@@ -1361,7 +1361,7 @@
"pkg-conf": ["pkg-conf@2.1.0", "", { "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" } }, "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g=="], "pkg-conf": ["pkg-conf@2.1.0", "", { "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" } }, "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g=="],
"postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "6.1.2" }, "peerDependencies": { "postcss": "8.5.8" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "6.1.2" }, "peerDependencies": { "postcss": "8.5.8" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="],
@@ -1369,7 +1369,7 @@
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
"prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], "prettier": ["prettier@3.8.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q=="],
"prettier-plugin-astro": ["prettier-plugin-astro@0.14.1", "", { "dependencies": { "@astrojs/compiler": "2.13.1", "prettier": "3.8.1", "sass-formatter": "0.7.9" } }, "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw=="], "prettier-plugin-astro": ["prettier-plugin-astro@0.14.1", "", { "dependencies": { "@astrojs/compiler": "2.13.1", "prettier": "3.8.1", "sass-formatter": "0.7.9" } }, "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw=="],
@@ -1625,7 +1625,7 @@
"typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="],
"typescript-eslint": ["typescript-eslint@8.58.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.0", "@typescript-eslint/parser": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/utils": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA=="], "typescript-eslint": ["typescript-eslint@8.58.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg=="],
"ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="],
@@ -1729,12 +1729,8 @@
"@actions/http-client/undici": ["undici@6.24.0", "", {}, "sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA=="], "@actions/http-client/undici": ["undici@6.24.0", "", {}, "sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA=="],
"@astrojs/starlight/@astrojs/markdown-remark": ["@astrojs/markdown-remark@7.0.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.8.0", "@astrojs/prism": "4.0.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^4.0.0", "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-jTAXHPy45L7o1ljH4jYV+ShtOHtyQUa1mGp3a5fJp1soX8lInuTJQ6ihmldHzVM4Q7QptU4SzIDIcKbBJO7sXQ=="],
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
"@expressive-code/core/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"@expressive-code/plugin-shiki/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], "@expressive-code/plugin-shiki/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="],
"@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="],
@@ -1773,8 +1769,6 @@
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"@tailwindcss/postcss/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"@types/cacheable-request/@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], "@types/cacheable-request/@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="],
"@types/glob/@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], "@types/glob/@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="],
@@ -1825,8 +1819,6 @@
"env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], "env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="],
"eslint-plugin-astro/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="],
"eslint-plugin-astro/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], "eslint-plugin-astro/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="],
"execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
@@ -2159,18 +2151,16 @@
"pkg-conf/find-up": ["find-up@2.1.0", "", { "dependencies": { "locate-path": "^2.0.0" } }, "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ=="], "pkg-conf/find-up": ["find-up@2.1.0", "", { "dependencies": { "locate-path": "^2.0.0" } }, "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ=="],
"postcss-nested/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"postcss-nested/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], "postcss-nested/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="],
"prettier-plugin-astro/prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="],
"read-package-up/read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="], "read-package-up/read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="],
"read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
"read-pkg/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="], "read-pkg/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
"sanitize-html/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"semantic-release/@semantic-release/error": ["@semantic-release/error@4.0.0", "", {}, "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ=="], "semantic-release/@semantic-release/error": ["@semantic-release/error@4.0.0", "", {}, "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ=="],
"semantic-release/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], "semantic-release/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="],
@@ -2195,14 +2185,10 @@
"tsconfck/typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], "tsconfck/typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
"vite/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"vitefu/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.0.3", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.31.1" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], "vitefu/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.0.3", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.31.1" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="],
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
"@astrojs/starlight/@astrojs/markdown-remark/@astrojs/prism": ["@astrojs/prism@4.0.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-NndtNPpxaGinRpRytljGBvYHpTOwHycSZ/c+lQi5cHvkqqrHKWdkPEhImlODBNmbuB+vyQUNUDXyjzt66CihJg=="],
"@expressive-code/plugin-shiki/shiki/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4", "hast-util-to-html": "9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], "@expressive-code/plugin-shiki/shiki/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4", "hast-util-to-html": "9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="],
"@expressive-code/plugin-shiki/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "oniguruma-to-es": "4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], "@expressive-code/plugin-shiki/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "oniguruma-to-es": "4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="],
@@ -2323,8 +2309,6 @@
"vitefu/vite/lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "2.1.2" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], "vitefu/vite/lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "2.1.2" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="],
"vitefu/vite/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="],
"@semantic-release/github/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "@semantic-release/github/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
"@semantic-release/npm/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "@semantic-release/npm/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],

View File

@@ -1,7 +1,7 @@
{ {
"name": "site-documentation", "name": "site-documentation",
"type": "module", "type": "module",
"version": "0.15.0", "version": "0.24.0",
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"build": "astro build", "build": "astro build",
@@ -15,10 +15,10 @@
"@astrojs/mdx": "5.0.3", "@astrojs/mdx": "5.0.3",
"@astrojs/node": "10.0.4", "@astrojs/node": "10.0.4",
"@astrojs/sitemap": "3.7.2", "@astrojs/sitemap": "3.7.2",
"@astrojs/starlight": "0.38.2", "@astrojs/starlight": "0.38.3",
"@tailwindcss/postcss": "4.2.2", "@tailwindcss/postcss": "4.2.2",
"@tailwindcss/vite": "4.2.2", "@tailwindcss/vite": "4.2.2",
"astro": "6.1.3", "astro": "6.1.5",
"sanitize-html": "2.17.2", "sanitize-html": "2.17.2",
"sharp": "0.34.5", "sharp": "0.34.5",
"starlight-theme-rapide": "0.5.2", "starlight-theme-rapide": "0.5.2",
@@ -33,16 +33,16 @@
"@semantic-release/release-notes-generator": "14.1.0", "@semantic-release/release-notes-generator": "14.1.0",
"@tailwindcss/forms": "0.5.11", "@tailwindcss/forms": "0.5.11",
"@tailwindcss/typography": "0.5.19", "@tailwindcss/typography": "0.5.19",
"@typescript-eslint/parser": "8.58.0", "@typescript-eslint/parser": "8.58.1",
"eslint": "10.1.0", "eslint": "10.2.0",
"eslint-config-prettier": "10.1.8", "eslint-config-prettier": "10.1.8",
"eslint-plugin-astro": "1.6.0", "eslint-plugin-astro": "1.7.0",
"prettier": "3.8.1", "prettier": "3.8.2",
"prettier-plugin-astro": "0.14.1", "prettier-plugin-astro": "0.14.1",
"prettier-plugin-tailwindcss": "0.7.2", "prettier-plugin-tailwindcss": "0.7.2",
"semantic-release": "25.0.3", "semantic-release": "25.0.3",
"semantic-release-export-data": "1.2.0", "semantic-release-export-data": "1.2.0",
"typescript": "6.0.2", "typescript": "6.0.2",
"typescript-eslint": "8.58.0" "typescript-eslint": "8.58.1"
} }
} }

View File

@@ -5,7 +5,7 @@
"mergeConfidence:all-badges", "mergeConfidence:all-badges",
":rebaseStalePrs" ":rebaseStalePrs"
], ],
"timezone": "US/Central", "timezone": "America/Chicago",
"labels": [], "labels": [],
"prHourlyLimit": 0, "prHourlyLimit": 0,
"prConcurrentLimit": 0, "prConcurrentLimit": 0,

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/actual link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/actual
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Budgeting and managing finances.
# Notes
Currently unused, need to setup bank integration or some other for of automation.

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/argocd link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/argocd
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffiq2at9b8p34d?orgId=1).</Aside>
# Purpose
Deploying and managing resources within Kubernetes clusters.
# Notes
Syncs from templates defined in the [infrastructure](https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/manifests/) repo, manifests branch. Deeply integrated with Gitea and the rendered manifests system.
Also used as a dashboard for resources, mostly for logs and restarting deployments. This is also done in [Headlamp](https://docs.alexlebens.dev/applications/headlamp/), which is the full featured dashboard.

View File

@@ -1,15 +0,0 @@
---
title: Argo Workflows
description: Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes.
hero:
tagline: Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/argo-cd.webp
actions:
- text: Source
link: https://github.com/argoproj/argo-workflows
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/argo-workflows
icon: right-arrow
---

View File

@@ -13,3 +13,13 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/audiobookshelf link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/audiobookshelf
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Podcasts, Audiobbooks, and Books.
# Notes
Mostly for podcast archiving and listening to audiobooks. Backup for [Grimmory](https://docs.alexlebens.dev/applications/grimmory/) for books, but not primary.
Kind of difficult to manage podcasts though, and the phone apps don't auto download to the phone.

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/authentik link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/authentik
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [auth.alexlebens.dev](https://auth.alexlebens.dev)</Aside>
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/efiq29z9u4dmob?orgId=1)</Aside>
# Purpose
Single sign on authentication for applications that support OIDC.
# Notes
Available at public, local, and Tailscale endpoints. Apps are configured for their like endppoints.

View File

@@ -13,3 +13,13 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/backrest link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/backrest
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Backup system for files on the NAS. For size contraint reasons, does not backup most video content.
# Notes
Must be manually configured in the app. Has been setup for targets at the remote - PiBox - or the Digital Ocean S3 buckets.
Mainly just for irreplacable files.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/bazarr link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/bazarr
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Downloads subtitles for Sonarr and Radarr managed files.
# Notes
Haven't setup properly or sure if subtitles are being downloaded. Since I don't use subtitles very often I have thought about removing this.

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/blocky link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/blocky
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an [Grafana Dashboard](https://grafana.alexlebens.net/goto/afiq277mq7mkge?orgId=1)</Aside>
# Purpose
Very fast and declarative config DNS with built in adblocking. Used for local domain name configuration as well.
# Notes
Deployments in cluster, on RaspberryPis, and the PiBox. Cluster and Tailscale use the cluster endpoint, clients use the RaspberyPis, and home network used the PiBox.
DNS over TLS to Cloudflare servers and somewhat agressive blocking.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cert-manager link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cert-manager
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffiq2il12bwn4b?orgId=1)</Aside>
# Purpose
Manages certificates inside the Kubernetes cluster.
# Notes
Commonly used automatic background service used by other services.

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cilium link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cilium
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has a dedicated [Dashboard with Hubble](https://hubble.alexlebens.net/)</Aside>
# Purpose
Core networking service connecting nodes and pods together. Provides a metal LoadBalancer service.
# Notes
One of the most important apps in cluster. Any updates need special care to ensure success.
Long term goals include migrating the Ingress/Gateway from [Traefik](https://docs.alexlebens.dev/applications/traefik/) to Cilium and using BGP for connecting to the network devices. I've tried this a few times, but networking isn't my strong suit.

View File

@@ -13,3 +13,19 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cloudnative-pg link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/cloudnative-pg
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfiq33g3brj0gc?orgId=1)</Aside>
# Purpose
Operator that manages PostgreSQL deployments in cluster.
# Notes
A very important application since many core services and applications depend on PostgreSQL databases.
Backups to the NAS with replication of the base backups to remote and DigialOcean S3 endpoints.
Used in conjunction with [this](https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster) Helm Chart to easily deploy and manage the application PostgreSQL instances.

View File

@@ -1,15 +0,0 @@
---
title: Code Server
description: Run VS Code on any machine anywhere and access it in the browser.
hero:
tagline: Run VS Code on any machine anywhere and access it in the browser.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/visual-studio-code.webp
actions:
- text: Source
link: https://github.com/coder/code-server
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/code-server
icon: right-arrow
---

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/coredns link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/coredns
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an [Grafana Dashboard](https://grafana.alexlebens.net/goto/dfiq3jh1ez0n4a?orgId=1)</Aside>
# Purpose
DNS server just for cluster services, such as pod and service routing.
# Notes
Upstreams to [Blocky](https://docs.alexlebens.dev/applications/blocky/) for external DNS queries and also to the [Tailscale](https://docs.alexlebens.dev/applications/tailscale-operator/) DNS server for Tailnet access.
Deploys as part of the Talos upgrades, but managed by Helm chart for the above custom configuration.

View File

@@ -13,3 +13,13 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/dawarich link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/dawarich
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Alternative to Google Locations, does tracking using an Android app to provide location history.
# Notes
Requires the provided Android app for tracking.
Need to import Google Location history

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/democratic-csi-synology-iscsi link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/democratic-csi-synology-iscsi
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Storage provider for iSCSI block devices from the NAS.
# Notes
Used for applications that need to store a lot of data, but not over the NFS connection. Examples include metrics and logging storage.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/descheduler link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/descheduler
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit9jt9odji8a?orgId=1).</Aside>
# Purpose
Automated service that balances pods across the nodes according to configuration.
# Notes
Mostly used to balance number of pods. Current limit is set to 200 which is nearly twice the defaults, but this can sometimes be met during reboots during upgrades as pods are evicted. Then this will balance out one all nodes are healthy again.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/directus link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/directus
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Content Management System tightly coupled to [my personal site](https://docs.alexlebens.dev/applications/site-profile/).
# Notes
Most information is stored here and accessed at build time. Webhook setup so when I publish a blog post here it will initiate a new build of the image.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/elastic-operator link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/elastic-operator
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Operator to deploy and manage Elasticsearch instances.
# Notes
Easier to manage then just deploying Helm Charts. Mostly used for [TubeArchivist](https://docs.alexlebens.dev/applications/tubearchivist/).

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/element-web link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/element-web
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [chat.alexlebens.dev](https://chat.alexlebens.dev)</Aside>
# Purpose
Front end web client for Matrix servers.
# Notes
Provides front end for [Matrix-Synapse](https://docs.alexlebens.dev/applications/matrix-synapse/)

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/eraser link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/eraser
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Automatic service that cleans up local caches of images.
# Notes
Removes all non running images. This does cause a startup delay, but [Harbor](https://docs.alexlebens.dev/applications/harbor/) is configured as a generic pull through cache, so pulls for new images should be quick.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/excalidraw link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/excalidraw
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Used to make diagrams and other sketches.
# Notes
Mostly used in blog posts and documentation.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/external-dns link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/external-dns
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit9l1ay5qm8c?orgId=1).</Aside>
# Purpose
Makes DNS entries of Kubernetes resources into an external DNS provider.
# Notes
Blocky can't be configured this way, so I am exploring other options to use this automation. But it is currently setup to configure the Ubiquity devices.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/external-secrets link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/external-secrets
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit9lr0c2e4ga?orgId=1).</Aside>
# Purpose
Very useful, decalarative way to make Kubernetes Secrets from an external provider.
# Notes
Secrets come from [Vault](https://docs.alexlebens.dev/applications/vault/).

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/foldergram link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/foldergram
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [art.alexlebens.dev](https://art.alexlebens.dev)</Aside>
# Purpose
View pictures I have collected that are not photos I have taken myself.
# Notes
Setup to provide all the collections of public domain images I have. Mostly from various art museums.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/freshrss link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/freshrss
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [rss.alexlebens.dev](https://rss.alexlebens.dev)</Aside>
# Purpose
RSS reader for various news sites as well as software releases.
# Notes
A little finicky to setup, predates popular use of containers, but still functions quite well. I mostly use it with an Android app.

View File

@@ -13,3 +13,21 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/garage link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/garage
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit8jm3mwk5cd?orgId=1).</Aside>
# Purpose
Clustered S3 storage provider.
# Notes
Considering moving to the [operator](https://github.com/rajsinghtech/garage-operator), but currently deploys as chart.
Backing storage comes from [iSCSI](https://docs.alexlebens.dev/applications/democratic-csi-synology-iscsi/).
Primary endpoint for most S3 targets, alongside PiBox and Digital Ocean.
[Rclone](https://docs.alexlebens.dev/applications/rclone/) handles any kind of syncing to the other endpoints as needed.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/gatus link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/gatus
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/bfit9mmwvmqrkf?orgId=1).</Aside>
# Purpose
Uptime and down notifications for all endpoints, both local and public.
# Notes
All declarative configuration, will end notifications using [ntfy](https://docs.alexlebens.dev/applications/ntfy/).

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/generic-device-plugin link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/generic-device-plugin
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Plugin used to give devices to pods, specifically tun devices for networking.
# Notes
Used by recomendation in [Tailscale Docs](https://docs.siderolabs.com/kubernetes-guides/advanced-guides/device-plugins).

View File

@@ -13,3 +13,19 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/gitea link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/gitea
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [gitea.alexlebens.dev](https://gitea.alexlebens.dev)</Aside>
<Aside>This collects analytics and sent to Rybbit at [rybbit.alexlebens.dev](https://rybbit.alexlebens.dev/)</Aside>
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/dfit89k7khk3kc?orgId=1).</Aside>
# Purpose
Git repoistory for storing all my code.
# Notes
Primary code repo, repositories set to replicate to a PiBox as well as Github for a layer of backup.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/grafana-operator link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/grafana-operator
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffit9nnrapou8d?orgId=1).</Aside>
# Purpose
Operator to declaratively make Grafana dashboards.
# Notes
Uses the dashboard json in [grafana-dashboards](https://gitea.alexlebens.dev/alexlebens/grafana-dashboards].

View File

@@ -13,3 +13,13 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/grimmory link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/grimmory
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Store and provide books.
# Notes
Used to be called 'Booklore'.
Only app that uses [MariaDB](https://docs.alexlebens.dev/applications/mariadb-operator/).

View File

@@ -13,3 +13,17 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/harbor link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/harbor
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit9ofndecjkd?orgId=1).</Aside>
# Purpose
Pull through cache and registry for personal images built in Gitea.
# Notes
Talos is configured to direct pulls to Docker, Github, and others to Harbor first. Stores these images as a cache to avoid rate limiting, primarily by Docker hub.
Any of my own images also get stored here to deploy.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/headlamp link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/headlamp
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Dashboard for Kubernetes.
# Notes
I also use the desktop app which is identical.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/home-assistant link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/home-assistant
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Home automation, connecting to various IoT devices through Zigbee, Matter, etc.
# Notes
Currently unused.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/homepage link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/homepage
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Provides links and status dots for all deployed apps.
# Notes
Do not set to RollingUpdate or use multiple replicas. Has some kind of loading issue when doing so.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/houndarr link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/houndarr
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Manages automatic upgrades for content in the Servarr apps.
# Notes
Set and forget, runs as a service in the background.

View File

@@ -13,3 +13,15 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/immich link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/immich
icon: right-arrow icon: right-arrow
--- ---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/bfit80bb45csgb?orgId=1).</Aside>
# Purpose
Alternative to Google Photos, stores all my photos.
# Notes
Photos are stored internally, though a full copy is also kept on the NAS.

View File

@@ -13,3 +13,11 @@ hero:
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/intel-device-plugin link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/intel-device-plugin
icon: right-arrow icon: right-arrow
--- ---
# Purpose
Used to give pods access to host GPUs. Primarily for video and the QuickSync feature.
# Notes
Just works in the background.

View File

@@ -0,0 +1,29 @@
---
title: Jellyfin
description: Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
hero:
tagline: Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/jellyfin.webp
actions:
- text: Source
link: https://github.com/jellyfin/jellyfin
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/jellyfin
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit8116thywwd?orgId=1).</Aside>
# Purpose
Provides video, such as movies and shows.
# Notes
A little finicky and not as polished as Plex, but open source and supports plugins.
Planned migration to PostgreSQL when feature is supported.

View File

@@ -0,0 +1,23 @@
---
title: Jellystat
description: Jellystat is a free and open source Statistics App for Jellyfin!
hero:
tagline: Jellystat is a free and open source Statistics App for Jellyfin!
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/jellystat.webp
actions:
- text: Source
link: https://github.com/CyferShepard/Jellystat
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/jellystat
icon: right-arrow
---
# Purpose
Monitors and provides stats for Jellyfin.
# Notes
Mostly just runs in the background. Stats for size of library and most recently added are the most useful. Jellyfin's 'recently added' doesn't work that well.

View File

@@ -0,0 +1,29 @@
---
title: Karakeep
description: Karakeep is a self-hostable bookmark-everything app with a touch of AI for the data hoarders out there.
hero:
tagline: Karakeep is a self-hostable bookmark-everything app with a touch of AI for the data hoarders out there.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/karakeep.webp
actions:
- text: Source
link: https://github.com/karakeep-app/karakeep
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/karakeep
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [karakeep.alexlebens.dev](https://karakeep.alexlebens.dev)</Aside>
# Purpose
Organizes and tags bookmarks.
# Notes
Used to be called 'Hoarder', new name is better.
Connect to [Ollama](https://docs.alexlebens.dev/applications/ollama/) for using AI to generate the tags.

View File

@@ -0,0 +1,26 @@
---
title: Kiwix
description: Kiwix is an open-source software that allows you to have the whole Wikipedia at your fingertips.
hero:
tagline: Kiwix is an open-source software that allows you to have the whole Wikipedia at your fingertips.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kiwix.webp
actions:
- text: Source
link: https://github.com/kiwix
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/kiwix
icon: right-arrow
---
# Purpose
Local copies of various wikis and other datasets.
# Notes
Full backups, including images, of Wikipedia.
[qBittorrent](https://docs.alexlebens.dev/applications/qbittorrent/) has a category that will download the Kiwix files into the directory it reads from.

View File

@@ -0,0 +1,25 @@
---
title: Komodo
description: Komodo is a tool to build and deploy software across many servers.
hero:
tagline: Komodo is a tool to build and deploy software across many servers.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/komodo.webp
actions:
- text: Source
link: https://github.com/moghtech/komodo
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/komodo
icon: right-arrow
---
# Purpose
Manages deployments of single nodes hosts with docker compose stacks.
# Notes
Manual setup, but follows Gitops with webhook triggered updates from Gitea.
Compose files are placed in [infrastructure](https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/hosts) under the hosts dir.

View File

@@ -0,0 +1,33 @@
---
title: Prometheus
description: Prometheus, a Cloud Native Computing Foundation project, is a systems and service monitoring system.
hero:
tagline: Prometheus, a Cloud Native Computing Foundation project, is a systems and service monitoring system.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/prometheus.webp
actions:
- text: Source
link: https://github.com/prometheus/prometheus
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/kube-prometheus-stack
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/dfit8q7ooq7eod?orgId=1).</Aside>
<Aside type="tip">AirGradient has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffit86ggcrxtse?orgId=1).</Aside>
# Purpose
Community managed and combined stack for Prometheus metrics. Also includes alerting.
# Notes
Metrics are stored on iSCSI, retention is 45 days.
Sends alert notifications through [ntfy](https://docs.alexlebens.dev/applications/ntfy/).
Scrapping for targets outside of cluster has their ServiceMonitors placed in this chart, such as for IoT devices.

View File

@@ -0,0 +1,23 @@
---
title: Kubelet Serving Certificate Approver
description: Kubelet Serving Certificate Approver is a custom approving controller which approves kubernetes.io/kubelet-serving Certificate Signing Request that kubelet use to serve TLS endpoints.
hero:
tagline: Kubelet Serving Certificate Approver is a custom approving controller which approves kubernetes.io/kubelet-serving Certificate Signing Request that kubelet use to serve TLS endpoints.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kubernetes.webp
actions:
- text: Source
link: https://github.com/alex1989hu/kubelet-serving-cert-approver
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/kubelet-serving-cert-approver
icon: right-arrow
---
# Purpose
Service that runs in the background, approves certificates generated by the kubelet.
# Notes
Mostly just used for cluster first install or when certs are renewed to ensure access.

View File

@@ -0,0 +1,23 @@
---
title: Kubernetes Cloudflare DDNS
description: This is a simple Kubernetes cronjob which can be used for updating a DNS record on Cloudflare.
hero:
tagline: This is a simple Kubernetes cronjob which can be used for updating a DNS record on Cloudflare.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cloudflare.webp
actions:
- text: Source
link: https://github.com/kubitodev/kubernetes-cloudflare-ddns
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/kubernetes-cloudflare-ddns
icon: right-arrow
---
# Purpose
Updates the IP address for Cloudflare domains.
# Notes
Cloudflare manages the domains for alexlebens.net, this ensures that the IP address the domain points to is the one assigned by the ISP to the home/network device.

View File

@@ -0,0 +1,23 @@
---
title: LanguageTool
description: LanguageTool is open-source proofreading software for English, Spanish, French, German, Portuguese, Polish, Dutch, and more than 20 other languages. It finds many errors that a simple spell checker cannot detect.
hero:
tagline: LanguageTool is open-source proofreading software for English, Spanish, French, German, Portuguese, Polish, Dutch, and more than 20 other languages. It finds many errors that a simple spell checker cannot detect.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/languagetool.webp
actions:
- text: Source
link: https://github.com/languagetool-org/languagetool
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/languagetool
icon: right-arrow
---
# Purpose
Provides higher level grammer and spell checking service.
# Notes
Used by Zettlr and a web browser extension.

View File

@@ -0,0 +1,23 @@
---
title: Libation
description: Libation is a free, open-source application for downloading and managing your Audible audiobooks. It decrypts your library, removes DRM, and lets you own your audiobooks forever.
hero:
tagline: Libation is a free, open-source application for downloading and managing your Audible audiobooks. It decrypts your library, removes DRM, and lets you own your audiobooks forever.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/libation.webp
actions:
- text: Source
link: https://github.com/rmcrackan/Libation
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/libation
icon: right-arrow
---
# Purpose
Monitors and downloads copies of audiobooks from Audible.
# Notes
Downloads into the NAS directory that [Audiobookshelf](https://docs.alexlebens.dev/applications/audiobookshelf) reads from.

View File

@@ -0,0 +1,25 @@
---
title: Lidarr
description: Lidarr is a music collection manager for Usenet and BitTorrent users.
hero:
tagline: Lidarr is a music collection manager for Usenet and BitTorrent users.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/lidarr.webp
actions:
- text: Source
link: https://github.com/Lidarr/Lidarr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/lidarr
icon: right-arrow
---
# Purpose
Servarr app that manages the metadata and organization of music.
# Notes
Connects to [qbittorrent](https://docs.alexlebens.dev/applications/qbittorrent), [slskd](https://docs.alexlebens.dev/applications/slskd) with support from [prowlarr](https://docs.alexlebens.dev/applications/prowlarr) and [unpackerr](https://docs.alexlebens.dev/applications/unpackerr).
Runs on nightly branch to integrate plugins.

View File

@@ -0,0 +1,23 @@
---
title: Local Path Provisioner
description: Dynamically provisioning persistent local storage with Kubernetes
hero:
tagline: Dynamically provisioning persistent local storage with Kubernetes
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kubernetes.webp
actions:
- text: Source
link: https://github.com/rancher/local-path-provisioner
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/local-path-provisioner
icon: right-arrow
---
# Purpose
Storage for paths on the local node's NVME drive. When high performance, but non redundant storage is required.
# Notes
Primarily used by the databases, PostgreSQL and MariaDB, since they have internal clustering and increasing their read/write speeds is very beneficial.

View File

@@ -0,0 +1,31 @@
---
title: Loki
description: Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus.
hero:
tagline: Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/loki.webp
actions:
- text: Source
link: https://github.com/grafana/loki
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/loki
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit8khiifnr4b?orgId=1).</Aside>
# Purpose
Collects logs from pods and makes them availabile in Grafana.
# Notes
Uses iSCSI for log storage.
Generally unused as I inspect most logs in [ArgoCD](https://docs.alexlebens.dev/applications/argo-cd/) or [Headlamp](https://docs.alexlebens.dev/applications/headlamp/). But this does keep them for longer rentention.
Maybe someday will integrate AI from [Ollama](https://docs.alexlebens.dev/applications/ollama/) to monitor and report on logs.

View File

@@ -0,0 +1,25 @@
---
title: MariaDB Operator
description: Run and operate MariaDB in a cloud native way. Declaratively manage your MariaDB using Kubernetes CRDs rather than imperative commands.
hero:
tagline: Run and operate MariaDB in a cloud native way. Declaratively manage your MariaDB using Kubernetes CRDs rather than imperative commands.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/mariadb.webp
actions:
- text: Source
link: https://github.com/mariadb-operator/mariadb-operator
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/mariadb-operator
icon: right-arrow
---
# Purpose
Operator that manages deployments of MariaDB.
# Notes
Very durable, survives and heals from several node outages.
Only really used for [Grimmory](https://docs.alexlebens.dev/applications/grimmory) though.

View File

@@ -0,0 +1,29 @@
---
title: Matrix Synapse
description: Matrix is the open standard for secure and interoperable real-time communications. Synapse is an open source Matrix homeserver implementation, written and maintained by Element.
hero:
tagline: Matrix is the open standard for secure and interoperable real-time communications. Synapse is an open source Matrix homeserver implementation, written and maintained by Element.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/matrix.webp
actions:
- text: Source
link: https://github.com/element-hq/synapse
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/matrix-synapse
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [matrix.alexlebens.dev](https://matrix.alexlebens.dev)</Aside>
# Purpose
Secure and encrypted chat service.
# Notes
Very difficult to maintain, especially with encryption.
Used mostly for bridging Discord and WhatsApp.

View File

@@ -0,0 +1,23 @@
---
title: MediaLyze
description: Self-hosted media library analysis for large video collections.
hero:
tagline: Self-hosted media library analysis for large video collections.
image:
file: https://raw.githubusercontent.com/frederikemmer/MediaLyze/d8f69c0628bac7c047b90f91a66341648029c273/frontend/public/favicon.svg
actions:
- text: Source
link: https://github.com/frederikemmer/MediaLyze
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/mediaLyze
icon: right-arrow
---
# Purpose
Monitors and provides stats for media libraries.
# Notes
Kind of neat to see the stats, but haven't found much purpose outside of curiosity.

View File

@@ -0,0 +1,23 @@
---
title: Metrics Server
description: Metrics Server is a scalable, efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
hero:
tagline: Metrics Server is a scalable, efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kubernetes.webp
actions:
- text: Source
link: https://github.com/kubernetes-sigs/metrics-server
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/metrics-server
icon: right-arrow
---
# Purpose
Core Kubernetes service that provides basic metrics on cpu, memory, and disk that is used by Kubernetes for tooling such as scaling. Also what is seen in [Headlamp](https://docs.alexlebens.dev/applications/headlamp) for live stats.
# Notes
Like some other services, it happily runs in the background without trouble.

View File

@@ -0,0 +1,23 @@
---
title: Music Grabber
description: A self-hosted music acquisition service. Search YouTube, SoundCloud, Soulseek, MP3Phoenix and Monochrome (Tidal lossless), tap a result and it downloads the best quality audio straight into your music library.
hero:
tagline: A self-hosted music acquisition service. Search YouTube, SoundCloud, Soulseek, MP3Phoenix and Monochrome (Tidal lossless), tap a result and it downloads the best quality audio straight into your music library.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/music-grabber.webp
actions:
- text: Source
link: https://gitlab.com/g33kphr33k/musicgrabber
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/music-grabber
icon: right-arrow
---
# Purpose
An alternative to [yubal](https://docs.alexlebens.dev/applications/yubal), it collects music as directed.
# Notes
Unused currently.

View File

@@ -0,0 +1,29 @@
---
title: Navidrome
description: Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device.
hero:
tagline: Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/navidrome.webp
actions:
- text: Source
link: https://github.com/navidrome/navidrome
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/navidrome
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/bfit82l8b0gsgf?orgId=1).</Aside>
# Purpose
Music server that uses the subsonic protocol.
# Notes
Chart also deploys a webclient of [Feishin](https://github.com/jeffvli/feishin), but I mostly use the desktop app. On Android I use [Symfonium](https://symfonium.app/).
While I can use [Jellyfin](https://docs.alexlebens.dev/applications/jellyfin) for music, I prefer separation for dedicated media types.

View File

@@ -0,0 +1,23 @@
---
title: Node Feature Discovery
description: Node Feature Discovery is a Kubernetes add-on for detecting hardware features and system configuration.
hero:
tagline: Node Feature Discovery is a Kubernetes add-on for detecting hardware features and system configuration.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kubernetes.webp
actions:
- text: Source
link: https://github.com/kubernetes-sigs/node-feature-discovery
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/node-feature-discovery
icon: right-arrow
---
# Purpose
Background service that adds labels to nodes based on detected hardware features.
# Notes
Used in conjunction with nodeAffinity and other scheduling configuration to assign pods to the capable nodes.

View File

@@ -0,0 +1,27 @@
---
title: ntfy
description: ntfy (pronounced "notify") is a simple HTTP-based pub-sub notification service.
hero:
tagline: ntfy (pronounced "notify") is a simple HTTP-based pub-sub notification service.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ntfy.webp
actions:
- text: Source
link: https://github.com/binwiederhier/ntfy
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/ntfy
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit8bbhovsw0d?orgId=1).</Aside>
# Purpose
Notification service based on a Pub/Sub model.
# Notes
Very useful service that sends notifications to my phone and is widely addopted by a lot of other apps or has bridging support such as through [apprise](https://github.com/caronc/apprise).

View File

@@ -0,0 +1,27 @@
---
title: Ollama
description: Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
hero:
tagline: Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ollama.webp
actions:
- text: Source
link: https://github.com/ollama/ollama
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/ollama
icon: right-arrow
---
# Purpose
Local AI servers.
# Notes
[Open WebUI](https://github.com/open-webui/open-webui) frontend.
Configured mostly to run the Gemma models.
Tailscale connction to the desktop GPU for larger model processing.

View File

@@ -0,0 +1,23 @@
---
title: OmniTools
description: Self-hosted collection of powerful web-based tools for everyday tasks. No ads, no tracking, just fast, accessible utilities right from your browser!
hero:
tagline: Self-hosted collection of powerful web-based tools for everyday tasks. No ads, no tracking, just fast, accessible utilities right from your browser!
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/omnitools.webp
actions:
- text: Source
link: https://github.com/iib0011/omni-tools
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/omni-tools
icon: right-arrow
---
# Purpose
A variety of useful tools for random things. No need to search obscure websites or download various different apps.
# Notes
The hardest part is remembering the things it can do. Images, video, audio, text, math, etc.

View File

@@ -0,0 +1,29 @@
---
title: Outline
description: A fast, collaborative, knowledge base for your team built using React and Node.js.
hero:
tagline: A fast, collaborative, knowledge base for your team built using React and Node.js.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/outline.webp
actions:
- text: Source
link: https://github.com/outline/outline
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/outline
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [outline.alexlebens.dev](https://outline.alexlebens.dev)</Aside>
# Purpose
A more featured version of a wiki with similarities to Notion.
# Notes
Used to use Outline in before transitioning to this docs site.
Backup in case I want to migrate away from Capacities. I prefer the object types in Capacities, but can work too.

View File

@@ -0,0 +1,29 @@
---
title: Paperless-ngx
description: A community-supported supercharged document management system; scan, index and archive all your documents.
hero:
tagline: A community-supported supercharged document management system; scan, index and archive all your documents.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paperless-ngx.webp
actions:
- text: Source
link: https://github.com/paperless-ngx/paperless-ngx
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/paperless-ngx
icon: right-arrow
---
# Purpose
Documentation organizer.
# Notes
Designed to scan in and run OCR on files, as well as upload digital documents.
Based around tagging instead of folders.
Haven't begun to use, but I expect it to be useful.
Need to ensure backups are good and proper first.

View File

@@ -0,0 +1,25 @@
---
title: Plex
description: Plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices.
hero:
tagline: Plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/plex.webp
actions:
- text: Source
link: https://github.com/linuxserver/docker-plex
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/plex
icon: right-arrow
---
# Purpose
Closed source media provider.
# Notes
Very easy to use, so kept running in case of sharing to others.
Primarily migrated over to [Jellyfin](https://docs.alexlebens.dev/applications/jellyfin).

View File

@@ -0,0 +1,29 @@
---
title: Postiz
description: Postiz offers everything you need to manage your social media posts, build an audience, capture leads, and grow your business.
hero:
tagline: Postiz offers everything you need to manage your social media posts, build an audience, capture leads, and grow your business.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/postiz.webp
actions:
- text: Source
link: https://github.com/gitroomhq/postiz-app
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/postiz
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [postiz.alexlebens.dev](https://postiz.alexlebens.dev)</Aside>
# Purpose
Automates social media posting.
# Notes
So dumb and complex to setup, has hard dependency on [Temporal](https://github.com/temporalio).
Haven't begun to use, but want to connect to automate posting of my blog.

View File

@@ -0,0 +1,23 @@
---
title: Prowlarr
description: Prowlarr is an indexer manager/proxy built on the popular *arr .net/reactjs base stack to integrate with your various PVR apps, supporting management of both Torrent Trackers and Usenet Indexers.
hero:
tagline: Prowlarr is an indexer manager/proxy built on the popular *arr .net/reactjs base stack to integrate with your various PVR apps, supporting management of both Torrent Trackers and Usenet Indexers.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/prowlarr.webp
actions:
- text: Source
link: https://github.com/Prowlarr/Prowlarr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/prowlarr
icon: right-arrow
---
# Purpose
Manages and automates configuration of trackers for the Servarr instances.
# Notes
Setup once here and all the others work.

View File

@@ -0,0 +1,29 @@
---
title: qBittorrent
description: qBittorrent is a bittorrent client programmed in C++ / Qt that uses libtorrent.
hero:
tagline: qBittorrent is a bittorrent client programmed in C++ / Qt that uses libtorrent.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qbittorrent.webp
actions:
- text: Source
link: https://github.com/qbittorrent/qBittorrent
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/qbittorrent
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffit8c6tqrxfkc?orgId=1).</Aside>
# Purpose
Main torrent client.
# Notes
Runs behind [gluetun](https://github.com/qdm12/gluetun).
Both [qbit-manage](https://github.com/StuffAnThings/qbit_manage) and [qui](https://github.com/autobrr/qui) running alongside to automate management of the files. Both of these have dramatically reduced time spent maintaining this.

View File

@@ -0,0 +1,40 @@
---
title: Radarr
description: Radarr is a movie collection manager for Usenet and BitTorrent users.
hero:
tagline: Radarr is a movie collection manager for Usenet and BitTorrent users.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/radarr.webp
actions:
- text: Source
link: https://github.com/Radarr/Radarr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/radarr
icon: right-arrow
- text: Deployment Chart 4K
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/radarr-4k
icon: right-arrow
- text: Deployment Chart Anime
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/radarr-anime
icon: right-arrow
- text: Deployment Chart Stand Up
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/radarr-standup
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit83kzzx6v4a?orgId=1).</Aside>
# Purpose
Manages metadata for movies.
# Notes
Should rarely be access, manage through [Seerr](https://docs.alexlebens.dev/applications/seerr/)
Connects to [qbittorrent](https://docs.alexlebens.dev/applications/qbittorrent) with support from [prowlarr](https://docs.alexlebens.dev/applications/prowlarr) and [unpackerr](https://docs.alexlebens.dev/applications/unpackerr).
4 separate instances for different media types.

View File

@@ -0,0 +1,23 @@
---
title: Rclone
description: Rclone ("rsync for cloud storage") is a command-line program to sync files and directories to and from different cloud storage providers.
hero:
tagline: Rclone ("rsync for cloud storage") is a command-line program to sync files and directories to and from different cloud storage providers.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/rclone.webp
actions:
- text: Source
link: https://github.com/rclone/rclone
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/rclone
icon: right-arrow
---
# Purpose
Syncs data in S3 buckets.
# Notes
Syncs bucket from in cluster [Garage](https://docs.alexlebens.dev/applications/garage/) to remote or Digital Ocean.

View File

@@ -0,0 +1,23 @@
---
title: Reloader
description: Reloader is a Kubernetes controller that automatically triggers rollouts of workloads (like Deployments, StatefulSets, and more) whenever referenced Secrets, ConfigMaps or optionally CSI-mounted secrets are updated.
hero:
tagline: Reloader is a Kubernetes controller that automatically triggers rollouts of workloads (like Deployments, StatefulSets, and more) whenever referenced Secrets, ConfigMaps or optionally CSI-mounted secrets are updated.
image:
file: https://raw.githubusercontent.com/stakater/Reloader/refs/heads/master/assets/web/reloader.jpg
actions:
- text: Source
link: https://github.com/stakater/Reloader
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/reloader
icon: right-arrow
---
# Purpose
Simple service that will ensure a restart of services if their mounted ConfigMaps change.
# Notes
Used by a few apps, such as homepage where its entirely configured by ConfigMap.

View File

@@ -0,0 +1,33 @@
---
title: Rook Ceph
description: Rook is an open source cloud-native storage orchestrator for Kubernetes, providing the platform, framework, and support for Ceph storage to natively integrate with Kubernetes.
hero:
tagline: Rook is an open source cloud-native storage orchestrator for Kubernetes, providing the platform, framework, and support for Ceph storage to natively integrate with Kubernetes.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ceph.webp
actions:
- text: Source
link: https://github.com/rook/rook
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/rook-ceph
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Ceph Dashboard](https://ceph.alexlebens.net/).</Aside>
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit8gbo47pc0b?orgId=1).</Aside>
# Purpose
Clustered storage that runs on the SSDs in cluster to provide durable and reliable block and filesystem volumes.
# Notes
Runs [Ceph](https://ceph.io/en/) underneath and managed by Rook pods.
Ensure this system is healthy before any upgrades and restarts.
One of the main pressures to increase node count to expand host and disk count of this cluster for more space as well as durabiliy during node outages.

View File

@@ -0,0 +1,27 @@
---
title: Roundcube
description: Roundcube Webmail is a browser-based multilingual IMAP client with an application-like user interface.
hero:
tagline: Roundcube Webmail is a browser-based multilingual IMAP client with an application-like user interface.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/roundcube.webp
actions:
- text: Source
link: https://github.com/roundcube/roundcubemail
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/roundcube
icon: right-arrow
---
# Purpose
Internal client for email.
# Notes
Connected to [Stalwart](https://docs.alexlebens.dev/applications/stalwart/).
Generally unsued as I have not configured any services for sending email.
This is NOT used for external email, such as gmail.

View File

@@ -0,0 +1,27 @@
---
title: Rybbit
description: Rybbit - open-source and privacy-friendly alternative to Google Analytics that is 10x more intuitive.
hero:
tagline: Rybbit - open-source and privacy-friendly alternative to Google Analytics that is 10x more intuitive.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/rybbit.webp
actions:
- text: Source
link: https://github.com/rybbit-io/rybbit
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/rybbit
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [rybbit.alexlebens.dev](https://rybbit.alexlebens.dev)</Aside>
# Purpose
Analytics service for my websites.
# Notes
Pretty dashboard to let me know that literally no one looks at my sites.

View File

@@ -0,0 +1,27 @@
---
title: S3 Exporter
description: S3 bucket exporter exposing metrics size and number of objects.
hero:
tagline: S3 bucket exporter exposing metrics size and number of objects.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/amazon-s3.webp
actions:
- text: Source
link: https://github.com/molu8bits/s3bucket_exporter
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/s3-exporter
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/dfit8d7qtq4u8e?orgId=1).</Aside>
# Purpose
Provides metrics of my S3 buckets.
# Notes
Mostly to monitor storage consumption.

View File

@@ -0,0 +1,27 @@
---
title: Searxng
description: SearXNG is a free internet metasearch engine which aggregates results from various search services and databases.
hero:
tagline: SearXNG is a free internet metasearch engine which aggregates results from various search services and databases.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/searxng.webp
actions:
- text: Source
link: https://github.com/searxng/searxng
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/searxng
icon: right-arrow
---
# Purpose
Web search with privacy features.
# Notes
Connected to Firefox as my default search engine.
Also connected to Ollama for AI to conduct web search.
Updates based on latest digest.

View File

@@ -0,0 +1,27 @@
---
title: Seerr
description: Open-source media request and discovery manager for Jellyfin, Plex, and Emby.
hero:
tagline: Open-source media request and discovery manager for Jellyfin, Plex, and Emby.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/seerr.webp
actions:
- text: Source
link: https://github.com/seerr-team/seerr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/seerr
icon: right-arrow
---
# Purpose
Frontend to manage media requests for Servarr.
# Notes
Recently updated as a merger from Overseer and Jellyseer.
Pending integration of [Lidarr](https://docs.alexlebens.dev/applications/lidarr/), currently just for the [Radarr](https://docs.alexlebens.dev/applications/radarr/) and [Sonarr](https://docs.alexlebens.dev/applications/sonarr/) services.
Credentials are from [Jellyfin](https://docs.alexlebens.dev/applications/jellyfin/).

View File

@@ -0,0 +1,25 @@
---
title: Shelfmark
description: Shelfmark is a self-hosted web interface for searching and downloading books and audiobooks from multiple sources.
hero:
tagline: Shelfmark is a self-hosted web interface for searching and downloading books and audiobooks from multiple sources.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/shelfmark.webp
actions:
- text: Source
link: https://github.com/calibrain/shelfmark
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/shelfmark
icon: right-arrow
---
# Purpose
Collection of books.
# Notes
Uploads to [Grimmory](https://docs.alexlebens.dev/applications/grimmory/) and [Audiobookshelf](https://docs.alexlebens.dev/applications/audiobookshelf/)
Gets help from [qBittorrent](https://docs.alexlebens.dev/applications/qbittorrent/)

View File

@@ -0,0 +1,27 @@
---
title: Shelly Plug
description: Shelly Plug Prometheus exporter.
hero:
tagline: Shelly Plug Prometheus exporter.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/shelly.webp
actions:
- text: Source
link: https://github.com/geerlingguy/shelly-plug-prometheus
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/shelly-plug
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit87jux375sa?orgId=1).</Aside>
# Purpose
Metrics from the Shelly Plug.
# Notes
Can provide historical wattage use of the shelly plug which the entire homelab's electricity passes through.

View File

@@ -0,0 +1,33 @@
---
title: Site Documentation
description: Personal site made with Astro and Starlight for hosting documentation on my homelab.
hero:
tagline: Personal site made with Astro and Starlight for hosting documentation on my homelab.
image:
file: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.svg
actions:
- text: Source
link: https://gitea.alexlebens.dev/alexlebens/site-documentation
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/site-documentation
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [docs.alexlebens.dev](https://docs.alexlebens.dev)</Aside>
<Aside>This collects analytics and sent to Rybbit at [rybbit.alexlebens.dev](https://rybbit.alexlebens.dev/)</Aside>
# Purpose
Hosts documentation for the cluster.
# Notes
It this very site!
Built with Astro and Starlight.
Documentation is written in MDX.

View File

@@ -0,0 +1,31 @@
---
title: Site Profile
description: Personal site made with Astro for blogging and information about myself.
hero:
tagline: Personal site made with Astro for blogging and information about myself.
image:
file: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.svg
actions:
- text: Source
link: https://gitea.alexlebens.dev/alexlebens/site-profile
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/site-profile
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [www.alexlebens.dev](https://www.alexlebens.dev)</Aside>
<Aside>This collects analytics and sent to Rybbit at [rybbit.alexlebens.dev](https://rybbit.alexlebens.dev/)</Aside>
# Purpose
Profile and blog website
# Notes
Built with Astro.
Connects to [Directus](https://docs.alexlebens.dev/applications/directus) during build for content.

View File

@@ -0,0 +1,29 @@
---
title: Site Sara Lebens
description: Personal site made with Astro for information about Sara Lebens.
hero:
tagline: Personal site made with Astro for information about Sara Lebens.
image:
file: https://web-assets-3bfcb5585cbd63dc365d32a3.nyc3.cdn.digitaloceanspaces.com/alexlebens-net/logo-new-round.svg
actions:
- text: Source
link: https://gitea.alexlebens.dev/alexlebens/site-saralebens
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/site-saralebens
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside>This app has public facing endpoint, at [www.saralebens.com](https://www.saralebens.com)</Aside>
<Aside>This collects analytics and sent to Rybbit at [rybbit.alexlebens.dev](https://rybbit.alexlebens.dev/)</Aside>
# Purpose
Profile website for Sara Lebens.
# Notes
Built with Astro.

View File

@@ -0,0 +1,23 @@
---
title: slskd
description: A modern client-server application for the Soulseek file sharing network.
hero:
tagline: A modern client-server application for the Soulseek file sharing network.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/slskd.webp
actions:
- text: Source
link: https://github.com/slskd/slskd
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/slskd
icon: right-arrow
---
# Purpose
Discovers music.
# Notes
Works in collaboration with [Lidarr](https://docs.alexlebens.dev/applications/lidarr).

View File

@@ -0,0 +1,23 @@
---
title: Snapshot Controller
description: Sidecar container that watches Kubernetes Snapshot CRD objects and triggers CreateSnapshot/DeleteSnapshot against a CSI endpoint.
hero:
tagline: Sidecar container that watches Kubernetes Snapshot CRD objects and triggers CreateSnapshot/DeleteSnapshot against a CSI endpoint.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kubernetes.webp
actions:
- text: Source
link: https://github.com/kubernetes-csi/external-snapshotter
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/snapshot-controller
icon: right-arrow
---
# Purpose
Controls snapshots of storage.
# Notes
[Rook Ceph](https://docs.alexlebens.dev/applications/rook-ceph) supports snapshots and is used by [Volsync](https://docs.alexlebens.dev/applications/volsync) for creating backups.

View File

@@ -0,0 +1,37 @@
---
title: Sonarr
description: Sonarr is a PVR for Usenet and BitTorrent users.
hero:
tagline: Sonarr is a PVR for Usenet and BitTorrent users.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/sonarr.webp
actions:
- text: Source
link: https://github.com/Sonarr/Sonarr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/sonarr
icon: right-arrow
- text: Deployment Chart 4K
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/sonarr-4k
icon: right-arrow
- text: Deployment Chart Anime
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/sonarr-anime
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit84mdyfldsd?orgId=1).</Aside>
# Purpose
Manages metadata for tv shows.
# Notes
Should rarely be access, manage through [Seerr](https://docs.alexlebens.dev/applications/seerr/)
Connects to [qbittorrent](https://docs.alexlebens.dev/applications/qbittorrent) with support from [prowlarr](https://docs.alexlebens.dev/applications/prowlarr) and [unpackerr](https://docs.alexlebens.dev/applications/unpackerr).
3 separate instances for different media types.

View File

@@ -0,0 +1,28 @@
---
title: Speedtest Exporter
description: Simple Speedtest exporter for Prometheus written in Python using the official CLI from Ookla.
hero:
tagline: Simple Speedtest exporter for Prometheus written in Python using the official CLI from Ookla.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/speedtest.webp
actions:
- text: Source
link: https://github.com/MiguelNdeCarvalho/speedtest-exporter
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/speedtest-exporter
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="danger">Do not run this too frequently as it consumes large amounts of data to run the test.</Aside>
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/afit9pt05wa2of?orgId=1).</Aside>
# Purpose
Tests internet speed and generates metrics.
# Notes
Exports metrics to Prometheus.

View File

@@ -0,0 +1,23 @@
---
title: Stack
description: App of Apps Chart to deploy infrastructure by ArgoCD.
hero:
tagline: App of Apps Chart to deploy infrastructure by ArgoCD.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/argo-cd.webp
actions:
- text: Source
link: https://github.com/argoproj/argo-cd
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/stack
icon: right-arrow
---
# Purpose
[App of Apps](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#app-of-apps) Application to manage deployments through [ArgoCD](https://docs.alexlebens.dev/applications/argo-cd/).
# Notes
Be very, very careful making changes. Consider this the 'root' for all deployments.

View File

@@ -0,0 +1,25 @@
---
title: Stalwart
description: All-in-one Mail & Collaboration server. Secure, scalable and fluent in every protocol (IMAP, JMAP, SMTP, CalDAV, CardDAV, WebDAV).
hero:
tagline: All-in-one Mail & Collaboration server. Secure, scalable and fluent in every protocol (IMAP, JMAP, SMTP, CalDAV, CardDAV, WebDAV).
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/stalwart.webp
actions:
- text: Source
link: https://github.com/stalwartlabs/mail-server
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/stalwart
icon: right-arrow
---
# Purpose
Email server.
# Notes
Configuration seems to be only through UI.
Not currently used.

View File

@@ -0,0 +1,23 @@
---
title: Tailscale Operator
description: The easiest, most secure way to use WireGuard and 2FA.
hero:
tagline: The easiest, most secure way to use WireGuard and 2FA.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tailscale-light.webp
actions:
- text: Source
link: https://github.com/tailscale/tailscale
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/tailscale-operator
icon: right-arrow
---
# Purpose
Operator to manage [Tailscale](https://tailscale.com/) inside the cluster.
# Notes
Manages the main subnet router, provides inter workload connections, allows access to the tailnet from inside the cluster, among other features.

View File

@@ -0,0 +1,29 @@
---
title: Talos
description: Jobs to automate the maintainance of the underlying OS, Talos Linux.
hero:
tagline: Jobs to automate the maintainance of the underlying OS, Talos Linux.
image:
file: https://raw.githubusercontent.com/siderolabs/docs/3989ed11f0622252d7cee03b3ba3a3052be242d7/public/images/talos.svg
actions:
- text: Source
link: https://github.com/siderolabs/talos
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/talos
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">etcd has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/efit8ig3fljb4c?orgId=1).</Aside>
# Purpose
Automated tooling for managing the host OS.
# Notes
Runs backups of the etcd database for disaster recovery.
Runs regular defragmentation of etcd.

View File

@@ -0,0 +1,29 @@
---
title: Tdarr
description: Tdarr - Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking.
hero:
tagline: Tdarr - Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tdarr.webp
actions:
- text: Source
link: https://github.com/HaveAGitGat/Tdarr
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/tdarr
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/ffit9qzig6w3ke?orgId=1).</Aside>
# Purpose
Runs healthchecks on media files.
# Notes
Need to check the error queue, sometimes there are false errors.
Runs the files through ffmpeg on either cpu or gpu, but gpu generates more false errors.

View File

@@ -0,0 +1,27 @@
---
title: Traefik
description: Traefik (pronounced traffic) is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.
hero:
tagline: Traefik (pronounced traffic) is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/traefik.webp
actions:
- text: Source
link: https://github.com/traefik/traefik
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/traefik
icon: right-arrow
---
import { Aside } from '@astrojs/starlight/components';
<Aside type="tip">Has an internal [Grafana Dashboard](https://grafana.alexlebens.net/goto/cfit9rqyd179cb?orgId=1).</Aside>
# Purpose
Gateway for the cluster, enables external access of the webpages for both host routing and TLS.
# Notes
Really want to swap it out for Cillium's built in Gateway implementation.

View File

@@ -0,0 +1,23 @@
---
title: Tube Archivist
description: Your self hosted YouTube media server.
hero:
tagline: Your self hosted YouTube media server.
image:
file: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tube-archivist.webp
actions:
- text: Source
link: https://github.com/tubearchivist/tubearchivist
icon: right-arrow
- text: Deployment Chart
link: https://gitea.alexlebens.dev/alexlebens/infrastructure/src/branch/main/clusters/cl01tl/helm/tubearchivist
icon: right-arrow
---
# Purpose
Archives Youtube videos.
# Notes
Mostly to ensure I get to keep videos that may be deleted or removed from Youtube. Also for videos I want to save to watch locally.

Some files were not shown because too many files have changed in this diff Show More