Commit
Author: Kevin Schoon [me@kevinschoon.com]
Hash: 32408f2f94161a6db1182e01f77686b890702840
Timestamp: Tue, 13 Aug 2024 16:09:25 +0000 (6 months ago)

+31 -972 +/-23 browse
remove generated www content from main branch
remove generated www content from main branch

An automated script will now be used to generate public content along with
crate documentation as part of the Ayllu website and committed to a `www`
branch for serving content.
1diff --git a/contrib/nginx/nginx.conf b/contrib/nginx/nginx.conf
2index a5429c5..dc82b8c 100644
3--- a/contrib/nginx/nginx.conf
4+++ b/contrib/nginx/nginx.conf
5 @@ -75,12 +75,12 @@ http {
6 }
7
8
9- # an additional virtual host which will pass the Host: my-custom-domain.local
10+ # an additional virtual host which will pass the Host: ayllu-dev.local
11 # and serve static content when requested.
12 server {
13
14 listen 8081;
15- server_name my-custom-domain.local;
16+ server_name ayllu-dev.local;
17
18 include config.d/security.conf;
19 include config.d/general.conf;
20 diff --git a/scripts/gen_www.sh b/scripts/gen_www.sh
21new file mode 100755
22index 0000000..d5a8f6d
23--- /dev/null
24+++ b/scripts/gen_www.sh
25 @@ -0,0 +1,29 @@
26+ #!/bin/sh
27+ # Generate the Ayllu static site along with all of it's related crate
28+ # documentation. This script it meant to be run ONLY on the `www` branch
29+ # and can produce an automated commit there which will be served by the Ayllu
30+ # binary.
31+
32+ if git status --porcelain | grep -q .; then
33+ echo "repository dirty, aborting"
34+ exit 1
35+ fi
36+
37+ if [ "$(git rev-parse --abbrev-ref HEAD)" -ne "main" ]; then
38+ echo "repository needs to be on the main branch"
39+ exit 1
40+ fi
41+
42+ git checkout www
43+ git reset --hard main
44+ git clean -fd
45+
46+ [ -d www/public ] && rm -r www/public
47+ cd www && zola build && cd ..
48+ cargo doc --no-deps --release
49+ cp -Rv target/doc www/public/crates
50+
51+ git add --all
52+ git commit -m 'automated www update'
53+
54+ git checkout main
55 diff --git a/www/public/404.html b/www/public/404.html
56deleted file mode 100644
57index 9634e57..0000000
58--- a/www/public/404.html
59+++ /dev/null
60 @@ -1 +0,0 @@
61- <!doctype html><title>404 Not Found</title><h1>404 Not Found</h1>
62\ No newline at end of file
63 diff --git a/www/public/assets/architecture.svg b/www/public/assets/architecture.svg
64deleted file mode 100644
65index e05c148..0000000
66--- a/www/public/assets/architecture.svg
67+++ /dev/null
68 @@ -1,598 +0,0 @@
69- <svg version="1.1" baseProfile="full" width="1817.5" height="664.0" viewBox="0 0 1817.5 664" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
70- <desc >[reverse_proxy]
71-
72- [reverse_proxy]&lt;--&gt;[Rudolfs (LFS API)]
73-
74- [reverse_proxy]&lt;--&gt;[ayllu-core |
75- [axum http interface]
76- [sites static hosting]
77- [tarpc-server (job_server)]
78- [git repositories via libgit2]
79- [&lt;database&gt; sqlite]
80- ]
81-
82- [ayllu-core] &lt;--&gt; [
83- ayllu-mail|
84- [tarpc-server]
85- [mailpot]
86- [postfix]
87- [&lt;database&gt; sqlite]
88- ] &lt;-- SMTP [&lt;actor&gt; contributor-2]
89-
90- [ayllu-core] &lt;--&gt; [
91- ayllu-xmpp |
92- [tarpc-server]
93- [chat interface/bot]
94- [&lt;database&gt; sqlite]
95- ] &lt;-- XMPP [&lt;actor&gt;; contributor-2]
96-
97- [ayllu-core] &lt;--&gt; [
98- ayllu-build |
99- [tarpc-server]
100- [&lt;database&gt; sqlite]
101- ]
102-
103- [ayllu-core] &lt;--&gt; [ayllu-shell] &lt;-- SSH [&lt;actor&gt; contributor]
104- [ayllu-core] &lt;--&gt; [ayllu-cli] &lt;-- [&lt;actor&gt; admin]
105-
106-
107- [ayllu-build]&lt;--&gt;[
108- ayllu-builder-1 |
109- [&lt;package&gt;qemu-x86_64| tarpc-server | executor]
110- ]
111-
112- [ayllu-build]&lt;--&gt;[
113- ayllu-builder-2 |
114- [&lt;package&gt;qemu-aarch64| tarpc-server | exectuor]
115- ]
116-
117- [ayllu-build]&lt;--&gt;[
118- ayllu-builder-n |
119- [&lt;package&gt;lxc| tarpc-server | executor]
120- ] --&gt; [ayllu-core]
121- </desc>
122- <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="normal" font-style="normal">
123- <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
124- <g stroke="transparent" fill="transparent">
125- <rect x="0.0" y="0.0" height="664.0" width="1817.5" stroke="none"></rect>
126- </g>
127- <g transform="translate(8, 8)" fill="#33322E">
128- <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
129- <g stroke-dasharray="6 6">
130- <path d="M873.9 24.0 L631.5 52 L631.5 117.33333333333333 L631.5 117.3 " fill="none"></path>
131- </g>
132- <path d="M626.2 110.7 L631.5 117.3 L636.8 110.7 L631.5 124.0 Z"></path>
133- <path d="M867.9 30.1 L873.9 24.0 L866.6 19.5 L880.5 23.2 Z"></path>
134- <g stroke-dasharray="6 6">
135- <path d="M1012.1 24.0 L1254.5 52 L1254.5 65.33333333333333 L1254.5 65.3 " fill="none"></path>
136- </g>
137- <path d="M1249.2 58.7 L1254.5 65.3 L1259.8 58.7 L1254.5 72.0 Z"></path>
138- <path d="M1019.4 19.5 L1012.1 24.0 L1018.1 30.1 L1005.5 23.2 Z"></path>
139- <g stroke-dasharray="6 6">
140- <path d="M740.9 184.6 L242 228 L242 241.33333333333334 L242.0 241.3 " fill="none"></path>
141- </g>
142- <path d="M236.7 234.7 L242.0 241.3 L247.3 234.7 L242.0 248.0 Z"></path>
143- <path d="M734.7 190.5 L740.9 184.6 L733.8 179.9 L747.5 184.1 Z"></path>
144- <text x="698.3" y="495.3" stroke="none">SMTP</text>
145- <g stroke-dasharray="6 6">
146- <path d="M242.0 390.7 L242 404 L690.25 503.2664359861592 L690.3 503.3 " fill="none"></path>
147- </g>
148- <path d="M247.3 397.3 L242.0 390.7 L236.7 397.3 L242.0 384.0 Z"></path>
149- <g stroke-dasharray="6 6">
150- <path d="M858.5 209.1 L750.5 228 L750.5 241.33333333333334 L750.5 241.3 " fill="none"></path>
151- </g>
152- <path d="M745.2 234.7 L750.5 241.3 L755.8 234.7 L750.5 248.0 Z"></path>
153- <path d="M852.8 215.5 L858.5 209.1 L851.0 205.0 L865.0 208.0 Z"></path>
154- <text x="695.6" y="480.0" stroke="none">XMPP</text>
155- <g stroke-dasharray="6 6">
156- <path d="M750.5 390.7 L750.5 404 L748.4375 488 L748.4 488.0 " fill="none"></path>
157- </g>
158- <path d="M755.8 397.3 L750.5 390.7 L745.2 397.3 L750.5 384.0 Z"></path>
159- <g stroke-dasharray="6 6">
160- <path d="M1183.6 212.8 L1168.75 228 L1168.75 241.33333333333334 L1168.8 241.3 " fill="none"></path>
161- </g>
162- <path d="M1163.4 234.7 L1168.8 241.3 L1174.1 234.7 L1168.8 248.0 Z"></path>
163- <path d="M1182.8 221.3 L1183.6 212.8 L1175.1 213.8 L1188.2 208.0 Z"></path>
164- <g stroke-dasharray="6 6">
165- <path d="M1472.2 210.0 L1528 228 L1528 293.3333333333333 L1528.0 293.3 " fill="none"></path>
166- </g>
167- <path d="M1522.7 286.7 L1528.0 293.3 L1533.3 286.7 L1528.0 300.0 Z"></path>
168- <path d="M1480.2 207.0 L1472.2 210.0 L1476.9 217.2 L1465.8 208.0 Z"></path>
169- <text x="1487.3" y="480.0" stroke="none">SSH</text>
170- <g stroke-dasharray="6 6">
171- <path d="M1528.0 338.7 L1528 404 L1528 488 L1528.0 488.0 " fill="none"></path>
172- </g>
173- <path d="M1533.3 345.3 L1528.0 338.7 L1522.7 345.3 L1528.0 332.0 Z"></path>
174- <g stroke-dasharray="6 6">
175- <path d="M1568.6 209.4 L1652.5 228 L1652.5 293.3333333333333 L1652.5 293.3 " fill="none"></path>
176- </g>
177- <path d="M1647.2 286.7 L1652.5 293.3 L1657.8 286.7 L1652.5 300.0 Z"></path>
178- <path d="M1576.2 205.7 L1568.6 209.4 L1573.9 216.1 L1562.0 208.0 Z"></path>
179- <g stroke-dasharray="6 6">
180- <path d="M1652.5 338.7 L1652.5 404 L1652.5 488 L1652.5 488.0 " fill="none"></path>
181- </g>
182- <path d="M1657.8 345.3 L1652.5 338.7 L1647.2 345.3 L1652.5 332.0 Z"></path>
183- <g stroke-dasharray="6 6">
184- <path d="M1031.0 367.4 L933 404 L933 417.3333333333333 L933.0 417.3 " fill="none"></path>
185- </g>
186- <path d="M927.7 410.7 L933.0 417.3 L938.3 410.7 L933.0 424.0 Z"></path>
187- <path d="M1026.6 374.7 L1031.0 367.4 L1022.9 364.8 L1037.3 365.1 Z"></path>
188- <g stroke-dasharray="6 6">
189- <path d="M1152.9 390.5 L1150 404 L1150 417.3333333333333 L1150.0 417.3 " fill="none"></path>
190- </g>
191- <path d="M1144.7 410.7 L1150.0 417.3 L1155.3 410.7 L1150.0 424.0 Z"></path>
192- <path d="M1156.7 398.2 L1152.9 390.5 L1146.3 395.9 L1154.3 384.0 Z"></path>
193- <g stroke-dasharray="6 6">
194- <path d="M1255.6 388.3 L1274.5 404 L1285.5740965207704 418.6780924298968 L1285.6 418.7 " fill="none"></path>
195- </g>
196- <path d="M1277.3 416.6 L1285.6 418.7 L1285.8 410.1 L1289.6 424.0 Z"></path>
197- <path d="M1264.1 388.4 L1255.6 388.3 L1257.3 396.6 L1250.5 384.0 Z"></path>
198- <g stroke-dasharray="6 6">
199- <path d="M1392.7 424.0 L1400 404 L1400 316 L1400 316 L1400 228 L1400 228 L1372.6362943277163 211.45012990267378 L1372.6 211.5 " fill="none"></path>
200- </g>
201- <path d="M1381.1 210.3 L1372.6 211.5 L1375.6 219.5 L1366.9 208.0 Z"></path>
202- <g data-name="reverse_proxy">
203- <g fill="#eee8d5" stroke="#33322E" data-name="reverse_proxy">
204- <rect x="880.5" y="0.0" height="32.0" width="125.0" data-name="reverse_proxy"></rect>
205- </g>
206- <g transform="translate(880.5, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="reverse_proxy">
207- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="reverse_proxy">
208- <text x="54.5" y="14.1" stroke="none" text-anchor="middle" data-name="reverse_proxy">reverse_proxy</text>
209-
210- </g>
211- </g>
212- </g>
213- <g data-name="Rudolfs (LFS API)">
214- <g fill="#eee8d5" stroke="#33322E" data-name="Rudolfs (LFS API)">
215- <rect x="555.5" y="124.0" height="32.0" width="152.0" data-name="Rudolfs (LFS API)"></rect>
216- </g>
217- <g transform="translate(555.5, 124)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Rudolfs (LFS API)">
218- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Rudolfs (LFS API)">
219- <text x="68.0" y="14.1" stroke="none" text-anchor="middle" data-name="Rudolfs (LFS API)">Rudolfs (LFS API)</text>
220-
221- </g>
222- </g>
223- </g>
224- <g data-name="ayllu-core">
225- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-core">
226- <rect x="747.5" y="72.0" height="136.0" width="1014.0" data-name="ayllu-core"></rect>
227- <path d="M747.5 104.0 L1761.5 104.0" fill="none" data-name="ayllu-core"></path>
228- </g>
229- <g transform="translate(747.5, 72)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-core">
230- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-core">
231- <text x="499.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-core">ayllu-core</text>
232-
233- </g>
234- </g>
235- <g transform="translate(747.5, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-core">
236- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-core">
237- <g transform="translate(20, 20)" data-name="ayllu-core">
238- <g data-name="axum http interface">
239- <g fill="#fdf6e3" stroke="#33322E" data-name="axum http interface">
240- <rect x="0.0" y="8.0" height="32.0" width="164.0" data-name="axum http interface"></rect>
241- </g>
242- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="axum http interface">
243- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="axum http interface">
244- <text x="74.0" y="14.1" stroke="none" text-anchor="middle" data-name="axum http interface">axum http interface</text>
245-
246- </g>
247- </g>
248- </g>
249- <g data-name="sites static hosting">
250- <g fill="#fdf6e3" stroke="#33322E" data-name="sites static hosting">
251- <rect x="204.0" y="8.0" height="32.0" width="161.0" data-name="sites static hosting"></rect>
252- </g>
253- <g transform="translate(204, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sites static hosting">
254- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sites static hosting">
255- <text x="72.5" y="14.1" stroke="none" text-anchor="middle" data-name="sites static hosting">sites static hosting</text>
256-
257- </g>
258- </g>
259- </g>
260- <g data-name="tarpc-server (job_server)">
261- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server (job_server)">
262- <rect x="405.0" y="8.0" height="32.0" width="205.0" data-name="tarpc-server (job_server)"></rect>
263- </g>
264- <g transform="translate(405, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server (job_server)">
265- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server (job_server)">
266- <text x="94.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server (job_server)">tarpc-server (job_server)</text>
267-
268- </g>
269- </g>
270- </g>
271- <g data-name="git repositories via libgit2">
272- <g fill="#fdf6e3" stroke="#33322E" data-name="git repositories via libgit2">
273- <rect x="650.0" y="8.0" height="32.0" width="210.0" data-name="git repositories via libgit2"></rect>
274- </g>
275- <g transform="translate(650, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="git repositories via libgit2">
276- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="git repositories via libgit2">
277- <text x="97.0" y="14.1" stroke="none" text-anchor="middle" data-name="git repositories via libgit2">git repositories via libgit2</text>
278-
279- </g>
280- </g>
281- </g>
282- <g data-name="sqlite">
283- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
284- <rect x="900.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
285- <path d="M900.0 8.0 L900.0 40.0" fill="none" data-name="sqlite"></path>
286- <path d="M958.0 8.0 L958.0 40.0" fill="none" data-name="sqlite"></path>
287- <ellipse cx="929.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
288- <path d="M958.0 40.0 L958.0 40.3 L957.9 40.6 L957.7 40.9 L957.4 41.2 L957.1 41.5 L956.7 41.8 L956.3 42.1 L955.7 42.3 L955.1 42.6 L954.5 42.9 L953.7 43.1 L953.0 43.4 L952.1 43.6 L951.2 43.9 L950.3 44.1 L949.2 44.3 L948.2 44.5 L947.1 44.7 L945.9 44.9 L944.7 45.0 L943.5 45.2 L942.2 45.3 L940.9 45.5 L939.6 45.6 L938.2 45.7 L936.9 45.8 L935.5 45.8 L934.0 45.9 L932.6 46.0 L931.2 46.0 L929.7 46.0 L928.3 46.0 L926.8 46.0 L925.4 46.0 L924.0 45.9 L922.5 45.8 L921.1 45.8 L919.8 45.7 L918.4 45.6 L917.1 45.5 L915.8 45.3 L914.5 45.2 L913.3 45.0 L912.1 44.9 L910.9 44.7 L909.8 44.5 L908.8 44.3 L907.7 44.1 L906.8 43.9 L905.9 43.6 L905.0 43.4 L904.3 43.1 L903.5 42.9 L902.9 42.6 L902.3 42.3 L901.7 42.1 L901.3 41.8 L900.9 41.5 L900.6 41.2 L900.3 40.9 L900.1 40.6 L900.0 40.3 L900.0 40.0" data-name="sqlite"></path>
289- </g>
290- <g transform="translate(900, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
291- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
292- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
293-
294- </g>
295- </g>
296- </g>
297- </g>
298- </g>
299- </g>
300- </g>
301- <g data-name="ayllu-mail">
302- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-mail">
303- <rect x="0.0" y="248.0" height="136.0" width="484.0" data-name="ayllu-mail"></rect>
304- <path d="M0.0 280.0 L484.0 280.0" fill="none" data-name="ayllu-mail"></path>
305- </g>
306- <g transform="translate(0, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-mail">
307- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-mail">
308- <text x="234.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-mail">ayllu-mail</text>
309-
310- </g>
311- </g>
312- <g transform="translate(0, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-mail">
313- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-mail">
314- <g transform="translate(20, 20)" data-name="ayllu-mail">
315- <g data-name="tarpc-server">
316- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
317- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
318- </g>
319- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
320- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
321- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
322-
323- </g>
324- </g>
325- </g>
326- <g data-name="mailpot">
327- <g fill="#fdf6e3" stroke="#33322E" data-name="mailpot">
328- <rect x="149.0" y="8.0" height="32.0" width="73.0" data-name="mailpot"></rect>
329- </g>
330- <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="mailpot">
331- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="mailpot">
332- <text x="28.5" y="14.1" stroke="none" text-anchor="middle" data-name="mailpot">mailpot</text>
333-
334- </g>
335- </g>
336- </g>
337- <g data-name="postfix">
338- <g fill="#fdf6e3" stroke="#33322E" data-name="postfix">
339- <rect x="262.0" y="8.0" height="32.0" width="68.0" data-name="postfix"></rect>
340- </g>
341- <g transform="translate(262, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="postfix">
342- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="postfix">
343- <text x="26.0" y="14.1" stroke="none" text-anchor="middle" data-name="postfix">postfix</text>
344-
345- </g>
346- </g>
347- </g>
348- <g data-name="sqlite">
349- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
350- <rect x="370.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
351- <path d="M370.0 8.0 L370.0 40.0" fill="none" data-name="sqlite"></path>
352- <path d="M428.0 8.0 L428.0 40.0" fill="none" data-name="sqlite"></path>
353- <ellipse cx="399.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
354- <path d="M428.0 40.0 L428.0 40.3 L427.9 40.6 L427.7 40.9 L427.4 41.2 L427.1 41.5 L426.7 41.8 L426.3 42.1 L425.7 42.3 L425.1 42.6 L424.5 42.9 L423.7 43.1 L423.0 43.4 L422.1 43.6 L421.2 43.9 L420.3 44.1 L419.2 44.3 L418.2 44.5 L417.1 44.7 L415.9 44.9 L414.7 45.0 L413.5 45.2 L412.2 45.3 L410.9 45.5 L409.6 45.6 L408.2 45.7 L406.9 45.8 L405.5 45.8 L404.0 45.9 L402.6 46.0 L401.2 46.0 L399.7 46.0 L398.3 46.0 L396.8 46.0 L395.4 46.0 L394.0 45.9 L392.5 45.8 L391.1 45.8 L389.8 45.7 L388.4 45.6 L387.1 45.5 L385.8 45.3 L384.5 45.2 L383.3 45.0 L382.1 44.9 L380.9 44.7 L379.8 44.5 L378.8 44.3 L377.7 44.1 L376.8 43.9 L375.9 43.6 L375.0 43.4 L374.3 43.1 L373.5 42.9 L372.9 42.6 L372.3 42.3 L371.7 42.1 L371.3 41.8 L370.9 41.5 L370.6 41.2 L370.3 40.9 L370.1 40.6 L370.0 40.3 L370.0 40.0" data-name="sqlite"></path>
355- </g>
356- <g transform="translate(370, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
357- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
358- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
359-
360- </g>
361- </g>
362- </g>
363- </g>
364- </g>
365- </g>
366- </g>
367- <g data-name="contributor-2">
368- <g fill="#eee8d5" stroke="#33322E" data-name="contributor-2">
369- <circle r="4.0" cx="747.8" cy="500.0" data-name="contributor-2"></circle>
370- <path d="M747.8 504.0 L747.8 512.0" fill="none" data-name="contributor-2"></path>
371- <path d="M743.8 508.0 L751.8 508.0" fill="none" data-name="contributor-2"></path>
372- <path d="M743.8 516.0 L747.8 512.0 L751.8 516.0" fill="none" data-name="contributor-2"></path>
373- </g>
374- <g transform="translate(690.25, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor-2">
375- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor-2">
376- <text x="49.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor-2">contributor-2</text>
377-
378- </g>
379- </g>
380- </g>
381- <g data-name="ayllu-xmpp">
382- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-xmpp">
383- <rect x="524.0" y="248.0" height="136.0" width="453.0" data-name="ayllu-xmpp"></rect>
384- <path d="M524.0 280.0 L977.0 280.0" fill="none" data-name="ayllu-xmpp"></path>
385- </g>
386- <g transform="translate(524, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-xmpp">
387- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-xmpp">
388- <text x="218.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-xmpp">ayllu-xmpp</text>
389-
390- </g>
391- </g>
392- <g transform="translate(524, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-xmpp">
393- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-xmpp">
394- <g transform="translate(20, 20)" data-name="ayllu-xmpp">
395- <g data-name="tarpc-server">
396- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
397- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
398- </g>
399- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
400- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
401- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
402-
403- </g>
404- </g>
405- </g>
406- <g data-name="chat interface/bot">
407- <g fill="#fdf6e3" stroke="#33322E" data-name="chat interface/bot">
408- <rect x="149.0" y="8.0" height="32.0" width="150.0" data-name="chat interface/bot"></rect>
409- </g>
410- <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="chat interface/bot">
411- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="chat interface/bot">
412- <text x="67.0" y="14.1" stroke="none" text-anchor="middle" data-name="chat interface/bot">chat interface/bot</text>
413-
414- </g>
415- </g>
416- </g>
417- <g data-name="sqlite">
418- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
419- <rect x="339.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
420- <path d="M339.0 8.0 L339.0 40.0" fill="none" data-name="sqlite"></path>
421- <path d="M397.0 8.0 L397.0 40.0" fill="none" data-name="sqlite"></path>
422- <ellipse cx="368.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
423- <path d="M397.0 40.0 L397.0 40.3 L396.9 40.6 L396.7 40.9 L396.4 41.2 L396.1 41.5 L395.7 41.8 L395.3 42.1 L394.7 42.3 L394.1 42.6 L393.5 42.9 L392.7 43.1 L392.0 43.4 L391.1 43.6 L390.2 43.9 L389.3 44.1 L388.2 44.3 L387.2 44.5 L386.1 44.7 L384.9 44.9 L383.7 45.0 L382.5 45.2 L381.2 45.3 L379.9 45.5 L378.6 45.6 L377.2 45.7 L375.9 45.8 L374.5 45.8 L373.0 45.9 L371.6 46.0 L370.2 46.0 L368.7 46.0 L367.3 46.0 L365.8 46.0 L364.4 46.0 L363.0 45.9 L361.5 45.8 L360.1 45.8 L358.8 45.7 L357.4 45.6 L356.1 45.5 L354.8 45.3 L353.5 45.2 L352.3 45.0 L351.1 44.9 L349.9 44.7 L348.8 44.5 L347.8 44.3 L346.7 44.1 L345.8 43.9 L344.9 43.6 L344.0 43.4 L343.3 43.1 L342.5 42.9 L341.9 42.6 L341.3 42.3 L340.7 42.1 L340.3 41.8 L339.9 41.5 L339.6 41.2 L339.3 40.9 L339.1 40.6 L339.0 40.3 L339.0 40.0" data-name="sqlite"></path>
424- </g>
425- <g transform="translate(339, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
426- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
427- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
428-
429- </g>
430- </g>
431- </g>
432- </g>
433- </g>
434- </g>
435- </g>
436- <g data-name="ayllu-build">
437- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-build">
438- <rect x="1037.3" y="248.0" height="136.0" width="263.0" data-name="ayllu-build"></rect>
439- <path d="M1037.3 280.0 L1300.3 280.0" fill="none" data-name="ayllu-build"></path>
440- </g>
441- <g transform="translate(1037.25, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-build">
442- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-build">
443- <text x="123.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-build">ayllu-build</text>
444-
445- </g>
446- </g>
447- <g transform="translate(1037.25, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-build">
448- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-build">
449- <g transform="translate(20, 20)" data-name="ayllu-build">
450- <g data-name="tarpc-server">
451- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
452- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
453- </g>
454- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
455- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
456- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
457-
458- </g>
459- </g>
460- </g>
461- <g data-name="sqlite">
462- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
463- <rect x="149.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
464- <path d="M149.0 8.0 L149.0 40.0" fill="none" data-name="sqlite"></path>
465- <path d="M207.0 8.0 L207.0 40.0" fill="none" data-name="sqlite"></path>
466- <ellipse cx="178.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
467- <path d="M207.0 40.0 L207.0 40.3 L206.9 40.6 L206.7 40.9 L206.4 41.2 L206.1 41.5 L205.7 41.8 L205.3 42.1 L204.7 42.3 L204.1 42.6 L203.5 42.9 L202.7 43.1 L202.0 43.4 L201.1 43.6 L200.2 43.9 L199.3 44.1 L198.2 44.3 L197.2 44.5 L196.1 44.7 L194.9 44.9 L193.7 45.0 L192.5 45.2 L191.2 45.3 L189.9 45.5 L188.6 45.6 L187.2 45.7 L185.9 45.8 L184.5 45.8 L183.0 45.9 L181.6 46.0 L180.2 46.0 L178.7 46.0 L177.3 46.0 L175.8 46.0 L174.4 46.0 L173.0 45.9 L171.5 45.8 L170.1 45.8 L168.8 45.7 L167.4 45.6 L166.1 45.5 L164.8 45.3 L163.5 45.2 L162.3 45.0 L161.1 44.9 L159.9 44.7 L158.8 44.5 L157.8 44.3 L156.7 44.1 L155.8 43.9 L154.9 43.6 L154.0 43.4 L153.3 43.1 L152.5 42.9 L151.9 42.6 L151.3 42.3 L150.7 42.1 L150.3 41.8 L149.9 41.5 L149.6 41.2 L149.3 40.9 L149.1 40.6 L149.0 40.3 L149.0 40.0" data-name="sqlite"></path>
468- </g>
469- <g transform="translate(149, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
470- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
471- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
472-
473- </g>
474- </g>
475- </g>
476- </g>
477- </g>
478- </g>
479- </g>
480- <g data-name="ayllu-shell">
481- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-shell">
482- <rect x="1481.0" y="300.0" height="32.0" width="94.0" data-name="ayllu-shell"></rect>
483- </g>
484- <g transform="translate(1481, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-shell">
485- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-shell">
486- <text x="39.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-shell">ayllu-shell</text>
487-
488- </g>
489- </g>
490- </g>
491- <g data-name="contributor">
492- <g fill="#eee8d5" stroke="#33322E" data-name="contributor">
493- <circle r="4.0" cx="1528.0" cy="500.0" data-name="contributor"></circle>
494- <path d="M1528.0 504.0 L1528.0 512.0" fill="none" data-name="contributor"></path>
495- <path d="M1524.0 508.0 L1532.0 508.0" fill="none" data-name="contributor"></path>
496- <path d="M1524.0 516.0 L1528.0 512.0 L1532.0 516.0" fill="none" data-name="contributor"></path>
497- </g>
498- <g transform="translate(1477.5, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor">
499- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor">
500- <text x="42.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor">contributor</text>
501-
502- </g>
503- </g>
504- </g>
505- <g data-name="ayllu-cli">
506- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-cli">
507- <rect x="1615.0" y="300.0" height="32.0" width="75.0" data-name="ayllu-cli"></rect>
508- </g>
509- <g transform="translate(1615, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-cli">
510- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-cli">
511- <text x="29.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-cli">ayllu-cli</text>
512-
513- </g>
514- </g>
515- </g>
516- <g data-name="admin">
517- <g fill="#eee8d5" stroke="#33322E" data-name="admin">
518- <circle r="4.0" cx="1652.5" cy="500.0" data-name="admin"></circle>
519- <path d="M1652.5 504.0 L1652.5 512.0" fill="none" data-name="admin"></path>
520- <path d="M1648.5 508.0 L1656.5 508.0" fill="none" data-name="admin"></path>
521- <path d="M1648.5 516.0 L1652.5 512.0 L1656.5 516.0" fill="none" data-name="admin"></path>
522- </g>
523- <g transform="translate(1621, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="admin">
524- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="admin">
525- <text x="23.5" y="14.1" stroke="none" text-anchor="middle" data-name="admin">admin</text>
526-
527- </g>
528- </g>
529- </g>
530- <g data-name="ayllu-builder-1">
531- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-1">
532- <rect x="846.5" y="424.0" height="184.0" width="173.0" data-name="ayllu-builder-1"></rect>
533- <path d="M846.5 456.0 L1019.5 456.0" fill="none" data-name="ayllu-builder-1"></path>
534- </g>
535- <g transform="translate(846.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-1">
536- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-1">
537- <text x="78.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-1">ayllu-builder-1</text>
538-
539- </g>
540- </g>
541- <g transform="translate(846.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-1">
542- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-1">
543- <g transform="translate(20, 20)" data-name="ayllu-builder-1">
544- <g data-name="qemu-x86_64">
545- <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-x86_64">
546- <rect x="0.0" y="32.0" height="64.0" width="117.0" data-name="qemu-x86_64"></rect>
547- <path d="M0.0 32.0 L0.0 0.0 L113.1 0.0 L113.1 32.0 Z" data-name="qemu-x86_64"></path>
548- <path d="M0.0 32.0 L117.0 32.0" fill="none" data-name="qemu-x86_64"></path>
549- <path d="M0.0 64.0 L117.0 64.0" fill="none" data-name="qemu-x86_64"></path>
550- </g>
551- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
552- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
553- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">qemu-x86_64</text>
554-
555- </g>
556- </g>
557- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
558- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
559- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">tarpc-server</text>
560-
561- </g>
562- </g>
563- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
564- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
565- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">executor</text>
566-
567- </g>
568- </g>
569- </g>
570- </g>
571- </g>
572- </g>
573- </g>
574- <g data-name="ayllu-builder-2">
575- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-2">
576- <rect x="1059.5" y="424.0" height="184.0" width="181.0" data-name="ayllu-builder-2"></rect>
577- <path d="M1059.5 456.0 L1240.5 456.0" fill="none" data-name="ayllu-builder-2"></path>
578- </g>
579- <g transform="translate(1059.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-2">
580- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-2">
581- <text x="82.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-2">ayllu-builder-2</text>
582-
583- </g>
584- </g>
585- <g transform="translate(1059.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-2">
586- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-2">
587- <g transform="translate(20, 20)" data-name="ayllu-builder-2">
588- <g data-name="qemu-aarch64">
589- <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-aarch64">
590- <rect x="0.0" y="32.0" height="64.0" width="125.0" data-name="qemu-aarch64"></rect>
591- <path d="M0.0 32.0 L0.0 0.0 L118.9 0.0 L118.9 32.0 Z" data-name="qemu-aarch64"></path>
592- <path d="M0.0 32.0 L125.0 32.0" fill="none" data-name="qemu-aarch64"></path>
593- <path d="M0.0 64.0 L125.0 64.0" fill="none" data-name="qemu-aarch64"></path>
594- </g>
595- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
596- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
597- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">qemu-aarch64</text>
598-
599- </g>
600- </g>
601- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
602- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
603- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">tarpc-server</text>
604-
605- </g>
606- </g>
607- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
608- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
609- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">exectuor</text>
610-
611- </g>
612- </g>
613- </g>
614- </g>
615- </g>
616- </g>
617- </g>
618- <g data-name="ayllu-builder-n">
619- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-n">
620- <rect x="1280.5" y="424.0" height="184.0" width="157.0" data-name="ayllu-builder-n"></rect>
621- <path d="M1280.5 456.0 L1437.5 456.0" fill="none" data-name="ayllu-builder-n"></path>
622- </g>
623- <g transform="translate(1280.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-n">
624- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-n">
625- <text x="70.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-n">ayllu-builder-n</text>
626-
627- </g>
628- </g>
629- <g transform="translate(1280.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-n">
630- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-n">
631- <g transform="translate(20, 20)" data-name="ayllu-builder-n">
632- <g data-name="lxc">
633- <g fill="#fdf6e3" stroke="#33322E" data-name="lxc">
634- <rect x="0.0" y="32.0" height="64.0" width="101.0" data-name="lxc"></rect>
635- <path d="M0.0 32.0 L0.0 0.0 L35.2 0.0 L35.2 32.0 Z" data-name="lxc"></path>
636- <path d="M0.0 32.0 L101.0 32.0" fill="none" data-name="lxc"></path>
637- <path d="M0.0 64.0 L101.0 64.0" fill="none" data-name="lxc"></path>
638- </g>
639- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
640- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
641- <text x="0.0" y="14.1" stroke="none" data-name="lxc">lxc</text>
642-
643- </g>
644- </g>
645- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
646- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
647- <text x="0.0" y="14.1" stroke="none" data-name="lxc">tarpc-server</text>
648-
649- </g>
650- </g>
651- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
652- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
653- <text x="0.0" y="14.1" stroke="none" data-name="lxc">executor</text>
654-
655- </g>
656- </g>
657- </g>
658- </g>
659- </g>
660- </g>
661- </g>
662- </g>
663- </g>
664- </g>
665- </g>
666- </svg>
667 diff --git a/www/public/assets/ayllu_logo.png b/www/public/assets/ayllu_logo.png
668deleted file mode 100644
669index caf4865..0000000
670 Binary files a/www/public/assets/ayllu_logo.png and /dev/null differ
671 diff --git a/www/public/assets/ayllu_logo.svg b/www/public/assets/ayllu_logo.svg
672deleted file mode 100644
673index d1db83a..0000000
674--- a/www/public/assets/ayllu_logo.svg
675+++ /dev/null
676 @@ -1,101 +0,0 @@
677- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
678- <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:version="1.0 (1.0+r73+1)" sodipodi:docname="textil-inca-pattern-3a.svg" version="1.1" viewBox="0 0 902 702">
679- <metadata>
680- <rdf:RDF>
681- <cc:Work rdf:about="">
682- <dc:format>image/svg+xml</dc:format>
683- <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
684- </cc:Work>
685- </rdf:RDF>
686- </metadata>
687- <sodipodi:namedview inkscape:current-layer="svg159" inkscape:window-maximized="1" inkscape:window-y="27" inkscape:window-x="67" inkscape:cy="467.33333" inkscape:cx="600.66667" inkscape:zoom="0.75746799" showgrid="false" id="namedview161" inkscape:window-height="1025" inkscape:window-width="1853" inkscape:pageshadow="2" inkscape:pageopacity="0" guidetolerance="10" gridtolerance="10" objecttolerance="10" borderopacity="1" bordercolor="#666666" pagecolor="#ffffff"/>
688- <g fill-rule="evenodd" stroke-width="2" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-opacity="1">
689- <g id="brown" fill="#5c451c" stroke="#5c451c">
690- <path style="" d="M 1,1 H 901 V 701 H 1 Z m 0,0"/>
691- </g>
692- <g id="orange" fill="#ffa300" stroke="#ffa300">
693- <path d="m 641,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
694- <path d="m 121,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
695- <path d="m 401,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
696- <path d="m 441,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
697- </g>
698- <g id="turquoise" fill="#358794" stroke="#358794">
699- <path d="m 701,221 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
700- <path d="m 701,481 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
701- <path d="m 621,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
702- <path d="m 621,341 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
703- <path d="m 201,221 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
704- <path d="M 201,481 H 181 V 461 H 161 V 441 H 141 V 421 H 121 V 401 H 101 V 381 H 81 V 361 H 61 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
705- <path d="m 281,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
706- <path d="m 281,341 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
707- <path d="m 441,121 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
708- <path d="m 261,361 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
709- <path d="m 461,121 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
710- <path d="m 641,361 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
711- </g>
712- <g id="white" fill="#ffffff" stroke="#ffffff">
713- <path d="m 701,161 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
714- <path d="m 701,541 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
715- <path d="m 441,61 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
716- <path d="m 441,641 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
717- <path d="m 461,61 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
718- <path d="m 621,421 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 40 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
719- <path d="m 621,281 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -40 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
720- <path d="m 281,281 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
721- <path d="m 201,161 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 H 81 v 20 H 61 v 20 H 41 v 20 H 21 v 20 H 1 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
722- <path d="M 201,541 H 181 V 521 H 161 V 501 H 141 V 481 H 121 V 461 H 101 V 441 H 81 V 421 H 61 V 401 H 41 V 381 H 21 V 361 H 1 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
723- <path d="m 461,641 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -40 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
724- <path d="m 281,421 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 40 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
725- <path d="m 701,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 701 Z m 0,0"/>
726- <path d="M 721,181 H 701 V 101 H 601 v 40 h 40 v -20 h 20 v 40 H 581 V 81 h 140 z m 0,0"/>
727- <path d="m 701,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 701 Z m 0,0"/>
728- <path d="m 721,521 h -20 v 80 H 601 v -40 h 40 v 20 h 20 v -40 h -80 v 80 h 140 z m 0,0"/>
729- <path d="m 181,521 h 20 v 80 h 100 v -40 h -40 v 20 h -20 v -40 h 80 v 80 H 181 Z m 0,0"/>
730- <path d="m 201,521 h -20 v 80 H 81 v -40 h 40 v 20 h 20 V 541 H 61 v 80 h 140 z m 0,0"/>
731- <path d="m 181,181 h 20 v -80 h 100 v 40 h -40 v -20 h -20 v 40 h 80 V 81 H 181 Z m 0,0"/>
732- <path d="M 201,181 H 181 V 101 H 81 v 40 h 40 v -20 h 20 v 40 H 61 V 81 h 140 z m 0,0"/>
733- <path d="m 441,181 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h -40 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
734- <path d="m 461,181 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h 40 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
735- <path d="m 441,521 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h -40 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
736- <path d="m 461,521 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h 40 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
737- <path d="M 1,21 H 881 V 61 H 1 Z m 0,0"/>
738- <path d="m 1,641 h 880 v 40 H 1 Z m 0,0"/>
739- <path d="m 421,281 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
740- <path d="m 681,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
741- <path d="m 161,341 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
742- <path d="m 421,401 h 20 v -20 h 20 v 20 h 20 v 20 h -20 v 20 h -20 v -20 h -20 z m 0,0"/>
743- <path d="m 401,301 h 20 v 20 h -20 z m 0,0"/>
744- <path d="m 381,321 h 20 v 20 h -20 z m 0,0"/>
745- <path d="m 361,341 h 20 v 20 h -20 z m 0,0"/>
746- <path d="m 381,361 h 20 v 20 h -20 z m 0,0"/>
747- <path d="m 401,381 h 20 v 20 h -20 z m 0,0"/>
748- <path d="m 501,321 h 20 v 20 h -20 z m 0,0"/>
749- <path d="m 521,341 h 20 v 20 h -20 z m 0,0"/>
750- <path d="m 501,361 h 20 v 20 h -20 z m 0,0"/>
751- <path d="m 481,381 h 20 v 20 h -20 z m 0,0"/>
752- <path d="m 421,341 h 20 v 20 h -20 z m 0,0"/>
753- <path d="m 461,341 h 20 v 20 h -20 z m 0,0"/>
754- <path d="m 881,21 h 20 v 40 h -20 z m 0,0"/>
755- <path d="m 881,641 h 20 v 40 h -20 z m 0,0"/>
756- </g>
757- <g id="red" fill="#de3333" stroke="#de3333">
758- <path d="m 801,201 h 60 V 81 h 40 v 220 h -20 v -20 h -20 v -20 h -20 v -20 h -20 v -20 h -20 z m 0,0"/>
759- <path d="M 101,201 H 41 V 81 H 1 v 220 h 20 v -20 h 20 v -20 h 20 v -20 h 20 v -20 h 20 z m 0,0"/>
760- <path d="M 101,501 H 41 V 621 H 1 V 401 h 20 v 20 h 20 v 20 h 20 v 20 h 20 v 20 h 20 z m 0,0"/>
761- <path d="m 801,501 h 60 v 120 h 40 V 401 h -20 v 20 h -20 v 20 h -20 v 20 h -20 v 20 h -20 z m 0,0"/>
762- <path d="m 381,341 h 20 v 20 h -20 z m 0,0"/>
763- <path d="m 401,321 h 20 v 20 h -20 z m 0,0"/>
764- <path d="m 421,301 h 20 v 20 h -20 z m 0,0"/>
765- <path d="m 461,301 h 20 v 20 h -20 z m 0,0"/>
766- <path d="m 481,321 h 20 v 20 h -20 z m 0,0"/>
767- <path d="m 501,341 h 20 v 20 h -20 z m 0,0"/>
768- <path d="m 481,361 h 20 v 20 h -20 z m 0,0"/>
769- <path d="m 461,381 h 20 v 20 h -20 z m 0,0"/>
770- <path d="m 441,361 h 20 v 20 h -20 z m 0,0"/>
771- <path d="m 421,381 h 20 v 20 h -20 z m 0,0"/>
772- <path d="m 401,361 h 20 v 20 h -20 z m 0,0"/>
773- <path d="m 881,81 h 20 v 220 h -20 z m 0,0"/>
774- <path d="m 881,401 h 20 v 220 h -20 z m 0,0"/>
775- </g>
776- </g>
777- </svg>
778 diff --git a/www/public/assets/images/ui-day.png b/www/public/assets/images/ui-day.png
779deleted file mode 100644
780index 3e217a7..0000000
781 Binary files a/www/public/assets/images/ui-day.png and /dev/null differ
782 diff --git a/www/public/assets/images/ui.png b/www/public/assets/images/ui.png
783deleted file mode 100644
784index bf94438..0000000
785 Binary files a/www/public/assets/images/ui.png and /dev/null differ
786 diff --git a/www/public/docs/architecture/index.html b/www/public/docs/architecture/index.html
787deleted file mode 100644
788index aeeafe9..0000000
789--- a/www/public/docs/architecture/index.html
790+++ /dev/null
791 @@ -1 +0,0 @@
792- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li class=active><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=the-architecture-of-ayllu><a aria-label="Anchor link for: the-architecture-of-ayllu" class=zola-anchor href=#the-architecture-of-ayllu>The Architecture of Ayllu</a></h1><p><strong>Ayllu is a new software project and it's design is evolving.</strong><p>It's basic architecture is that of a single binary providing a web interface to browse and interact with Git repositories as well as an RPC server based on <a href=https://github.com/google/tarpc>tarpc</a> with an embedded client. The RPC server running in the core Ayllu binary is called the <code>job_server</code> and it provides an interface to interact with Ayllu for administrators. Much of the functionality of Ayllu is implemented via <code>RPC extensions</code> which are minimal binaries that are used to extend the core functionality of Ayllu.<p>The current architecture of Ayllu is depicted below:<p><a href=/assets/architecture.svg><img class=diagram src=/assets/architecture.svg></a></div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
793\ No newline at end of file
794 diff --git a/www/public/docs/builds/index.html b/www/public/docs/builds/index.html
795deleted file mode 100644
796index 1d1f6b4..0000000
797--- a/www/public/docs/builds/index.html
798+++ /dev/null
799 @@ -1,37 +0,0 @@
800- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li class=active><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><p>Ayllu contains a plugin called <code>ayllu-build</code> which is responsible for executing build manifests in a CI/CD environment. The design of the build system prioritizes the ability to run the entire workflow locally.<h3 id=an-example-local-workflow><a aria-label="Anchor link for: an-example-local-workflow" class=zola-anchor href=#an-example-local-workflow>An Example Local Workflow</a></h3><p>Build manifests are written in <a href=https://nickel-lang.org/>Nickel</a>.<pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh>mkdir -p my-test-repo/.ayllu/build
801- cd my-test-repo && git init
802- # create a simple workflow that prints "Hello" and "World"
803- cat <&LTEOF > .ayllu/build/main.ncl
804- {
805- workflows = [
806- {
807- name = "Simple",
808- steps = [
809- {
810- name = "Hello",
811- input = "echo -n Hello"
812- },
813- {
814- name = "World",
815- input = "echo -n World"
816- }
817- ]
818- }
819- ]
820- }
821- EOF
822- # validate the build plan and generate a DOT file to stdout
823- ayllu_build plan
824- >>> 2023-12-14T21:58:37.777493Z INFO ayllu_build:66: logger initialized
825- >>> digraph {
826- >>> 0 [ label = "Workflow: Simple" ]
827- >>> 1 [ label = "Step: Hello" ]
828- >>> 2 [ label = "Step: World" ]
829- >>> 0 -> 1 [ label = "0" ]
830- >>> 0 -> 2 [ label = "0" ]
831- >>> }
832- # if you have graphviz installed you can visualize this output:
833- ayllu_build plan | dot -Tx11
834- # finally you can execute the workflow locally
835- ayllu_build evaluate
836- </code></pre></div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
837\ No newline at end of file
838 diff --git a/www/public/docs/configuration/index.html b/www/public/docs/configuration/index.html
839deleted file mode 100644
840index 4952999..0000000
841--- a/www/public/docs/configuration/index.html
842+++ /dev/null
843 @@ -1,87 +0,0 @@
844- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li class=active><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=initial-configuration><a aria-label="Anchor link for: initial-configuration" class=zola-anchor href=#initial-configuration>Initial Configuration</a></h1><p>After following the <a href=https://ayllu-forge.org/docs/installation>installation</a> you need to setup your configuration file and initialize the database.<h2 id=user-based-installation><a aria-label="Anchor link for: user-based-installation" class=zola-anchor href=#user-based-installation>User Based Installation</a></h2><pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh>mkdir ~/.config/ayllu
845- ayllu config generate > ~/.config/ayllu/config.yaml
846- # open up config.yaml in your favorite editor and configure at least one
847- # collection
848- vim ~/.config/ayllu/config.yaml
849- # now verify the config is valid
850- ayllu config display
851- # initialize and migrate the database
852- ayllu migrate
853- # launch the web server
854- ayllu serve
855- </code></pre><h1 id=collections><a aria-label="Anchor link for: collections" class=zola-anchor href=#collections>Collections</a></h1><p>Collections are simply a directory on your file system that contains zero or more Git repositories. They can be structured in whichever way is suitable for your personal workflow.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml># On my system I keep active projects in a directory called "projects"
856- [[collections]]
857- name = "projects"
858- description = "active projects"
859- path = "/home/kevin/repos/projects"
860- # And another directory of archived projects that I call "the attic"
861- [[collections]]
862- name = "attic"
863- description = "projects stowed away in the attic"
864- path = "/home/kevin/repos/attic"
865-
866- # it's also possible to create hidden collections that aren't showed in the
867- # collections index page but will be rendered if you know the link to them.
868- # If you want to restrict access completely you'll need to employ basic auth
869- # or similiar in your webserver.
870- [[collections]]
871- name = "private"
872- description = "my private code, no looking!"
873- path = "/home/kevin/repos/private"
874- </code></pre><h1 id=running-jobs><a aria-label="Anchor link for: running-jobs" class=zola-anchor href=#running-jobs>Running Jobs</a></h1><p>Once Ayllu has been configured and the server is running you'll want to run jobs against your repositories. Jobs do things like compute authorship stats and determine code composition. Keep in mind that <code>jobs</code> are distinct from <code>builds</code>. Jobs perform internal actions that allow Ayllu to function while builds are for running codebase specific workflows.<p>Most jobs are run via <a href=https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks>git hooks</a><pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh># ayllu's internal job server will be listening on a unix socket
875- ss -xlp |grep ayllu
876- u_str LISTEN 0 1024 /run/user/1000/ayllu.sock 305937 * 0 users:(("ayllu",pid=70917,fd=14))
877- cd ~/repos/projects/ayllu
878- # run against your repository
879- # depending on the number of commits this can take a considerable amount of
880- # time to run as it needs to perform computations against each commit.
881- ayllu jobs run .
882- </code></pre><h1 id=tree-sitter><a aria-label="Anchor link for: tree-sitter" class=zola-anchor href=#tree-sitter>Tree Sitter</a></h1><p>Syntax highlighting in the web interface is implemented with <a href=https://tree-sitter.github.io/tree-sitter/>tree-sitter</a>. Instead of embedding and compiling potentially hundreds of individual shared modules for each language you can install languages you are interested in via your operating system's package manager. Unfortunately, not all parsers are consistently packaged and thus it is possible to override system defaults as described below.<h2 id=customizing-shared-module-paths><a aria-label="Anchor link for: customizing-shared-module-paths" class=zola-anchor href=#customizing-shared-module-paths>Customizing Shared Module Paths</a></h2><p>Normally tree-sitter parsers should have the following layout:<pre class=language-text data-lang=text><code class=language-text data-lang=text># compiled shared modules
883- /usr/lib/libtree-sitter-$language.so
884- # supplemental query files
885- /usr/share/tree-sitter/queries/$language/[highlights|injections|locals].scm
886- </code></pre><p>By default Ayllu will attempt to load parsers and query files from those directories.<h3 id=example-custom-configuration><a aria-label="Anchor link for: example-custom-configuration" class=zola-anchor href=#example-custom-configuration>Example Custom Configuration</a></h3><div class=info>NOTE: Refer to <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/config.example.toml>config.sample.toml</a> for the latest example configuration or <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/src/config.rs>config.rs</a>.</div><pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml>[tree-sitter]
887- # specify the base path to search for libtree-sitter-$language.so
888- base_path = "/usr/lib"
889- # directory of syntax queries
890- queries_path = "/usr/share/tree-sitter/queries"
891- </code></pre><h2 id=adding-a-additional-queries><a aria-label="Anchor link for: adding-a-additional-queries" class=zola-anchor href=#adding-a-additional-queries>Adding a Additional Queries</a></h2><p>An additional path to look for queries can also be added:<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml>[tree-sitter]
892- queries_extras_path = "/etc/ayllu/queries"
893- </code></pre><h2 id=adding-additional-parsers><a aria-label="Anchor link for: adding-additional-parsers" class=zola-anchor href=#adding-additional-parsers>Adding Additional Parsers</a></h2><p>If you want to add a custom parser that's installed at a non-standard path you can do that too. This can be useful for parsers that aren't packaged on your system and also for custom programming languages.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml>[[tree-sitter.parsers]]
894- name = "fuu-lang"
895- shared_object = "/etc/ayllu/parsers/libtree-sitter-fuu.so"
896- highlight_query = "/etc/ayllu/queries/fuu/highlights.scm"
897- locals_query = "/etc/ayllu/queries/fuu/locals.scm"
898- injections = "/etc/ayllu/queries/fuu/injections.scm"
899- </code></pre><h1 id=language-detection-syntax-highlighting><a aria-label="Anchor link for: language-detection-syntax-highlighting" class=zola-anchor href=#language-detection-syntax-highlighting>Language Detection & Syntax Highlighting</a></h1><p>Ayllu determines which language is being rendered by file extension, file name, or an "alias" in the case of a markdown code block.<h2 id=language-mapping><a aria-label="Anchor link for: language-mapping" class=zola-anchor href=#language-mapping>Language Mapping</a></h2><p>Sometimes you want one language to be detected and presented as something different. For instance by default Ayllu will detect <code>hello.ml</code> as a Standard ML file, but you can override this to OCaml with a mapping.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml>[languages]
900- [languages.mappings]
901- "Standard ML" = "OCaml"
902- </code></pre><h2 id=custom-languages><a aria-label="Anchor link for: custom-languages" class=zola-anchor href=#custom-languages>Custom Languages</a></h2><p>If you're the author of a programming language and want Ayllu to detect it based on file extensions you can add an additional language in your config file.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml># append the following in your config.toml
903- [[ languages.extras ]]
904- name = "BazQux"
905- extensions = [".baz", ".qux", ".bq"]
906- # any file with this name will be detected as BazQux
907- filename = [".bazscript"]
908- # deep pink
909- color = "#ff1493"
910- </code></pre><p>You can also use the languages section to modify existing languages, for instance if for some reason you didn't like the default colors associated with a particular programming language, you can adjust it here.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml># append the following in your config.toml
911- [[ languages.extras ]]
912- name = "go"
913- # Go is pink!
914- color = "#ff1493"
915- </code></pre><h1 id=adding-custom-tree-sitter-highlights><a aria-label="Anchor link for: adding-custom-tree-sitter-highlights" class=zola-anchor href=#adding-custom-tree-sitter-highlights>Adding Custom Tree Sitter Highlights</a></h1><p>You can override system installed tree-sitter <a href=https://tree-sitter.github.io/tree-sitter/syntax-highlighting#highlights>highlights</a> in the Ayllu configuration file. For example we can add two new highlight queries to the <code>diff</code> parser called <code>@addition</code> and <code>@removal</code>. With these enabled Ayllu will paint the relevant code sections with CSS classes <code>ts_addition</code> and <code>ts_removal</code> which you can style in theme configurations.<pre class=language-toml data-lang=toml><code class=language-toml data-lang=toml>[tree-sitter.highlights]
916- diff = """
917- ; used to highlight diffs in the UI
918- [(addition) (new_file)] @addition
919- [(deletion) (old_file)] @removal
920-
921- (commit) @constant
922- (location) @attribute
923- (command) @variable.builtin
924- """
925- </code></pre><h1 id=mirroring><a aria-label="Anchor link for: mirroring" class=zola-anchor href=#mirroring>Mirroring</a></h1><p>Git mirrors will be automatically detected by looking at git configuration to determine if the repository has a <code>mirror = true</code> flag present in any of it's configured remotes. If any remote is flagged as a mirror then the repository will be considered a mirror. Mirror repositories will not be listed in RSS feeds, be subject to certain jobs types, or be available in the remote API.<h2 id=creating-a-mirror><a aria-label="Anchor link for: creating-a-mirror" class=zola-anchor href=#creating-a-mirror>Creating a Mirror</a></h2><p>The simplest way to create a mirror is by cloning a repository with the <code>--mirror</code> flag. For example: <code>git clone https://ayllu-forge.org/ayllu/ayllu --mirror</code> will result in a git config such as:<pre><code>[remote "origin"]
926- url = https://ayllu-forge.org/ayllu/ayllu
927- fetch = +refs/*:refs/*
928- mirror = true
929-
930- </code></pre></div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
931\ No newline at end of file
932 diff --git a/www/public/docs/developers/index.html b/www/public/docs/developers/index.html
933deleted file mode 100644
934index dcf23b7..0000000
935--- a/www/public/docs/developers/index.html
936+++ /dev/null
937 @@ -1,5 +0,0 @@
938- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li class=active><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=developing-components><a aria-label="Anchor link for: developing-components" class=zola-anchor href=#developing-components>Developing Components</a></h1><p>Ayllu is split up into several distinct components, to work on one of them you typically want to start one of two feedback cycles: <code>lint->test->compile</code> or <code>compile->serve</code>. To start each one you can can run <code>scripts/test.sh $COMPONENT</code> or <code>scripts/watch.sh $COMPONENT</code> and the appropriate <code>cargo watch</code> command will be started for you.<h1 id=testing-the-entire-ci-workflow><a aria-label="Anchor link for: testing-the-entire-ci-workflow" class=zola-anchor href=#testing-the-entire-ci-workflow>Testing the Entire CI Workflow</a></h1><p>You can run all of the CI tests locally by invoking <code>ayllu-build</code> directly, assuming it is compiled it can be launched like this:<pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh># run all tests in .ayllu
939- ayllu-build evaluate
940- </code></pre><h1 id=ayllu-forge-org><a aria-label="Anchor link for: ayllu-forge-org" class=zola-anchor href=#ayllu-forge-org>ayllu-forge.org</a></h1><p>The <a href=https://ayllu-forge.org>Ayllu website</a> and project documentation are built together with <a href=https://www.getzola.org/>Zola</a> which you must install. After which you can startup a local preview of the site with the following commands:<pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh>cd www && zola serve
941- </code></pre><p>The generated content are hosted directly from Ayllu and you simply need to build and commit the generated code directly into the repository.<pre class=language-sh data-lang=sh><code class=language-sh data-lang=sh>cd www && zola build
942- </code></pre><h2 id=diagrams><a aria-label="Anchor link for: diagrams" class=zola-anchor href=#diagrams>Diagrams</a></h2><p>Diagrams are built with <a href=https://www.nomnoml.com/>nomnoml</a> and their SVG content contain the source for generating the diagrams. Simply open one of the source SVGs up and copy-paste it to the editor of the nomnoml website.</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
943\ No newline at end of file
944 diff --git a/www/public/docs/faq/index.html b/www/public/docs/faq/index.html
945deleted file mode 100644
946index 74d3488..0000000
947--- a/www/public/docs/faq/index.html
948+++ /dev/null
949 @@ -1 +0,0 @@
950- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li class=active><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h5 id=what-does-ayllu-mean><a aria-label="Anchor link for: what-does-ayllu-mean" class=zola-anchor href=#what-does-ayllu-mean>What Does "Ayllu" Mean?</a></h5><p>The name <a href=https://en.wikipedia.org/wiki/Ayllu>Ayllu</a> <em>/ˈajʎu/</em>, <em>eye-joo</em> is the Quechua word for the traditional form of a community in the Andes region of South America, particularly in Bolivia and Peru.<h5 id=do-you-provide-hosting><a aria-label="Anchor link for: do-you-provide-hosting" class=zola-anchor href=#do-you-provide-hosting>Do You Provide Hosting?</a></h5><p>Not currently. If there was enough interest the project might offer hosted environments as a way to sustain it's development.</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
951\ No newline at end of file
952 diff --git a/www/public/docs/index.html b/www/public/docs/index.html
953deleted file mode 100644
954index d4492db..0000000
955--- a/www/public/docs/index.html
956+++ /dev/null
957 @@ -1 +0,0 @@
958- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=documentation><a aria-label="Anchor link for: documentation" class=zola-anchor href=#documentation>Documentation</a></h1><p>Welcome to the Ayllu documentation 📖, this is section serves as an authoritative reference on all things related to the Ayllu code forge!</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
959\ No newline at end of file
960 diff --git a/www/public/docs/installation/index.html b/www/public/docs/installation/index.html
961deleted file mode 100644
962index 1dc5c80..0000000
963--- a/www/public/docs/installation/index.html
964+++ /dev/null
965 @@ -1,60 +0,0 @@
966- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li class=active><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=running-as-a-container><a aria-label="Anchor link for: running-as-a-container" class=zola-anchor href=#running-as-a-container>Running as a Container</a></h1><p>The quickest way to get started running Ayllu is by using a container. <a href=https://podman.io/>Podman</a> is the only supported container platform although Docker may work as well.<p>There are several different configurations that can be used to run Ayllu as a container.<ul><li><a href=https://ayllu-forge.org/docs/installation/#rootless-container-with-ayllu-running-as-root>Rootless with Ayllu running as root within the container</a><li><a href=https://ayllu-forge.org/docs/installation/#rootless-with-a-non-root-user-within-a-container>Rootless with a non-root user within the container</a><li><a href=https://ayllu-forge.org/docs/installation/#as-root-with-ayllu-running-as-a-non-root-user>As root with Ayllu running as a non-root user</a></ul><h2 id=rootless-container-with-ayllu-running-as-root><a aria-label="Anchor link for: rootless-container-with-ayllu-running-as-root" class=zola-anchor href=#rootless-container-with-ayllu-running-as-root>Rootless Container with Ayllu Running as Root</a></h2><p>This configuration works best if you want Ayllu to have access to your repositories for browsing your code locally. The tutorial assumes that you have permissions to access all of your code repositories.Note that the commands below use a separate configuration and data paths to avoid conflicting with the default paths if the Ayllu binary is installed directly on your system.<p>First create configuration and data paths that we will map into the container.<pre><code>mkdir ~/.config/ayllu-podman
967- mkdir ~/.local/share/ayllu-podman
968- </code></pre><p>Next pull the latest version of the container and generate a new configuration file.<pre><code>podman pull registry.ayllu-forge.org/ayllu/ayllu:main
969- podman run --rm -ti registry.ayllu-forge.org/ayllu/ayllu:main ayllu config generate > ~/.config/ayllu-podman/config.toml
970- </code></pre><p>The next step is to map "collections" (directories that contain git repositories) into the Ayllu container. On my system I keep active projects I'm working on in a directory called <code>~/repos/projects</code> and I keep past projects for reference in a directory called <code>~/repos/attic</code>.<pre><code>...
971- [[collections]]
972- name = "projects"
973- description = "active projects"
974- # ~/repos/projects --> /repos in the container
975- path = "/repos/projects"
976-
977- [[collections]]
978- name = "attic"
979- description = "past projects stowed away in the attic"
980- path = "/repos/attic"
981- ...
982- </code></pre><p>Now you can start the container ensuring that you map the code collection into the correct path which you configured in the step above. In the commands below we will use the following volume maps from my host system into the container. Take a look at the Podman <a href=https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md>rootless tutorial</a> for a refresher on how rootless volume mappings work. Note that below the repositories are mounted as :rw. This is because Ayllu uses Git <a href=https://git-scm.com/docs/git-worktree>worktrees</a> to run certain types of analysis such as the code composition chart. If you don't care about that you can change this to read-only to prevent any write access at all.<pre><code># code repositories
983- -v ~/repos:/repos:rw
984- # configuration directory
985- -v ~/.config/ayllu-podman:/root/.config/ayllu
986- # stateful sqlite database
987- -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu
988- </code></pre><p>Finally we can launch the actual container.<pre><code>podman run \
989- --net host --rm -ti --user root \
990- -v ~/repos:/repos \
991- -v ~/.config/ayllu-podman:/root/.config/ayllu \
992- -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu \
993- registry.ayllu-forge.org/ayllu/ayllu:main \
994- ayllu serve
995- </code></pre><p>You should now be able to browse to the user interface at <a href=http://localhost:8080>localhost:8080</a>.<h3 id=configure-with-systemd><a aria-label="Anchor link for: configure-with-systemd" class=zola-anchor href=#configure-with-systemd>Configure with Systemd</a></h3><p>You can also configure the container to run as a systemd-user service. See the documentation for <a href=https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html>podman systemd units</a>. You can also checkout the <a href=https://wiki.archlinux.org/title/Podman#Quadlet>archlinux wiki</a> for a tutorial.<p>Here is an example file at <code>~/.config/containers/systemd/ayllu.container</code>.<pre><code>[Unit]
996- Description=Ayllu Container
997-
998- [Container]
999- ContainerName=ayllu
1000- Image=registry.ayllu-forge.org/ayllu/ayllu:main
1001- Network=host
1002- User=root
1003- Volume=%h/repos:/repos:rw
1004- Volume=%h/.config/ayllu-podman:/root/.config/ayllu
1005- Volume=%h/.local/share/ayllu-podman:/root/.local/share/ayllu
1006- Exec=ayllu serve
1007-
1008- [Service]
1009- Restart=on-failure
1010-
1011- # Extend Timeout to allow time to pull the image
1012- TimeoutStartSec=300
1013-
1014- # The [Install] section allows enabling the generated service.
1015- [Install]
1016- WantedBy=default.target
1017- </code></pre><p>Once you've configured the file you can install and run it:<pre><code># validate the configuration
1018- /usr/lib/podman/quadlet -user -dryrun
1019- # install generated systemd services
1020- /usr/lib/podman/quadlet -user ~/.config/systemd/user
1021- # reload the user daemon
1022- systemctl --user daemon-reload
1023- # start the ayllu container
1024- systemctl --user start ayllu
1025- </code></pre><p>If all went well Ayllu should now be running as a container managed by systemd!<h1 id=rootless-with-a-non-root-user-within-a-container><a aria-label="Anchor link for: rootless-with-a-non-root-user-within-a-container" class=zola-anchor href=#rootless-with-a-non-root-user-within-a-container>Rootless with a non-root User within a Container</a></h1><p>This method is the most restricted technique for running Ayllu in a production deployment. Not fully supported yet, TODO.<h1 id=as-root-with-ayllu-running-as-a-non-root-user><a aria-label="Anchor link for: as-root-with-ayllu-running-as-a-non-root-user" class=zola-anchor href=#as-root-with-ayllu-running-as-a-non-root-user>As Root with Ayllu Running as a Non-root User</a></h1><p>This method is a hybrid approach that is useful for serving components of Ayllu from a container but also retaining a system level installation. Not fully supported yet, TODO.<h1 id=distribution-packages><a aria-label="Anchor link for: distribution-packages" class=zola-anchor href=#distribution-packages>Distribution Packages</a></h1><div class=warning>NOTE: Few distribution packages currently exist for Ayllu, any contributions in this regard would be gladly accepted!</div><h2 id=arch-linux><a aria-label="Anchor link for: arch-linux" class=zola-anchor href=#arch-linux>Arch Linux</a></h2><h6 id=release-package-unfinished><a aria-label="Anchor link for: release-package-unfinished" class=zola-anchor href=#release-package-unfinished>Release Package (Unfinished)</a></h6><p><a href=https://aur.archlinux.org/packages/ayllu>ayllu</a><h6 id=source-package-unfinished><a aria-label="Anchor link for: source-package-unfinished" class=zola-anchor href=#source-package-unfinished>Source Package (Unfinished)</a></h6><p><a href=https://aur.archlinux.org/packages/ayllu-git>ayllu-git</a><h1 id=from-source><a aria-label="Anchor link for: from-source" class=zola-anchor href=#from-source>From Source</a></h1><p>TODO</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1026\ No newline at end of file
1027 diff --git a/www/public/docs/mail/index.html b/www/public/docs/mail/index.html
1028deleted file mode 100644
1029index 663b950..0000000
1030--- a/www/public/docs/mail/index.html
1031+++ /dev/null
1032 @@ -1 +0,0 @@
1033- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li class=active><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=mailing-list-support><a aria-label="Anchor link for: mailing-list-support" class=zola-anchor href=#mailing-list-support>Mailing List Support</a></h1><p>Ayllu has full featured support for email based development workflows. It is based on the excellent <a href=https://git.meli-email.org/meli/mailpot>mailpot</a> mailing list manager.<h2 id=configuration><a aria-label="Anchor link for: configuration" class=zola-anchor href=#configuration>Configuration</a></h2><p>The configuration of mail servers can be complex. Ayllu encapsulates most of these settings in the <a href=https://ayllu-forge.org/ayllu/ayllu/tree/main/containers/multiuser>mutliuser</a> container which can be used as a reference for configuring your own mail server.<h3 id=minimum-recommended-security-settings><a aria-label="Anchor link for: minimum-recommended-security-settings" class=zola-anchor href=#minimum-recommended-security-settings>Minimum Recommended Security Settings</a></h3><h4 id=dkim><a aria-label="Anchor link for: dkim" class=zola-anchor href=#dkim>DKIM</a></h4><h4 id=spf-validation><a aria-label="Anchor link for: spf-validation" class=zola-anchor href=#spf-validation>SPF Validation</a></h4><p>The container provides SPF validation and the recommended DNS configuration for a single host e.g. <code>ayllu-forge.org</code> is <code>"v=spf1 a mx ~all"</code>.</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1034\ No newline at end of file
1035 diff --git a/www/public/docs/proxy/index.html b/www/public/docs/proxy/index.html
1036deleted file mode 100644
1037index ca71389..0000000
1038--- a/www/public/docs/proxy/index.html
1039+++ /dev/null
1040 @@ -1 +0,0 @@
1041- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li class=active><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=proxy-configuration><a aria-label="Anchor link for: proxy-configuration" class=zola-anchor href=#proxy-configuration>Proxy Configuration</a></h1><p>Ayllu is designed to be run behind a reverse proxy server and it is not recommended to deploy Ayllu directly to the internet. Things such as TLS termination or basic authentication for private repositories are not directly supported by Ayllu although some of these features may be added in the future.<h2 id=nginx><a aria-label="Anchor link for: nginx" class=zola-anchor href=#nginx>Nginx</a></h2><p><a href=https://nginx.org/>nginx</a> is the only supported software but others are likely to work and we will happily accept documentation for operating other free software proxy servers.</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1042\ No newline at end of file
1043 diff --git a/www/public/docs/sites/index.html b/www/public/docs/sites/index.html
1044deleted file mode 100644
1045index 87d1631..0000000
1046--- a/www/public/docs/sites/index.html
1047+++ /dev/null
1048 @@ -1,13 +0,0 @@
1049- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li class=active><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=static-hosting><a aria-label="Anchor link for: static-hosting" class=zola-anchor href=#static-hosting>Static Hosting</a></h1><p>Ayllu can serve content directly from a git repository, you just need to toggle a few options in your git configuration file.<h2 id=example-configuration><a aria-label="Anchor link for: example-configuration" class=zola-anchor href=#example-configuration>Example Configuration</a></h2><p>In your git configuration file you can specify one or more headers which if detected by Ayllu will cause it to serve content from the directory rather then it's web interface.<p>Below we specify that any request sent to Ayllu with header <code>Host = example.org</code> should return HTML content from within the repository directory www/public.<pre><code>[ayllu-sites]
1050- enabled = true
1051- header = Host=example.org
1052- content = www/public
1053- </code></pre><h2 id=proxy-configuration><a aria-label="Anchor link for: proxy-configuration" class=zola-anchor href=#proxy-configuration>Proxy configuration</a></h2><p>Typically you would want a proxy server in front of your Ayllu instance. You can then pass any headers to your downstream instance and it should serve the content as expected.<h3 id=example-nginx-proxy><a aria-label="Anchor link for: example-nginx-proxy" class=zola-anchor href=#example-nginx-proxy>Example Nginx Proxy</a></h3><pre><code>...
1054- location / {
1055- include config.d/proxy.conf;
1056- proxy_pass http://127.0.0.1:8080;
1057- proxy_set_header Host $host;
1058- proxy_set_header X-Real-IP $remote_addr;
1059- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1060- }
1061- </code></pre></div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1062\ No newline at end of file
1063 diff --git a/www/public/docs/themes/index.html b/www/public/docs/themes/index.html
1064deleted file mode 100644
1065index 7189ffa..0000000
1066--- a/www/public/docs/themes/index.html
1067+++ /dev/null
1068 @@ -1,18 +0,0 @@
1069- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><div class=documentation><div class=side-panel><ul><li><a href=https://ayllu-forge.org/docs/architecture/>Architecture</a><li><a href=https://ayllu-forge.org/docs/builds/>Builds</a><li><a href=https://ayllu-forge.org/docs/configuration/>Configuration</a><li><a href=https://ayllu-forge.org/docs/developers/>Developers</a><li><a href=https://ayllu-forge.org/docs/installation/>Installation</a><li><a href=https://ayllu-forge.org/docs/faq/>FAQ</a><li><a href=https://ayllu-forge.org/docs/mail/>Mail</a><li><a href=https://ayllu-forge.org/docs/proxy/>Reverse Proxy</a><li><a href=https://ayllu-forge.org/docs/sites/>Static Hosting</a><li class=active><a href=https://ayllu-forge.org/docs/themes/>Themes</a></ul></div><div class=doc-content><h1 id=themeing-ayllu><a aria-label="Anchor link for: themeing-ayllu" class=zola-anchor href=#themeing-ayllu>Themeing Ayllu</a></h1><p>Ayllu can be customized in a variety of ways including custom CSS, modifying Jinja based HTML templates, or by adding new static assets such as images. Available themes can be viewed and enabled from the <code>/config</code> page.<h2 id=the-default-theme><a aria-label="Anchor link for: the-default-theme" class=zola-anchor href=#the-default-theme>The Default Theme</a></h2><p>The default theme is located in <code>ayllu/themes/default</code> and is served as a base and all themes serve content from this theme if they do not override it's assets. It is possible to change the default theme by setting it in your Ayllu configuration file.<pre><code>[web]
1070- default_theme = "my-custom-theme"
1071- </code></pre><p>By changing the default theme all additionally loaded themes will inherit the templates and assets of the default theme.<h2 id=built-in-vs-external-themes><a aria-label="Anchor link for: built-in-vs-external-themes" class=zola-anchor href=#built-in-vs-external-themes>Built-in vs External Themes</a></h2><h3 id=built-in-themes><a aria-label="Anchor link for: built-in-themes" class=zola-anchor href=#built-in-themes>Built-in Themes</a></h3><p>Built-in themes are compiled into the Ayllu binary and available for selection from the config section of the web interface. These themes are available at <code>ayllu/themes/</code>. These themes use <a href=https://lightningcss.dev/>lightning css</a> at build time to build the theme's <code>main.min.css</code> file.<h3 id=external-themes><a aria-label="Anchor link for: external-themes" class=zola-anchor href=#external-themes>External Themes</a></h3><p>Additional themes can be loaded directly from the file system and allow the addition of new themes without recompiling Ayllu.<pre><code>[web]
1072-
1073- default_theme = "default"
1074-
1075- [[web.theme]]
1076-
1077- name = "my-custom-theme"
1078- # path to a directory of theme templates, assets, and stylesheets
1079- path = "/var/lib/ayllu/themes/my-custom-theme"
1080- </code></pre><h3 id=file-system-layout><a aria-label="Anchor link for: file-system-layout" class=zola-anchor href=#file-system-layout>File System Layout</a></h3><p>All files are optional in themes, an empty directory is considered a valid theme and will result in an identical configuration to the <code>default_theme</code>.<pre><code>assets/ # SVG and other static assets served from /assets
1081- assets/logo.svg # main logo in the left hand nav bar
1082- assets/feed.xsl # XSL file used to style RSS feeds
1083- assets/*.svg # additional assets for various parts of the UI
1084- templates/ # directory of Jinja templates
1085- theme.css # additional stylesheet to extend the default
1086- </code></pre><p>See <code>contrib/example-theme</code> for a functional custom theme to extend as a base.</div></div></main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1087\ No newline at end of file
1088 diff --git a/www/public/index.html b/www/public/index.html
1089deleted file mode 100644
1090index d1d7f39..0000000
1091--- a/www/public/index.html
1092+++ /dev/null
1093 @@ -1 +0,0 @@
1094- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><h3 id=hyper-performant-hackable-code-forge-built-on-open-standards>Hyper Performant & Hackable Code Forge Built on Open Standards</h3><p>Ayllu is a lightweight <a href=https://en.wikipedia.org/wiki/Forge_(software)>code forge</a> designed to help individuals and grassroots community projects create and develop software in collaboration across open internet standards.<hr><p>Check out the <a href=/docs>documentation</a> or <a href=/browse>browse</a> some of the projects hosted on this server.</main><footer class=page-footer>2024, <a href=/ayllu/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
1095\ No newline at end of file
1096 diff --git a/www/public/main.css b/www/public/main.css
1097deleted file mode 100644
1098index dc98047..0000000
1099--- a/www/public/main.css
1100+++ /dev/null
1101 @@ -1 +0,0 @@
1102- :where(html){--link:var(--indigo-7);--link-visited:var(--purple-7);--text-1:var(--gray-12);--text-2:var(--gray-7);--surface-1:var(--gray-0);--surface-2:var(--gray-2);--surface-3:var(--gray-3);--surface-4:var(--gray-4);--scrollthumb-color:var(--gray-7);-webkit-text-size-adjust:none;accent-color:var(--brand, var(--link));background-color:var(--surface-1);block-size:100%;caret-color:var(--brand, var(--link));color:var(--text-1);color-scheme:light;font-family:var(--font-system-ui);line-height:var(--font-lineheight-3);scrollbar-color:var(--scrollthumb-color) transparent}@media (dynamic-range: high) or (color-gamut: p3){@supports (color: color(display-p3 0 0 0)){:where(html){--link:color(display-p3 .1 .4 1);--link-visited:color(display-p3 .6 .2 1)}}}:where(html) :where(dialog){background-color:var(--surface-1)}:where(html) :where(button,.btn){--_highlight:var(--_highlight-light);--_bg:var(--_bg-light);--_ink-shadow:var(--_ink-shadow-light)}:where(html) :where(button,.btn) :where([type=reset]){--_text:var(--red-6);--_border:var(--red-3)}:where(html) :where(button,.btn,input:is([type=button],[type=submit],[type=reset]))[disabled]{--_text:var(--gray-6)}:where(html) :where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:var(--surface-2)}@media (prefers-color-scheme: dark){:where(html){--link:var(--indigo-3);--link-visited:var(--purple-3);--text-1:var(--gray-1);--text-2:var(--gray-4);--surface-1:var(--gray-9);--surface-2:var(--gray-8);--surface-3:var(--gray-7);--surface-4:var(--gray-6);--scrollthumb-color:var(--gray-6);--shadow-strength:10%;--shadow-color:220 40% 2%;color-scheme:dark}}:where(a[href]){color:var(--brand, var(--link))}:where(a[href]):where(:visited){color:var(--link-visited)}:focus-visible{outline-color:var(--brand, var(--link))}*,:after,:before{box-sizing:border-box}:where(:not(dialog)){margin:0}:where(:not(fieldset,progress,meter)){background-origin:border-box;background-repeat:no-repeat;border-style:solid;border-width:0}@media (prefers-reduced-motion: no-preference){:where(html){scroll-behavior:smooth}}@media (prefers-reduced-motion: no-preference){:where(:focus-visible){transition:outline-offset 145ms var(--ease-2)}:where(:not(:active):focus-visible){transition-duration:.25s}}:where(:not(:active):focus-visible){outline-offset:5px}:where(body){min-block-size:100%}:where(h1,h2,h3,h4,h5,h6){text-wrap:balance;font-weight:var(--font-weight-9);line-height:var(--font-lineheight-1)}:where(h1){font-size:var(--font-size-8);max-inline-size:var(--size-header-1)}:where(h2){font-size:var(--font-size-6);max-inline-size:var(--size-header-2)}:where(h3){font-size:var(--font-size-5)}:where(h4){font-size:var(--font-size-4)}:where(h5){font-size:var(--font-size-3)}:where(h3,h4,h5,h6,dt){max-inline-size:var(--size-header-3)}:where(p,ul,ol,dl,h6){font-size:var(--font-size-2)}:where(a,u,ins,abbr){text-underline-offset:1px}@supports (-moz-appearance: none){:where(a,u,ins,abbr){text-underline-offset:2px}}:where(a[href],area,button,input:not([type=text],[type=email],[type=number],[type=password],[type=""],[type=tel],[type=url]),label[for],select,summary,[tabindex]:not([tabindex*="-"])){cursor:pointer}:where(a[href],area,button,input,label[for],select,summary,textarea,[tabindex]:not([tabindex*="-"])){-webkit-tap-highlight-color:transparent;touch-action:manipulation}:where(a):where([href]){text-decoration-color:var(--indigo-2)}:where(a):where([href]):where(:visited){text-decoration-color:var(--purple-2)}:where(a):where(:not(:hover)){text-decoration:inherit}:where(img,svg,video,canvas,audio,iframe,embed,object){display:block}:where(img,svg,video){block-size:auto;max-inline-size:100%}:where(input,button,textarea,select),:where(input[type=file])::-webkit-file-upload-button{color:inherit;font:inherit;font-size:inherit;letter-spacing:inherit}::placeholder{color:var(--gray-7);opacity:.75}:where(input:not([type=range]),textarea){padding-block:var(--size-1);padding-inline:var(--size-2)}:where(select){padding-block:.75ch;padding-inline:var(--size-relative-4) 0}:where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:var(--surface-2);border-radius:var(--radius-2)}:where(textarea){resize:block}:where(input[type=checkbox],input[type=radio]){block-size:var(--size-3);inline-size:var(--size-3)}:where(svg:not([width])){inline-size:var(--size-10)}:where(code,kbd,samp,pre){font-family:var(--font-monospace-code),monospace}:where(:not(pre)>code,kbd){white-space:nowrap}:where(pre){direction:ltr;max-inline-size:max-content;min-inline-size:0;white-space:pre;writing-mode:lr}:where(:not(pre)>code){background:var(--surface-2);border-radius:var(--radius-2);padding:var(--size-1) var(--size-2);writing-mode:lr}:where(kbd,var){border-color:var(--surface-4);border-radius:var(--radius-2);border-width:var(--border-size-1);padding:var(--size-1) var(--size-2)}:where(mark){border-radius:var(--radius-2);padding-inline:var(--size-1)}:where(ol,ul){padding-inline-start:var(--size-8)}:where(li){padding-inline-start:var(--size-2)}:where(li,dd,figcaption){max-inline-size:var(--size-content-2)}:where(p){text-wrap:pretty;max-inline-size:var(--size-content-3)}:where(dt,summary){font-weight:var(--font-weight-7)}:where(dt:not(:first-of-type)){margin-block-start:var(--size-5)}:where(small){font-size:max(.5em,var(--font-size-0));max-inline-size:var(--size-content-1)}:where(hr){background-color:var(--surface-3);height:var(--border-size-2);margin-block:var(--size-fluid-5)}:where(figure){display:grid;gap:var(--size-2);place-items:center}:where(figure)>:where(figcaption){text-wrap:balance;font-size:var(--font-size-1)}:where(blockquote,:not(blockquote)>cite){border-inline-start-width:var(--border-size-3)}:where(blockquote){display:grid;gap:var(--size-3);max-inline-size:var(--size-content-2);padding-block:var(--size-3);padding-inline:var(--size-4)}:where(:not(blockquote)>cite){padding-inline-start:var(--size-2)}:where(summary){background:var(--surface-3);border-radius:var(--radius-2);margin:calc(var(--size-2)*-1) calc(var(--size-3)*-1);padding:var(--size-2) var(--size-3)}:where(details){background:var(--surface-2);border-radius:var(--radius-2);padding-block:var(--size-2);padding-inline:var(--size-3)}:where(details[open]>summary){border-end-end-radius:0;border-end-start-radius:0;margin-bottom:var(--size-2)}:where(fieldset){border:var(--border-size-1) solid var(--surface-4);border-radius:var(--radius-2)}:where(del){background:var(--red-9);color:var(--red-2)}:where(ins){background:var(--green-9);color:var(--green-1)}:where(abbr){text-decoration-color:var(--blue-5)}:where(dialog){background-color:var(--surface-1);border-radius:var(--radius-3);box-shadow:var(--shadow-6);color:inherit}:where(dialog)::backdrop{backdrop-filter:blur(25px)}:where(html[\:has\(dialog\[open\]\)]){overflow:hidden}:where(html:has(dialog[open])){overflow:hidden}:where(menu){display:flex;gap:var(--size-3);padding-inline-start:0}:where(sup){font-size:.5em}:where(table){--nice-inner-radius:calc(var(--radius-3) - 2px);background:var(--surface-2);border:1px solid var(--surface-2);border-radius:var(--radius-3);width:fit-content}:where(table[\:not-has\(tfoot\)] tr:last-child td:first-child){border-end-start-radius:var(--nice-inner-radius)}:where(table:not(:has(tfoot)) tr:last-child td:first-child){border-end-start-radius:var(--nice-inner-radius)}:where(table[\:not-has\(tfoot\)] tr:last-child td:last-child){border-end-end-radius:var(--nice-inner-radius)}:where(table:not(:has(tfoot)) tr:last-child td:last-child){border-end-end-radius:var(--nice-inner-radius)}:where(table thead tr:first-child th:first-child){border-start-start-radius:var(--nice-inner-radius)}:where(table thead tr:first-child th:last-child){border-start-end-radius:var(--nice-inner-radius)}:where(tfoot tr:last-child :is(th,td):first-of-type){border-end-start-radius:var(--nice-inner-radius)}:where(tfoot tr:last-child :is(th,td):last-of-type){border-end-end-radius:var(--nice-inner-radius)}:where(th){background-color:var(--surface-2);color:var(--text-1)}:where(table :is(a,button,[contenteditable]):is(:focus-visible)){outline-offset:-2px}:where(td){text-wrap:pretty;background:var(--surface-1);max-inline-size:var(--size-content-2)}:where(td,th){padding:var(--size-2);text-align:left}:where(:is(td,th):not([align])){text-align:center}:where(thead){border-collapse:collapse}:where(table tr:hover td),:where(tbody tr:nth-child(2n):hover td){background-color:var(--gray-10)}@media (prefers-color-scheme: light){:where(table tr:hover td),:where(tbody tr:nth-child(2n):hover td){background-color:#fff}}:where(table>caption){margin:var(--size-3)}:where(tfoot button){padding-block:var(--size-1);padding-inline:var(--size-3)}@media (prefers-color-scheme: dark){:where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:#171a1c}:where(dialog){background-color:var(--surface-2)}::placeholder{color:var(--gray-6)}}:where(html){--font-system-ui:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;--font-transitional:Charter,Bitstream Charter,Sitka Text,Cambria,serif;--font-old-style:Iowan Old Style,Palatino Linotype,URW Palladio L,P052,serif;--font-humanist:Seravek,Gill Sans Nova,Ubuntu,Calibri,DejaVu Sans,source-sans-pro,sans-serif;--font-geometric-humanist:Avenir,Montserrat,Corbel,URW Gothic,source-sans-pro,sans-serif;--font-classical-humanist:Optima,Candara,Noto Sans,source-sans-pro,sans-serif;--font-neo-grotesque:Inter,Roboto,Helvetica Neue,Arial Nova,Nimbus Sans,Arial,sans-serif;--font-monospace-slab-serif:Nimbus Mono PS,Courier New,monospace;--font-monospace-code:Dank Mono,Operator Mono,Inconsolata,Fira Mono,ui-monospace,SF Mono,Monaco,Droid Sans Mono,Source Code Pro,Cascadia Code,Menlo,Consolas,DejaVu Sans Mono,monospace;--font-industrial:Bahnschrift,DIN Alternate,Franklin Gothic Medium,Nimbus Sans Narrow,sans-serif-condensed,sans-serif;--font-rounded-sans:ui-rounded,Hiragino Maru Gothic ProN,Quicksand,Comfortaa,Manjari,Arial Rounded MT,Arial Rounded MT Bold,Calibri,source-sans-pro,sans-serif;--font-slab-serif:Rockwell,Rockwell Nova,Roboto Slab,DejaVu Serif,Sitka Small,serif;--font-antique:Superclarendon,Bookman Old Style,URW Bookman,URW Bookman L,Georgia Pro,Georgia,serif;--font-didone:Didot,Bodoni MT,Noto Serif Display,URW Palladio L,P052,Sylfaen,serif;--font-handwritten:Segoe Print,Bradley Hand,Chilanka,TSCu_Comic,casual,cursive;--font-sans:var(--font-system-ui);--font-serif:ui-serif,serif;--font-mono:var(--font-monospace-code);--font-weight-1:100;--font-weight-2:200;--font-weight-3:300;--font-weight-4:400;--font-weight-5:500;--font-weight-6:600;--font-weight-7:700;--font-weight-8:800;--font-weight-9:900;--font-lineheight-00:.95;--font-lineheight-0:1.1;--font-lineheight-1:1.25;--font-lineheight-2:1.375;--font-lineheight-3:1.5;--font-lineheight-4:1.75;--font-lineheight-5:2;--font-letterspacing-0:-.05em;--font-letterspacing-1:.025em;--font-letterspacing-2:.050em;--font-letterspacing-3:.075em;--font-letterspacing-4:.150em;--font-letterspacing-5:.500em;--font-letterspacing-6:.750em;--font-letterspacing-7:1em;--font-size-00:.5rem;--font-size-0:.75rem;--font-size-1:1rem;--font-size-2:1.1rem;--font-size-3:1.25rem;--font-size-4:1.5rem;--font-size-5:2rem;--font-size-6:2.5rem;--font-size-7:3rem;--font-size-8:3.5rem;--font-size-fluid-0:clamp(.75rem,2vw,1rem);--font-size-fluid-1:clamp(1rem,4vw,1.5rem);--font-size-fluid-2:clamp(1.5rem,6vw,2.5rem);--font-size-fluid-3:clamp(2rem,9vw,3.5rem);--size-000:-.5rem;--size-00:-.25rem;--size-1:.25rem;--size-2:.5rem;--size-3:1rem;--size-4:1.25rem;--size-5:1.5rem;--size-6:1.75rem;--size-7:2rem;--size-8:3rem;--size-9:4rem;--size-10:5rem;--size-11:7.5rem;--size-12:10rem;--size-13:15rem;--size-14:20rem;--size-15:30rem;--size-px-000:-8px;--size-px-00:-4px;--size-px-1:4px;--size-px-2:8px;--size-px-3:16px;--size-px-4:20px;--size-px-5:24px;--size-px-6:28px;--size-px-7:32px;--size-px-8:48px;--size-px-9:64px;--size-px-10:80px;--size-px-11:120px;--size-px-12:160px;--size-px-13:240px;--size-px-14:320px;--size-px-15:480px;--size-fluid-1:clamp(.5rem,1vw,1rem);--size-fluid-2:clamp(1rem,2vw,1.5rem);--size-fluid-3:clamp(1.5rem,3vw,2rem);--size-fluid-4:clamp(2rem,4vw,3rem);--size-fluid-5:clamp(4rem,5vw,5rem);--size-fluid-6:clamp(5rem,7vw,7.5rem);--size-fluid-7:clamp(7.5rem,10vw,10rem);--size-fluid-8:clamp(10rem,20vw,15rem);--size-fluid-9:clamp(15rem,30vw,20rem);--size-fluid-10:clamp(20rem,40vw,30rem);--size-content-1:20ch;--size-content-2:45ch;--size-content-3:60ch;--size-header-1:20ch;--size-header-2:25ch;--size-header-3:35ch;--size-xxs:240px;--size-xs:360px;--size-sm:480px;--size-md:768px;--size-lg:1024px;--size-xl:1440px;--size-xxl:1920px;--size-relative-000:-.5ch;--size-relative-00:-.25ch;--size-relative-1:.25ch;--size-relative-2:.5ch;--size-relative-3:1ch;--size-relative-4:1.25ch;--size-relative-5:1.5ch;--size-relative-6:1.75ch;--size-relative-7:2ch;--size-relative-8:3ch;--size-relative-9:4ch;--size-relative-10:5ch;--size-relative-11:7.5ch;--size-relative-12:10ch;--size-relative-13:15ch;--size-relative-14:20ch;--size-relative-15:30ch;--ease-1:cubic-bezier(.25,0,.5,1);--ease-2:cubic-bezier(.25,0,.4,1);--ease-3:cubic-bezier(.25,0,.3,1);--ease-4:cubic-bezier(.25,0,.2,1);--ease-5:cubic-bezier(.25,0,.1,1);--ease-in-1:cubic-bezier(.25,0,1,1);--ease-in-2:cubic-bezier(.50,0,1,1);--ease-in-3:cubic-bezier(.70,0,1,1);--ease-in-4:cubic-bezier(.90,0,1,1);--ease-in-5:cubic-bezier(1,0,1,1);--ease-out-1:cubic-bezier(0,0,.75,1);--ease-out-2:cubic-bezier(0,0,.50,1);--ease-out-3:cubic-bezier(0,0,.3,1);--ease-out-4:cubic-bezier(0,0,.1,1);--ease-out-5:cubic-bezier(0,0,0,1);--ease-in-out-1:cubic-bezier(.1,0,.9,1);--ease-in-out-2:cubic-bezier(.3,0,.7,1);--ease-in-out-3:cubic-bezier(.5,0,.5,1);--ease-in-out-4:cubic-bezier(.7,0,.3,1);--ease-in-out-5:cubic-bezier(.9,0,.1,1);--ease-elastic-out-1:cubic-bezier(.5,.75,.75,1.25);--ease-elastic-out-2:cubic-bezier(.5,1,.75,1.25);--ease-elastic-out-3:cubic-bezier(.5,1.25,.75,1.25);--ease-elastic-out-4:cubic-bezier(.5,1.5,.75,1.25);--ease-elastic-out-5:cubic-bezier(.5,1.75,.75,1.25);--ease-elastic-in-1:cubic-bezier(.5,-0.25,.75,1);--ease-elastic-in-2:cubic-bezier(.5,-0.50,.75,1);--ease-elastic-in-3:cubic-bezier(.5,-0.75,.75,1);--ease-elastic-in-4:cubic-bezier(.5,-1.00,.75,1);--ease-elastic-in-5:cubic-bezier(.5,-1.25,.75,1);--ease-elastic-in-out-1:cubic-bezier(.5,-.1,.1,1.5);--ease-elastic-in-out-2:cubic-bezier(.5,-.3,.1,1.5);--ease-elastic-in-out-3:cubic-bezier(.5,-.5,.1,1.5);--ease-elastic-in-out-4:cubic-bezier(.5,-.7,.1,1.5);--ease-elastic-in-out-5:cubic-bezier(.5,-.9,.1,1.5);--ease-step-1:steps(2);--ease-step-2:steps(3);--ease-step-3:steps(4);--ease-step-4:steps(7);--ease-step-5:steps(10);--ease-elastic-1:var(--ease-elastic-out-1);--ease-elastic-2:var(--ease-elastic-out-2);--ease-elastic-3:var(--ease-elastic-out-3);--ease-elastic-4:var(--ease-elastic-out-4);--ease-elastic-5:var(--ease-elastic-out-5);--ease-squish-1:var(--ease-elastic-in-out-1);--ease-squish-2:var(--ease-elastic-in-out-2);--ease-squish-3:var(--ease-elastic-in-out-3);--ease-squish-4:var(--ease-elastic-in-out-4);--ease-squish-5:var(--ease-elastic-in-out-5);--ease-spring-1:linear(0,0.006,0.025 2.8%,0.101 6.1%,0.539 18.9%,0.721 25.3%,0.849 31.5%,0.937 38.1%,0.968 41.8%,0.991 45.7%,1.006 50.1%,1.015 55%,1.017 63.9%,1.001);--ease-spring-2:linear(0,0.007,0.029 2.2%,0.118 4.7%,0.625 14.4%,0.826 19%,0.902,0.962,1.008 26.1%,1.041 28.7%,1.064 32.1%,1.07 36%,1.061 40.5%,1.015 53.4%,0.999 61.6%,0.995 71.2%,1);--ease-spring-3:linear(0,0.009,0.035 2.1%,0.141 4.4%,0.723 12.9%,0.938 16.7%,1.017,1.077,1.121,1.149 24.3%,1.159,1.163,1.161,1.154 29.9%,1.129 32.8%,1.051 39.6%,1.017 43.1%,0.991,0.977 51%,0.974 53.8%,0.975 57.1%,0.997 69.8%,1.003 76.9%,1);--ease-spring-4:linear(0,0.009,0.037 1.7%,0.153 3.6%,0.776 10.3%,1.001,1.142 16%,1.185,1.209 19%,1.215 19.9% 20.8%,1.199,1.165 25%,1.056 30.3%,1.008 33%,0.973,0.955 39.2%,0.953 41.1%,0.957 43.3%,0.998 53.3%,1.009 59.1% 63.7%,0.998 78.9%,1);--ease-spring-5:linear(0,0.01,0.04 1.6%,0.161 3.3%,0.816 9.4%,1.046,1.189 14.4%,1.231,1.254 17%,1.259,1.257 18.6%,1.236,1.194 22.3%,1.057 27%,0.999 29.4%,0.955 32.1%,0.942,0.935 34.9%,0.933,0.939 38.4%,1 47.3%,1.011,1.017 52.6%,1.016 56.4%,1 65.2%,0.996 70.2%,1.001 87.2%,1);--ease-bounce-1:linear(0,0.004,0.016,0.035,0.063,0.098,0.141,0.191,0.25,0.316,0.391 36.8%,0.563,0.766,1 58.8%,0.946,0.908 69.1%,0.895,0.885,0.879,0.878,0.879,0.885,0.895,0.908 89.7%,0.946,1);--ease-bounce-2:linear(0,0.004,0.016,0.035,0.063,0.098,0.141 15.1%,0.25,0.391,0.562,0.765,1,0.892 45.2%,0.849,0.815,0.788,0.769,0.757,0.753,0.757,0.769,0.788,0.815,0.85,0.892 75.2%,1 80.2%,0.973,0.954,0.943,0.939,0.943,0.954,0.973,1);--ease-bounce-3:linear(0,0.004,0.016,0.035,0.062,0.098,0.141 11.4%,0.25,0.39,0.562,0.764,1 30.3%,0.847 34.8%,0.787,0.737,0.699,0.672,0.655,0.65,0.656,0.672,0.699,0.738,0.787,0.847 61.7%,1 66.2%,0.946,0.908,0.885 74.2%,0.879,0.878,0.879,0.885 79.5%,0.908,0.946,1 87.4%,0.981,0.968,0.96,0.957,0.96,0.968,0.981,1);--ease-bounce-4:linear(0,0.004,0.016 3%,0.062,0.141,0.25,0.391,0.562 18.2%,1 24.3%,0.81,0.676 32.3%,0.629,0.595,0.575,0.568,0.575,0.595,0.629,0.676 48.2%,0.811,1 56.2%,0.918,0.86,0.825,0.814,0.825,0.86,0.918,1 77.2%,0.94 80.6%,0.925,0.92,0.925,0.94 87.5%,1 90.9%,0.974,0.965,0.974,1);--ease-bounce-5:linear(0,0.004,0.016 2.5%,0.063,0.141,0.25 10.1%,0.562,1 20.2%,0.783,0.627,0.534 30.9%,0.511,0.503,0.511,0.534 38%,0.627,0.782,1 48.7%,0.892,0.815,0.769 56.3%,0.757,0.753,0.757,0.769 61.3%,0.815,0.892,1 68.8%,0.908 72.4%,0.885,0.878,0.885,0.908 79.4%,1 83%,0.954 85.5%,0.943,0.939,0.943,0.954 90.5%,1 93%,0.977,0.97,0.977,1);--layer-1:1;--layer-2:2;--layer-3:3;--layer-4:4;--layer-5:5;--layer-important:2147483647;--shadow-color:220 3% 15%;--shadow-strength:1%;--inner-shadow-highlight:inset 0 -.5px 0 0 #fff,inset 0 .5px 0 0 rgba(0,0,0,.067);--shadow-1:0 1px 2px -1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--shadow-2:0 3px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 14px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%));--shadow-3:0 -1px 3px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 2px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 5px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 4px 12px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 12px 15px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-4:0 -2px 5px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 2px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 9px 9px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 16px 16px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%));--shadow-5:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 10px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 20px 20px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 40px 40px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-6:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 3px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 12px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 22px 18px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 41px 33px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%)),0 100px 80px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--inner-shadow-0:inset 0 0 0 1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--inner-shadow-1:inset 0 1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-2:inset 0 1px 4px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-3:inset 0 2px 8px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-4:inset 0 2px 14px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--ratio-square:1;--ratio-landscape:4/3;--ratio-portrait:3/4;--ratio-widescreen:16/9;--ratio-ultrawide:18/5;--ratio-golden:1.6180/1;--gray-0:#f8f9fa;--gray-1:#f1f3f5;--gray-2:#e9ecef;--gray-3:#dee2e6;--gray-4:#ced4da;--gray-5:#adb5bd;--gray-6:#868e96;--gray-7:#495057;--gray-8:#343a40;--gray-9:#212529;--gray-10:#16191d;--gray-11:#0d0f12;--gray-12:#030507;--stone-0:#f8fafb;--stone-1:#f2f4f6;--stone-2:#ebedef;--stone-3:#e0e4e5;--stone-4:#d1d6d8;--stone-5:#b1b6b9;--stone-6:#979b9d;--stone-7:#7e8282;--stone-8:#666968;--stone-9:#50514f;--stone-10:#3a3a37;--stone-11:#252521;--stone-12:#121210;--red-0:#fff5f5;--red-1:#ffe3e3;--red-2:#ffc9c9;--red-3:#ffa8a8;--red-4:#ff8787;--red-5:#ff6b6b;--red-6:#fa5252;--red-7:#f03e3e;--red-8:#e03131;--red-9:#c92a2a;--red-10:#b02525;--red-11:#962020;--red-12:#7d1a1a;--pink-0:#fff0f6;--pink-1:#ffdeeb;--pink-2:#fcc2d7;--pink-3:#faa2c1;--pink-4:#f783ac;--pink-5:#f06595;--pink-6:#e64980;--pink-7:#d6336c;--pink-8:#c2255c;--pink-9:#a61e4d;--pink-10:#8c1941;--pink-11:#731536;--pink-12:#59102a;--purple-0:#f8f0fc;--purple-1:#f3d9fa;--purple-2:#eebefa;--purple-3:#e599f7;--purple-4:#da77f2;--purple-5:#cc5de8;--purple-6:#be4bdb;--purple-7:#ae3ec9;--purple-8:#9c36b5;--purple-9:#862e9c;--purple-10:#702682;--purple-11:#5a1e69;--purple-12:#44174f;--violet-0:#f3f0ff;--violet-1:#e5dbff;--violet-2:#d0bfff;--violet-3:#b197fc;--violet-4:#9775fa;--violet-5:#845ef7;--violet-6:#7950f2;--violet-7:#7048e8;--violet-8:#6741d9;--violet-9:#5f3dc4;--violet-10:#5235ab;--violet-11:#462d91;--violet-12:#3a2578;--indigo-0:#edf2ff;--indigo-1:#dbe4ff;--indigo-2:#bac8ff;--indigo-3:#91a7ff;--indigo-4:#748ffc;--indigo-5:#5c7cfa;--indigo-6:#4c6ef5;--indigo-7:#4263eb;--indigo-8:#3b5bdb;--indigo-9:#364fc7;--indigo-10:#2f44ad;--indigo-11:#283a94;--indigo-12:#21307a;--blue-0:#e7f5ff;--blue-1:#d0ebff;--blue-2:#a5d8ff;--blue-3:#74c0fc;--blue-4:#4dabf7;--blue-5:#339af0;--blue-6:#228be6;--blue-7:#1c7ed6;--blue-8:#1971c2;--blue-9:#1864ab;--blue-10:#145591;--blue-11:#114678;--blue-12:#0d375e;--cyan-0:#e3fafc;--cyan-1:#c5f6fa;--cyan-2:#99e9f2;--cyan-3:#66d9e8;--cyan-4:#3bc9db;--cyan-5:#22b8cf;--cyan-6:#15aabf;--cyan-7:#1098ad;--cyan-8:#0c8599;--cyan-9:#0b7285;--cyan-10:#095c6b;--cyan-11:#074652;--cyan-12:#053038;--teal-0:#e6fcf5;--teal-1:#c3fae8;--teal-2:#96f2d7;--teal-3:#63e6be;--teal-4:#38d9a9;--teal-5:#20c997;--teal-6:#12b886;--teal-7:#0ca678;--teal-8:#099268;--teal-9:#087f5b;--teal-10:#066649;--teal-11:#054d37;--teal-12:#033325;--green-0:#ebfbee;--green-1:#d3f9d8;--green-2:#b2f2bb;--green-3:#8ce99a;--green-4:#69db7c;--green-5:#51cf66;--green-6:#40c057;--green-7:#37b24d;--green-8:#2f9e44;--green-9:#2b8a3e;--green-10:#237032;--green-11:#1b5727;--green-12:#133d1b;--lime-0:#f4fce3;--lime-1:#e9fac8;--lime-2:#d8f5a2;--lime-3:#c0eb75;--lime-4:#a9e34b;--lime-5:#94d82d;--lime-6:#82c91e;--lime-7:#74b816;--lime-8:#66a80f;--lime-9:#5c940d;--lime-10:#4c7a0b;--lime-11:#3c6109;--lime-12:#2c4706;--yellow-0:#fff9db;--yellow-1:#fff3bf;--yellow-2:#ffec99;--yellow-3:#ffe066;--yellow-4:#ffd43b;--yellow-5:#fcc419;--yellow-6:#fab005;--yellow-7:#f59f00;--yellow-8:#f08c00;--yellow-9:#e67700;--yellow-10:#b35c00;--yellow-11:#804200;--yellow-12:#663500;--orange-0:#fff4e6;--orange-1:#ffe8cc;--orange-2:#ffd8a8;--orange-3:#ffc078;--orange-4:#ffa94d;--orange-5:#ff922b;--orange-6:#fd7e14;--orange-7:#f76707;--orange-8:#e8590c;--orange-9:#d9480f;--orange-10:#bf400d;--orange-11:#99330b;--orange-12:#802b09;--choco-0:#fff8dc;--choco-1:#fce1bc;--choco-2:#f7ca9e;--choco-3:#f1b280;--choco-4:#e99b62;--choco-5:#df8545;--choco-6:#d46e25;--choco-7:#bd5f1b;--choco-8:#a45117;--choco-9:#8a4513;--choco-10:#703a13;--choco-11:#572f12;--choco-12:#3d210d;--brown-0:#faf4eb;--brown-1:#ede0d1;--brown-2:#e0cab7;--brown-3:#d3b79e;--brown-4:#c5a285;--brown-5:#b78f6d;--brown-6:#a87c56;--brown-7:#956b47;--brown-8:#825b3a;--brown-9:#6f4b2d;--brown-10:#5e3a21;--brown-11:#4e2b15;--brown-12:#422412;--sand-0:#f8fafb;--sand-1:#e6e4dc;--sand-2:#d5cfbd;--sand-3:#c2b9a0;--sand-4:#aea58c;--sand-5:#9a9178;--sand-6:#867c65;--sand-7:#736a53;--sand-8:#5f5746;--sand-9:#4b4639;--sand-10:#38352d;--sand-11:#252521;--sand-12:#121210;--camo-0:#f9fbe7;--camo-1:#e8ed9c;--camo-2:#d2df4e;--camo-3:#c2ce34;--camo-4:#b5bb2e;--camo-5:#a7a827;--camo-6:#999621;--camo-7:#8c851c;--camo-8:#7e7416;--camo-9:#6d6414;--camo-10:#5d5411;--camo-11:#4d460e;--camo-12:#36300a;--jungle-0:#ecfeb0;--jungle-1:#def39a;--jungle-2:#d0e884;--jungle-3:#c2dd6e;--jungle-4:#b5d15b;--jungle-5:#a8c648;--jungle-6:#9bbb36;--jungle-7:#8fb024;--jungle-8:#84a513;--jungle-9:#7a9908;--jungle-10:#658006;--jungle-11:#516605;--jungle-12:#3d4d04;--gradient-1:linear-gradient(to bottom right,#1f005c,#5b0060,#870160,#ac255e,#ca485c,#e16b5c,#f39060,#ffb56b);--gradient-2:linear-gradient(to bottom right,#48005c,#8300e2,#a269ff);--gradient-3:radial-gradient(circle at top right,#0ff,rgba(0,255,255,0)),radial-gradient(circle at bottom left,#ff1492,rgba(255,20,146,0));--gradient-4:linear-gradient(to bottom right,#00f5a0,#00d9f5);--gradient-5:conic-gradient(from -270deg at 75% 110%,#f0f,#fffaf0);--gradient-6:conic-gradient(from -90deg at top left,#000,#fff);--gradient-7:linear-gradient(to bottom right,#72c6ef,#004e8f);--gradient-8:conic-gradient(from 90deg at 50% 0%,#111,50%,#222,#111);--gradient-9:conic-gradient(from .5turn at bottom center,#add8e6,#fff);--gradient-10:conic-gradient(from 90deg at 40% -25%,gold,#f79d03,#ee6907,#e6390a,#de0d0d,#d61039,#cf1261,#c71585,#cf1261,#d61039,#de0d0d,#ee6907,#f79d03,gold,gold,gold);--gradient-11:conic-gradient(at bottom left,#ff1493,cyan);--gradient-12:conic-gradient(from 90deg at 25% -10%,#ff4500,#d3f340,#7bee85,#afeeee,#7bee85);--gradient-13:radial-gradient(circle at 50% 200%,#000142,#3b0083,#b300c3,#ff059f,#ff4661,#ffad86,#fff3c7);--gradient-14:conic-gradient(at top right,lime,cyan);--gradient-15:linear-gradient(to bottom right,#c7d2fe,#fecaca,#fef3c7);--gradient-16:radial-gradient(circle at 50% -250%,#374151,#111827,#000);--gradient-17:conic-gradient(from -90deg at 50% -25%,blue,#8a2be2);--gradient-18:linear-gradient(0deg,rgba(255,0,0,.8),rgba(255,0,0,0) 75%),linear-gradient(60deg,rgba(255,255,0,.8),rgba(255,255,0,0) 75%),linear-gradient(120deg,rgba(0,255,0,.8),rgba(0,255,0,0) 75%),linear-gradient(180deg,rgba(0,255,255,.8),rgba(0,255,255,0) 75%),linear-gradient(240deg,rgba(0,0,255,.8),rgba(0,0,255,0) 75%),linear-gradient(300deg,rgba(255,0,255,.8),rgba(255,0,255,0) 75%);--gradient-19:linear-gradient(to bottom right,#ffe259,#ffa751);--gradient-20:conic-gradient(from -135deg at -10% center,orange,#ff7715,#ff522a,#ff3f47,#ff5482,#ff69b4);--gradient-21:conic-gradient(from -90deg at 25% 115%,red,#f06,#f0c,#c0f,#60f,#00f,#00f,#00f,#00f);--gradient-22:linear-gradient(to bottom right,#acb6e5,#86fde8);--gradient-23:linear-gradient(to bottom right,#536976,#292e49);--gradient-24:conic-gradient(from .5turn at 0% 0%,#00c476,10%,#82b0ff,90%,#00c476);--gradient-25:conic-gradient(at 125% 50%,#b78cf7,#ff7c94,#ffcf0d,#ff7c94,#b78cf7);--gradient-26:linear-gradient(to bottom right,#9796f0,#fbc7d4);--gradient-27:conic-gradient(from .5turn at bottom left,#ff1493,#639);--gradient-28:conic-gradient(from -90deg at 50% 105%,#fff,orchid);--gradient-29:radial-gradient(circle at top right,#bfb3ff,rgba(191,179,255,0)),radial-gradient(circle at bottom left,#86acf9,rgba(134,172,249,0));--gradient-30:radial-gradient(circle at top right,#00ff80,rgba(0,255,128,0)),radial-gradient(circle at bottom left,#adffd6,rgba(173,255,214,0));--noise-1:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.005' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-2:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.05' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-3:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.25' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-4:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-5:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-filter-1:contrast(300%) brightness(100%);--noise-filter-2:contrast(200%) brightness(150%);--noise-filter-3:contrast(200%) brightness(250%);--noise-filter-4:contrast(200%) brightness(500%);--noise-filter-5:contrast(200%) brightness(1000%);--animation-fade-in:fade-in .5s var(--ease-3);--animation-fade-in-bloom:fade-in-bloom 2s var(--ease-3);--animation-fade-out:fade-out .5s var(--ease-3);--animation-fade-out-bloom:fade-out-bloom 2s var(--ease-3);--animation-scale-up:scale-up .5s var(--ease-3);--animation-scale-down:scale-down .5s var(--ease-3);--animation-slide-out-up:slide-out-up .5s var(--ease-3);--animation-slide-out-down:slide-out-down .5s var(--ease-3);--animation-slide-out-right:slide-out-right .5s var(--ease-3);--animation-slide-out-left:slide-out-left .5s var(--ease-3);--animation-slide-in-up:slide-in-up .5s var(--ease-3);--animation-slide-in-down:slide-in-down .5s var(--ease-3);--animation-slide-in-right:slide-in-right .5s var(--ease-3);--animation-slide-in-left:slide-in-left .5s var(--ease-3);--animation-shake-x:shake-x .75s var(--ease-out-5);--animation-shake-y:shake-y .75s var(--ease-out-5);--animation-shake-z:shake-z 1s var(--ease-in-out-3);--animation-spin:spin 2s linear infinite;--animation-ping:ping 5s var(--ease-out-3) infinite;--animation-blink:blink 1s var(--ease-out-3) infinite;--animation-float:float 3s var(--ease-in-out-3) infinite;--animation-bounce:bounce 2s var(--ease-squish-2) infinite;--animation-pulse:pulse 2s var(--ease-out-3) infinite;--border-size-1:1px;--border-size-2:2px;--border-size-3:5px;--border-size-4:10px;--border-size-5:25px;--radius-1:2px;--radius-2:5px;--radius-3:1rem;--radius-4:2rem;--radius-5:4rem;--radius-6:8rem;--radius-drawn-1:255px 15px 225px 15px/15px 225px 15px 255px;--radius-drawn-2:125px 10px 20px 185px/25px 205px 205px 25px;--radius-drawn-3:15px 255px 15px 225px/225px 15px 255px 15px;--radius-drawn-4:15px 25px 155px 25px/225px 150px 25px 115px;--radius-drawn-5:250px 25px 15px 20px/15px 80px 105px 115px;--radius-drawn-6:28px 100px 20px 15px/150px 30px 205px 225px;--radius-round:1e5px;--radius-blob-1:30% 70% 70% 30%/53% 30% 70% 47%;--radius-blob-2:53% 47% 34% 66%/63% 46% 54% 37%;--radius-blob-3:37% 63% 56% 44%/49% 56% 44% 51%;--radius-blob-4:63% 37% 37% 63%/43% 37% 63% 57%;--radius-blob-5:49% 51% 48% 52%/57% 44% 56% 43%;--radius-conditional-1:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-1));--radius-conditional-2:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-2));--radius-conditional-3:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-3));--radius-conditional-4:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-4));--radius-conditional-5:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-5));--radius-conditional-6:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-6))}@media (prefers-color-scheme: dark){:where(html){--shadow-color:220 40% 2%;--shadow-strength:25%;--inner-shadow-highlight:inset 0 -.5px 0 0 hsla(0,0%,100%,.067),inset 0 .5px 0 0 rgba(0,0,0,.467)}}@keyframes fade-in{to{opacity:1}}@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}@keyframes scale-up{to{transform:scale(1.25)}}@keyframes scale-down{to{transform:scale(.75)}}@keyframes slide-out-up{to{transform:translateY(-100%)}}@keyframes slide-out-down{to{transform:translateY(100%)}}@keyframes slide-out-right{to{transform:translateX(100%)}}@keyframes slide-out-left{to{transform:translateX(-100%)}}@keyframes slide-in-up{0%{transform:translateY(100%)}}@keyframes slide-in-down{0%{transform:translateY(-100%)}}@keyframes slide-in-right{0%{transform:translateX(-100%)}}@keyframes slide-in-left{0%{transform:translateX(100%)}}@keyframes shake-x{0%, to{transform:translateX(0)}20%{transform:translateX(-5%)}40%{transform:translateX(5%)}60%{transform:translateX(-5%)}80%{transform:translateX(5%)}}@keyframes shake-y{0%, to{transform:translateY(0)}20%{transform:translateY(-5%)}40%{transform:translateY(5%)}60%{transform:translateY(-5%)}80%{transform:translateY(5%)}}@keyframes shake-z{0%, to{transform:rotate(0deg)}20%{transform:rotate(-2deg)}40%{transform:rotate(2deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(2deg)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{90%, to{opacity:0;transform:scale(2)}}@keyframes blink{0%, to{opacity:1}50%{opacity:.5}}@keyframes float{50%{transform:translateY(-25%)}}@keyframes bounce{25%{transform:translateY(-20%)}40%{transform:translateY(-3%)}0%, 60%, to{transform:translateY(0)}}@keyframes pulse{50%{transform:scale(.9)}}@media (prefers-color-scheme: dark){@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}}@media (prefers-color-scheme: dark){@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}}a:visited{color:var(--link)}li.active{color:var(--text-2);text-shadow:0 0 10px var(--camo-5),0 0 25px var(--camo-7)}code{background:none}pre{padding:1em;color:var(--text-2)}div.doc-content>h1,h2,h3,h4,h5{font-size:var(--font-size-5)}img.logo{max-width:72px}html,body{box-sizing:border-box;height:100%}.content{display:flex;justify-content:center;align-items:center}body>footer{margin:0px;padding:0px}.wrapper{min-height:100%;display:flex;flex-direction:column;box-sizing:border-box}.page-body{flex-grow:1}.page-footer{flex-grow:0;flex-shrink:0}footer{text-align:center;font-size:.8em}article{padding:.5em}nav{display:flex;justify-content:space-between;align-items:center;background-color:var(--surface-1);padding:10px;color:var(--text-1);box-shadow:var(--shadow-3)}nav.subnav{background-color:var(--surface-2);color:var(--text-1);box-shadow:var(--shadow-5)}nav .logo{font-size:20px;font-weight:bold}nav ul{list-style-type:none;margin:0;padding:0;display:flex}nav ul li{margin-left:20px}nav ul li a{color:var(--link);text-decoration:none}.documentation{margin:1em}@media (width > 768px){.documentation{display:flex}}.documentation .doc-content{max-width:100%}.documentation .side-panel{margin-right:3em;margin-bottom:1em;min-width:200px}.documentation .side-panel ul>li{list-style:none;font-weight:bold;font-size:1.2em}h1,h2,h3,h4,h5{max-inline-size:none;margin-top:.5em;margin-bottom:.5em}main.page-body{margin:2em}div.side-panel>ul{padding-left:0px}.diagram{min-width:200%}
1103\ No newline at end of file
1104 diff --git a/www/public/robots.txt b/www/public/robots.txt
1105deleted file mode 100644
1106index 8fe72ba..0000000
1107--- a/www/public/robots.txt
1108+++ /dev/null
1109 @@ -1,4 +0,0 @@
1110- User-agent: *
1111- Disallow:
1112- Allow: /
1113- Sitemap: https://ayllu-forge.org/sitemap.xml
1114 diff --git a/www/public/sitemap.xml b/www/public/sitemap.xml
1115deleted file mode 100644
1116index b0a8b91..0000000
1117--- a/www/public/sitemap.xml
1118+++ /dev/null
1119 @@ -1,39 +0,0 @@
1120- <?xml version="1.0" encoding="UTF-8"?>
1121- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
1122- <url>
1123- <loc>https://ayllu-forge.org/</loc>
1124- </url>
1125- <url>
1126- <loc>https://ayllu-forge.org/docs/</loc>
1127- </url>
1128- <url>
1129- <loc>https://ayllu-forge.org/docs/architecture/</loc>
1130- </url>
1131- <url>
1132- <loc>https://ayllu-forge.org/docs/builds/</loc>
1133- </url>
1134- <url>
1135- <loc>https://ayllu-forge.org/docs/configuration/</loc>
1136- </url>
1137- <url>
1138- <loc>https://ayllu-forge.org/docs/developers/</loc>
1139- </url>
1140- <url>
1141- <loc>https://ayllu-forge.org/docs/faq/</loc>
1142- </url>
1143- <url>
1144- <loc>https://ayllu-forge.org/docs/installation/</loc>
1145- </url>
1146- <url>
1147- <loc>https://ayllu-forge.org/docs/mail/</loc>
1148- </url>
1149- <url>
1150- <loc>https://ayllu-forge.org/docs/proxy/</loc>
1151- </url>
1152- <url>
1153- <loc>https://ayllu-forge.org/docs/sites/</loc>
1154- </url>
1155- <url>
1156- <loc>https://ayllu-forge.org/docs/themes/</loc>
1157- </url>
1158- </urlset>