Commit

Author:

Hash:

Timestamp:

+561 -1714 +/-38 browse

Kevin Schoon [me@kevinschoon.com]

7bffc2801df029d4fcdbf5666c0264a52ce66e66

Fri, 16 May 2025 12:46:59 +0000 (6 months ago)

drop the custom homepage and documentation of ayllu for now
drop the custom homepage and documentation of ayllu for now

All (limited) documentation has been moved to a top-level directory of markdown
at /docs for now. The static Ayllu site has also been removed but maybe will
be added again in the future.
1diff --git a/README.md b/README.md
2index 8d0ef70..3690504 100644
3--- a/README.md
4+++ b/README.md
5 @@ -75,7 +75,7 @@ A general development channel `#ayllu` is available on [libera](ircs://irc.liber
6
7 ## Installation
8
9- See the installation section in the [documentation](https://ayllu-forge.org/docs/installation)
10+ See the installation section in the [documentation](/docs/installation.md)
11
12 ## Compiling From Source
13
14 diff --git a/docs/README.md b/docs/README.md
15new file mode 100644
16index 0000000..e12d27a
17--- /dev/null
18+++ b/docs/README.md
19 @@ -0,0 +1,8 @@
20+ # Documentation
21+
22+ Welcome to the Ayllu documentation 📖, this is section serves as an
23+ authoritative reference on all things related to the Ayllu code forge!
24+
25+ **Beware** that Ayllu is currently under-documented and many things are
26+ changing. Documentation will be provided as time permits, contributions are
27+ gladly excepted ❤️.
28 diff --git a/docs/architecture.md b/docs/architecture.md
29new file mode 100644
30index 0000000..2ba3fd3
31--- /dev/null
32+++ b/docs/architecture.md
33 @@ -0,0 +1,3 @@
34+ # The Architecture of Ayllu
35+
36+ TODO
37 diff --git a/docs/builds.md b/docs/builds.md
38new file mode 100644
39index 0000000..03c789f
40--- /dev/null
41+++ b/docs/builds.md
42 @@ -0,0 +1,46 @@
43+ Ayllu contains a plugin called `ayllu-build` which is responsible for executing
44+ build manifests in a CI/CD environment. The design of the build system prioritizes
45+ the ability to run the entire workflow locally.
46+
47+ ### An Example Local Workflow
48+
49+ Build manifests are written in [Nickel](https://nickel-lang.org/).
50+
51+ ```sh
52+ mkdir -p my-test-repo/.ayllu/build
53+ cd my-test-repo && git init
54+ # create a simple workflow that prints "Hello" and "World"
55+ cat <<EOF > .ayllu/build/main.ncl
56+ {
57+ workflows = [
58+ {
59+ name = "Simple",
60+ steps = [
61+ {
62+ name = "Hello",
63+ input = "echo -n Hello"
64+ },
65+ {
66+ name = "World",
67+ input = "echo -n World"
68+ }
69+ ]
70+ }
71+ ]
72+ }
73+ EOF
74+ # validate the build plan and generate a DOT file to stdout
75+ ayllu_build plan
76+ >>> 2023-12-14T21:58:37.777493Z INFO ayllu_build:66: logger initialized
77+ >>> digraph {
78+ >>> 0 [ label = "Workflow: Simple" ]
79+ >>> 1 [ label = "Step: Hello" ]
80+ >>> 2 [ label = "Step: World" ]
81+ >>> 0 -> 1 [ label = "0" ]
82+ >>> 0 -> 2 [ label = "0" ]
83+ >>> }
84+ # if you have graphviz installed you can visualize this output:
85+ ayllu_build plan | dot -Tx11
86+ # finally you can execute the workflow locally
87+ ayllu_build evaluate
88+ ```
89 diff --git a/docs/configuration.md b/docs/configuration.md
90new file mode 100644
91index 0000000..c6cce19
92--- /dev/null
93+++ b/docs/configuration.md
94 @@ -0,0 +1,224 @@
95+ +++
96+ title = "Configuration"
97+ weight = 0
98+ insert_anchor_links = "header"
99+ +++
100+
101+ # Initial Configuration
102+
103+ After following the [installation](https://ayllu-forge.org/docs/installation)
104+ you need to setup your configuration file and initialize the database.
105+
106+ ## User Based Installation
107+
108+ ```sh
109+ mkdir ~/.config/ayllu
110+ ayllu config generate > ~/.config/ayllu/config.yaml
111+ # open up config.yaml in your favorite editor and configure at least one
112+ # collection
113+ vim ~/.config/ayllu/config.yaml
114+ # now verify the config is valid
115+ ayllu config display
116+ # initialize and migrate the database
117+ ayllu migrate
118+ # launch the web server
119+ ayllu serve
120+ ```
121+
122+ # Collections
123+
124+ Collections are simply a directory on your file system that contains zero or
125+ more Git repositories. They can be structured in whichever way is suitable for
126+ your personal workflow.
127+
128+
129+ ```toml
130+ # On my system I keep active projects in a directory called "projects"
131+ [[collections]]
132+ name = "projects"
133+ description = "active projects"
134+ path = "/home/kevin/repos/projects"
135+ # And another directory of archived projects that I call "the attic"
136+ [[collections]]
137+ name = "attic"
138+ description = "projects stowed away in the attic"
139+ path = "/home/kevin/repos/attic"
140+
141+ # it's also possible to create hidden collections that aren't showed in the
142+ # collections index page but will be rendered if you know the link to them.
143+ # If you want to restrict access completely you'll need to employ basic auth
144+ # or similiar in your webserver.
145+ [[collections]]
146+ name = "private"
147+ description = "my private code, no looking!"
148+ path = "/home/kevin/repos/private"
149+ ```
150+
151+ # Running Jobs
152+ Once Ayllu has been configured and the server is running you'll want to run
153+ jobs against your repositories. Jobs do things like compute authorship stats
154+ and determine code composition. Keep in mind that `jobs` are distinct from
155+ `builds`. Jobs perform internal actions that allow Ayllu to function while
156+ builds are for running codebase specific workflows.
157+
158+ Most jobs are run via [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
159+
160+ ```sh
161+ # ayllu's internal job server will be listening on a unix socket
162+ ss -xlp |grep ayllu
163+ u_str LISTEN 0 1024 /run/user/1000/ayllu.sock 305937 * 0 users:(("ayllu",pid=70917,fd=14))
164+ cd ~/repos/projects/ayllu
165+ # run against your repository
166+ # depending on the number of commits this can take a considerable amount of
167+ # time to run as it needs to perform computations against each commit.
168+ ayllu jobs run .
169+ ```
170+
171+ # Tree Sitter
172+
173+ Syntax highlighting in the web interface is implemented with [tree-sitter](https://tree-sitter.github.io/tree-sitter/).
174+ Instead of embedding and compiling potentially hundreds of individual shared
175+ modules for each language you can install languages you are interested in via
176+ your operating system's package manager. Unfortunately, not all parsers are
177+ consistently packaged and thus it is possible to override system defaults as
178+ described below.
179+
180+ ## Customizing Shared Module Paths
181+
182+ Normally tree-sitter parsers should have the following layout:
183+
184+ ```text
185+ # compiled shared modules
186+ /usr/lib/libtree-sitter-$language.so
187+ # supplemental query files
188+ /usr/share/tree-sitter/queries/$language/[highlights|injections|locals].scm
189+ ```
190+
191+ By default Ayllu will attempt to load parsers and query files from those directories.
192+
193+ ### Example Custom Configuration
194+
195+ <div class="info">
196+ NOTE: Refer to <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/config.example.toml>config.sample.toml</a> for the latest
197+ example configuration or <a href="https://ayllu-forge.org/ayllu/ayllu/blob/main/src/config.rs">config.rs</a>.
198+ </div>
199+
200+
201+ ```toml
202+ [tree-sitter]
203+ # specify the base path to search for libtree-sitter-$language.so
204+ base_path = "/usr/lib"
205+ # directory of syntax queries
206+ queries_path = "/usr/share/tree-sitter/queries"
207+ ```
208+
209+ ## Adding a Additional Queries
210+
211+ An additional path to look for queries can also be added:
212+
213+ ```toml
214+ [tree-sitter]
215+ queries_extras_path = "/etc/ayllu/queries"
216+ ```
217+
218+ ## Adding Additional Parsers
219+
220+ If you want to add a custom parser that's installed at a non-standard path you
221+ can do that too. This can be useful for parsers that aren't packaged on your
222+ system and also for custom programming languages.
223+
224+ ```toml
225+ [[tree-sitter.parsers]]
226+ name = "fuu-lang"
227+ shared_object = "/etc/ayllu/parsers/libtree-sitter-fuu.so"
228+ highlight_query = "/etc/ayllu/queries/fuu/highlights.scm"
229+ locals_query = "/etc/ayllu/queries/fuu/locals.scm"
230+ injections = "/etc/ayllu/queries/fuu/injections.scm"
231+ ```
232+
233+ # Language Detection & Syntax Highlighting
234+
235+ Ayllu determines which language is being rendered by file extension, file name,
236+ or an "alias" in the case of a markdown code block.
237+
238+ ## Language Mapping
239+
240+ Sometimes you want one language to be detected and presented as something
241+ different. For instance by default Ayllu will detect `hello.ml` as a Standard ML
242+ file, but you can override this to OCaml with a mapping.
243+
244+ ```toml
245+ [languages]
246+ [languages.mappings]
247+ "Standard ML" = "OCaml"
248+ ```
249+
250+ ## Custom Languages
251+
252+ If you're the author of a programming language and want Ayllu to detect it
253+ based on file extensions you can add an additional language in your config file.
254+ ```toml
255+ # append the following in your config.toml
256+ [[ languages.extras ]]
257+ name = "BazQux"
258+ extensions = [".baz", ".qux", ".bq"]
259+ # any file with this name will be detected as BazQux
260+ filename = [".bazscript"]
261+ # deep pink
262+ color = "#ff1493"
263+ ```
264+
265+ You can also use the languages section to modify existing languages, for instance
266+ if for some reason you didn't like the default colors associated with a particular
267+ programming language, you can adjust it here.
268+ ```toml
269+ # append the following in your config.toml
270+ [[ languages.extras ]]
271+ name = "go"
272+ # Go is pink!
273+ color = "#ff1493"
274+ ```
275+
276+ # Adding Custom Tree Sitter Highlights
277+
278+ You can override system installed tree-sitter
279+ [highlights](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#highlights)
280+ in the Ayllu configuration file. For example we can add two new highlight
281+ queries to the `diff` parser called `@addition` and `@removal`. With these
282+ enabled Ayllu will paint the relevant code sections with CSS classes
283+ `ts_addition` and `ts_removal` which you can style in theme configurations.
284+
285+ ```toml
286+ [tree-sitter.highlights]
287+ diff = """
288+ ; used to highlight diffs in the UI
289+ [(addition) (new_file)] @addition
290+ [(deletion) (old_file)] @removal
291+
292+ (commit) @constant
293+ (location) @attribute
294+ (command) @variable.builtin
295+ """
296+ ```
297+
298+ # Mirroring
299+
300+ Git mirrors will be automatically detected by looking at git configuration to
301+ determine if the repository has a `mirror = true` flag present in any of it's
302+ configured remotes. If any remote is flagged as a mirror then the repository
303+ will be considered a mirror. Mirror repositories will not be listed in RSS
304+ feeds, be subject to certain jobs types, or be available in the remote API.
305+
306+ ## Creating a Mirror
307+
308+ The simplest way to create a mirror is by cloning a repository with the
309+ `--mirror` flag. For example: `git clone https://ayllu-forge.org/ayllu/ayllu --mirror`
310+ will result in a git config such as:
311+
312+ ```
313+ [remote "origin"]
314+ url = https://ayllu-forge.org/ayllu/ayllu
315+ fetch = +refs/*:refs/*
316+ mirror = true
317+
318+ ```
319 diff --git a/docs/developers.md b/docs/developers.md
320new file mode 100644
321index 0000000..8eec62d
322--- /dev/null
323+++ b/docs/developers.md
324 @@ -0,0 +1,39 @@
325+ # Developing Components
326+
327+ Ayllu is split up into several distinct components, to work on one of them you
328+ typically want to start one of two feedback cycles: `lint->test->compile` or
329+ `compile->serve`. To start each one you can can run `scripts/test.sh $COMPONENT`
330+ or `scripts/watch.sh $COMPONENT` and the appropriate `cargo watch` command will
331+ be started for you.
332+
333+ # Testing the Entire CI Workflow
334+
335+ You can run all of the CI tests locally by invoking `ayllu-build` directly,
336+ assuming it is compiled it can be launched like this:
337+
338+ ```sh
339+ # run all tests in .ayllu
340+ ayllu-build evaluate
341+ ```
342+
343+ # ayllu-forge.org
344+
345+ The [Ayllu website](https://ayllu-forge.org) and project documentation are built
346+ together with [Zola](https://www.getzola.org/) which you must install. After
347+ which you can startup a local preview of the site with the following commands:
348+
349+ ```sh
350+ cd www && zola serve
351+ ```
352+ The generated content are hosted directly from Ayllu and you simply need to
353+ build and commit the generated code directly into the repository.
354+
355+ ```sh
356+ cd www && zola build
357+ ```
358+
359+ ## Diagrams
360+
361+ Diagrams are built with [nomnoml](https://www.nomnoml.com/) and their SVG
362+ content contain the source for generating the diagrams. Simply open one of the
363+ source SVGs up and copy-paste it to the editor of the nomnoml website.
364 diff --git a/docs/faq.md b/docs/faq.md
365new file mode 100644
366index 0000000..39fa090
367--- /dev/null
368+++ b/docs/faq.md
369 @@ -0,0 +1,10 @@
370+ ##### What Does "Ayllu" Mean?
371+
372+ The name [Ayllu](https://en.wikipedia.org/wiki/Ayllu) _/ˈajʎu/_, _eye-joo_ is
373+ the Quechua word for the traditional form of a community in the Andes region
374+ of South America, particularly in Bolivia and Peru.
375+
376+ ##### Do You Provide Hosting?
377+
378+ Not currently. If there was enough interest the project might offer hosted
379+ environments as a way to sustain it's development.
380 diff --git a/docs/installation.md b/docs/installation.md
381new file mode 100644
382index 0000000..be316b6
383--- /dev/null
384+++ b/docs/installation.md
385 @@ -0,0 +1,156 @@
386+ # Running as a Container
387+
388+ The quickest way to get started running Ayllu is by using a container.
389+ [Podman](https://podman.io/) is the only supported container platform although
390+ Docker may work as well.
391+
392+ There are several different configurations that can be used to run Ayllu as
393+ a container.
394+
395+ * [Rootless with Ayllu running as root within the container](#rootless-container-with-ayllu-running-as-root)
396+ * [Rootless with a non-root user within the container](#rootless-with-a-non-root-user-within-a-container)
397+ * [As root with Ayllu running as a non-root user](#as-root-with-ayllu-running-as-a-non-root-user)
398+
399+ ## Rootless Container with Ayllu Running as Root
400+
401+ This configuration works best if you want Ayllu to have access to your
402+ repositories for browsing your code locally. The tutorial assumes that you
403+ have permissions to access all of your code repositories.Note that the commands
404+ below use a separate configuration and data paths to avoid conflicting with the
405+ default paths if the Ayllu binary is installed directly on your system.
406+
407+ First create configuration and data paths that we will map into the container.
408+
409+ mkdir ~/.config/ayllu-podman
410+ mkdir ~/.local/share/ayllu-podman
411+
412+ Next pull the latest version of the container and generate a new configuration
413+ file.
414+
415+ podman pull registry.ayllu-forge.org/ayllu/ayllu:main
416+ podman run --rm -ti registry.ayllu-forge.org/ayllu/ayllu:main ayllu config generate > ~/.config/ayllu-podman/config.toml
417+
418+ The next step is to map "collections" (directories that contain git repositories)
419+ into the Ayllu container. On my system I keep active projects I'm working on
420+ in a directory called `~/repos/projects` and I keep past projects for reference
421+ in a directory called `~/repos/attic`.
422+
423+ ...
424+ [[collections]]
425+ name = "projects"
426+ description = "active projects"
427+ # ~/repos/projects --> /repos in the container
428+ path = "/repos/projects"
429+
430+ [[collections]]
431+ name = "attic"
432+ description = "past projects stowed away in the attic"
433+ path = "/repos/attic"
434+ ...
435+
436+ Now you can start the container ensuring that you map the code collection into
437+ the correct path which you configured in the step above. In the commands below
438+ we will use the following volume maps from my host system into the container.
439+ Take a look at the Podman [rootless tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md)
440+ for a refresher on how rootless volume mappings work. Note that below the
441+ repositories are mounted as :rw. This is because Ayllu uses Git [worktrees](https://git-scm.com/docs/git-worktree)
442+ to run certain types of analysis such as the code composition chart. If you
443+ don't care about that you can change this to read-only to prevent any write
444+ access at all.
445+
446+ # code repositories
447+ -v ~/repos:/repos:rw
448+ # configuration directory
449+ -v ~/.config/ayllu-podman:/root/.config/ayllu
450+ # stateful sqlite database
451+ -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu
452+
453+ Finally we can launch the actual container.
454+
455+ podman run \
456+ --net host --rm -ti --user root \
457+ -v ~/repos:/repos \
458+ -v ~/.config/ayllu-podman:/root/.config/ayllu \
459+ -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu \
460+ registry.ayllu-forge.org/ayllu/ayllu:main \
461+ ayllu serve
462+
463+ You should now be able to browse to the user interface at
464+ [localhost:8080](http://localhost:8080).
465+
466+ ### Configure with Systemd
467+
468+ You can also configure the container to run as a systemd-user service. See
469+ the documentation for [podman systemd units](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html).
470+ You can also checkout the [archlinux wiki](https://wiki.archlinux.org/title/Podman#Quadlet)
471+ for a tutorial.
472+
473+ Here is an example file at `~/.config/containers/systemd/ayllu.container`.
474+
475+ ```
476+ [Unit]
477+ Description=Ayllu Container
478+
479+ [Container]
480+ ContainerName=ayllu
481+ Image=registry.ayllu-forge.org/ayllu/ayllu:main
482+ Network=host
483+ User=root
484+ Volume=%h/repos:/repos:rw
485+ Volume=%h/.config/ayllu-podman:/root/.config/ayllu
486+ Volume=%h/.local/share/ayllu-podman:/root/.local/share/ayllu
487+ Exec=ayllu serve
488+
489+ [Service]
490+ Restart=on-failure
491+
492+ # Extend Timeout to allow time to pull the image
493+ TimeoutStartSec=300
494+
495+ # The [Install] section allows enabling the generated service.
496+ [Install]
497+ WantedBy=default.target
498+ ```
499+
500+ Once you've configured the file you can install and run it:
501+
502+ # validate the configuration
503+ /usr/lib/podman/quadlet -user -dryrun
504+ # install generated systemd services
505+ /usr/lib/podman/quadlet -user ~/.config/systemd/user
506+ # reload the user daemon
507+ systemctl --user daemon-reload
508+ # start the ayllu container
509+ systemctl --user start ayllu
510+
511+ If all went well Ayllu should now be running as a container managed by systemd!
512+
513+ # Rootless with a non-root User within a Container
514+
515+ This method is the most restricted technique for running Ayllu in a production
516+ deployment. Not fully supported yet, TODO.
517+
518+ # As Root with Ayllu Running as a Non-root User
519+
520+ This method is a hybrid approach that is useful for serving components of Ayllu
521+ from a container but also retaining a system level installation. Not fully
522+ supported yet, TODO.
523+
524+ # Distribution Packages
525+
526+ <div class="warning">
527+ NOTE: Few distribution packages currently exist for Ayllu, any contributions
528+ in this regard would be gladly accepted!
529+ </div>
530+
531+ ## Arch Linux
532+
533+ ###### Release Package (Unfinished)
534+ [ayllu](https://aur.archlinux.org/packages/ayllu)
535+
536+ ###### Source Package (Unfinished)
537+ [ayllu-git](https://aur.archlinux.org/packages/ayllu-git)
538+
539+ # From Source
540+
541+ TODO
542 diff --git a/docs/mail.md b/docs/mail.md
543new file mode 100644
544index 0000000..ff71ff4
545--- /dev/null
546+++ b/docs/mail.md
547 @@ -0,0 +1,20 @@
548+ # Mailing List Support
549+
550+ Ayllu has full featured support for email based development workflows. It is
551+ based on the excellent [mailpot](https://git.meli-email.org/meli/mailpot)
552+ mailing list manager.
553+
554+ ## Configuration
555+
556+ The configuration of mail servers can be complex. Ayllu encapsulates most of
557+ these settings in the [mutliuser](https://ayllu-forge.org/ayllu/ayllu/tree/main/containers/multiuser)
558+ container which can be used as a reference for configuring your own mail server.
559+
560+ ### Minimum Recommended Security Settings
561+
562+ #### DKIM
563+
564+ #### SPF Validation
565+
566+ The container provides SPF validation and the recommended DNS configuration for
567+ a single host e.g. `ayllu-forge.org` is `"v=spf1 a mx ~all"`.
568 diff --git a/docs/proxy.md b/docs/proxy.md
569new file mode 100644
570index 0000000..238baee
571--- /dev/null
572+++ b/docs/proxy.md
573 @@ -0,0 +1,12 @@
574+ # Proxy Configuration
575+
576+ Ayllu is designed to be run behind a reverse proxy server and it is not
577+ recommended to deploy Ayllu directly to the internet. Things such as TLS
578+ termination or basic authentication for private repositories are not directly
579+ supported by Ayllu although some of these features may be added in the future.
580+
581+ ## Nginx
582+
583+ [nginx](https://nginx.org/) is the only supported software but others are
584+ likely to work and we will happily accept documentation for operating other
585+ free software proxy servers.
586 diff --git a/docs/sites.md b/docs/sites.md
587new file mode 100644
588index 0000000..3423134
589--- /dev/null
590+++ b/docs/sites.md
591 @@ -0,0 +1,39 @@
592+ # Static Hosting
593+
594+ Ayllu can serve content directly from a git repository, you just need to toggle
595+ a few options in your git configuration file.
596+
597+ ## Example Configuration
598+
599+ In your git configuration file you can specify one or more headers which if
600+ detected by Ayllu will cause it to serve content from the directory rather then
601+ it's web interface.
602+
603+ Below we specify that any request sent to Ayllu with header `Host = example.org`
604+ should return HTML content from within the repository directory www/public.
605+
606+ ```
607+ [ayllu-sites]
608+ enabled = true
609+ header = Host=example.org
610+ content = www/public
611+ ```
612+
613+ ## Proxy configuration
614+
615+ Typically you would want a proxy server in front of your Ayllu instance. You
616+ can then pass any headers to your downstream instance and it should serve the
617+ content as expected.
618+
619+ ### Example Nginx Proxy
620+
621+ ```
622+ ...
623+ location / {
624+ include config.d/proxy.conf;
625+ proxy_pass http://127.0.0.1:8080;
626+ proxy_set_header Host $host;
627+ proxy_set_header X-Real-IP $remote_addr;
628+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
629+ }
630+ ```
631 diff --git a/docs/themes.md b/docs/themes.md
632new file mode 100644
633index 0000000..396688d
634--- /dev/null
635+++ b/docs/themes.md
636 @@ -0,0 +1,3 @@
637+ # Themeing Ayllu
638+
639+ TODO
640 diff --git a/www/.gitignore b/www/.gitignore
641deleted file mode 100644
642index da62838..0000000
643--- a/www/.gitignore
644+++ /dev/null
645 @@ -1 +0,0 @@
646- sass/pico
647 diff --git a/www/config.toml b/www/config.toml
648deleted file mode 100644
649index b451391..0000000
650--- a/www/config.toml
651+++ /dev/null
652 @@ -1,25 +0,0 @@
653- # The URL the site will be built for
654- base_url = "https://ayllu-forge.org"
655-
656- # Whether to automatically compile all Sass files in the sass directory
657- compile_sass = true
658-
659- # Whether to build a search index to be used later on by a JavaScript library
660- build_search_index = false
661-
662- minify_html = true
663-
664- [slugify]
665- paths = "on"
666- taxonomies = "on"
667- anchors = "on"
668-
669-
670- [markdown]
671- # Whether to do syntax highlighting
672- # Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
673- # highlight_code = true
674- # highlight_theme = "charcoal"
675-
676- [extra]
677- # Put all your custom variables here
678 diff --git a/www/content/_index.md b/www/content/_index.md
679deleted file mode 100644
680index b08058e..0000000
681--- a/www/content/_index.md
682+++ /dev/null
683 @@ -1,14 +0,0 @@
684- +++
685- title = "index"
686- template = "index.html"
687- +++
688-
689- ### Hyper Performant & Hackable Code Forge Built on Open Standards
690-
691- Ayllu is a lightweight [code forge](https://en.wikipedia.org/wiki/Forge_(software))
692- designed to help individuals and grassroots community projects create and
693- develop software in collaboration across open internet standards.
694-
695- ---
696- Check out the [documentation](/docs) or [browse](/browse) some of the
697- projects hosted on this server.
698 diff --git a/www/content/docs/_index.md b/www/content/docs/_index.md
699deleted file mode 100644
700index 59c3397..0000000
701--- a/www/content/docs/_index.md
702+++ /dev/null
703 @@ -1,11 +0,0 @@
704- +++
705- title = "Docs"
706- template = "docs_home.html"
707- sort_by = "weight"
708- insert_anchor_links = "heading"
709- +++
710-
711- # Documentation
712-
713- Welcome to the Ayllu documentation 📖, this is section serves as an
714- authoritative reference on all things related to the Ayllu code forge!
715 diff --git a/www/content/docs/architecture.md b/www/content/docs/architecture.md
716deleted file mode 100644
717index 27b98ec..0000000
718--- a/www/content/docs/architecture.md
719+++ /dev/null
720 @@ -1,21 +0,0 @@
721- +++
722- title = "Architecture"
723- slug = "architecture"
724- weight = 0
725- +++
726-
727- # The Architecture of Ayllu
728-
729- **Ayllu is a new software project and it's design is evolving.**
730-
731- It's basic architecture is that of a single binary providing a web interface to
732- browse and interact with Git repositories as well as an RPC server based on
733- [tarpc](https://github.com/google/tarpc) with an embedded client. The RPC server
734- running in the core Ayllu binary is called the `job_server` and it provides an
735- interface to interact with Ayllu for administrators. Much of the functionality
736- of Ayllu is implemented via `RPC extensions` which are minimal binaries that
737- are used to extend the core functionality of Ayllu.
738-
739- The current architecture of Ayllu is depicted below:
740-
741- <a href="/assets/architecture.svg"><img class="diagram" src="/assets/architecture.svg" /></a>
742 diff --git a/www/content/docs/builds.md b/www/content/docs/builds.md
743deleted file mode 100644
744index 44ac717..0000000
745--- a/www/content/docs/builds.md
746+++ /dev/null
747 @@ -1,52 +0,0 @@
748- +++
749- title = "Builds"
750- slug = "builds"
751- weight = 0
752- +++
753-
754- Ayllu contains a plugin called `ayllu-build` which is responsible for executing
755- build manifests in a CI/CD environment. The design of the build system prioritizes
756- the ability to run the entire workflow locally.
757-
758- ### An Example Local Workflow
759-
760- Build manifests are written in [Nickel](https://nickel-lang.org/).
761-
762- ```sh
763- mkdir -p my-test-repo/.ayllu/build
764- cd my-test-repo && git init
765- # create a simple workflow that prints "Hello" and "World"
766- cat <<EOF > .ayllu/build/main.ncl
767- {
768- workflows = [
769- {
770- name = "Simple",
771- steps = [
772- {
773- name = "Hello",
774- input = "echo -n Hello"
775- },
776- {
777- name = "World",
778- input = "echo -n World"
779- }
780- ]
781- }
782- ]
783- }
784- EOF
785- # validate the build plan and generate a DOT file to stdout
786- ayllu_build plan
787- >>> 2023-12-14T21:58:37.777493Z INFO ayllu_build:66: logger initialized
788- >>> digraph {
789- >>> 0 [ label = "Workflow: Simple" ]
790- >>> 1 [ label = "Step: Hello" ]
791- >>> 2 [ label = "Step: World" ]
792- >>> 0 -> 1 [ label = "0" ]
793- >>> 0 -> 2 [ label = "0" ]
794- >>> }
795- # if you have graphviz installed you can visualize this output:
796- ayllu_build plan | dot -Tx11
797- # finally you can execute the workflow locally
798- ayllu_build evaluate
799- ```
800 diff --git a/www/content/docs/configuration.md b/www/content/docs/configuration.md
801deleted file mode 100644
802index c6cce19..0000000
803--- a/www/content/docs/configuration.md
804+++ /dev/null
805 @@ -1,224 +0,0 @@
806- +++
807- title = "Configuration"
808- weight = 0
809- insert_anchor_links = "header"
810- +++
811-
812- # Initial Configuration
813-
814- After following the [installation](https://ayllu-forge.org/docs/installation)
815- you need to setup your configuration file and initialize the database.
816-
817- ## User Based Installation
818-
819- ```sh
820- mkdir ~/.config/ayllu
821- ayllu config generate > ~/.config/ayllu/config.yaml
822- # open up config.yaml in your favorite editor and configure at least one
823- # collection
824- vim ~/.config/ayllu/config.yaml
825- # now verify the config is valid
826- ayllu config display
827- # initialize and migrate the database
828- ayllu migrate
829- # launch the web server
830- ayllu serve
831- ```
832-
833- # Collections
834-
835- Collections are simply a directory on your file system that contains zero or
836- more Git repositories. They can be structured in whichever way is suitable for
837- your personal workflow.
838-
839-
840- ```toml
841- # On my system I keep active projects in a directory called "projects"
842- [[collections]]
843- name = "projects"
844- description = "active projects"
845- path = "/home/kevin/repos/projects"
846- # And another directory of archived projects that I call "the attic"
847- [[collections]]
848- name = "attic"
849- description = "projects stowed away in the attic"
850- path = "/home/kevin/repos/attic"
851-
852- # it's also possible to create hidden collections that aren't showed in the
853- # collections index page but will be rendered if you know the link to them.
854- # If you want to restrict access completely you'll need to employ basic auth
855- # or similiar in your webserver.
856- [[collections]]
857- name = "private"
858- description = "my private code, no looking!"
859- path = "/home/kevin/repos/private"
860- ```
861-
862- # Running Jobs
863- Once Ayllu has been configured and the server is running you'll want to run
864- jobs against your repositories. Jobs do things like compute authorship stats
865- and determine code composition. Keep in mind that `jobs` are distinct from
866- `builds`. Jobs perform internal actions that allow Ayllu to function while
867- builds are for running codebase specific workflows.
868-
869- Most jobs are run via [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
870-
871- ```sh
872- # ayllu's internal job server will be listening on a unix socket
873- ss -xlp |grep ayllu
874- u_str LISTEN 0 1024 /run/user/1000/ayllu.sock 305937 * 0 users:(("ayllu",pid=70917,fd=14))
875- cd ~/repos/projects/ayllu
876- # run against your repository
877- # depending on the number of commits this can take a considerable amount of
878- # time to run as it needs to perform computations against each commit.
879- ayllu jobs run .
880- ```
881-
882- # Tree Sitter
883-
884- Syntax highlighting in the web interface is implemented with [tree-sitter](https://tree-sitter.github.io/tree-sitter/).
885- Instead of embedding and compiling potentially hundreds of individual shared
886- modules for each language you can install languages you are interested in via
887- your operating system's package manager. Unfortunately, not all parsers are
888- consistently packaged and thus it is possible to override system defaults as
889- described below.
890-
891- ## Customizing Shared Module Paths
892-
893- Normally tree-sitter parsers should have the following layout:
894-
895- ```text
896- # compiled shared modules
897- /usr/lib/libtree-sitter-$language.so
898- # supplemental query files
899- /usr/share/tree-sitter/queries/$language/[highlights|injections|locals].scm
900- ```
901-
902- By default Ayllu will attempt to load parsers and query files from those directories.
903-
904- ### Example Custom Configuration
905-
906- <div class="info">
907- NOTE: Refer to <a href=https://ayllu-forge.org/ayllu/ayllu/blob/main/config.example.toml>config.sample.toml</a> for the latest
908- example configuration or <a href="https://ayllu-forge.org/ayllu/ayllu/blob/main/src/config.rs">config.rs</a>.
909- </div>
910-
911-
912- ```toml
913- [tree-sitter]
914- # specify the base path to search for libtree-sitter-$language.so
915- base_path = "/usr/lib"
916- # directory of syntax queries
917- queries_path = "/usr/share/tree-sitter/queries"
918- ```
919-
920- ## Adding a Additional Queries
921-
922- An additional path to look for queries can also be added:
923-
924- ```toml
925- [tree-sitter]
926- queries_extras_path = "/etc/ayllu/queries"
927- ```
928-
929- ## Adding Additional Parsers
930-
931- If you want to add a custom parser that's installed at a non-standard path you
932- can do that too. This can be useful for parsers that aren't packaged on your
933- system and also for custom programming languages.
934-
935- ```toml
936- [[tree-sitter.parsers]]
937- name = "fuu-lang"
938- shared_object = "/etc/ayllu/parsers/libtree-sitter-fuu.so"
939- highlight_query = "/etc/ayllu/queries/fuu/highlights.scm"
940- locals_query = "/etc/ayllu/queries/fuu/locals.scm"
941- injections = "/etc/ayllu/queries/fuu/injections.scm"
942- ```
943-
944- # Language Detection & Syntax Highlighting
945-
946- Ayllu determines which language is being rendered by file extension, file name,
947- or an "alias" in the case of a markdown code block.
948-
949- ## Language Mapping
950-
951- Sometimes you want one language to be detected and presented as something
952- different. For instance by default Ayllu will detect `hello.ml` as a Standard ML
953- file, but you can override this to OCaml with a mapping.
954-
955- ```toml
956- [languages]
957- [languages.mappings]
958- "Standard ML" = "OCaml"
959- ```
960-
961- ## Custom Languages
962-
963- If you're the author of a programming language and want Ayllu to detect it
964- based on file extensions you can add an additional language in your config file.
965- ```toml
966- # append the following in your config.toml
967- [[ languages.extras ]]
968- name = "BazQux"
969- extensions = [".baz", ".qux", ".bq"]
970- # any file with this name will be detected as BazQux
971- filename = [".bazscript"]
972- # deep pink
973- color = "#ff1493"
974- ```
975-
976- You can also use the languages section to modify existing languages, for instance
977- if for some reason you didn't like the default colors associated with a particular
978- programming language, you can adjust it here.
979- ```toml
980- # append the following in your config.toml
981- [[ languages.extras ]]
982- name = "go"
983- # Go is pink!
984- color = "#ff1493"
985- ```
986-
987- # Adding Custom Tree Sitter Highlights
988-
989- You can override system installed tree-sitter
990- [highlights](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#highlights)
991- in the Ayllu configuration file. For example we can add two new highlight
992- queries to the `diff` parser called `@addition` and `@removal`. With these
993- enabled Ayllu will paint the relevant code sections with CSS classes
994- `ts_addition` and `ts_removal` which you can style in theme configurations.
995-
996- ```toml
997- [tree-sitter.highlights]
998- diff = """
999- ; used to highlight diffs in the UI
1000- [(addition) (new_file)] @addition
1001- [(deletion) (old_file)] @removal
1002-
1003- (commit) @constant
1004- (location) @attribute
1005- (command) @variable.builtin
1006- """
1007- ```
1008-
1009- # Mirroring
1010-
1011- Git mirrors will be automatically detected by looking at git configuration to
1012- determine if the repository has a `mirror = true` flag present in any of it's
1013- configured remotes. If any remote is flagged as a mirror then the repository
1014- will be considered a mirror. Mirror repositories will not be listed in RSS
1015- feeds, be subject to certain jobs types, or be available in the remote API.
1016-
1017- ## Creating a Mirror
1018-
1019- The simplest way to create a mirror is by cloning a repository with the
1020- `--mirror` flag. For example: `git clone https://ayllu-forge.org/ayllu/ayllu --mirror`
1021- will result in a git config such as:
1022-
1023- ```
1024- [remote "origin"]
1025- url = https://ayllu-forge.org/ayllu/ayllu
1026- fetch = +refs/*:refs/*
1027- mirror = true
1028-
1029- ```
1030 diff --git a/www/content/docs/developers.md b/www/content/docs/developers.md
1031deleted file mode 100644
1032index 48c3e46..0000000
1033--- a/www/content/docs/developers.md
1034+++ /dev/null
1035 @@ -1,45 +0,0 @@
1036- +++
1037- title = "Developers"
1038- slug = "developers"
1039- weight = 0
1040- +++
1041-
1042- # Developing Components
1043-
1044- Ayllu is split up into several distinct components, to work on one of them you
1045- typically want to start one of two feedback cycles: `lint->test->compile` or
1046- `compile->serve`. To start each one you can can run `scripts/test.sh $COMPONENT`
1047- or `scripts/watch.sh $COMPONENT` and the appropriate `cargo watch` command will
1048- be started for you.
1049-
1050- # Testing the Entire CI Workflow
1051-
1052- You can run all of the CI tests locally by invoking `ayllu-build` directly,
1053- assuming it is compiled it can be launched like this:
1054-
1055- ```sh
1056- # run all tests in .ayllu
1057- ayllu-build evaluate
1058- ```
1059-
1060- # ayllu-forge.org
1061-
1062- The [Ayllu website](https://ayllu-forge.org) and project documentation are built
1063- together with [Zola](https://www.getzola.org/) which you must install. After
1064- which you can startup a local preview of the site with the following commands:
1065-
1066- ```sh
1067- cd www && zola serve
1068- ```
1069- The generated content are hosted directly from Ayllu and you simply need to
1070- build and commit the generated code directly into the repository.
1071-
1072- ```sh
1073- cd www && zola build
1074- ```
1075-
1076- ## Diagrams
1077-
1078- Diagrams are built with [nomnoml](https://www.nomnoml.com/) and their SVG
1079- content contain the source for generating the diagrams. Simply open one of the
1080- source SVGs up and copy-paste it to the editor of the nomnoml website.
1081 diff --git a/www/content/docs/faq.md b/www/content/docs/faq.md
1082deleted file mode 100644
1083index ad9a4fa..0000000
1084--- a/www/content/docs/faq.md
1085+++ /dev/null
1086 @@ -1,15 +0,0 @@
1087- +++
1088- title = "FAQ"
1089- weight = 1
1090- +++
1091-
1092- ##### What Does "Ayllu" Mean?
1093-
1094- The name [Ayllu](https://en.wikipedia.org/wiki/Ayllu) _/ˈajʎu/_, _eye-joo_ is
1095- the Quechua word for the traditional form of a community in the Andes region
1096- of South America, particularly in Bolivia and Peru.
1097-
1098- ##### Do You Provide Hosting?
1099-
1100- Not currently. If there was enough interest the project might offer hosted
1101- environments as a way to sustain it's development.
1102 diff --git a/www/content/docs/installation.md b/www/content/docs/installation.md
1103deleted file mode 100644
1104index 455803e..0000000
1105--- a/www/content/docs/installation.md
1106+++ /dev/null
1107 @@ -1,162 +0,0 @@
1108- +++
1109- title = "Installation"
1110- slug = "installation"
1111- weight = 0
1112- +++
1113-
1114- # Running as a Container
1115-
1116- The quickest way to get started running Ayllu is by using a container.
1117- [Podman](https://podman.io/) is the only supported container platform although
1118- Docker may work as well.
1119-
1120- There are several different configurations that can be used to run Ayllu as
1121- a container.
1122-
1123- * [Rootless with Ayllu running as root within the container](#rootless-container-with-ayllu-running-as-root)
1124- * [Rootless with a non-root user within the container](#rootless-with-a-non-root-user-within-a-container)
1125- * [As root with Ayllu running as a non-root user](#as-root-with-ayllu-running-as-a-non-root-user)
1126-
1127- ## Rootless Container with Ayllu Running as Root
1128-
1129- This configuration works best if you want Ayllu to have access to your
1130- repositories for browsing your code locally. The tutorial assumes that you
1131- have permissions to access all of your code repositories.Note that the commands
1132- below use a separate configuration and data paths to avoid conflicting with the
1133- default paths if the Ayllu binary is installed directly on your system.
1134-
1135- First create configuration and data paths that we will map into the container.
1136-
1137- mkdir ~/.config/ayllu-podman
1138- mkdir ~/.local/share/ayllu-podman
1139-
1140- Next pull the latest version of the container and generate a new configuration
1141- file.
1142-
1143- podman pull registry.ayllu-forge.org/ayllu/ayllu:main
1144- podman run --rm -ti registry.ayllu-forge.org/ayllu/ayllu:main ayllu config generate > ~/.config/ayllu-podman/config.toml
1145-
1146- The next step is to map "collections" (directories that contain git repositories)
1147- into the Ayllu container. On my system I keep active projects I'm working on
1148- in a directory called `~/repos/projects` and I keep past projects for reference
1149- in a directory called `~/repos/attic`.
1150-
1151- ...
1152- [[collections]]
1153- name = "projects"
1154- description = "active projects"
1155- # ~/repos/projects --> /repos in the container
1156- path = "/repos/projects"
1157-
1158- [[collections]]
1159- name = "attic"
1160- description = "past projects stowed away in the attic"
1161- path = "/repos/attic"
1162- ...
1163-
1164- Now you can start the container ensuring that you map the code collection into
1165- the correct path which you configured in the step above. In the commands below
1166- we will use the following volume maps from my host system into the container.
1167- Take a look at the Podman [rootless tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md)
1168- for a refresher on how rootless volume mappings work. Note that below the
1169- repositories are mounted as :rw. This is because Ayllu uses Git [worktrees](https://git-scm.com/docs/git-worktree)
1170- to run certain types of analysis such as the code composition chart. If you
1171- don't care about that you can change this to read-only to prevent any write
1172- access at all.
1173-
1174- # code repositories
1175- -v ~/repos:/repos:rw
1176- # configuration directory
1177- -v ~/.config/ayllu-podman:/root/.config/ayllu
1178- # stateful sqlite database
1179- -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu
1180-
1181- Finally we can launch the actual container.
1182-
1183- podman run \
1184- --net host --rm -ti --user root \
1185- -v ~/repos:/repos \
1186- -v ~/.config/ayllu-podman:/root/.config/ayllu \
1187- -v ~/.local/share/ayllu-podman:/root/.local/share/ayllu \
1188- registry.ayllu-forge.org/ayllu/ayllu:main \
1189- ayllu serve
1190-
1191- You should now be able to browse to the user interface at
1192- [localhost:8080](http://localhost:8080).
1193-
1194- ### Configure with Systemd
1195-
1196- You can also configure the container to run as a systemd-user service. See
1197- the documentation for [podman systemd units](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html).
1198- You can also checkout the [archlinux wiki](https://wiki.archlinux.org/title/Podman#Quadlet)
1199- for a tutorial.
1200-
1201- Here is an example file at `~/.config/containers/systemd/ayllu.container`.
1202-
1203- ```
1204- [Unit]
1205- Description=Ayllu Container
1206-
1207- [Container]
1208- ContainerName=ayllu
1209- Image=registry.ayllu-forge.org/ayllu/ayllu:main
1210- Network=host
1211- User=root
1212- Volume=%h/repos:/repos:rw
1213- Volume=%h/.config/ayllu-podman:/root/.config/ayllu
1214- Volume=%h/.local/share/ayllu-podman:/root/.local/share/ayllu
1215- Exec=ayllu serve
1216-
1217- [Service]
1218- Restart=on-failure
1219-
1220- # Extend Timeout to allow time to pull the image
1221- TimeoutStartSec=300
1222-
1223- # The [Install] section allows enabling the generated service.
1224- [Install]
1225- WantedBy=default.target
1226- ```
1227-
1228- Once you've configured the file you can install and run it:
1229-
1230- # validate the configuration
1231- /usr/lib/podman/quadlet -user -dryrun
1232- # install generated systemd services
1233- /usr/lib/podman/quadlet -user ~/.config/systemd/user
1234- # reload the user daemon
1235- systemctl --user daemon-reload
1236- # start the ayllu container
1237- systemctl --user start ayllu
1238-
1239- If all went well Ayllu should now be running as a container managed by systemd!
1240-
1241- # Rootless with a non-root User within a Container
1242-
1243- This method is the most restricted technique for running Ayllu in a production
1244- deployment. Not fully supported yet, TODO.
1245-
1246- # As Root with Ayllu Running as a Non-root User
1247-
1248- This method is a hybrid approach that is useful for serving components of Ayllu
1249- from a container but also retaining a system level installation. Not fully
1250- supported yet, TODO.
1251-
1252- # Distribution Packages
1253-
1254- <div class="warning">
1255- NOTE: Few distribution packages currently exist for Ayllu, any contributions
1256- in this regard would be gladly accepted!
1257- </div>
1258-
1259- ## Arch Linux
1260-
1261- ###### Release Package (Unfinished)
1262- [ayllu](https://aur.archlinux.org/packages/ayllu)
1263-
1264- ###### Source Package (Unfinished)
1265- [ayllu-git](https://aur.archlinux.org/packages/ayllu-git)
1266-
1267- # From Source
1268-
1269- TODO
1270 diff --git a/www/content/docs/mail.md b/www/content/docs/mail.md
1271deleted file mode 100644
1272index 1668f95..0000000
1273--- a/www/content/docs/mail.md
1274+++ /dev/null
1275 @@ -1,25 +0,0 @@
1276- +++
1277- title = "Mail"
1278- weight = 1
1279- +++
1280-
1281- # Mailing List Support
1282-
1283- Ayllu has full featured support for email based development workflows. It is
1284- based on the excellent [mailpot](https://git.meli-email.org/meli/mailpot)
1285- mailing list manager.
1286-
1287- ## Configuration
1288-
1289- The configuration of mail servers can be complex. Ayllu encapsulates most of
1290- these settings in the [mutliuser](https://ayllu-forge.org/ayllu/ayllu/tree/main/containers/multiuser)
1291- container which can be used as a reference for configuring your own mail server.
1292-
1293- ### Minimum Recommended Security Settings
1294-
1295- #### DKIM
1296-
1297- #### SPF Validation
1298-
1299- The container provides SPF validation and the recommended DNS configuration for
1300- a single host e.g. `ayllu-forge.org` is `"v=spf1 a mx ~all"`.
1301 diff --git a/www/content/docs/proxy.md b/www/content/docs/proxy.md
1302deleted file mode 100644
1303index 5b9a566..0000000
1304--- a/www/content/docs/proxy.md
1305+++ /dev/null
1306 @@ -1,17 +0,0 @@
1307- +++
1308- title = "Reverse Proxy"
1309- weight = 1
1310- +++
1311-
1312- # Proxy Configuration
1313-
1314- Ayllu is designed to be run behind a reverse proxy server and it is not
1315- recommended to deploy Ayllu directly to the internet. Things such as TLS
1316- termination or basic authentication for private repositories are not directly
1317- supported by Ayllu although some of these features may be added in the future.
1318-
1319- ## Nginx
1320-
1321- [nginx](https://nginx.org/) is the only supported software but others are
1322- likely to work and we will happily accept documentation for operating other
1323- free software proxy servers.
1324 diff --git a/www/content/docs/sites.md b/www/content/docs/sites.md
1325deleted file mode 100644
1326index 141d7dc..0000000
1327--- a/www/content/docs/sites.md
1328+++ /dev/null
1329 @@ -1,44 +0,0 @@
1330- +++
1331- title = "Static Hosting"
1332- weight = 1
1333- +++
1334-
1335- # Static Hosting
1336-
1337- Ayllu can serve content directly from a git repository, you just need to toggle
1338- a few options in your git configuration file.
1339-
1340- ## Example Configuration
1341-
1342- In your git configuration file you can specify one or more headers which if
1343- detected by Ayllu will cause it to serve content from the directory rather then
1344- it's web interface.
1345-
1346- Below we specify that any request sent to Ayllu with header `Host = example.org`
1347- should return HTML content from within the repository directory www/public.
1348-
1349- ```
1350- [ayllu-sites]
1351- enabled = true
1352- header = Host=example.org
1353- content = www/public
1354- ```
1355-
1356- ## Proxy configuration
1357-
1358- Typically you would want a proxy server in front of your Ayllu instance. You
1359- can then pass any headers to your downstream instance and it should serve the
1360- content as expected.
1361-
1362- ### Example Nginx Proxy
1363-
1364- ```
1365- ...
1366- location / {
1367- include config.d/proxy.conf;
1368- proxy_pass http://127.0.0.1:8080;
1369- proxy_set_header Host $host;
1370- proxy_set_header X-Real-IP $remote_addr;
1371- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1372- }
1373- ```
1374 diff --git a/www/content/docs/themes.md b/www/content/docs/themes.md
1375deleted file mode 100644
1376index 3cf71f7..0000000
1377--- a/www/content/docs/themes.md
1378+++ /dev/null
1379 @@ -1,61 +0,0 @@
1380- +++
1381- title = "Themes"
1382- weight = 1
1383- +++
1384-
1385- # Themeing Ayllu
1386-
1387- Ayllu can be customized in a variety of ways including custom CSS, modifying
1388- Jinja based HTML templates, or by adding new static assets such as images.
1389- Available themes can be viewed and enabled from the `/config` page.
1390-
1391- ## The Default Theme
1392-
1393- The default theme is located in `ayllu/themes/default` and is served as a base
1394- and all themes serve content from this theme if they do not override it's
1395- assets. It is possible to change the default theme by setting it in your Ayllu
1396- configuration file.
1397-
1398- [web]
1399- default_theme = "my-custom-theme"
1400-
1401- By changing the default theme all additionally loaded themes will inherit the
1402- templates and assets of the default theme.
1403-
1404- ## Built-in vs External Themes
1405-
1406- ### Built-in Themes
1407-
1408- Built-in themes are compiled into the Ayllu binary and available for selection
1409- from the config section of the web interface. These themes are available at
1410- `ayllu/themes/`. These themes use [lightning css](https://lightningcss.dev/)
1411- at build time to build the theme's `main.min.css` file.
1412-
1413- ### External Themes
1414-
1415- Additional themes can be loaded directly from the file system and allow the
1416- addition of new themes without recompiling Ayllu.
1417-
1418- [web]
1419-
1420- default_theme = "default"
1421-
1422- [[web.theme]]
1423-
1424- name = "my-custom-theme"
1425- # path to a directory of theme templates, assets, and stylesheets
1426- path = "/var/lib/ayllu/themes/my-custom-theme"
1427-
1428- ### File System Layout
1429-
1430- All files are optional in themes, an empty directory is considered a valid
1431- theme and will result in an identical configuration to the `default_theme`.
1432-
1433- assets/ # SVG and other static assets served from /assets
1434- assets/logo.svg # main logo in the left hand nav bar
1435- assets/feed.xsl # XSL file used to style RSS feeds
1436- assets/*.svg # additional assets for various parts of the UI
1437- templates/ # directory of Jinja templates
1438- theme.css # additional stylesheet to extend the default
1439-
1440- See `contrib/example-theme` for a functional custom theme to extend as a base.
1441 diff --git a/www/design.nomnom b/www/design.nomnom
1442deleted file mode 100644
1443index 6f755b6..0000000
1444--- a/www/design.nomnom
1445+++ /dev/null
1446 @@ -1,51 +0,0 @@
1447- [reverse_proxy]
1448-
1449- [reverse_proxy]<-->[Rudolfs (LFS API)]
1450-
1451- [reverse_proxy]<-->[ayllu-core |
1452- [axum http interface]
1453- [sites static hosting]
1454- [tarpc-server (job_server)]
1455- [git repositories via libgit2]
1456- [<database> sqlite]
1457- ]
1458-
1459- [ayllu-core] <--> [
1460- ayllu-mail|
1461- [tarpc-server]
1462- [mailpot]
1463- [postfix]
1464- [<database> sqlite]
1465- ] <-- SMTP [<actor> contributor-2]
1466-
1467- [ayllu-core] <--> [
1468- ayllu-xmpp |
1469- [tarpc-server]
1470- [chat interface/bot]
1471- [<database> sqlite]
1472- ] <-- XMPP [<actor>; contributor-2]
1473-
1474- [ayllu-core] <--> [
1475- ayllu-build |
1476- [tarpc-server]
1477- [<database> sqlite]
1478- ]
1479-
1480- [ayllu-core] <--> [ayllu-shell] <-- SSH [<actor> contributor]
1481- [ayllu-core] <--> [ayllu-cli] <-- [<actor> admin]
1482-
1483-
1484- [ayllu-build]<-->[
1485- ayllu-builder-1 |
1486- [<package>qemu-x86_64| tarpc-server | executor]
1487- ]
1488-
1489- [ayllu-build]<-->[
1490- ayllu-builder-2 |
1491- [<package>qemu-aarch64| tarpc-server | exectuor]
1492- ]
1493-
1494- [ayllu-build]<-->[
1495- ayllu-builder-n |
1496- [<package>lxc| tarpc-server | executor]
1497- ] --> [ayllu-core]
1498 diff --git a/www/sass/main.scss b/www/sass/main.scss
1499deleted file mode 100644
1500index 2663c41..0000000
1501--- a/www/sass/main.scss
1502+++ /dev/null
1503 @@ -1,154 +0,0 @@
1504- @use "../../node_modules/open-props/normalize.min.css";
1505- @use "../../node_modules/open-props/open-props.min.css";
1506-
1507- a:visited {
1508- color: var(--link);
1509- }
1510-
1511- li.active {
1512- color: var(--text-2);
1513- text-shadow:
1514- 0 0 10px var(--camo-5),
1515- 0 0 25px var(--camo-7);
1516- }
1517-
1518- code {
1519- background: none;
1520- }
1521-
1522- pre {
1523- padding: 1em;
1524- color: var(--text-2);
1525- }
1526-
1527- div.doc-content > h1,h2,h3,h4,h5 {
1528- font-size: var(--font-size-5);
1529- }
1530-
1531- img.logo {
1532- max-width: 72px;
1533- }
1534-
1535- html,
1536- body {
1537- box-sizing: border-box;
1538- height: 100%;
1539- }
1540-
1541- .content {
1542- display: flex;
1543- justify-content: center;
1544- align-items: center;
1545- }
1546-
1547- body > footer {
1548- margin: 0px;
1549- padding: 0px;
1550- }
1551-
1552- .wrapper {
1553- min-height: 100%;
1554- display: flex;
1555- flex-direction: column;
1556- box-sizing: border-box;
1557- }
1558-
1559- .page-body {
1560- flex-grow: 1;
1561- }
1562-
1563- .page-footer {
1564- flex-grow: 0;
1565- flex-shrink: 0;
1566- }
1567-
1568- footer {
1569- text-align: center;
1570- font-size: 0.8em;
1571- }
1572-
1573- article {
1574- padding: 0.5em;
1575- }
1576-
1577- nav {
1578- display: flex;
1579- justify-content: space-between;
1580- align-items: center;
1581- background-color: var(--surface-1);
1582- padding: 10px;
1583- color: var(--text-1);
1584- box-shadow: var(--shadow-3);
1585- }
1586-
1587- nav.subnav {
1588- background-color: var(--surface-2);
1589- color: var(--text-1);
1590- box-shadow: var(--shadow-5);
1591- }
1592-
1593- nav .logo {
1594- font-size: 20px;
1595- font-weight: bold;
1596- }
1597-
1598- nav ul {
1599- list-style-type: none;
1600- margin: 0;
1601- padding: 0;
1602- display: flex;
1603- }
1604-
1605- nav ul li {
1606- margin-left: 20px;
1607- }
1608-
1609- nav ul li a {
1610- color: var(--link);
1611- text-decoration: none;
1612- }
1613-
1614- .documentation {
1615- margin: 1em;
1616- @media (width > 768px) {
1617- display: flex;
1618- }
1619- .doc-content {
1620- max-width: 100%;
1621- }
1622- .side-panel {
1623- margin-right: 3em;
1624- margin-bottom: 1em;
1625- min-width: 200px;
1626- ul > li {
1627- list-style: none;
1628- font-weight: bold;
1629- font-size: 1.2em;
1630- }
1631- }
1632- }
1633-
1634- h1,
1635- h2,
1636- h3,
1637- h4,
1638- h5 {
1639- max-inline-size: none;
1640- margin-top: .5em;
1641- margin-bottom: .5em;
1642- }
1643-
1644- main.page-body {
1645- margin: 2em;
1646- }
1647-
1648- div.side-panel > ul {
1649- padding-left: 0px;
1650- }
1651-
1652- .diagram {
1653- min-width: 200%;
1654- }
1655-
1656- pre {
1657- }
1658 diff --git a/www/scripts/vendor_pico_scss.sh b/www/scripts/vendor_pico_scss.sh
1659deleted file mode 100755
1660index 8d179fa..0000000
1661--- a/www/scripts/vendor_pico_scss.sh
1662+++ /dev/null
1663 @@ -1,5 +0,0 @@
1664- #!/bin/sh
1665-
1666- rm -r sass/pico 2>/dev/null || true
1667- mkdir -p sass/pico
1668- cp -r ../node_modules/@picocss/pico/scss/* sass/pico/
1669 diff --git a/www/static/assets/architecture.svg b/www/static/assets/architecture.svg
1670deleted file mode 100644
1671index e05c148..0000000
1672--- a/www/static/assets/architecture.svg
1673+++ /dev/null
1674 @@ -1,598 +0,0 @@
1675- <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">
1676- <desc >[reverse_proxy]
1677-
1678- [reverse_proxy]&lt;--&gt;[Rudolfs (LFS API)]
1679-
1680- [reverse_proxy]&lt;--&gt;[ayllu-core |
1681- [axum http interface]
1682- [sites static hosting]
1683- [tarpc-server (job_server)]
1684- [git repositories via libgit2]
1685- [&lt;database&gt; sqlite]
1686- ]
1687-
1688- [ayllu-core] &lt;--&gt; [
1689- ayllu-mail|
1690- [tarpc-server]
1691- [mailpot]
1692- [postfix]
1693- [&lt;database&gt; sqlite]
1694- ] &lt;-- SMTP [&lt;actor&gt; contributor-2]
1695-
1696- [ayllu-core] &lt;--&gt; [
1697- ayllu-xmpp |
1698- [tarpc-server]
1699- [chat interface/bot]
1700- [&lt;database&gt; sqlite]
1701- ] &lt;-- XMPP [&lt;actor&gt;; contributor-2]
1702-
1703- [ayllu-core] &lt;--&gt; [
1704- ayllu-build |
1705- [tarpc-server]
1706- [&lt;database&gt; sqlite]
1707- ]
1708-
1709- [ayllu-core] &lt;--&gt; [ayllu-shell] &lt;-- SSH [&lt;actor&gt; contributor]
1710- [ayllu-core] &lt;--&gt; [ayllu-cli] &lt;-- [&lt;actor&gt; admin]
1711-
1712-
1713- [ayllu-build]&lt;--&gt;[
1714- ayllu-builder-1 |
1715- [&lt;package&gt;qemu-x86_64| tarpc-server | executor]
1716- ]
1717-
1718- [ayllu-build]&lt;--&gt;[
1719- ayllu-builder-2 |
1720- [&lt;package&gt;qemu-aarch64| tarpc-server | exectuor]
1721- ]
1722-
1723- [ayllu-build]&lt;--&gt;[
1724- ayllu-builder-n |
1725- [&lt;package&gt;lxc| tarpc-server | executor]
1726- ] --&gt; [ayllu-core]
1727- </desc>
1728- <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">
1729- <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">
1730- <g stroke="transparent" fill="transparent">
1731- <rect x="0.0" y="0.0" height="664.0" width="1817.5" stroke="none"></rect>
1732- </g>
1733- <g transform="translate(8, 8)" fill="#33322E">
1734- <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
1735- <g stroke-dasharray="6 6">
1736- <path d="M873.9 24.0 L631.5 52 L631.5 117.33333333333333 L631.5 117.3 " fill="none"></path>
1737- </g>
1738- <path d="M626.2 110.7 L631.5 117.3 L636.8 110.7 L631.5 124.0 Z"></path>
1739- <path d="M867.9 30.1 L873.9 24.0 L866.6 19.5 L880.5 23.2 Z"></path>
1740- <g stroke-dasharray="6 6">
1741- <path d="M1012.1 24.0 L1254.5 52 L1254.5 65.33333333333333 L1254.5 65.3 " fill="none"></path>
1742- </g>
1743- <path d="M1249.2 58.7 L1254.5 65.3 L1259.8 58.7 L1254.5 72.0 Z"></path>
1744- <path d="M1019.4 19.5 L1012.1 24.0 L1018.1 30.1 L1005.5 23.2 Z"></path>
1745- <g stroke-dasharray="6 6">
1746- <path d="M740.9 184.6 L242 228 L242 241.33333333333334 L242.0 241.3 " fill="none"></path>
1747- </g>
1748- <path d="M236.7 234.7 L242.0 241.3 L247.3 234.7 L242.0 248.0 Z"></path>
1749- <path d="M734.7 190.5 L740.9 184.6 L733.8 179.9 L747.5 184.1 Z"></path>
1750- <text x="698.3" y="495.3" stroke="none">SMTP</text>
1751- <g stroke-dasharray="6 6">
1752- <path d="M242.0 390.7 L242 404 L690.25 503.2664359861592 L690.3 503.3 " fill="none"></path>
1753- </g>
1754- <path d="M247.3 397.3 L242.0 390.7 L236.7 397.3 L242.0 384.0 Z"></path>
1755- <g stroke-dasharray="6 6">
1756- <path d="M858.5 209.1 L750.5 228 L750.5 241.33333333333334 L750.5 241.3 " fill="none"></path>
1757- </g>
1758- <path d="M745.2 234.7 L750.5 241.3 L755.8 234.7 L750.5 248.0 Z"></path>
1759- <path d="M852.8 215.5 L858.5 209.1 L851.0 205.0 L865.0 208.0 Z"></path>
1760- <text x="695.6" y="480.0" stroke="none">XMPP</text>
1761- <g stroke-dasharray="6 6">
1762- <path d="M750.5 390.7 L750.5 404 L748.4375 488 L748.4 488.0 " fill="none"></path>
1763- </g>
1764- <path d="M755.8 397.3 L750.5 390.7 L745.2 397.3 L750.5 384.0 Z"></path>
1765- <g stroke-dasharray="6 6">
1766- <path d="M1183.6 212.8 L1168.75 228 L1168.75 241.33333333333334 L1168.8 241.3 " fill="none"></path>
1767- </g>
1768- <path d="M1163.4 234.7 L1168.8 241.3 L1174.1 234.7 L1168.8 248.0 Z"></path>
1769- <path d="M1182.8 221.3 L1183.6 212.8 L1175.1 213.8 L1188.2 208.0 Z"></path>
1770- <g stroke-dasharray="6 6">
1771- <path d="M1472.2 210.0 L1528 228 L1528 293.3333333333333 L1528.0 293.3 " fill="none"></path>
1772- </g>
1773- <path d="M1522.7 286.7 L1528.0 293.3 L1533.3 286.7 L1528.0 300.0 Z"></path>
1774- <path d="M1480.2 207.0 L1472.2 210.0 L1476.9 217.2 L1465.8 208.0 Z"></path>
1775- <text x="1487.3" y="480.0" stroke="none">SSH</text>
1776- <g stroke-dasharray="6 6">
1777- <path d="M1528.0 338.7 L1528 404 L1528 488 L1528.0 488.0 " fill="none"></path>
1778- </g>
1779- <path d="M1533.3 345.3 L1528.0 338.7 L1522.7 345.3 L1528.0 332.0 Z"></path>
1780- <g stroke-dasharray="6 6">
1781- <path d="M1568.6 209.4 L1652.5 228 L1652.5 293.3333333333333 L1652.5 293.3 " fill="none"></path>
1782- </g>
1783- <path d="M1647.2 286.7 L1652.5 293.3 L1657.8 286.7 L1652.5 300.0 Z"></path>
1784- <path d="M1576.2 205.7 L1568.6 209.4 L1573.9 216.1 L1562.0 208.0 Z"></path>
1785- <g stroke-dasharray="6 6">
1786- <path d="M1652.5 338.7 L1652.5 404 L1652.5 488 L1652.5 488.0 " fill="none"></path>
1787- </g>
1788- <path d="M1657.8 345.3 L1652.5 338.7 L1647.2 345.3 L1652.5 332.0 Z"></path>
1789- <g stroke-dasharray="6 6">
1790- <path d="M1031.0 367.4 L933 404 L933 417.3333333333333 L933.0 417.3 " fill="none"></path>
1791- </g>
1792- <path d="M927.7 410.7 L933.0 417.3 L938.3 410.7 L933.0 424.0 Z"></path>
1793- <path d="M1026.6 374.7 L1031.0 367.4 L1022.9 364.8 L1037.3 365.1 Z"></path>
1794- <g stroke-dasharray="6 6">
1795- <path d="M1152.9 390.5 L1150 404 L1150 417.3333333333333 L1150.0 417.3 " fill="none"></path>
1796- </g>
1797- <path d="M1144.7 410.7 L1150.0 417.3 L1155.3 410.7 L1150.0 424.0 Z"></path>
1798- <path d="M1156.7 398.2 L1152.9 390.5 L1146.3 395.9 L1154.3 384.0 Z"></path>
1799- <g stroke-dasharray="6 6">
1800- <path d="M1255.6 388.3 L1274.5 404 L1285.5740965207704 418.6780924298968 L1285.6 418.7 " fill="none"></path>
1801- </g>
1802- <path d="M1277.3 416.6 L1285.6 418.7 L1285.8 410.1 L1289.6 424.0 Z"></path>
1803- <path d="M1264.1 388.4 L1255.6 388.3 L1257.3 396.6 L1250.5 384.0 Z"></path>
1804- <g stroke-dasharray="6 6">
1805- <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>
1806- </g>
1807- <path d="M1381.1 210.3 L1372.6 211.5 L1375.6 219.5 L1366.9 208.0 Z"></path>
1808- <g data-name="reverse_proxy">
1809- <g fill="#eee8d5" stroke="#33322E" data-name="reverse_proxy">
1810- <rect x="880.5" y="0.0" height="32.0" width="125.0" data-name="reverse_proxy"></rect>
1811- </g>
1812- <g transform="translate(880.5, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="reverse_proxy">
1813- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="reverse_proxy">
1814- <text x="54.5" y="14.1" stroke="none" text-anchor="middle" data-name="reverse_proxy">reverse_proxy</text>
1815-
1816- </g>
1817- </g>
1818- </g>
1819- <g data-name="Rudolfs (LFS API)">
1820- <g fill="#eee8d5" stroke="#33322E" data-name="Rudolfs (LFS API)">
1821- <rect x="555.5" y="124.0" height="32.0" width="152.0" data-name="Rudolfs (LFS API)"></rect>
1822- </g>
1823- <g transform="translate(555.5, 124)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Rudolfs (LFS API)">
1824- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Rudolfs (LFS API)">
1825- <text x="68.0" y="14.1" stroke="none" text-anchor="middle" data-name="Rudolfs (LFS API)">Rudolfs (LFS API)</text>
1826-
1827- </g>
1828- </g>
1829- </g>
1830- <g data-name="ayllu-core">
1831- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-core">
1832- <rect x="747.5" y="72.0" height="136.0" width="1014.0" data-name="ayllu-core"></rect>
1833- <path d="M747.5 104.0 L1761.5 104.0" fill="none" data-name="ayllu-core"></path>
1834- </g>
1835- <g transform="translate(747.5, 72)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-core">
1836- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-core">
1837- <text x="499.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-core">ayllu-core</text>
1838-
1839- </g>
1840- </g>
1841- <g transform="translate(747.5, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-core">
1842- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-core">
1843- <g transform="translate(20, 20)" data-name="ayllu-core">
1844- <g data-name="axum http interface">
1845- <g fill="#fdf6e3" stroke="#33322E" data-name="axum http interface">
1846- <rect x="0.0" y="8.0" height="32.0" width="164.0" data-name="axum http interface"></rect>
1847- </g>
1848- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="axum http interface">
1849- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="axum http interface">
1850- <text x="74.0" y="14.1" stroke="none" text-anchor="middle" data-name="axum http interface">axum http interface</text>
1851-
1852- </g>
1853- </g>
1854- </g>
1855- <g data-name="sites static hosting">
1856- <g fill="#fdf6e3" stroke="#33322E" data-name="sites static hosting">
1857- <rect x="204.0" y="8.0" height="32.0" width="161.0" data-name="sites static hosting"></rect>
1858- </g>
1859- <g transform="translate(204, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sites static hosting">
1860- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sites static hosting">
1861- <text x="72.5" y="14.1" stroke="none" text-anchor="middle" data-name="sites static hosting">sites static hosting</text>
1862-
1863- </g>
1864- </g>
1865- </g>
1866- <g data-name="tarpc-server (job_server)">
1867- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server (job_server)">
1868- <rect x="405.0" y="8.0" height="32.0" width="205.0" data-name="tarpc-server (job_server)"></rect>
1869- </g>
1870- <g transform="translate(405, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server (job_server)">
1871- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server (job_server)">
1872- <text x="94.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server (job_server)">tarpc-server (job_server)</text>
1873-
1874- </g>
1875- </g>
1876- </g>
1877- <g data-name="git repositories via libgit2">
1878- <g fill="#fdf6e3" stroke="#33322E" data-name="git repositories via libgit2">
1879- <rect x="650.0" y="8.0" height="32.0" width="210.0" data-name="git repositories via libgit2"></rect>
1880- </g>
1881- <g transform="translate(650, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="git repositories via libgit2">
1882- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="git repositories via libgit2">
1883- <text x="97.0" y="14.1" stroke="none" text-anchor="middle" data-name="git repositories via libgit2">git repositories via libgit2</text>
1884-
1885- </g>
1886- </g>
1887- </g>
1888- <g data-name="sqlite">
1889- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1890- <rect x="900.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1891- <path d="M900.0 8.0 L900.0 40.0" fill="none" data-name="sqlite"></path>
1892- <path d="M958.0 8.0 L958.0 40.0" fill="none" data-name="sqlite"></path>
1893- <ellipse cx="929.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1894- <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>
1895- </g>
1896- <g transform="translate(900, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1897- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1898- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1899-
1900- </g>
1901- </g>
1902- </g>
1903- </g>
1904- </g>
1905- </g>
1906- </g>
1907- <g data-name="ayllu-mail">
1908- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-mail">
1909- <rect x="0.0" y="248.0" height="136.0" width="484.0" data-name="ayllu-mail"></rect>
1910- <path d="M0.0 280.0 L484.0 280.0" fill="none" data-name="ayllu-mail"></path>
1911- </g>
1912- <g transform="translate(0, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-mail">
1913- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-mail">
1914- <text x="234.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-mail">ayllu-mail</text>
1915-
1916- </g>
1917- </g>
1918- <g transform="translate(0, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-mail">
1919- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-mail">
1920- <g transform="translate(20, 20)" data-name="ayllu-mail">
1921- <g data-name="tarpc-server">
1922- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
1923- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
1924- </g>
1925- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
1926- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
1927- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
1928-
1929- </g>
1930- </g>
1931- </g>
1932- <g data-name="mailpot">
1933- <g fill="#fdf6e3" stroke="#33322E" data-name="mailpot">
1934- <rect x="149.0" y="8.0" height="32.0" width="73.0" data-name="mailpot"></rect>
1935- </g>
1936- <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="mailpot">
1937- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="mailpot">
1938- <text x="28.5" y="14.1" stroke="none" text-anchor="middle" data-name="mailpot">mailpot</text>
1939-
1940- </g>
1941- </g>
1942- </g>
1943- <g data-name="postfix">
1944- <g fill="#fdf6e3" stroke="#33322E" data-name="postfix">
1945- <rect x="262.0" y="8.0" height="32.0" width="68.0" data-name="postfix"></rect>
1946- </g>
1947- <g transform="translate(262, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="postfix">
1948- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="postfix">
1949- <text x="26.0" y="14.1" stroke="none" text-anchor="middle" data-name="postfix">postfix</text>
1950-
1951- </g>
1952- </g>
1953- </g>
1954- <g data-name="sqlite">
1955- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1956- <rect x="370.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1957- <path d="M370.0 8.0 L370.0 40.0" fill="none" data-name="sqlite"></path>
1958- <path d="M428.0 8.0 L428.0 40.0" fill="none" data-name="sqlite"></path>
1959- <ellipse cx="399.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1960- <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>
1961- </g>
1962- <g transform="translate(370, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1963- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1964- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1965-
1966- </g>
1967- </g>
1968- </g>
1969- </g>
1970- </g>
1971- </g>
1972- </g>
1973- <g data-name="contributor-2">
1974- <g fill="#eee8d5" stroke="#33322E" data-name="contributor-2">
1975- <circle r="4.0" cx="747.8" cy="500.0" data-name="contributor-2"></circle>
1976- <path d="M747.8 504.0 L747.8 512.0" fill="none" data-name="contributor-2"></path>
1977- <path d="M743.8 508.0 L751.8 508.0" fill="none" data-name="contributor-2"></path>
1978- <path d="M743.8 516.0 L747.8 512.0 L751.8 516.0" fill="none" data-name="contributor-2"></path>
1979- </g>
1980- <g transform="translate(690.25, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor-2">
1981- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor-2">
1982- <text x="49.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor-2">contributor-2</text>
1983-
1984- </g>
1985- </g>
1986- </g>
1987- <g data-name="ayllu-xmpp">
1988- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-xmpp">
1989- <rect x="524.0" y="248.0" height="136.0" width="453.0" data-name="ayllu-xmpp"></rect>
1990- <path d="M524.0 280.0 L977.0 280.0" fill="none" data-name="ayllu-xmpp"></path>
1991- </g>
1992- <g transform="translate(524, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-xmpp">
1993- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-xmpp">
1994- <text x="218.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-xmpp">ayllu-xmpp</text>
1995-
1996- </g>
1997- </g>
1998- <g transform="translate(524, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-xmpp">
1999- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-xmpp">
2000- <g transform="translate(20, 20)" data-name="ayllu-xmpp">
2001- <g data-name="tarpc-server">
2002- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
2003- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
2004- </g>
2005- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
2006- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
2007- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
2008-
2009- </g>
2010- </g>
2011- </g>
2012- <g data-name="chat interface/bot">
2013- <g fill="#fdf6e3" stroke="#33322E" data-name="chat interface/bot">
2014- <rect x="149.0" y="8.0" height="32.0" width="150.0" data-name="chat interface/bot"></rect>
2015- </g>
2016- <g transform="translate(149, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="chat interface/bot">
2017- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="chat interface/bot">
2018- <text x="67.0" y="14.1" stroke="none" text-anchor="middle" data-name="chat interface/bot">chat interface/bot</text>
2019-
2020- </g>
2021- </g>
2022- </g>
2023- <g data-name="sqlite">
2024- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
2025- <rect x="339.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
2026- <path d="M339.0 8.0 L339.0 40.0" fill="none" data-name="sqlite"></path>
2027- <path d="M397.0 8.0 L397.0 40.0" fill="none" data-name="sqlite"></path>
2028- <ellipse cx="368.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
2029- <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>
2030- </g>
2031- <g transform="translate(339, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
2032- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
2033- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
2034-
2035- </g>
2036- </g>
2037- </g>
2038- </g>
2039- </g>
2040- </g>
2041- </g>
2042- <g data-name="ayllu-build">
2043- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-build">
2044- <rect x="1037.3" y="248.0" height="136.0" width="263.0" data-name="ayllu-build"></rect>
2045- <path d="M1037.3 280.0 L1300.3 280.0" fill="none" data-name="ayllu-build"></path>
2046- </g>
2047- <g transform="translate(1037.25, 248)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-build">
2048- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-build">
2049- <text x="123.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-build">ayllu-build</text>
2050-
2051- </g>
2052- </g>
2053- <g transform="translate(1037.25, 280)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-build">
2054- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-build">
2055- <g transform="translate(20, 20)" data-name="ayllu-build">
2056- <g data-name="tarpc-server">
2057- <g fill="#fdf6e3" stroke="#33322E" data-name="tarpc-server">
2058- <rect x="0.0" y="8.0" height="32.0" width="109.0" data-name="tarpc-server"></rect>
2059- </g>
2060- <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="tarpc-server">
2061- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="tarpc-server">
2062- <text x="46.5" y="14.1" stroke="none" text-anchor="middle" data-name="tarpc-server">tarpc-server</text>
2063-
2064- </g>
2065- </g>
2066- </g>
2067- <g data-name="sqlite">
2068- <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
2069- <rect x="149.0" y="8.0" height="32.0" width="58.0" stroke="none" data-name="sqlite"></rect>
2070- <path d="M149.0 8.0 L149.0 40.0" fill="none" data-name="sqlite"></path>
2071- <path d="M207.0 8.0 L207.0 40.0" fill="none" data-name="sqlite"></path>
2072- <ellipse cx="178.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
2073- <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>
2074- </g>
2075- <g transform="translate(149, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
2076- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
2077- <text x="21.0" y="14.1" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
2078-
2079- </g>
2080- </g>
2081- </g>
2082- </g>
2083- </g>
2084- </g>
2085- </g>
2086- <g data-name="ayllu-shell">
2087- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-shell">
2088- <rect x="1481.0" y="300.0" height="32.0" width="94.0" data-name="ayllu-shell"></rect>
2089- </g>
2090- <g transform="translate(1481, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-shell">
2091- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-shell">
2092- <text x="39.0" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-shell">ayllu-shell</text>
2093-
2094- </g>
2095- </g>
2096- </g>
2097- <g data-name="contributor">
2098- <g fill="#eee8d5" stroke="#33322E" data-name="contributor">
2099- <circle r="4.0" cx="1528.0" cy="500.0" data-name="contributor"></circle>
2100- <path d="M1528.0 504.0 L1528.0 512.0" fill="none" data-name="contributor"></path>
2101- <path d="M1524.0 508.0 L1532.0 508.0" fill="none" data-name="contributor"></path>
2102- <path d="M1524.0 516.0 L1528.0 512.0 L1532.0 516.0" fill="none" data-name="contributor"></path>
2103- </g>
2104- <g transform="translate(1477.5, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor">
2105- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor">
2106- <text x="42.5" y="14.1" stroke="none" text-anchor="middle" data-name="contributor">contributor</text>
2107-
2108- </g>
2109- </g>
2110- </g>
2111- <g data-name="ayllu-cli">
2112- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-cli">
2113- <rect x="1615.0" y="300.0" height="32.0" width="75.0" data-name="ayllu-cli"></rect>
2114- </g>
2115- <g transform="translate(1615, 300)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-cli">
2116- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-cli">
2117- <text x="29.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-cli">ayllu-cli</text>
2118-
2119- </g>
2120- </g>
2121- </g>
2122- <g data-name="admin">
2123- <g fill="#eee8d5" stroke="#33322E" data-name="admin">
2124- <circle r="4.0" cx="1652.5" cy="500.0" data-name="admin"></circle>
2125- <path d="M1652.5 504.0 L1652.5 512.0" fill="none" data-name="admin"></path>
2126- <path d="M1648.5 508.0 L1656.5 508.0" fill="none" data-name="admin"></path>
2127- <path d="M1648.5 516.0 L1652.5 512.0 L1656.5 516.0" fill="none" data-name="admin"></path>
2128- </g>
2129- <g transform="translate(1621, 512)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="admin">
2130- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="admin">
2131- <text x="23.5" y="14.1" stroke="none" text-anchor="middle" data-name="admin">admin</text>
2132-
2133- </g>
2134- </g>
2135- </g>
2136- <g data-name="ayllu-builder-1">
2137- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-1">
2138- <rect x="846.5" y="424.0" height="184.0" width="173.0" data-name="ayllu-builder-1"></rect>
2139- <path d="M846.5 456.0 L1019.5 456.0" fill="none" data-name="ayllu-builder-1"></path>
2140- </g>
2141- <g transform="translate(846.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-1">
2142- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-1">
2143- <text x="78.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-1">ayllu-builder-1</text>
2144-
2145- </g>
2146- </g>
2147- <g transform="translate(846.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-1">
2148- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-1">
2149- <g transform="translate(20, 20)" data-name="ayllu-builder-1">
2150- <g data-name="qemu-x86_64">
2151- <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-x86_64">
2152- <rect x="0.0" y="32.0" height="64.0" width="117.0" data-name="qemu-x86_64"></rect>
2153- <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>
2154- <path d="M0.0 32.0 L117.0 32.0" fill="none" data-name="qemu-x86_64"></path>
2155- <path d="M0.0 64.0 L117.0 64.0" fill="none" data-name="qemu-x86_64"></path>
2156- </g>
2157- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
2158- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
2159- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">qemu-x86_64</text>
2160-
2161- </g>
2162- </g>
2163- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
2164- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
2165- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">tarpc-server</text>
2166-
2167- </g>
2168- </g>
2169- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
2170- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
2171- <text x="0.0" y="14.1" stroke="none" data-name="qemu-x86_64">executor</text>
2172-
2173- </g>
2174- </g>
2175- </g>
2176- </g>
2177- </g>
2178- </g>
2179- </g>
2180- <g data-name="ayllu-builder-2">
2181- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-2">
2182- <rect x="1059.5" y="424.0" height="184.0" width="181.0" data-name="ayllu-builder-2"></rect>
2183- <path d="M1059.5 456.0 L1240.5 456.0" fill="none" data-name="ayllu-builder-2"></path>
2184- </g>
2185- <g transform="translate(1059.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-2">
2186- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-2">
2187- <text x="82.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-2">ayllu-builder-2</text>
2188-
2189- </g>
2190- </g>
2191- <g transform="translate(1059.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-2">
2192- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-2">
2193- <g transform="translate(20, 20)" data-name="ayllu-builder-2">
2194- <g data-name="qemu-aarch64">
2195- <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-aarch64">
2196- <rect x="0.0" y="32.0" height="64.0" width="125.0" data-name="qemu-aarch64"></rect>
2197- <path d="M0.0 32.0 L0.0 0.0 L118.9 0.0 L118.9 32.0 Z" data-name="qemu-aarch64"></path>
2198- <path d="M0.0 32.0 L125.0 32.0" fill="none" data-name="qemu-aarch64"></path>
2199- <path d="M0.0 64.0 L125.0 64.0" fill="none" data-name="qemu-aarch64"></path>
2200- </g>
2201- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
2202- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
2203- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">qemu-aarch64</text>
2204-
2205- </g>
2206- </g>
2207- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
2208- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
2209- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">tarpc-server</text>
2210-
2211- </g>
2212- </g>
2213- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
2214- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
2215- <text x="0.0" y="14.1" stroke="none" data-name="qemu-aarch64">exectuor</text>
2216-
2217- </g>
2218- </g>
2219- </g>
2220- </g>
2221- </g>
2222- </g>
2223- </g>
2224- <g data-name="ayllu-builder-n">
2225- <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-n">
2226- <rect x="1280.5" y="424.0" height="184.0" width="157.0" data-name="ayllu-builder-n"></rect>
2227- <path d="M1280.5 456.0 L1437.5 456.0" fill="none" data-name="ayllu-builder-n"></path>
2228- </g>
2229- <g transform="translate(1280.5, 424)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-n">
2230- <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-n">
2231- <text x="70.5" y="14.1" stroke="none" text-anchor="middle" data-name="ayllu-builder-n">ayllu-builder-n</text>
2232-
2233- </g>
2234- </g>
2235- <g transform="translate(1280.5, 456)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-n">
2236- <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-n">
2237- <g transform="translate(20, 20)" data-name="ayllu-builder-n">
2238- <g data-name="lxc">
2239- <g fill="#fdf6e3" stroke="#33322E" data-name="lxc">
2240- <rect x="0.0" y="32.0" height="64.0" width="101.0" data-name="lxc"></rect>
2241- <path d="M0.0 32.0 L0.0 0.0 L35.2 0.0 L35.2 32.0 Z" data-name="lxc"></path>
2242- <path d="M0.0 32.0 L101.0 32.0" fill="none" data-name="lxc"></path>
2243- <path d="M0.0 64.0 L101.0 64.0" fill="none" data-name="lxc"></path>
2244- </g>
2245- <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
2246- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
2247- <text x="0.0" y="14.1" stroke="none" data-name="lxc">lxc</text>
2248-
2249- </g>
2250- </g>
2251- <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
2252- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
2253- <text x="0.0" y="14.1" stroke="none" data-name="lxc">tarpc-server</text>
2254-
2255- </g>
2256- </g>
2257- <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
2258- <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
2259- <text x="0.0" y="14.1" stroke="none" data-name="lxc">executor</text>
2260-
2261- </g>
2262- </g>
2263- </g>
2264- </g>
2265- </g>
2266- </g>
2267- </g>
2268- </g>
2269- </g>
2270- </g>
2271- </g>
2272- </svg>
2273 diff --git a/www/static/assets/ayllu_logo.png b/www/static/assets/ayllu_logo.png
2274deleted file mode 100644
2275index caf4865..0000000
2276 Binary files a/www/static/assets/ayllu_logo.png and /dev/null differ
2277 diff --git a/www/static/assets/ayllu_logo.svg b/www/static/assets/ayllu_logo.svg
2278deleted file mode 100644
2279index d1db83a..0000000
2280--- a/www/static/assets/ayllu_logo.svg
2281+++ /dev/null
2282 @@ -1,101 +0,0 @@
2283- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2284- <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">
2285- <metadata>
2286- <rdf:RDF>
2287- <cc:Work rdf:about="">
2288- <dc:format>image/svg+xml</dc:format>
2289- <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
2290- </cc:Work>
2291- </rdf:RDF>
2292- </metadata>
2293- <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"/>
2294- <g fill-rule="evenodd" stroke-width="2" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-opacity="1">
2295- <g id="brown" fill="#5c451c" stroke="#5c451c">
2296- <path style="" d="M 1,1 H 901 V 701 H 1 Z m 0,0"/>
2297- </g>
2298- <g id="orange" fill="#ffa300" stroke="#ffa300">
2299- <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"/>
2300- <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"/>
2301- <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"/>
2302- <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"/>
2303- </g>
2304- <g id="turquoise" fill="#358794" stroke="#358794">
2305- <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"/>
2306- <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"/>
2307- <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"/>
2308- <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"/>
2309- <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"/>
2310- <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"/>
2311- <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"/>
2312- <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"/>
2313- <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"/>
2314- <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"/>
2315- <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"/>
2316- <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"/>
2317- </g>
2318- <g id="white" fill="#ffffff" stroke="#ffffff">
2319- <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"/>
2320- <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"/>
2321- <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"/>
2322- <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"/>
2323- <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"/>
2324- <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"/>
2325- <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"/>
2326- <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"/>
2327- <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"/>
2328- <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"/>
2329- <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"/>
2330- <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"/>
2331- <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"/>
2332- <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"/>
2333- <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"/>
2334- <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"/>
2335- <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"/>
2336- <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"/>
2337- <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"/>
2338- <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"/>
2339- <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"/>
2340- <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"/>
2341- <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"/>
2342- <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"/>
2343- <path d="M 1,21 H 881 V 61 H 1 Z m 0,0"/>
2344- <path d="m 1,641 h 880 v 40 H 1 Z m 0,0"/>
2345- <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"/>
2346- <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"/>
2347- <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"/>
2348- <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"/>
2349- <path d="m 401,301 h 20 v 20 h -20 z m 0,0"/>
2350- <path d="m 381,321 h 20 v 20 h -20 z m 0,0"/>
2351- <path d="m 361,341 h 20 v 20 h -20 z m 0,0"/>
2352- <path d="m 381,361 h 20 v 20 h -20 z m 0,0"/>
2353- <path d="m 401,381 h 20 v 20 h -20 z m 0,0"/>
2354- <path d="m 501,321 h 20 v 20 h -20 z m 0,0"/>
2355- <path d="m 521,341 h 20 v 20 h -20 z m 0,0"/>
2356- <path d="m 501,361 h 20 v 20 h -20 z m 0,0"/>
2357- <path d="m 481,381 h 20 v 20 h -20 z m 0,0"/>
2358- <path d="m 421,341 h 20 v 20 h -20 z m 0,0"/>
2359- <path d="m 461,341 h 20 v 20 h -20 z m 0,0"/>
2360- <path d="m 881,21 h 20 v 40 h -20 z m 0,0"/>
2361- <path d="m 881,641 h 20 v 40 h -20 z m 0,0"/>
2362- </g>
2363- <g id="red" fill="#de3333" stroke="#de3333">
2364- <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"/>
2365- <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"/>
2366- <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"/>
2367- <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"/>
2368- <path d="m 381,341 h 20 v 20 h -20 z m 0,0"/>
2369- <path d="m 401,321 h 20 v 20 h -20 z m 0,0"/>
2370- <path d="m 421,301 h 20 v 20 h -20 z m 0,0"/>
2371- <path d="m 461,301 h 20 v 20 h -20 z m 0,0"/>
2372- <path d="m 481,321 h 20 v 20 h -20 z m 0,0"/>
2373- <path d="m 501,341 h 20 v 20 h -20 z m 0,0"/>
2374- <path d="m 481,361 h 20 v 20 h -20 z m 0,0"/>
2375- <path d="m 461,381 h 20 v 20 h -20 z m 0,0"/>
2376- <path d="m 441,361 h 20 v 20 h -20 z m 0,0"/>
2377- <path d="m 421,381 h 20 v 20 h -20 z m 0,0"/>
2378- <path d="m 401,361 h 20 v 20 h -20 z m 0,0"/>
2379- <path d="m 881,81 h 20 v 220 h -20 z m 0,0"/>
2380- <path d="m 881,401 h 20 v 220 h -20 z m 0,0"/>
2381- </g>
2382- </g>
2383- </svg>
2384 diff --git a/www/static/assets/images/ui-day.png b/www/static/assets/images/ui-day.png
2385deleted file mode 100644
2386index 3e217a7..0000000
2387 Binary files a/www/static/assets/images/ui-day.png and /dev/null differ
2388 diff --git a/www/static/assets/images/ui.png b/www/static/assets/images/ui.png
2389deleted file mode 100644
2390index bf94438..0000000
2391 Binary files a/www/static/assets/images/ui.png and /dev/null differ
2392 diff --git a/www/templates/base.html b/www/templates/base.html
2393deleted file mode 100644
2394index 78e1b0c..0000000
2395--- a/www/templates/base.html
2396+++ /dev/null
2397 @@ -1,41 +0,0 @@
2398- <!DOCTYPE html>
2399- <html lang="en">
2400- <head>
2401- <meta charset="utf-8" />
2402- <link rel="stylesheet" href="/main.css" />
2403- <link href="/assets/ayllu_logo.svg" rel="icon" type="image/svg+xml" />
2404- <link href="/assets/ayllu_logo.png" rel="icon" sizes="any" type="image/png" />
2405- <title>Ayllu</title>
2406- </head>
2407- <nav>
2408- <ul>
2409- <li>
2410- <a href="/">
2411- <img class="logo" src="/assets/ayllu_logo.png" />
2412- </a>
2413- </li>
2414- </ul>
2415- <ul>
2416- <li>
2417- <a href="https://ayllu-forge.org/browse">browse</a>
2418- </li>
2419- <li>
2420- <a href="/docs">docs</a>
2421- </li>
2422- </ul>
2423- </nav>
2424- <body class="container">
2425- <div class="wrapper">
2426- <main class="page-body">
2427- {% block doc_nav %}
2428- {% endblock doc_nav %}
2429- {% block content %}
2430- {% endblock
2431- content %}
2432- </main>
2433- <footer class="page-footer">
2434- {{ now() | date(format="%Y") }}, <a href="/ayllu/ayllu/blob/main/ATTRIBUTIONS.md">attributions</a>
2435- </footer>
2436- </div>
2437- </body>
2438- </html>
2439 diff --git a/www/templates/docs_home.html b/www/templates/docs_home.html
2440deleted file mode 100644
2441index 5314d36..0000000
2442--- a/www/templates/docs_home.html
2443+++ /dev/null
2444 @@ -1,21 +0,0 @@
2445- {% extends "base.html" %}
2446- {% block title %}
2447- {{ page.title }} | {{ super() }}
2448- {% endblock title %}
2449- {% block doc_nav %}
2450- {% endblock doc_nav %}
2451- {% block content %}
2452- <div class="documentation">
2453- <div class="side-panel">
2454- {% set section = get_section(path="docs/_index.md") %}
2455- <ul>
2456- {% for page in section.pages %}
2457- <li class="{% if current_path == page.path %}active{% endif %}">
2458- <a href="{{ page.permalink }}">{{ page.title }}</a>
2459- </li>
2460- {% endfor %}
2461- </ul>
2462- </div>
2463- <div class="doc-content">{{ section.content | safe }}</div>
2464- </div>
2465- {% endblock content %}
2466 diff --git a/www/templates/index.html b/www/templates/index.html
2467deleted file mode 100644
2468index 7155bae..0000000
2469--- a/www/templates/index.html
2470+++ /dev/null
2471 @@ -1,4 +0,0 @@
2472- {% extends "base.html" %}
2473- {% block content %}
2474- {{ section.content | safe }}
2475- {% endblock content %}
2476 diff --git a/www/templates/page.html b/www/templates/page.html
2477deleted file mode 100644
2478index 8ed6c76..0000000
2479--- a/www/templates/page.html
2480+++ /dev/null
2481 @@ -1,21 +0,0 @@
2482- {% extends "base.html" %}
2483- {% block title %}
2484- {{ page.title }} | {{ super() }}
2485- {% endblock title %}
2486- {% block doc_nav %}
2487- {% endblock doc_nav %}
2488- {% block content %}
2489- <div class="documentation">
2490- <div class="side-panel">
2491- {% set section = get_section(path="docs/_index.md") %}
2492- <ul>
2493- {% for page in section.pages %}
2494- <li class="{% if current_path == page.path %}active{% endif %}">
2495- <a href="{{ page.permalink }}">{{ page.title }}</a>
2496- </li>
2497- {% endfor %}
2498- </ul>
2499- </div>
2500- <div class="doc-content">{{ page.content | safe }}</div>
2501- </div>
2502- {% endblock content %}