Merge pull request #1 from Unkn0wnCat/feature-website

Add initial website
This commit is contained in:
Kevin Kandlbinder 2022-03-02 16:31:00 +01:00 committed by GitHub
commit faa0dd2944
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 9399 additions and 0 deletions

20
website/.gitignore vendored Normal file
View file

@ -0,0 +1,20 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

41
website/README.md Normal file
View file

@ -0,0 +1,41 @@
# Website
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
### Installation
```
$ yarn
```
### Local Development
```
$ yarn start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
### Build
```
$ yarn build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
### Deployment
Using SSH:
```
$ USE_SSH=true yarn deploy
```
Not using SSH:
```
$ GIT_USER=<Your GitHub username> yarn deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.

3
website/babel.config.js Normal file
View file

@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

13
website/crowdin.yml Normal file
View file

@ -0,0 +1,13 @@
project_id: '502518'
api_token_env: CROWDIN_PERSONAL_TOKEN
preserve_hierarchy: true
files:
# JSON translation files
- source: /i18n/en/**/*
translation: /i18n/%two_letters_code%/**/%original_file_name%
# Docs Markdown files
- source: /docs/**/*
translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%
# Blog Markdown files
# - source: /blog/**/*
# translation: /i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%

20
website/docs/intro.md Normal file
View file

@ -0,0 +1,20 @@
---
sidebar_position: 1
---
# Documentation Intro
:::caution
This documentation is for the Alpha version of Matrix-Veles. Veles may be unstable and weird.
:::
So you are interested in Veles, that's great! And actually you came
to exactly the right place.
This is the documentation for Matrix-Veles. It contains a helpful
quick-start-guide as well as in-depth references for anything
you might need.
So how about [checking out the basic tutorial to get you started](tutorial-basics/install)?

View file

@ -0,0 +1,4 @@
{
"label": "Tutorial - Basics",
"position": 2
}

View file

@ -0,0 +1,66 @@
---
sidebar_position: 1
---
# Installing Veles
:::caution
This documentation is for the Alpha version of Matrix-Veles. Veles may be unstable and weird.
:::
:::info Software-Recommendations
Whilst Veles should work on Linux, Windows and macOS, **we strongly recommend you use Linux** as this is what
Veles was developed and tested on! (Veles will run on arm-based minicomputers)
:::
## Docker
:::tip TODO
This section will come soon.
:::
## Bare-Metal
:::info Pre-Flight-Installations
Veles uses *MongoDB* as a database backend. Please [install MongoDB Community Server](https://www.mongodb.com/try/download/community) first.
:::
### Using the binary release
Veles provides ready-made binaries for the major OSes and architectures.
1. Go to the [latest release on GitHub](https://github.com/Unkn0wnCat/matrix-veles/releases/latest)
2. Navigate down to "*Assets*" and find the correct file for your OS and architecture
3. Download the file (Linux/macOS: .tar.gz, Windows: .zip)
1. (Optional) Check the md5 sum of your downloaded file against the provided md5 sum
4. Unpack the file (Your OS should come with utilities to do this)
5. Navigate to the unpacked directory in your Terminal
6. Run `./matrix-veles generateConfig` to generate a basic config<br/>(Linux: You may need to allow execution of the file using `chmod +x ./matrix-veles`)
7. Edit the configuration in `./config.yaml` to reflect your setup
8. Start Matrix-Veles using `./matrix-veles run`
You now have a fully functioning install of Veles! 🎉 Access the web interface at http://127.0.0.1:8123!
### Building from Source
:::info
Experience with GoLang is beneficial for this!
:::
To build from source make sure you have the [latest version of GoLang](https://go.dev/dl/) installed.
1. Open a terminal and execute `go install github.com/Unkn0wnCat/matrix-veles@latest`
2. After a few minutes the build should be complete
3. Run `matrix-veles generateConfig` in the directory you want your configuration to reside in
4. Edit the configuration in `./config.yaml` to reflect your setup
5. Start Matrix-Veles using `matrix-veles run` in the same directory as your config

View file

@ -0,0 +1,4 @@
{
"label": "Tutorial - Extras",
"position": 3
}

View file

@ -0,0 +1,11 @@
---
sidebar_position: 1
---
# Using Prometheus with Veles
Using Prometheus with Veles is really easy as Veles exposes a compatible metrics endpoint by default.
To use the metrics simply add a scrape-job to Prometheus to pull the metrics from `http://[your-server-here]:8123/metrics`.
And that's it, you now have a few relevant metrics to monitor the health of your Veles! 🎉

View file

@ -0,0 +1,142 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Matrix-Veles',
tagline: 'Protector of your Matrix-harvest!',
url: 'https://veles.1in1.net',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
organizationName: 'Unkn0wnCat',
projectName: 'matrix-veles',
i18n: {
defaultLocale: "en",
locales: ["en", "de"]
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
editUrl: ({locale, versionDocsDirPath, docPath}) => {
if (locale !== "en") {
return `https://crowdin.com/project/matrix-veles/${locale}`;
}
return `https://github.com/Unkn0wnCat/matrix-veles/tree/main/website/${versionDocsDirPath}/${docPath}`;
},
},
/*blog: {
showReadingTime: true,
editUrl:
'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/',
},*/
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Matrix-Veles',
logo: {
alt: 'Matrix-Veles Logo',
src: 'img/logo.svg',
},
items: [
{
type: 'doc',
docId: 'intro',
position: 'left',
label: 'Documentation',
},
//{to: '/blog', label: 'Blog', position: 'left'},
{
type: 'localeDropdown',
position: 'right',
},
{
href: 'https://github.com/Unkn0wnCat/matrix-veles',
label: 'GitHub',
position: 'right',
},
{
href: 'https://github.com/Unkn0wnCat/matrix-veles/releases/latest',
label: 'Download',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Tutorial',
to: '/docs/intro',
},
],
},
/*{
title: 'Community',
items: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
},
{
label: 'Discord',
href: 'https://discordapp.com/invite/docusaurus',
},
{
label: 'Twitter',
href: 'https://twitter.com/docusaurus',
},
],
},*/
{
title: 'More',
items: [
/*{
label: 'Blog',
to: '/blog',
},*/
{
label: 'Imprint',
href: 'https://kevink.dev/legal/about',
},
{
label: 'Disclaimer',
href: 'https://github.com/legal/disclaimer',
},
{
label: 'GitHub',
href: 'https://github.com/facebook/docusaurus',
},
],
},
],
copyright: `CC-BY-4.0 ${new Date().getFullYear()}, Matrix-Veles Contributors`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}),
};
module.exports = config;

260
website/i18n/de/code.json Normal file
View file

@ -0,0 +1,260 @@
{
"theme.ErrorPageContent.title": {
"message": "Diese Seite ist abgestürzt.",
"description": "The title of the fallback page when the page crashed"
},
"theme.ErrorPageContent.tryAgain": {
"message": "Noch einmal versuchen",
"description": "The label of the button to try again when the page crashed"
},
"theme.NotFound.title": {
"message": "Seite nicht gefunden",
"description": "The title of the 404 page"
},
"theme.NotFound.p1": {
"message": "Wir konnten leider nicht finden, wonach du suchst.",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "Bitte kontaktieren Sie den Besitzer der Seite, die Sie mit der ursprünglichen URL verlinkt hat, und teilen Sie ihm mit, dass der Link nicht mehr funktioniert.",
"description": "The 2nd paragraph of the 404 page"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "Zurück nach oben",
"description": "The ARIA label for the back to top button"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "Schließen",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.archive.title": {
"message": "Archiv",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "Archiv",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "Navigation der Blog-Listenseite",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "Neuere Einträge",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "Ältere Einträge",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.readingTime.plurals": {
"message": "Eine Min. Lesezeit|{readingTime} Min. Lesezeit",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.post.readMoreLabel": {
"message": "Erfahre mehr über {title}",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.blog.post.readMore": {
"message": "Weiterlesen",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "Navigation der Blogpost Seite",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "Neuerer Beitrag",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "Älterer Beitrag",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "Aktuelle Blog-Beiträge Navigation",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.blog.post.plurals": {
"message": "Ein Beitrag|{count} Beiträge",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "{nPosts} Markiert mit \"{tagName}\"",
"description": "The title of the page for a blog tag"
},
"theme.tags.tagsPageLink": {
"message": "Alle Tags anzeigen",
"description": "The label of the link targeting the tag list page"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "Code in Zwischenablage kopieren",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copied": {
"message": "Kopiert",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copy": {
"message": "Kopieren",
"description": "The copy button label on code blocks"
},
"theme.docs.DocCard.categoryDescription": {
"message": "{count} Elemente",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "Seitenleiste ausklappen",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "Seitenleiste ausklappen",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.paginator.navAriaLabel": {
"message": "Navigation der Dokumentationsseiten",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "Vorheriges",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "Als Nächstes",
"description": "The label used to navigate to the next doc"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "Seitenleiste einklappen",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "Seitenleiste einklappen",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": {
"message": "Einklappbare Seitenleistenkategorie \"{label}\" umschalten",
"description": "The ARIA label to toggle the collapsible sidebar category"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "Ein Dokument markiert|{count} Dokumente markiert",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged} Markiert mit \"{tagName}\"",
"description": "The title of the page for a docs tag"
},
"theme.docs.versionBadge.label": {
"message": "Version: {versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "Dies ist eine unveröffentlichte Dokumentation für die Version {siteTitle} {versionLabel}.",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "Dies ist eine Dokumentation für {siteTitle} {versionLabel}, die nicht mehr aktiv gepflegt wird.",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "Die aktuelle Dokumentation kann unter {latestVersionLink} ({versionLabel}) gefunden werden.",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "Neuste Version",
"description": "The label used for the latest version suggestion link label"
},
"theme.common.editThisPage": {
"message": "Diese Seite bearbeiten",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "Direkter Link zur Überschrift",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": " am {date}",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": " von {user}",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "Zuletzt aktualisiert{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← Zurück zum Hauptmenü",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "Versionen",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.common.skipToMainContent": {
"message": "Zum Hauptinhalt springen",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "Auf dieser Seite",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.tags.tagsListLabel": {
"message": "Schlagwörter:",
"description": "The label alongside a tag list"
},
"theme.colorToggle.ariaLabel": {
"message": "Zwischen Hell- und Dunkelmodus wechseln (derzeit {mode})",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "Dunkler Modus",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "Heller Modus",
"description": "The name for the light color mode"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "Sprachen",
"description": "The label for the mobile language switcher dropdown"
},
"theme.tags.tagsPageTitle": {
"message": "Schlagwörter",
"description": "The title of the tag list page"
},
"Protector of your Matrix-harvest!": {
"message": "Beschützer deiner Matrix-Ernte!"
},
"Quick Start Tutorial - 5min ⏱️": {
"message": "Schnellstart-Anleitung - 5min ⏱️"
},
"Welcome": {
"message": "Willkommen",
"description": "Title of the homepage"
},
"Matrix-Veles is a next-gen bot for protecting Matrix-chat-rooms against spammers.": {
"message": "Matrix-Veles ist ein moderner Bot, um Matrix-Chat-Räume gegen Spammer zu schützen.",
"description": "Meta-Description of the homepage"
},
"Lightweight": {
"message": "Ressourcenschonend"
},
"Veles is built to be light on storage, memory and CPU. Run it on your server, PC, Raspberry Pi or Smart Toaster!": {
"message": "Veles ist so konstruiert, dass es geringe Festplattenspeicher, Arbeitsspeicher und CPU-Ressourcen braucht. Führe es auf deinem Server, PC, Raspberry Pi oder Smart Toaster aus!"
},
"Modern Codebase": {
"message": "Moderne Codebase"
},
"Veles is built from the ground up to deliver you the best experience using GoLang - a next-gen language from Google.": {
"message": "Veles ist von Grund auf gebaut, um die beste Erfahrung mit GoLang - einer modernen Sprache von Google - zu liefern."
},
"And the best thing It\\'s open source! Fork it, make a mod where all bad messages are replaced by cat images! You are free!": {
"message": "Und das Beste: Es ist Quelloffen! Forke es, mache eine Mod wo alle bösen Nachrichten mit Katzenbildern ersetzt werden! Du bist frei!"
},
"Convenient Web Interface": {
"message": "Bequeme Weboberfläche"
},
"Veles can be managed from any PC in the world. All you need to access the modern web interface is an internet connection and a web browser.": {
"message": "Veles kann von jedem PC auf der Welt verwaltet werden. Alles, was du für den Zugriff auf die moderne Webschnittstelle benötigst, ist eine Internetverbindung und ein Webbrowser."
}
}

View file

@ -0,0 +1,14 @@
{
"title": {
"message": "Blog",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "Blog",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "Neueste Beiträge",
"description": "The label for the left sidebar"
}
}

View file

@ -0,0 +1,14 @@
{
"version.label": {
"message": "Nächste",
"description": "The label for version current"
},
"sidebar.tutorialSidebar.category.Tutorial - Basics": {
"message": "Einführung - Grundlagen",
"description": "The label for category Tutorial - Basics in sidebar tutorialSidebar"
},
"sidebar.tutorialSidebar.category.Tutorial - Extras": {
"message": "Einführung - Extras",
"description": "The label for category Tutorial - Extras in sidebar tutorialSidebar"
}
}

View file

@ -0,0 +1,17 @@
---
sidebar_position: 1
---
# Einleitung
:::caution
Diese Dokumentation ist für die Alpha-Version von Matrix-Veles. Veles könnte instabil und seltsam sein.
:::
Also bist du an Veles interessiert, das ist großartig! Und tatsächlich bist du genau an die richtige Stelle gekommen.
Dies ist die Dokumentation für Matrix-Veles. Sie enthält eine hilfreiche Schnellstart-Anleitung sowie detaillierte Referenzen für alles, was du brauchen könntest.
Wie wäre es mit [der Grundlageneinführung](tutorial-basics/install) zu beginnen?

View file

@ -0,0 +1,4 @@
{
"label": "Einführung - Grundlagen",
"position": 2
}

View file

@ -0,0 +1,65 @@
---
sidebar_position: 1
---
# Veles Installation
:::caution
Diese Dokumentation ist für die Alpha-Version von Matrix-Veles. Veles könnte instabil und seltsam sein.
:::
:::info Software-Empfehlungen
Obwohl Veles unter Linux, Windows und macOS funktionieren sollte, **empfehlen wir Linux** zu verwenden, da Veles unter diesem entwickelt und getestet wurde! (Veles kann auf arm-basierten Minicomputern laufen)
:::
## Docker
:::tip TODO
Dieser Abschnitt wird in Kürze kommen.
:::
## Bare-Metal
:::info Vorab-Installationen
Veles verwendet *MongoDB* als Datenbank-Backend. Bitte [zuerst den MongoDB Community Server](https://www.mongodb.com/try/download/community) installieren.
:::
### Verwendung der Binärversion
Veles stellt fertige Binärdateien für die verbreitetsten Betriebssysteme und Architekturen bereit.
1. Gehe zur [neuesten Version auf GitHub](https://github.com/Unkn0wnCat/matrix-veles/releases/latest)
2. Navigiere unten zu "*Assets*" und finde die richtige Datei für dein Betriebssystem und deine Architektur
3. Lade die Datei herunter (Linux/macOS: .tar.gz, Windows: .zip)
1. (Optional) Überprüfe die MD5-Summe der heruntergeladenen Datei mit der angegebenen MD5-Summe
4. Entpacke die Datei (Dein Betriebssystem sollte Hilfsprogramme haben, um dies zu tun)
5. Navigiere in deinem Terminal zum entpackten Verzeichnis
6. Führe `./matrix-veles generateConfig` aus um eine Basiskonfiguration zu erstellen<br/>(Linux: Du musst vielleicht die Datei mit `chmod +x ./matrix-veles` ausführbar machen)
7. Bearbeite die Konfiguration in `./config.yaml` um dein Setup widerzuspiegeln
8. Starte Matrix-Veles mit `./matrix-veles run`
Du hast jetzt eine voll funktionsfähige Installation von Veles! 🎉 Greife auf das Web-Interface unter http://127.0.0.1:8123 zu!
### Aus dem Quellcode erstellen
:::info
Erfahrung mit GoLang ist hierfür hilfreich!
:::
Um aus dem Quellcode zu bauen, stelle sicher, dass du die [neueste Version von GoLang](https://go.dev/dl/) installiert hast.
1. Öffne ein Terminal und führe `go install github.com/Unkn0wnCat/matrix-veles@latest` aus
2. Nach ein paar Minuten sollte das Build abgeschlossen sein
3. Führe `matrix-veles generateConfig` in dem Ordner aus, in dem du die Konfiguration speichern möchtest
4. Bearbeite die Konfiguration in `./config.yaml` um dein Setup widerzuspiegeln
5. Starte Matrix-Veles mit `matrix-veles run` im selben Verzeichnis wie deine Konfiguration

View file

@ -0,0 +1,4 @@
{
"label": "Einführung - Extras",
"position": 3
}

View file

@ -0,0 +1,11 @@
---
sidebar_position: 1
---
# Prometheus mit Veles verwenden
Die Verwendung von Prometheus mit Veles ist sehr einfach, da Veles standardmäßig einen kompatiblen Metrikendpunkt bereitstellt.
Um die Metriken zu verwenden, fügen Sie einfach einen Scrape-Job zu Prometheus hinzu, um die Metriken von `http://[dein-server-hier]:8123/metrics` zu ziehen.
Und das war's auch schon, du hast jetzt Zugriff auf ein paar relevante Metriken um die Gesundheit deines Veles zu überwachen! 🎉

View file

@ -0,0 +1,30 @@
{
"link.title.Docs": {
"message": "Dokumentation",
"description": "The title of the footer links column with title=Docs in the footer"
},
"link.title.More": {
"message": "Mehr",
"description": "The title of the footer links column with title=More in the footer"
},
"link.item.label.Tutorial": {
"message": "Einführung",
"description": "The label of footer link with label=Tutorial linking to /docs/intro"
},
"link.item.label.Imprint": {
"message": "Impressum",
"description": "The label of footer link with label=Imprint linking to https://kevink.dev/legal/about"
},
"link.item.label.Disclaimer": {
"message": "Disclaimer",
"description": "The label of footer link with label=Disclaimer linking to https://github.com/legal/disclaimer"
},
"link.item.label.GitHub": {
"message": "GitHub",
"description": "The label of footer link with label=GitHub linking to https://github.com/facebook/docusaurus"
},
"copyright": {
"message": "CC-BY-4.0 2022, Matrix-Veles-Mitwirkende",
"description": "The footer copyright"
}
}

View file

@ -0,0 +1,18 @@
{
"title": {
"message": "Matrix-Veles",
"description": "The title in the navbar"
},
"item.label.Documentation": {
"message": "Dokumentation",
"description": "Navbar item with label Documentation"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item with label GitHub"
},
"item.label.Download": {
"message": "Herunterladen",
"description": "Navbar item with label Download"
}
}

260
website/i18n/en/code.json Normal file
View file

@ -0,0 +1,260 @@
{
"theme.ErrorPageContent.title": {
"message": "This page crashed.",
"description": "The title of the fallback page when the page crashed"
},
"theme.ErrorPageContent.tryAgain": {
"message": "Try again",
"description": "The label of the button to try again when the page crashed"
},
"theme.NotFound.title": {
"message": "Page Not Found",
"description": "The title of the 404 page"
},
"theme.NotFound.p1": {
"message": "We could not find what you were looking for.",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.",
"description": "The 2nd paragraph of the 404 page"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "Scroll back to top",
"description": "The ARIA label for the back to top button"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "Close",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.archive.title": {
"message": "Archive",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "Archive",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "Blog list page navigation",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "Newer Entries",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "Older Entries",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.readingTime.plurals": {
"message": "One min read|{readingTime} min read",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.post.readMoreLabel": {
"message": "Read more about {title}",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.blog.post.readMore": {
"message": "Read More",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "Blog post page navigation",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "Newer Post",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "Older Post",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "Blog recent posts navigation",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.blog.post.plurals": {
"message": "One post|{count} posts",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "{nPosts} tagged with \"{tagName}\"",
"description": "The title of the page for a blog tag"
},
"theme.tags.tagsPageLink": {
"message": "View All Tags",
"description": "The label of the link targeting the tag list page"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "Copy code to clipboard",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copied": {
"message": "Copied",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copy": {
"message": "Copy",
"description": "The copy button label on code blocks"
},
"theme.docs.DocCard.categoryDescription": {
"message": "{count} items",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "Expand sidebar",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "Expand sidebar",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.paginator.navAriaLabel": {
"message": "Docs pages navigation",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "Previous",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "Next",
"description": "The label used to navigate to the next doc"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "Collapse sidebar",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "Collapse sidebar",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": {
"message": "Toggle the collapsible sidebar category '{label}'",
"description": "The ARIA label to toggle the collapsible sidebar category"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "One doc tagged|{count} docs tagged",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged} with \"{tagName}\"",
"description": "The title of the page for a docs tag"
},
"theme.docs.versionBadge.label": {
"message": "Version: {versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "This is unreleased documentation for {siteTitle} {versionLabel} version.",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "latest version",
"description": "The label used for the latest version suggestion link label"
},
"theme.common.editThisPage": {
"message": "Edit this page",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "Direct link to heading",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": " on {date}",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": " by {user}",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "Last updated{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← Back to main menu",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "Versions",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.common.skipToMainContent": {
"message": "Skip to main content",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "On this page",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.tags.tagsListLabel": {
"message": "Tags:",
"description": "The label alongside a tag list"
},
"theme.colorToggle.ariaLabel": {
"message": "Switch between dark and light mode (currently {mode})",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "dark mode",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "light mode",
"description": "The name for the light color mode"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "Languages",
"description": "The label for the mobile language switcher dropdown"
},
"theme.tags.tagsPageTitle": {
"message": "Tags",
"description": "The title of the tag list page"
},
"Protector of your Matrix-harvest!": {
"message": "Protector of your Matrix-harvest!"
},
"Quick Start Tutorial - 5min ⏱️": {
"message": "Quick Start Tutorial - 5min ⏱️"
},
"Welcome": {
"message": "Welcome",
"description": "Title of the homepage"
},
"Matrix-Veles is a next-gen bot for protecting Matrix-chat-rooms against spammers.": {
"message": "Matrix-Veles is a next-gen bot for protecting Matrix-chat-rooms against spammers.",
"description": "Meta-Description of the homepage"
},
"Lightweight": {
"message": "Lightweight"
},
"Veles is built to be light on storage, memory and CPU. Run it on your server, PC, Raspberry Pi or Smart Toaster!": {
"message": "Veles is built to be light on storage, memory and CPU. Run it on your server, PC, Raspberry Pi or Smart Toaster!"
},
"Modern Codebase": {
"message": "Modern Codebase"
},
"Veles is built from the ground up to deliver you the best experience using GoLang - a next-gen language from Google.": {
"message": "Veles is built from the ground up to deliver you the best experience using GoLang - a next-gen language from Google."
},
"And the best thing It\\'s open source! Fork it, make a mod where all bad messages are replaced by cat images! You are free!": {
"message": "And the best thing It\\'s open source! Fork it, make a mod where all bad messages are replaced by cat images! You are free!"
},
"Convenient Web Interface": {
"message": "Convenient Web Interface"
},
"Veles can be managed from any PC in the world. All you need to access the modern web interface is an internet connection and a web browser.": {
"message": "Veles can be managed from any PC in the world. All you need to access the modern web interface is an internet connection and a web browser."
}
}

View file

@ -0,0 +1,14 @@
{
"title": {
"message": "Blog",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "Blog",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "Recent posts",
"description": "The label for the left sidebar"
}
}

View file

@ -0,0 +1,14 @@
{
"version.label": {
"message": "Next",
"description": "The label for version current"
},
"sidebar.tutorialSidebar.category.Tutorial - Basics": {
"message": "Tutorial - Basics",
"description": "The label for category Tutorial - Basics in sidebar tutorialSidebar"
},
"sidebar.tutorialSidebar.category.Tutorial - Extras": {
"message": "Tutorial - Extras",
"description": "The label for category Tutorial - Extras in sidebar tutorialSidebar"
}
}

View file

@ -0,0 +1,30 @@
{
"link.title.Docs": {
"message": "Docs",
"description": "The title of the footer links column with title=Docs in the footer"
},
"link.title.More": {
"message": "More",
"description": "The title of the footer links column with title=More in the footer"
},
"link.item.label.Tutorial": {
"message": "Tutorial",
"description": "The label of footer link with label=Tutorial linking to /docs/intro"
},
"link.item.label.Imprint": {
"message": "Imprint",
"description": "The label of footer link with label=Imprint linking to https://kevink.dev/legal/about"
},
"link.item.label.Disclaimer": {
"message": "Disclaimer",
"description": "The label of footer link with label=Disclaimer linking to https://github.com/legal/disclaimer"
},
"link.item.label.GitHub": {
"message": "GitHub",
"description": "The label of footer link with label=GitHub linking to https://github.com/facebook/docusaurus"
},
"copyright": {
"message": "CC-BY-4.0 2022, Matrix-Veles Contributors",
"description": "The footer copyright"
}
}

View file

@ -0,0 +1,18 @@
{
"title": {
"message": "Matrix-Veles",
"description": "The title in the navbar"
},
"item.label.Documentation": {
"message": "Documentation",
"description": "Navbar item with label Documentation"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item with label GitHub"
},
"item.label.Download": {
"message": "Download",
"description": "Navbar item with label Download"
}
}

48
website/package.json Normal file
View file

@ -0,0 +1,48 @@
{
"name": "website",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc",
"crowdin": "crowdin",
"update-translations": "docusaurus write-translations && crowdin upload",
"download-translations": "crowdin download",
"crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download"
},
"dependencies": {
"@crowdin/cli": "3",
"@docusaurus/core": "2.0.0-beta.16",
"@docusaurus/preset-classic": "2.0.0-beta.16",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.1.1",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.0.0-beta.16",
"@tsconfig/docusaurus": "^1.0.4",
"typescript": "^4.5.2"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

31
website/sidebars.js Normal file
View file

@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
// But you can create a sidebar manually
/*
tutorialSidebar: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
},
],
*/
};
module.exports = sidebars;

View file

@ -0,0 +1,79 @@
import React from 'react';
import clsx from 'clsx';
import styles from './styles.module.css';
import Translate, {translate} from '@docusaurus/Translate';
type FeatureItem = {
title: string;
image: string;
description: JSX.Element;
};
const FeatureList: FeatureItem[] = [
{
title: translate({message:'Lightweight'}),
image: null,
description: (
<Translate>
Veles is built to be light on storage, memory and CPU. Run it
on your server, PC, Raspberry Pi or Smart Toaster!
</Translate>
),
},
{
title: translate({message:'Modern Codebase'}),
image: null,
description:
<>
<Translate>
Veles is built from the ground up to deliver you the best
experience using GoLang - a next-gen language from Google.</Translate>
<br/>
<Translate>
And the best thing It\'s open source! Fork it, make a mod where
all bad messages are replaced by cat images! You are free!
</Translate>
</>
,
},
{
title: translate({message:'Convenient Web Interface'}),
image: null,
description: (
<Translate>
Veles can be managed from any PC in the world. All you
need to access the modern web interface is an internet
connection and a web browser.
</Translate>
),
},
];
function Feature({title, image, description}: FeatureItem) {
return (
<div className={clsx('col col--4')}>
{/*<div className="text--center">
<img className={styles.featureSvg} alt={title} src={image} />
</div>*/}
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures(): JSX.Element {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View file

@ -0,0 +1,11 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}

View file

@ -0,0 +1,40 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #007300;
--ifm-color-primary-dark: #006500;
--ifm-color-primary-darker: #005400;
--ifm-color-primary-darkest: #003a00;
--ifm-color-primary-light: #008100;
--ifm-color-primary-lighter: #099f09;
--ifm-color-primary-lightest: #16bb16;
--ifm-code-font-size: 95%;
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme='dark'] {
--ifm-color-primary: #008100;
--ifm-color-primary-dark: #007300;
--ifm-color-primary-darker: #006500;
--ifm-color-primary-darkest: #005400;
--ifm-color-primary-light: #099f09;
--ifm-color-primary-lighter: #16bb16;
--ifm-color-primary-lightest: #20cb20;
--ifm-code-font-size: 95%;
}
.docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.1);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}
[data-theme='dark'] .docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.3);
}

View file

@ -0,0 +1,23 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 966px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

View file

@ -0,0 +1,44 @@
import React from 'react';
import clsx from 'clsx';
import Layout from '@theme/Layout';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import styles from './index.module.css';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import Translate, {translate} from '@docusaurus/Translate';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle"><Translate>Protector of your Matrix-harvest!</Translate></p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/tutorial-basics/install">
<Translate>
{"Quick Start Tutorial - 5min ⏱️"}
</Translate>
</Link>
</div>
</div>
</header>
);
}
export default function Home(): JSX.Element {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
title={translate({message: `Welcome`, description: "Title of the homepage"})}
description={translate({message: "Matrix-Veles is a next-gen bot for protecting Matrix-chat-rooms against spammers.", description: "Meta-Description of the homepage"})}>
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

0
website/static/.nojekyll Normal file
View file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="120" height="120" version="1.1" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient43644">
<stop stop-color="#007300" offset="0"/>
<stop stop-color="#007300" stop-opacity=".0072181" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1301" x1="49.693" x2="69.839" y1="25.512" y2="25.512" gradientTransform="translate(4,8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient1303" x1="49.777" x2="70.07" y1="81.546" y2="81.546" gradientTransform="translate(0,6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient31669" x1="91.453" x2="72.905" y1="48.722" y2="48.722" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
</defs>
<g transform="translate(-3.6704 12.24)" fill="url(#linearGradient31669)" style="shape-inside:url(#rect8261);white-space:pre" aria-label="101 011 110 100">
<path d="m74.758 17.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m96.894 2.1413q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781-3.2682 0-5-2.5781-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m108.69 17.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m79.928 27.475q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m91.725 42.969h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m108.69 42.969h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m74.758 68.303h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m91.725 68.303h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m113.86 52.808q-2.0312 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m74.758 93.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m96.894 78.141q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781-3.2682 0-5-2.5781-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m113.86 78.141q-2.0312 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
</g>
<path d="m4.0226 8.0649 30.026 50.894h59.933l30.009-50.864" fill="none" stroke="url(#linearGradient1301)" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.048"/>
<path d="m36.324 67.382h47.484l-23.793 40.329z" fill="none" stroke="url(#linearGradient1303)" stroke-linejoin="round" stroke-width="4.048"/>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
website/static/src/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="120"
height="120"
viewBox="0 0 120 120"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="logo_inkscape.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="2.5485307"
inkscape:cx="49.440252"
inkscape:cy="109.67104"
inkscape:window-width="1920"
inkscape:window-height="1088"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient43644">
<stop
style="stop-color:#007300;stop-opacity:1"
offset="0"
id="stop43640" />
<stop
style="stop-color:#007300;stop-opacity:0.00721814"
offset="1"
id="stop43642" />
</linearGradient>
<rect
x="71.451522"
y="0.25602378"
width="54.044402"
height="109.18527"
id="rect8261" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient43644"
id="linearGradient1301"
x1="49.692738"
y1="25.511776"
x2="69.838753"
y2="25.511776"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(4,8)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient43644"
id="linearGradient1303"
x1="49.777058"
y1="81.546326"
x2="70.070267"
y2="81.546326"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,6)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient43644"
id="linearGradient31669"
x1="91.452972"
y1="48.721558"
x2="72.90464"
y2="48.721558"
gradientUnits="userSpaceOnUse" />
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:url(#linearGradient1301);stroke-width:4.048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 4.0226246,8.0649358 34.04888,58.958616 H 93.982083 L 123.99093,8.0944342"
id="path857" />
<path
style="fill:none;stroke:url(#linearGradient1303);stroke-width:4.048;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 36.324162,67.3819 H 83.808266 L 60.014934,107.71095 Z"
id="path863" />
<text
xml:space="preserve"
id="text8259"
style="font-style:normal;font-weight:normal;font-size:26.6667px;line-height:0.95;font-family:sans-serif;white-space:pre;shape-inside:url(#rect8261);fill:url(#linearGradient31669);fill-opacity:1;stroke:none"
transform="translate(-3.670396,12.239657)"><tspan
x="71.451172"
y="19.849634"
id="tspan43900">101
</tspan><tspan
x="71.451172"
y="45.182998"
id="tspan43902">011
</tspan><tspan
x="71.451172"
y="70.516363"
id="tspan43904">110
</tspan><tspan
x="71.451172"
y="95.849726"
id="tspan43906">100</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="120" height="120" version="1.1" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient43644">
<stop stop-color="#007300" offset="0"/>
<stop stop-color="#007300" stop-opacity=".0072181" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1301" x1="49.693" x2="69.839" y1="25.512" y2="25.512" gradientTransform="translate(4,8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient1303" x1="49.777" x2="70.07" y1="81.546" y2="81.546" gradientTransform="translate(0,6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient31669" x1="91.453" x2="72.905" y1="48.722" y2="48.722" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
</defs>
<path d="m4.0226 8.0649 30.026 50.894h59.933l30.009-50.864" fill="none" stroke="url(#linearGradient1301)" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.048"/>
<path d="m36.324 67.382h47.484l-23.793 40.329z" fill="none" stroke="url(#linearGradient1303)" stroke-linejoin="round" stroke-width="4.048"/>
<text transform="translate(-3.6704 12.24)" fill="url(#linearGradient31669)" font-family="sans-serif" font-size="26.667px" style="line-height:0.95;shape-inside:url(#rect8261);white-space:pre" xml:space="preserve"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="120" height="120" version="1.1" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient43644">
<stop stop-color="#007300" offset="0"/>
<stop stop-color="#007300" stop-opacity=".0072181" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1301" x1="49.693" x2="69.839" y1="25.512" y2="25.512" gradientTransform="translate(4,8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient1303" x1="49.777" x2="70.07" y1="81.546" y2="81.546" gradientTransform="translate(0,6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
<linearGradient id="linearGradient31669" x1="91.453" x2="72.905" y1="48.722" y2="48.722" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient43644"/>
</defs>
<g transform="translate(-3.6704 12.24)" fill="url(#linearGradient31669)" style="shape-inside:url(#rect8261);white-space:pre" aria-label="101 011 110 100">
<path d="m74.758 17.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m96.894 2.1413q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781-3.2682 0-5-2.5781-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m108.69 17.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m79.928 27.475q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m91.725 42.969h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m108.69 42.969h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m74.758 68.303h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m91.725 68.303h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m113.86 52.808q-2.0312 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m74.758 93.636h4.2969v-14.831l-4.6745 0.9375v-2.3958l4.6484-0.9375h2.6302v17.227h4.2969v2.2135h-11.198z"/>
<path d="m96.894 78.141q-2.0313 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781-3.2682 0-5-2.5781-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
<path d="m113.86 78.141q-2.0312 0-3.0599 2.0052-1.0156 1.9922-1.0156 6.0026 0 3.9974 1.0156 6.0026 1.0286 1.9922 3.0599 1.9922 2.0443 0 3.0599-1.9922 1.0286-2.0052 1.0286-6.0026 0-4.0104-1.0286-6.0026-1.0156-2.0052-3.0599-2.0052zm0-2.0833q3.2682 0 4.987 2.5911 1.7318 2.5781 1.7318 7.5 0 4.9089-1.7318 7.5-1.7188 2.5781-4.987 2.5781t-5-2.5781q-1.7188-2.5911-1.7188-7.5 0-4.9219 1.7188-7.5 1.7318-2.5911 5-2.5911z"/>
</g>
<path d="m4.0226 8.0649 30.026 50.894h59.933l30.009-50.864" fill="none" stroke="url(#linearGradient1301)" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.048"/>
<path d="m36.324 67.382h47.484l-23.793 40.329z" fill="none" stroke="url(#linearGradient1303)" stroke-linejoin="round" stroke-width="4.048"/>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

7
website/tsconfig.json Normal file
View file

@ -0,0 +1,7 @@
{
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@tsconfig/docusaurus/tsconfig.json",
"compilerOptions": {
"baseUrl": "."
}
}

7826
website/yarn.lock Normal file

File diff suppressed because it is too large Load diff