mirror of
https://github.com/ad-aures/castopod.git
synced 2026-04-12 11:16:43 +02:00
docs(init): create documentation website using vitepress
- rename podlibre to adaures - rename castopod-host to castopod - simplify README and redirect to docs site - move INSTALL and UPDATE docs - add new gitlabci pipeline to deploy docs - upgrade node to v16 in Dockerfile
This commit is contained in:
parent
472842fae6
commit
fa5b5f51a4
327 changed files with 5619 additions and 1445 deletions
4
docs/src/contributing/_category_.json
Normal file
4
docs/src/contributing/_category_.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"label": "Contributing",
|
||||
"position": 3
|
||||
}
|
||||
144
docs/src/contributing/guidelines.md
Normal file
144
docs/src/contributing/guidelines.md
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
---
|
||||
title: Guidelines
|
||||
---
|
||||
|
||||
# Contributing to Castopod
|
||||
|
||||
Love Castopod and want to help? Thanks so much, there's something to do for
|
||||
everybody!
|
||||
|
||||
Please take a moment to review this document in order to make the contribution
|
||||
process easy and effective for everyone involved.
|
||||
|
||||
Following these guidelines helps to communicate that you respect the time of the
|
||||
developers managing and developing this open source project. In return, they
|
||||
should reciprocate that respect in addressing your issue or assessing patches
|
||||
and features.
|
||||
|
||||
⚠️ Note that **any** contribution made on a repository other than
|
||||
[the original repository](https://code.castopod.org/ad-aures/castopod) will not
|
||||
be accepted.
|
||||
|
||||
## Using the issue tracker
|
||||
|
||||
The [issue tracker](https://code.castopod.org/ad-aures/castopod/-/issues) is the
|
||||
preferred channel for [bug reports](#bug-reports),
|
||||
[features requests](#feature-requests) and
|
||||
[submitting pull requests](#pull-requests).
|
||||
|
||||
## Bug reports
|
||||
|
||||
A bug is a _demonstrable problem_ that is caused by the code in the repository.
|
||||
Good bug reports are extremely helpful - thank you!
|
||||
|
||||
Guidelines for bug reports:
|
||||
|
||||
1. **Use the issue search** — check if the issue has already been
|
||||
reported.
|
||||
|
||||
2. **Check if the issue has been fixed** — try to reproduce it using the
|
||||
latest `main` branch in the repository.
|
||||
|
||||
3. **Isolate the problem** — ideally create a
|
||||
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
|
||||
example.
|
||||
|
||||
A good bug report shouldn't leave others needing to chase you up for more
|
||||
information. Please try to be as detailed as possible in your report. What is
|
||||
your environment? What steps will reproduce the issue? What browser(s) and OS
|
||||
experience the problem? What would you expect to be the outcome? All these
|
||||
details will help people to fix any potential bugs.
|
||||
|
||||
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
|
||||
> have been created for this project. You may use them to help you follow those
|
||||
> guidelines.
|
||||
|
||||
## Feature requests
|
||||
|
||||
Feature requests are welcome. But take a moment to find out whether your idea
|
||||
fits with the scope and aims of the project. It's up to _you_ to make a strong
|
||||
case to convince the project's developers of the merits of this feature. Please
|
||||
provide as much detail and context as possible.
|
||||
|
||||
## Pull requests
|
||||
|
||||
Good pull requests - patches, improvements, new features - are a fantastic help.
|
||||
They should remain focused in scope and avoid containing unrelated commits.
|
||||
|
||||
**Please ask first** before embarking on any significant pull request (e.g.
|
||||
implementing features, refactoring code, porting to a different language),
|
||||
otherwise you risk spending a lot of time working on something that the
|
||||
project's developers might not want to merge into the project.
|
||||
|
||||
Please adhere to the coding conventions used throughout a project (indentation,
|
||||
accurate comments, etc.) and any other requirements (such as test coverage).
|
||||
|
||||
Adhering to the following process is the best way to get your work included in
|
||||
the project:
|
||||
|
||||
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
|
||||
project, clone your fork, and configure the remotes:
|
||||
|
||||
```bash
|
||||
# Clone your fork of the repo into the current directory
|
||||
git clone https://code.castopod.org/<your-username>/castopod.git
|
||||
|
||||
# Navigate to the newly cloned directory
|
||||
cd castopod
|
||||
|
||||
# Assign the original repo to a remote called "upstream"
|
||||
git remote add upstream https://code.castopod.org/ad-aures/castopod.git
|
||||
```
|
||||
|
||||
2. If you cloned a while ago, get the latest changes from upstream:
|
||||
|
||||
```bash
|
||||
git checkout main
|
||||
git pull upstream main
|
||||
```
|
||||
|
||||
3. Create a new topic branch (off the `main` branch) to contain your feature,
|
||||
change, or fix:
|
||||
|
||||
```bash
|
||||
git checkout -b <topic-branch-name>
|
||||
```
|
||||
|
||||
4. Commit your changes in logical chunks. Please adhere to these
|
||||
[git commit message guidelines](https://conventionalcommits.org/) or your
|
||||
code is unlikely be merged into the main project. Use Git's
|
||||
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
|
||||
feature to tidy up your commits before making them public.
|
||||
|
||||
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
|
||||
|
||||
```bash
|
||||
git pull [--rebase] upstream main
|
||||
```
|
||||
|
||||
6. Push your topic branch up to your fork:
|
||||
|
||||
```bash
|
||||
git push origin <topic-branch-name>
|
||||
```
|
||||
|
||||
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
|
||||
with a clear title and description.
|
||||
|
||||
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
|
||||
license your work under the terms of the
|
||||
[GNU AGPLv3](https://code.castopod.org/ad-aures/castopod/-/blob/main/LICENSE).
|
||||
|
||||
## Collaborating guidelines
|
||||
|
||||
There are few basic rules to ensure high quality of the project:
|
||||
|
||||
- Before merging, a PR requires at least two approvals from the collaborators
|
||||
unless it's an architectural change, a large feature, etc. If it is, then at
|
||||
least 50% of the core team have to agree to merge it, with every team member
|
||||
having a full veto right. (i.e. every single one can block any PR)
|
||||
- A PR should remain open for at least two days before merging (does not apply
|
||||
for trivial contributions like fixing a typo). This way everyone has enough
|
||||
time to look into it.
|
||||
|
||||
You are always welcome to discuss and propose improvements to this guideline.
|
||||
423
docs/src/contributing/setup-development.md
Normal file
423
docs/src/contributing/setup-development.md
Normal file
|
|
@ -0,0 +1,423 @@
|
|||
---
|
||||
title: Development setup
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Setup your development environment
|
||||
|
||||
## Introduction
|
||||
|
||||
Castopod is a web app based on the `php` framework
|
||||
[CodeIgniter 4](https://codeigniter.com).
|
||||
|
||||
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
|
||||
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
|
||||
to help you kickstart your contribution.
|
||||
|
||||
> You don't need any prior knowledge of Docker to follow the next steps.
|
||||
> However, if you wish to use your own environment, feel free to do so!
|
||||
|
||||
## Setup instructions
|
||||
|
||||
### 1. Pre-requisites
|
||||
|
||||
0. Install [docker](https://docs.docker.com/get-docker).
|
||||
|
||||
1. Clone Castopod project by running:
|
||||
|
||||
```bash
|
||||
git clone https://code.castopod.org/ad-aures/castopod.git
|
||||
```
|
||||
|
||||
2. Create a `.env` file with the minimum required config to connect the app to
|
||||
the database and use redis as a cache handler:
|
||||
|
||||
```ini
|
||||
CI_ENVIRONMENT="development"
|
||||
# If set to development, you must run `npm run dev` to start the static assets server
|
||||
vite.environment="development"
|
||||
|
||||
# By default, this is set to true in the app config.
|
||||
# For development, this must be set to false as it is
|
||||
# on a local environment
|
||||
app.forceGlobalSecureRequests=false
|
||||
|
||||
app.baseURL="http://localhost:8080/"
|
||||
app.mediaBaseURL="http://localhost:8080/"
|
||||
|
||||
admin.gateway="cp-admin"
|
||||
auth.gateway="cp-auth"
|
||||
|
||||
database.default.hostname="mariadb"
|
||||
database.default.database="castopod"
|
||||
database.default.username="castopod"
|
||||
database.default.password="castopod"
|
||||
|
||||
cache.handler="redis"
|
||||
cache.redis.host = "redis"
|
||||
|
||||
# You may not want to use redis as your cache handler
|
||||
# Comment/remove the two lines above and uncomment
|
||||
# the next line for file caching.
|
||||
#cache.handler="file"
|
||||
```
|
||||
|
||||
> _NB._ You can tweak your environment by setting more environment variables
|
||||
> in your custom `.env` file. See the `env` for examples or the
|
||||
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
|
||||
> for more info.
|
||||
|
||||
3. (for docker desktop) Add the repository you've cloned to docker desktop's
|
||||
`Settings` > `Resources` > `File Sharing`
|
||||
|
||||
### 2. (recommended) Develop inside the app Container with VSCode
|
||||
|
||||
If you're working in VSCode, you can take advantage of the `.devcontainer/`
|
||||
folder. It defines a development environment (dev container) with preinstalled
|
||||
requirements and VSCode extensions so you don't have to worry about them. All
|
||||
required services will be loaded automagically! 🪄
|
||||
|
||||
1. Install the VSCode extension
|
||||
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||||
2. `Ctrl/Cmd + Shift + P` > `Open in container`
|
||||
|
||||
> The VSCode window will reload inside the dev container. Expect several
|
||||
> minutes during first load as it is building all necessary services.
|
||||
|
||||
**Note**: The dev container will start by running Castopod's php server.
|
||||
During development, you will have to start [Vite](https://vitejs.dev)'s dev
|
||||
server for compiling the typescript code and styles:
|
||||
|
||||
```bash
|
||||
# run Vite dev server
|
||||
npm run dev
|
||||
```
|
||||
|
||||
If there is any issue with the php server not running, you can restart them
|
||||
using the following commands:
|
||||
|
||||
```bash
|
||||
# run Castopod server
|
||||
php spark serve - 0.0.0.0
|
||||
```
|
||||
|
||||
3. You're all set! 🎉
|
||||
|
||||
You're now **inside the dev container**, you may use the VSCode console
|
||||
(`Terminal` > `New Terminal`) to run any command:
|
||||
|
||||
```bash
|
||||
# PHP is installed
|
||||
php -v
|
||||
|
||||
# Composer is installed
|
||||
composer -V
|
||||
|
||||
# npm is installed
|
||||
npm -v
|
||||
|
||||
# git is installed
|
||||
git version
|
||||
```
|
||||
|
||||
For more info, see
|
||||
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
|
||||
|
||||
### 3. Start hacking
|
||||
|
||||
You're all set! Start working your magic by updating the project's files! Help
|
||||
yourself to the
|
||||
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
|
||||
more insights.
|
||||
|
||||
To see your changes, go to:
|
||||
|
||||
- `http://localhost:8080/` for the Castopod app
|
||||
- `http://localhost:8888/` for the phpmyadmin interface:
|
||||
|
||||
- username: **castopod**
|
||||
- password: **castopod**
|
||||
|
||||
### 2-alt. Develop outside the app container
|
||||
|
||||
You do not wish to use the VSCode devcontainer? No problem!
|
||||
|
||||
1. Start docker containers manually:
|
||||
|
||||
Go to project's root folder and run:
|
||||
|
||||
```bash
|
||||
# starts all services declared in docker-compose.yml file
|
||||
# -d option starts the containers in the background
|
||||
docker-compose up -d
|
||||
|
||||
# See all running processes (you should see 3 processes running)
|
||||
docker-compose ps
|
||||
|
||||
# Alternatively, you can check all docker processes
|
||||
docker ps -a
|
||||
|
||||
```
|
||||
|
||||
> The `docker-compose up -d` command will boot 4 containers in the
|
||||
> background:
|
||||
>
|
||||
> - `castopod_app`: a php based container with Castopod requirements
|
||||
> installed
|
||||
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
|
||||
> and pages caching
|
||||
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
|
||||
> persistent data
|
||||
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
|
||||
> database.
|
||||
|
||||
2. Run any command inside the containers by prefixing them with
|
||||
`docker-compose run --rm app`:
|
||||
|
||||
```bash
|
||||
# use PHP
|
||||
docker-compose run --rm app php -v
|
||||
|
||||
# use Composer
|
||||
docker-compose run --rm app composer -V
|
||||
|
||||
# use npm
|
||||
docker-compose run --rm app npm -v
|
||||
|
||||
# use git
|
||||
docker-compose run --rm app git version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Going Further
|
||||
|
||||
### Install Castopod's dependencies
|
||||
|
||||
1. Install php dependencies with [Composer](https://getcomposer.org/)
|
||||
|
||||
```bash
|
||||
composer install
|
||||
```
|
||||
|
||||
::: info Note
|
||||
|
||||
The php dependencies aren't included in the repository. Composer will check
|
||||
the `composer.json` and `composer.lock` files to download the packages with
|
||||
the right versions. The dependencies will live under the `vendor/` folder.
|
||||
For more info, check out the
|
||||
[Composer documentation](https://getcomposer.org/doc/).
|
||||
|
||||
:::
|
||||
|
||||
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
::: info Note
|
||||
|
||||
The javascript dependencies aren't included in the repository. Npm will check
|
||||
the `package.json` and `package.lock` files to download the packages with the
|
||||
right versions. The dependencies will live under the `node_module` folder.
|
||||
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
|
||||
|
||||
:::
|
||||
|
||||
3. Generate static assets:
|
||||
|
||||
```bash
|
||||
# build all static assets at once
|
||||
npm run build:static
|
||||
|
||||
# build specific assets
|
||||
npm run build:icons
|
||||
npm run build:svg
|
||||
```
|
||||
|
||||
::: info Note
|
||||
|
||||
The static assets generated live under the `public/assets` folder, it
|
||||
includes javascript, styles, images, fonts, icons and svg files.
|
||||
|
||||
:::
|
||||
|
||||
### Initialize and populate database
|
||||
|
||||
::: tip
|
||||
|
||||
You may skip this section if you go through the install wizard (go to
|
||||
`/cp-install`).
|
||||
|
||||
:::
|
||||
|
||||
1. Build the database with the migrate command:
|
||||
|
||||
```bash
|
||||
# loads the database schema during first migration
|
||||
php spark migrate -all
|
||||
```
|
||||
|
||||
You may need to undo the migration (rollback):
|
||||
|
||||
```bash
|
||||
# rolls back database schema (deletes all tables and their content)
|
||||
php spark migrate:rollback
|
||||
```
|
||||
|
||||
2. Populate the database with the required data:
|
||||
|
||||
```bash
|
||||
# Populates all required data
|
||||
php spark db:seed AppSeeder
|
||||
```
|
||||
|
||||
You may choose to add data separately:
|
||||
|
||||
```bash
|
||||
# Populates all categories
|
||||
php spark db:seed CategorySeeder
|
||||
|
||||
# Populates all Languages
|
||||
php spark db:seed LanguageSeeder
|
||||
|
||||
# Populates all podcasts platforms
|
||||
php spark db:seed PlatformSeeder
|
||||
|
||||
# Populates all Authentication data (roles definition…)
|
||||
php spark db:seed AuthSeeder
|
||||
```
|
||||
|
||||
3. (optionnal) Populate the database with test data:
|
||||
|
||||
- Populate test data (login: admin / password: AGUehL3P)
|
||||
|
||||
```bash
|
||||
php spark db:seed TestSeeder
|
||||
```
|
||||
|
||||
- Populate with fake podcast analytics:
|
||||
|
||||
```bash
|
||||
php spark db:seed FakePodcastsAnalyticsSeeder
|
||||
```
|
||||
|
||||
- Populate with fake website analytics:
|
||||
|
||||
```bash
|
||||
php spark db:seed FakeWebsiteAnalyticsSeeder
|
||||
```
|
||||
|
||||
TestSeeder will add an active superadmin user with the following credentials:
|
||||
|
||||
- username: **admin**
|
||||
- password: **AGUehL3P**
|
||||
|
||||
### Useful docker / docker-compose commands
|
||||
|
||||
- Monitor the app container:
|
||||
|
||||
```bash
|
||||
docker-compose logs --tail 50 --follow --timestamps app
|
||||
```
|
||||
|
||||
- Interact with redis server using included redis-cli command:
|
||||
|
||||
```bash
|
||||
docker exec -it castopod_redis redis-cli
|
||||
```
|
||||
|
||||
- Monitor the redis container:
|
||||
|
||||
```bash
|
||||
docker-compose logs --tail 50 --follow --timestamps redis
|
||||
```
|
||||
|
||||
- Monitor the mariadb container:
|
||||
|
||||
```bash
|
||||
docker-compose logs --tail 50 --follow --timestamps mariadb
|
||||
```
|
||||
|
||||
- Monitor the phpmyadmin container:
|
||||
|
||||
```bash
|
||||
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
|
||||
```
|
||||
|
||||
- Restart docker containers:
|
||||
|
||||
```bash
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
- Destroy all containers, opposite of `up` command:
|
||||
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
- Rebuild app container:
|
||||
|
||||
```bash
|
||||
docker-compose build app
|
||||
```
|
||||
|
||||
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
|
||||
more insights.
|
||||
|
||||
## Known issues
|
||||
|
||||
### Allocation failed - JavaScript heap out of memory
|
||||
|
||||
This happens when running `npm install`.
|
||||
|
||||
👉 By default, docker might not have access to enough RAM. Allocate more memory
|
||||
and run `npm install` again.
|
||||
|
||||
### (Linux) Files created inside container are attributed to root locally
|
||||
|
||||
You may use Linux user namespaces to fix this on your machine:
|
||||
|
||||
::: info Note
|
||||
|
||||
Replace "username" with your local username
|
||||
|
||||
:::
|
||||
|
||||
1. Go to `/etc/docker/daemon.json` and add:
|
||||
|
||||
```json
|
||||
{
|
||||
"userns-remap": "username"
|
||||
}
|
||||
```
|
||||
|
||||
2. Configure the subordinate uid/guid:
|
||||
|
||||
```bash
|
||||
# in /etc/subuid
|
||||
username:1000:1
|
||||
username:100000:65536
|
||||
```
|
||||
|
||||
```bash
|
||||
# in /etc/subgid
|
||||
username:1000:1
|
||||
username:100000:65536
|
||||
```
|
||||
|
||||
3. Restart docker:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
4. That's it! Now, the root user in the container will be mapped to the user on
|
||||
your local machine, no more permission issues! 🎉
|
||||
|
||||
You can check
|
||||
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
|
||||
to know more about how it works.
|
||||
4
docs/src/getting-started/_category_.json
Normal file
4
docs/src/getting-started/_category_.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"label": "Getting Started",
|
||||
"position": 2
|
||||
}
|
||||
154
docs/src/getting-started/install.md
Normal file
154
docs/src/getting-started/install.md
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
---
|
||||
title: Installation
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# How to install Castopod?
|
||||
|
||||
Castopod was thought-out to be easy to install. Whether using dedicated or
|
||||
shared hosting, you can install it on most PHP-MySQL compatible web servers.
|
||||
|
||||
## Requirements
|
||||
|
||||
- PHP v8.0 or higher
|
||||
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
|
||||
- HTTPS support
|
||||
|
||||
### PHP v8.0 or higher
|
||||
|
||||
PHP version 8.0 or higher is required, with the following extensions installed:
|
||||
|
||||
- [intl](https://php.net/manual/en/intl.requirements.php)
|
||||
- [libcurl](https://php.net/manual/en/curl.requirements.php)
|
||||
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
|
||||
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
|
||||
**PNG** and **WEBP** libraries.
|
||||
|
||||
Additionally, make sure that the following extensions are enabled in your PHP:
|
||||
|
||||
- json (enabled by default - don't turn it off)
|
||||
- xml (enabled by default - don't turn it off)
|
||||
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
|
||||
|
||||
### MySQL compatible database
|
||||
|
||||
> We recommend using [MariaDB](https://mariadb.org).
|
||||
|
||||
::: warning
|
||||
|
||||
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
|
||||
will break with the previous MySQL v5.6 for example as its end of life was on
|
||||
February 5, 2021.
|
||||
|
||||
:::
|
||||
|
||||
You will need the server hostname, database name, username and password to
|
||||
complete the installation process. If you do not have these, please contact your
|
||||
server administrator.
|
||||
|
||||
#### Privileges
|
||||
|
||||
User must have at least these privileges on the database for Castopod to work:
|
||||
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`.
|
||||
|
||||
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
|
||||
|
||||
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
|
||||
want to generate Video Clips. The following extensions must be installed:
|
||||
|
||||
- **FreeType 2** library for
|
||||
[gd](https://www.php.net/manual/en/image.installation.php).
|
||||
|
||||
### (Optional) Other recommendations
|
||||
|
||||
- Redis for better cache performances.
|
||||
- CDN for static files caching and better performances.
|
||||
- e-mail gateway for lost passwords.
|
||||
|
||||
## Install instructions
|
||||
|
||||
### Pre-requisites
|
||||
|
||||
0. Get a Web Server with [requirements](#requirements) installed
|
||||
1. Create a MySQL database for Castopod with a user having access and
|
||||
modification privileges (for more info, see
|
||||
[MySQL compatible database](#mysql-compatible-database)).
|
||||
2. Activate HTTPS on your domain with an _SSL certificate_.
|
||||
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
|
||||
the web server if you haven’t already.
|
||||
- ⚠️ Set the web server document root to the `public/` sub-folder within the
|
||||
`castopod` folder.
|
||||
4. Add **cron tasks** on your web server for various background processes
|
||||
(replace the paths accordingly):
|
||||
|
||||
- For social features to work properly, this task is used to broadcast social
|
||||
activities to your followers on the fediverse:
|
||||
|
||||
```bash
|
||||
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities
|
||||
```
|
||||
|
||||
- For Video Clips to be created (see
|
||||
[FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)):
|
||||
|
||||
```bash
|
||||
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips
|
||||
```
|
||||
|
||||
> These tasks run **every minute**. You may set the frequency depending on
|
||||
> your needs: every 5, 10 minutes or more.
|
||||
|
||||
### (recommended) Install Wizard
|
||||
|
||||
1. Run the Castopod install script by going to the install wizard page
|
||||
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
|
||||
2. Follow the instructions on your screen.
|
||||
3. Start podcasting!
|
||||
|
||||
::: info Note
|
||||
|
||||
The install script writes a `.env` file in the package root. If you cannot go
|
||||
through the install wizard, you can
|
||||
[create and update the `.env` file manually](#alternative-manual-configuration).
|
||||
|
||||
:::
|
||||
|
||||
## Community packages
|
||||
|
||||
If you don't want to bother with installing Castopod manually, you may use one
|
||||
of the packages created and maintained by the open-source community.
|
||||
|
||||
### Install with YunoHost
|
||||
|
||||
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
|
||||
made up of free and open-source software packages. It manages the hardships of
|
||||
self-hosting for you.
|
||||
|
||||
<div class="flex flex-wrap items-center gap-4">
|
||||
|
||||
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
|
||||
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
|
||||
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
|
||||
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
|
||||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
I you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://podcastindex.social/web/@rdelaage@mamot.fr)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we are planning on maintaining an official Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
26
docs/src/getting-started/security.md
Normal file
26
docs/src/getting-started/security.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: Security
|
||||
---
|
||||
|
||||
# Security concerns
|
||||
|
||||
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
|
||||
framework that encourages
|
||||
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
|
||||
|
||||
To maximize your instance's safety and prevent any malicious attack, we
|
||||
recommend you update all your Castopod files permissions after installation or
|
||||
updates (to avoid any prior permission error):
|
||||
|
||||
- `writable/` folder must be **readable** and **writable**.
|
||||
- `public/media/` folder must be **readable** and **writable**.
|
||||
- any other file must be set to **readonly**.
|
||||
|
||||
For instance, if you are using Apache or NGINX with Ubuntu you may do the
|
||||
following:
|
||||
|
||||
```bash
|
||||
sudo chown -R root:root /path/to/castopod
|
||||
sudo chown -R www-data:www-data /path/to/castopod/writable
|
||||
sudo chown -R www-data:www-data /path/to/castopod/public/media
|
||||
```
|
||||
93
docs/src/getting-started/update.md
Normal file
93
docs/src/getting-started/update.md
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
---
|
||||
title: Update
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# How to update Castopod?
|
||||
|
||||
After installing Castopod, you may want to update your instance to the latest
|
||||
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
|
||||
improvements ⚡.
|
||||
|
||||
## Automatic update instructions
|
||||
|
||||
> Coming soon... 👀
|
||||
|
||||
## Manual update instructions
|
||||
|
||||
1. Go to the
|
||||
[releases page](https://code.castopod.org/ad-aures/castopod/-/releases) and
|
||||
see if your instance is up to date with the latest Castopod version
|
||||
|
||||
- cf.
|
||||
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
|
||||
|
||||
2. Download the latest release package named `Castopod Package`, you may choose
|
||||
between the `zip` or `tar.gz` archives
|
||||
|
||||
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
|
||||
|
||||
3. On your server:
|
||||
|
||||
- Remove all files except `.env` and `public/media`
|
||||
- Copy the new files from the downloaded package into your server
|
||||
|
||||
::: info Note
|
||||
|
||||
You may need to reset files permissions as during the install process.
|
||||
Check [Security Concerns](./security.md).
|
||||
|
||||
:::
|
||||
|
||||
4. Releases may come with additional update instructions (see
|
||||
[releases page](https://code.castopod.org/ad-aures/castopod/-/releases)).
|
||||
They are usually database migration scripts in `.sql` format to update your
|
||||
database schema.
|
||||
|
||||
- 👉 Make sure you run the scripts on your phpmyadmin panel or using command
|
||||
line to update the database along with the package files!
|
||||
- cf.
|
||||
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
|
||||
|
||||
5. If you are using redis, clear your cache.
|
||||
6. ✨ Enjoy your fresh instance, you're all done!
|
||||
|
||||
## Frequently asked questions (FAQ)
|
||||
|
||||
### Where can I find my Castopod version?
|
||||
|
||||
Go to your Castopod admin panel, the version is displayed on the bottom left
|
||||
corner.
|
||||
|
||||
Alternatively, you can find the version in the `app > Config > Constants.php`
|
||||
file.
|
||||
|
||||
### I haven't updated my instance in a long time… What should I do?
|
||||
|
||||
No problem! Just get the latest release as described above. Only, when going
|
||||
through the release instructions (4), perform them sequentially, from the oldest
|
||||
to the newest.
|
||||
|
||||
> You may want to backup your instance depending on how long you haven't updated
|
||||
> Castopod.
|
||||
|
||||
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
|
||||
`v1.0.0-beta.1`:
|
||||
|
||||
0. (highly recommended) Make a backup of your files and database.
|
||||
|
||||
1. Download the latest release, overwrite your files whilst keeping `.env` and
|
||||
`public/media`.
|
||||
|
||||
2. Go through each release update instructions sequentially (from oldest to
|
||||
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
|
||||
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
|
||||
|
||||
3. ✨ Enjoy your fresh instance, you're all done!
|
||||
|
||||
### Should I make a backup before updating?
|
||||
|
||||
We advise you do, so you don't lose everything if anything goes wrong!
|
||||
|
||||
More generally, we advise you make regular backups of your Castopod files and
|
||||
database to prevent you from losing it all…
|
||||
207
docs/src/index.md
Normal file
207
docs/src/index.md
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
---
|
||||
sidebarDepth: 2
|
||||
---
|
||||
|
||||
# Welcome 👋
|
||||
|
||||
[![release-badge]][release] [![license-badge]][license] [![semantic-release-badge]][semantic-release] [![discord-badge]][discord] [![stars-badge]][stars]
|
||||
|
||||
Castopod is a free & open-source hosting platform made for podcasters who want
|
||||
engage and interact with their audience.
|
||||
|
||||
Castopod is easy to install and was built on top of
|
||||
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
|
||||
small footprint.
|
||||
|
||||
::: info Note
|
||||
|
||||
Castopod is currently in **beta** but already quite stable and used by
|
||||
podcasters around the world!
|
||||
|
||||
:::
|
||||
|
||||
<div class="flex items-center">
|
||||
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
|
||||
</div>
|
||||
|
||||
## Features
|
||||
|
||||
- 🌱 Free & open-source (AGPL v3 License)
|
||||
- 🔐 Focused on data sovereignty: your content, audience, and analytics
|
||||
belong to you, and you only
|
||||
- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
|
||||
location, persons, soundbites, …
|
||||
- 💬 Built-in social network:
|
||||
- 🚀 Castopod is part of the Fediverse, a decentralized social network
|
||||
- ❤️ Create posts, share, favourite, and comment on episodes
|
||||
- 📈 Built-in analytics:
|
||||
- ⚖️ GDPR / CCPA / LGPD compliant
|
||||
- 🪙 Standard IABv2 audience measurement
|
||||
- 🏡 On-premises analytics, no third party involved
|
||||
- 📢 Built-in marketing tools:
|
||||
- ✅ SEO ready (open-graph meta-tags, JSON-LD, …)
|
||||
- 📱 PWA: install as a standalone app
|
||||
- 🎨 Customizable theme colors
|
||||
- 🎬 Generate ready-to-share Video clips from episodes
|
||||
- 🎵 Generate Soundbites
|
||||
- ▶️ Embeddable player, embed your episodes on any website
|
||||
- 💸 Monetization
|
||||
- 🔗 Funding links
|
||||
- 📲 listen-to-click ads
|
||||
- 🤝 value4value / WebMonetization
|
||||
- 📡 Publish and broadcast everywhere with RSS: Podcast Index, Apple
|
||||
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
|
||||
- 📥 Podcast import: move your existing podcast into Castopod
|
||||
- 📤 Move your podcast out of Castopod
|
||||
- 🔀 Multi-tenant: host as many podcasts as you want
|
||||
- 👥 Multi-user: add contributors and set roles
|
||||
- 🌎 i18n support: translated in English & French, and more to come!
|
||||
|
||||
## Motivation
|
||||
|
||||
The podcasting ecosystem is decentralized by nature: you can create your podcast
|
||||
as an RSS file, publish it on the web and have it shared everywhere online.
|
||||
|
||||
It is in fact one of the only media to have stayed this way for a long time.
|
||||
|
||||
As usages are evolving, more and more people are getting into podcasts: whether
|
||||
it is creators finding new ways to share their ideas, or listeners in the search
|
||||
for better content.
|
||||
|
||||
With podcasting becoming more widely used, some companies are trying to shift it
|
||||
towards a more controlled and centralized medium.
|
||||
|
||||
Castopod was created in an effort to provide an open and sustainable alternative
|
||||
to hosting your podcasts, promoting decentralization to ensure that podcasters
|
||||
creativity can express itself.
|
||||
|
||||
This project is pushed by the open-source community, and specifically by the
|
||||
[Fediverse](https://fediverse.party/en/fediverse/) and
|
||||
[Podcasting 2.0](https://podcastindex.org/) movements.
|
||||
|
||||
## Comparison with other solutions
|
||||
|
||||
We believe that a solution is not necessarily right for everyone, it highly
|
||||
depends on your needs. So, here are comparisons with other tools to help you to
|
||||
gauge whether Castopod is the right fit for you.
|
||||
|
||||
### Castopod vs Wordpress
|
||||
|
||||
Castopod is often referred to as "the Wordpress for podcasts" because of the
|
||||
similarities between the two. In some ways this is true. And actually, Castopod
|
||||
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
|
||||
from the community and the number of websites running it.
|
||||
|
||||
Just like Wordpress, Castopod is free & open source, built using PHP with a
|
||||
MySQL database and is packaged in a way that you can easily install on most web
|
||||
servers.
|
||||
|
||||
Wordpress is a great way to create your website and extend it with plugins to
|
||||
get what you want. It is a full fledged CMS that helps you get any type of
|
||||
website online.
|
||||
|
||||
On the other hand, Castopod is meant to address the podcasters needs
|
||||
specifically, focusing on podcasting, and nothing else. You don't need any
|
||||
plugin to get you started on your podcasting journey.
|
||||
|
||||
This allows optimizing the processes specific to podcasting: ranging from the
|
||||
creation of your podcasts and the publication of new episodes all the way to
|
||||
broadcasting, marketing and analytics.
|
||||
|
||||
Finally, depending on your needs, Wordpress and Castopod can even live side by
|
||||
side as they share the same requirements!
|
||||
|
||||
### Castopod vs Funkwhale
|
||||
|
||||
Funkwhale is a self-hosted, modern free and open-source music server. Just as
|
||||
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
|
||||
interoperability between the two.
|
||||
|
||||
Funkwhale was initially built around music. And later on, as the project
|
||||
evolved, the ability to host podcasts was introduced.
|
||||
|
||||
Unlike Funkwhale, Castopod has been designed and built around podcasting
|
||||
exclusively. This allows easier implementation for features related to the
|
||||
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
|
||||
chapters, locations, persons, …).
|
||||
|
||||
So, you should probably use Funkwhale if you want to host your music, and use
|
||||
Castopod if you want to host your podcasts.
|
||||
|
||||
### Castopod vs other podcast hosts
|
||||
|
||||
There are many solutions for you to host your podcasts, some of which are really
|
||||
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
|
||||
Podcasting 2.0 wagon just like Castopod!
|
||||
|
||||
Each of these solutions differ from one another, you may compare with the
|
||||
[list of features](#features).
|
||||
|
||||
That being said, there are two main differences with any other podcasting
|
||||
solution:
|
||||
|
||||
- Castopod can be self-hosted and is the only solution that allows you to keep
|
||||
full control over what you produce. Also, as it is open-source, you can even
|
||||
customize it as you wish.
|
||||
|
||||
- Castopod is the only solution that currently integrates both a decentralized
|
||||
social network with ActivityPub as well as many of the podcasting 2.0
|
||||
features, hoping to bridge the gap between the two.
|
||||
|
||||
## Contributing
|
||||
|
||||
Love Castopod and would like to help? Take a look at the following documentation
|
||||
to get you started.
|
||||
|
||||
### Code of conduct
|
||||
|
||||
Castopod has adopted a Code of Conduct that we expect project participants to
|
||||
adhere to. Please read the
|
||||
[CODE_OF_CONDUCT manual](https://code.castopod.org/ad-aures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
|
||||
so that you can understand what actions will and will not be tolerated.
|
||||
|
||||
### Contributing guide
|
||||
|
||||
Read our [contributing guide](./contributing/guidelines.md) to learn about our
|
||||
development process, how to propose bugfixes and improvements, and how to build
|
||||
and test your changes to Castopod.
|
||||
|
||||
## Contact
|
||||
|
||||
You may reach us for help or ask any question you have on:
|
||||
|
||||
- [Discord](https://castopod.org/discord) (for direct interaction with
|
||||
developers and the community)
|
||||
- [Issue tracker](https://code.castopod.org/ad-aures/castopod/-/issues) (for
|
||||
feature requests & bug reports)
|
||||
|
||||
Alternatively, you can follow us on social media platforms to get news about
|
||||
Castopod:
|
||||
|
||||
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
|
||||
- [Twitter](https://twitter.com/castopod)
|
||||
- [LinkedIn](https://linkedin.com/company/castopod)
|
||||
- [Facebook](https://www.facebook.com/castopod)
|
||||
|
||||
## Sponsors
|
||||
|
||||
<div class="flex flex-wrap gap-x-16 gap-y-8">
|
||||
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
|
||||
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
|
||||
<a href="https://opencollective.com/castopod/contribute" class="inline-flex items-center font-semibold text-black underline gap-x-1 decoration-pine-500 decoration-4 hover:no-underline" target="_blank" rel="noopener noreferrer">Become a sponsor<svg viewBox="0 0 24 24" class="h-6"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
|
||||
</div>
|
||||
|
||||
[release]: https://code.castopod.org/ad-aures/castopod/-/releases
|
||||
[release-badge]:
|
||||
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
|
||||
[license]: https://code.castopod.org/ad-aures/castopod/-/blob/beta/LICENSE.md
|
||||
[license-badge]:
|
||||
https://img.shields.io/github/license/ad-aures/castopod?color=blue
|
||||
[semantic-release]: https://github.com/semantic-release/semantic-release
|
||||
[semantic-release-badge]:
|
||||
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
|
||||
[discord]: https://castopod.org/discord
|
||||
[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8
|
||||
[stars]: https://github.com/ad-aures/castopod/stargazers
|
||||
[stars-badge]:
|
||||
https://img.shields.io/github/stars/ad-aures/castopod?style=social
|
||||
BIN
docs/src/public/favicon.ico
Normal file
BIN
docs/src/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
5
docs/src/public/images/logo-inline.svg
Normal file
5
docs/src/public/images/logo-inline.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 324 65">
|
||||
<path fill="#009486" d="M26.6 40.2c-1.4 1.3-3 2.3-4.9 3.1-1.9.7-4 1.1-6.2 1.1-3 0-5.6-.6-8-1.9-2.3-1.3-4.2-3-5.5-5.2-1.3-2.2-2-4.7-2-7.5s.7-5.3 2-7.5 3.2-3.9 5.5-5.2c2.3-1.3 5-1.9 8-1.9 2.2 0 4.3.4 6.2 1.1 1.9.7 3.5 1.7 4.9 3.1l-5.7 5.4c-1.3-1.7-3.1-2.5-5.4-2.5-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4s.7 4 2 5.4c1.3 1.4 3 2.2 5.1 2.2 2.2 0 4-.8 5.4-2.5l5.7 5.2ZM31.1 36.1c0-1.9.5-3.5 1.6-5s2.6-2.6 4.4-3.5c1.9-.9 4.1-1.3 6.5-1.3a23.36 23.36 0 0 1 5 .5c-.6-3.1-2.8-4.6-6.7-4.6-2.3 0-4.5.9-6.8 2.6L32.3 18c1.9-.9 3.9-1.6 5.8-2.1 1.9-.4 3.7-.7 5.4-.7 2.7 0 5.1.5 7.1 1.5s3.5 2.5 4.6 4.3c1.1 1.9 1.7 4 1.7 6.6v16.2h-6.8l-.5-3c-1 1.1-2.3 2-3.8 2.6-1.5.6-3.2 1-5 1-2.8 0-5.2-.8-7-2.3a7.42 7.42 0 0 1-2.7-6Zm8-1.8c0 .9.4 1.7 1.1 2.3.7.6 1.7.9 2.8.9 1.6 0 3-.5 4.1-1.5 1.1-1 1.6-2.2 1.6-3.6v-.6c-.7-.2-1.4-.4-2.2-.5-.8-.1-1.6-.2-2.3-.2-1.6 0-2.8.3-3.7.8-.9.5-1.4 1.3-1.4 2.4ZM61.9 40.3l3.8-6.1c1.6 1.1 3.1 1.9 4.4 2.5 1.4.6 2.6.9 3.6.9.8 0 1.5-.2 2-.6.5-.4.8-.9.8-1.4 0-.8-.5-1.5-1.4-2-.9-.5-2-1-3.3-1.5-1.3-.5-2.6-1.2-3.9-1.8-1.3-.7-2.4-1.6-3.3-2.7a6.4 6.4 0 0 1-1.3-4.2c0-2.4.9-4.3 2.8-5.9 1.9-1.5 4.5-2.3 8-2.3 1.7 0 3.5.2 5.3.6 1.9.4 3.6 1.1 5.1 2l-3.6 6.1c-.8-.5-1.9-1-3.2-1.4-1.3-.4-2.4-.6-3.4-.6-.5 0-1.1.1-1.7.3-.6.2-.9.6-.9 1.2 0 .7.4 1.3 1.3 1.7.9.4 1.9.9 3.1 1.4 1.3.5 2.6 1.1 4 1.8s2.5 1.6 3.5 2.7c.9 1.1 1.4 2.6 1.4 4.4 0 1.8-.5 3.4-1.5 4.7-1 1.3-2.4 2.3-4 3-1.7.7-3.5 1.1-5.6 1.1-1.9 0-3.9-.3-6-1-2.1-.5-4.1-1.5-6-2.9ZM88.6 15.8h4.6v-7h8.1v7h6.8v7h-6.8v10.3c0 1.3.4 2.4 1.3 3.1.9.8 1.9 1.1 3.2 1.1 1 0 2-.2 3-.6v6.6c-1.8.7-3.5 1-5.2 1-3.3 0-5.9-.9-7.7-2.7-1.8-1.8-2.7-4.3-2.7-7.7V22.5h-4.6v-6.7ZM113.1 29.8c0-2.8.6-5.3 2-7.5 1.3-2.2 3.1-3.9 5.3-5.2 2.3-1.3 4.8-1.9 7.7-1.9 2.9 0 5.4.6 7.7 1.9 2.2 1.3 4 3 5.3 5.2 1.3 2.2 2 4.7 2 7.5s-.7 5.3-2 7.5-3.1 3.9-5.3 5.2c-2.2 1.3-4.8 1.9-7.7 1.9-2.9 0-5.5-.6-7.7-1.9-2.3-1.3-4-3-5.3-5.2-1.4-2.2-2-4.7-2-7.5Zm7.8 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM148.4 15.8h7.6l.2 3c1.2-1.1 2.6-2 4.1-2.7 1.6-.6 3.3-.9 5.1-.9 2.6 0 5 .6 7 1.9 2.1 1.3 3.7 3 4.9 5.2 1.2 2.2 1.8 4.7 1.8 7.5s-.6 5.3-1.8 7.5c-1.2 2.2-2.8 3.9-4.9 5.2-2.1 1.3-4.4 1.9-7 1.9-1.8 0-3.4-.3-4.9-.9-1.5-.6-2.9-1.4-4-2.5v23.8h-8.1v-49Zm15.2 6.4c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4s.7 4 2 5.4c1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.67 6.67 0 0 0-5.1-2.2ZM182.4 29.8c0-2.8.6-5.3 2-7.5 1.3-2.2 3.1-3.9 5.3-5.2 2.3-1.3 4.8-1.9 7.7-1.9 2.9 0 5.4.6 7.7 1.9 2.2 1.3 4 3 5.3 5.2 1.3 2.2 2 4.7 2 7.5s-.7 5.3-2 7.5-3.1 3.9-5.3 5.2c-2.2 1.3-4.8 1.9-7.7 1.9-2.9 0-5.5-.6-7.7-1.9-2.3-1.3-4-3-5.3-5.2-1.3-2.2-2-4.7-2-7.5Zm7.9 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM215.8 29.8c0-2.8.6-5.3 1.8-7.5 1.2-2.2 2.8-3.9 4.9-5.2 2.1-1.3 4.4-1.9 7-1.9 1.8 0 3.4.3 4.9.9 1.5.6 2.9 1.4 4 2.5V0h8.1v43.9h-7.6l-.2-3c-1.2 1.1-2.6 2-4.1 2.7-1.6.6-3.3.9-5.1.9-2.6 0-5-.6-7-1.9-2.1-1.3-3.7-3-4.9-5.2-1.2-2.3-1.8-4.8-1.8-7.6Zm8.3 0c0 2.2.7 4 2 5.4 1.3 1.4 3 2.2 5.1 2.2 2.1 0 3.8-.7 5.1-2.2 1.3-1.4 2-3.2 2-5.4s-.7-4-2-5.4a6.87 6.87 0 0 0-5.1-2.2c-2.1 0-3.8.7-5.1 2.2-1.3 1.4-2 3.2-2 5.4ZM318.7 44h-10.82s-1.13-2.41-1.6-3.26c-.45-.86-1.55-.82-1.55-.82h-29.38s-1.07-.14-1.6.82c-.57.95-1.63 3.26-1.63 3.26h-10.65a4.47 4.47 0 0 1-4.47-4.44V4.47A4.47 4.47 0 0 1 261.44 0h57.23a4.47 4.47 0 0 1 4.47 4.44v35.09a4.45 4.45 0 0 1-4.43 4.47Z"></path>
|
||||
<path fill="#E7F9E4" d="M274.95 9.51h30.2a9.34 9.34 0 0 1 9.4 9.44c0 5.18-4.22 9.4-9.4 9.4h-30.2a9.42 9.42 0 0 1 0-18.84Z"></path>
|
||||
<path fill="#009486" d="M302.77 15.36a4.61 4.61 0 0 0-3.64 7.46s1.58-1.18 3.8-1.18c1.67 0 3.6 1.01 3.6 1.01a4.61 4.61 0 0 0-3.76-7.29ZM277.23 15.36a4.61 4.61 0 0 0-3.77 7.3s1.94-1.02 3.6-1.02c2.23 0 3.8 1.18 3.8 1.18a4.61 4.61 0 0 0-3.64-7.45Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
BIN
docs/src/public/images/logo.png
Normal file
BIN
docs/src/public/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
10
docs/src/public/images/sponsors/adaures.svg
Normal file
10
docs/src/public/images/sponsors/adaures.svg
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 104 20"
|
||||
fill="#2A2D7C"
|
||||
height="4rem"
|
||||
>
|
||||
<path
|
||||
d="M38.56 6.39v9.18h-2.44l-.27-.65a4.35 4.35 0 01-2.77 1A4.68 4.68 0 0128.26 11a4.66 4.66 0 014.82-4.86 4.37 4.37 0 012.8 1l.33-.71zm-3 4.6a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM50.25 3.09v12.49h-2.34l-.3-.68a4.22 4.22 0 01-2.77 1A4.68 4.68 0 0140 11a4.68 4.68 0 014.84-4.9 4.25 4.25 0 012.28.64V3.09zM47.32 11a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM65.69 6.39v9.18h-2.44l-.25-.65a4.33 4.33 0 01-2.77 1A4.67 4.67 0 0155.4 11a4.65 4.65 0 014.81-4.86 4.35 4.35 0 012.8 1l.33-.71zm-3 4.6a2.06 2.06 0 10-4.11 0 2.06 2.06 0 104.11 0zM67.57 11.64V6.4h3.16v5.1c0 1 .52 1.54 1.37 1.54s1.35-.58 1.35-1.54V6.4h3.16v5.24c0 2.57-1.8 4.24-4.51 4.24s-4.53-1.67-4.53-4.24zM84.46 6.36v2.89h-1.23c-1.12 0-1.59.49-1.59 1.66v4.67h-3.16V6.4h2.12l.49 1a3.07 3.07 0 012.53-1.06zM95 10.91a5.9 5.9 0 01-.06.83h-6.86a1.79 1.79 0 001.92 1.6 1.85 1.85 0 001.66-.86h3.14A5 5 0 0185 11a5 5 0 0110-.08zM88.14 10h3.71A1.84 1.84 0 0090 8.58 1.77 1.77 0 0088.14 10zM99.94 15.88c-2.5 0-4-1.32-4-3.31h3a.94.94 0 001.07 1c.46 0 .9-.23.9-.71s-.69-.68-1.57-.82C97.9 11.79 96 11.36 96 9.13c0-1.84 1.57-3 3.92-3s3.86 1.25 3.89 3.11h-3c0-.59-.39-.86-1-.86s-.85.25-.85.67.7.65 1.57.8c1.45.26 3.38.56 3.38 2.89 0 1.92-1.62 3.17-4.06 3.17zM0 0v20h20V0zm13.34 12.66a3.84 3.84 0 01-2.51 3.6 3.9 3.9 0 01-1.33.24 3.84 3.84 0 01-1.33-7.44 1 1 0 011.32.61A1 1 0 018.88 11a1.78 1.78 0 001.24 3.34 1.76 1.76 0 001.16-1.67V7.19a1.64 1.64 0 00-3.28 0 1 1 0 11-2 0 3.69 3.69 0 017.38 0z"
|
||||
></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
64
docs/src/public/images/sponsors/nlnet.svg
Normal file
64
docs/src/public/images/sponsors/nlnet.svg
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 449 168" height="4rem">
|
||||
<path
|
||||
fill="#98bf00"
|
||||
d="m446.6 73.88 2.5-13.65h-12.9l3.76-20.08-15.45 6.04-2.5 14.04h-9.4l-2.5 13.65h9.25l-3.15 17.3c-.14.94-.4 2.34-.64 4.14-.25 1.8-.4 3.4-.4 4.75.04 6.25 1.54 11.4 4.5 15.45 2.94 4.14 7.74 6.59 14.44 7.34l6.44-13.3c-3.44-.44-6.04-1.8-7.89-4.1-1.85-2.34-2.75-5.3-2.75-8.89 0-.7.1-1.7.25-3.05.15-1.35.3-2.45.45-3.3l3-16.34h13ZM310.7 72.33c2.4-.85 4.5-1.3 6.26-1.3 1.9 0 3.5.55 4.8 1.65 1.24 1.05 1.84 2.6 1.84 4.75 0 .6-.1 1.5-.3 2.75-.2 1.15-.35 2.2-.5 3.1l-3.6 16.89-.75 4.05c-.25 1.45-.34 2.7-.34 3.75 0 4.05 1.1 7.44 3.34 10.14 2.15 2.7 6 4.3 11.55 4.75l6.35-12.84c-2.16-.35-3.7-1.15-4.65-2.4-1-1.2-1.5-2.9-1.5-5.05 0-.5.05-1.1.15-1.75.05-.65.15-1.2.2-1.6l3.64-17.2c.3-1.44.56-2.9.75-4.34.2-1.4.3-2.8.3-4.15 0-4.95-1.44-8.94-4.34-11.9-2.95-2.94-7.05-4.44-12.3-4.44-3.05 0-5.94.5-8.8 1.5-2.8.95-6.2 2.54-10.14 4.9a17.35 17.35 0 0 0-2.8-6.75l-13.4 5.75a20.5 20.5 0 0 1 2.6 5.5 21.16 21.16 0 0 1 .56 8.4c-.1 1.14-.25 2.04-.4 2.69l-7.95 42.33h14.4l8.44-45.68a23.33 23.33 0 0 1 6.6-3.5Z"
|
||||
></path>
|
||||
<path
|
||||
fill="#98bf00"
|
||||
fill-rule="evenodd"
|
||||
d="M350.74 80.08c-1.55 4.6-2.3 9.5-2.3 14.64 0 4.5.6 8.5 1.75 12s2.8 6.44 4.9 8.8a20.1 20.1 0 0 0 7.55 5.44 25.05 25.05 0 0 0 9.84 1.9c4.35 0 8.65-.8 12.95-2.4a30.3 30.3 0 0 0 11.4-7.44l-5.4-12.5c-2.5 2.8-5.25 4.9-8.3 6.35a21.07 21.07 0 0 1-9.1 2.15c-3.5 0-6.24-1.1-8.24-3.3a12.35 12.35 0 0 1-2.95-8.35v-.95c0-.4.05-.8.15-1.2a203.42 203.42 0 0 0 19.19-3.5c3.45-.84 6.8-1.8 10.1-2.8 3.24-1 6.14-2.05 8.6-3.1v-5.74c0-3.55-.56-6.75-1.66-9.6a23.32 23.32 0 0 0-4.6-7.2c-1.94-2-4.3-3.5-6.94-4.5a22.59 22.59 0 0 0-8.5-1.6c-4.45 0-8.6 1-12.34 2.96a28.48 28.48 0 0 0-9.7 8.1 38.55 38.55 0 0 0-6.4 11.84Zm21.64-10.1c1.55-.85 3.3-1.25 5.25-1.25 2.65 0 4.85.85 6.6 2.6 1.75 1.7 2.65 4.25 2.65 7.7-1.45.45-3.15 1-5.15 1.55-2.05.5-4.1 1-6.2 1.45-2.15.45-4.2.9-6.24 1.3l-5.3.9c.24-2.1.7-4.1 1.4-5.95.75-1.85 1.7-3.5 2.84-4.9 1.25-1.4 2.6-2.55 4.15-3.4Z"
|
||||
></path>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M404.17 140.45c0-1.25-.2-2.4-.6-3.4-.4-1-.95-1.84-1.6-2.6-.7-.7-1.5-1.24-2.45-1.6-.95-.34-2-.54-3.1-.54a9.95 9.95 0 0 0-7.34 3.2 11.49 11.49 0 0 0-3.1 7.9c0 1.24.2 2.34.6 3.4.35 1 .9 1.84 1.6 2.54.65.75 1.5 1.3 2.44 1.7.95.35 2 .55 3.15.55a9.87 9.87 0 0 0 7.3-3.2c.95-.95 1.7-2.15 2.25-3.5s.85-2.84.85-4.45Zm-13.9-.05c.3-.9.7-1.7 1.2-2.4.55-.7 1.2-1.25 1.96-1.7a4.66 4.66 0 0 1 2.5-.64c1.44 0 2.5.45 3.24 1.34.75.86 1.15 2.1 1.15 3.65 0 .95-.15 1.9-.45 2.85a6.75 6.75 0 0 1-3.15 4.1c-.75.4-1.6.6-2.5.6-1.45 0-2.5-.45-3.24-1.3a5.5 5.5 0 0 1-1.16-3.65c0-.94.16-1.9.46-2.85Z"
|
||||
></path>
|
||||
<path
|
||||
d="M434.56 132.56H431l-1.9 11.04c-.05.15-.1.4-.1.75v.85h-.15l-6.4-12.64h-3.35l-3.34 18.74h3.6l2-11.3c.04-.14.04-.4.04-.64v-.86h.15l6.55 12.95 3.2-.3 3.25-18.6ZM374.38 132.56h-3.65l-3.34 18.74h3.7l3.3-18.74Z"
|
||||
></path>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M328.95 132.56h-4.25c-.8 1.35-1.65 2.9-2.6 4.55-.95 1.64-1.85 3.34-2.75 5.04-.9 1.7-1.7 3.35-2.44 4.95-.75 1.6-1.36 3-1.8 4.2h3.84c.16-.35.3-.8.5-1.25.2-.45.4-.95.66-1.4l.6-1.35c.2-.45.4-.85.54-1.2h6.5c.05.45.05.9.1 1.4l.15 1.45.15 1.35c.05.45.05.8.05 1.15l3.7-.3c0-.7-.05-1.5-.15-2.45-.05-.95-.2-1.95-.35-3-.15-1.05-.3-2.2-.5-3.35-.15-1.15-.35-2.3-.6-3.44-.2-1.16-.4-2.25-.65-3.35-.25-1.05-.45-2.05-.7-3Zm-2.35 5.55.3 1.8c.1.6.2 1.2.25 1.74.1.55.15.95.2 1.3h-4.65c.25-.45.5-.95.75-1.5.3-.55.6-1.14.9-1.75.35-.6.65-1.14.95-1.7.3-.55.55-1.04.8-1.4h.2c.1.4.2.9.3 1.5Z"
|
||||
></path>
|
||||
<path
|
||||
d="m357.64 135.96.55-3.4h-12.8l-.55 3.4h4.55l-2.65 15.34h3.65l2.7-15.34h4.55Z"
|
||||
></path>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M297.46 132.3c-1.05 0-2.1.06-3.15.16-1.04.15-2.04.3-3 .55l-3.14 17.84c.95.25 2.04.4 3.24.55 1.16.15 2.25.2 3.3.2a11.19 11.19 0 0 0 7.85-2.95c1-.95 1.8-2.1 2.4-3.45.55-1.35.85-2.9.85-4.6 0-1.35-.2-2.5-.6-3.54a7.4 7.4 0 0 0-1.75-2.6 7.56 7.56 0 0 0-2.65-1.6 10.5 10.5 0 0 0-3.35-.55Zm-.8 3.4c.75 0 1.45.1 2.1.26.65.15 1.2.45 1.65.84.5.4.9.9 1.15 1.56.25.6.4 1.34.4 2.3 0 1.2-.15 2.24-.5 3.2a5.79 5.79 0 0 1-3.5 3.85 7.1 7.1 0 0 1-2.8.49c-.45 0-.9 0-1.45-.05-.55-.05-1.05-.1-1.4-.15l2.15-12.1 1.15-.15c.45-.04.8-.04 1.05-.04Z"
|
||||
></path>
|
||||
<path
|
||||
d="M185.8 62.59a20.53 20.53 0 0 1 2.6 5.5 21.16 21.16 0 0 1 .56 8.4c-.1 1.14-.25 2.04-.4 2.69l-7.95 42.33H195l8.44-45.68a23.33 23.33 0 0 1 6.6-3.5c2.4-.85 4.5-1.3 6.25-1.3 1.9 0 3.5.55 4.8 1.65 1.24 1.05 1.84 2.6 1.84 4.75 0 .6-.1 1.5-.3 2.75-.2 1.15-.35 2.2-.5 3.1l-3.6 16.89-.75 4.05c-.24 1.45-.34 2.7-.34 3.75 0 4.05 1.1 7.44 3.34 10.14 2.15 2.7 6 4.3 11.55 4.75l6.35-12.84c-2.15-.35-3.7-1.15-4.65-2.4-1-1.2-1.5-2.9-1.5-5.05 0-.5.05-1.1.15-1.75.05-.65.15-1.2.2-1.6l3.65-17.2c.3-1.44.55-2.9.75-4.34.2-1.4.3-2.8.3-4.15 0-4.95-1.45-8.94-4.35-11.9-2.95-2.94-7.05-4.44-12.3-4.44-3.04 0-5.94.5-8.8 1.5-2.8.95-6.2 2.54-10.14 4.9a17.35 17.35 0 0 0-2.8-6.75l-13.4 5.75ZM276.82 31.55h-14.14l-10.8 58.47c-.45 1.95-.8 4-1.05 6.15-.25 2.1-.4 4.05-.4 5.85 0 5.8 1.1 10.55 3.35 14.24 2.25 3.7 6.05 5.9 11.4 6.6l6.5-13.3a18.96 18.96 0 0 1-2.8-1.64 7.2 7.2 0 0 1-2.1-2.15 8.1 8.1 0 0 1-1.3-3.05c-.25-1.2-.4-2.7-.4-4.45 0-.85.05-1.8.15-2.8l.45-3.2 11.14-60.72ZM246.43 132.56h-3.65l-2.4 13.69a5.7 5.7 0 0 1-4.3 1.95c-.9 0-1.6-.2-2.1-.6-.54-.45-.8-1.15-.8-2.2 0-.2.06-.5.1-.9.06-.35.06-.7.1-1l2-10.94h-3.7l-1.94 10.9-.15 1.34c-.05.45-.05.8-.05 1.15 0 1 .15 1.85.45 2.6a4.55 4.55 0 0 0 3 2.75 7.94 7.94 0 0 0 7.15-1.4c0 .25 0 .55.05.85 0 .25 0 .5.04.75l3.65-.25c-.04-.25-.04-.5-.04-.8-.06-.25-.06-.55-.06-.9 0-.6.06-1.25.1-1.9.05-.7.1-1.35.25-1.95l2.3-13.14ZM276.62 132.56h-3.55l-1.9 11.04c-.05.15-.1.4-.1.75v.85h-.15l-6.4-12.64h-3.34l-3.35 18.74h3.6l2-11.3c.05-.14.05-.4.05-.64v-.86h.14l6.56 12.95 3.2-.3 3.24-18.6Z"
|
||||
></path>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M214.8 134.46c-.7-.7-1.5-1.25-2.45-1.6-.95-.35-2-.55-3.1-.55a9.97 9.97 0 0 0-7.35 3.2 11.5 11.5 0 0 0-3.1 7.9c0 1.24.2 2.34.6 3.4.35 1 .9 1.84 1.6 2.54.65.75 1.5 1.3 2.45 1.7.95.35 2 .55 3.15.55a9.87 9.87 0 0 0 7.3-3.2 10.5 10.5 0 0 0 2.25-3.5c.54-1.35.85-2.84.85-4.45 0-1.25-.2-2.4-.6-3.4a9.1 9.1 0 0 0-1.6-2.6ZM204.3 138c.55-.7 1.2-1.25 1.95-1.7a4.68 4.68 0 0 1 2.5-.64c1.45 0 2.5.45 3.25 1.34.75.86 1.15 2.1 1.15 3.65 0 .95-.15 1.9-.46 2.85a6.75 6.75 0 0 1-3.14 4.1c-.75.4-1.6.6-2.5.6-1.45 0-2.5-.45-3.25-1.3a5.5 5.5 0 0 1-1.15-3.65 8.99 8.99 0 0 1 1.65-5.25Z"
|
||||
></path>
|
||||
<path
|
||||
d="M188.26 132.56h-10.3l-3.35 18.74h3.7l1.25-7.15h6.75l.6-3.4h-6.75l.85-4.8h6.65l.6-3.4Z"
|
||||
></path>
|
||||
<path
|
||||
fill="#98bf00"
|
||||
d="M127.08 44.9c1.35-10.95-1.4-20.8-8.2-29.5C112.08 6.7 103.2 1.66 92.25.3c-10.95-1.34-20.8 1.41-29.5 8.2-8.04 6.25-12.94 14.3-14.69 24.15-.15.85-.3 1.65-.4 2.5-.1.85-.15 1.65-.2 2.44-.35 4.6.1 9 1.3 13.2a39.3 39.3 0 0 0 7.1 13.84 40.1 40.1 0 0 0 11.75 10.3c3.74 2.15 7.89 3.6 12.44 4.4.8.15 1.6.25 2.45.4l1.35.15A42.3 42.3 0 0 1 89 67.53c-1.55.05-3.15 0-4.75-.15-.1-.05-.15-.05-.2-.05-1.85-.25-3.65-.6-5.3-1.15a26.51 26.51 0 0 1-13.04-9.24 26.5 26.5 0 0 1-5.6-20.24v-.2c.95-7.45 4.4-13.5 10.34-18.15 6-4.65 12.75-6.55 20.3-5.6a26.2 26.2 0 0 1 18.29 10.35c4.65 6 6.55 12.74 5.65 20.3-.25 1.7-.55 3.3-1 4.84a41.3 41.3 0 0 1 13.2-2c.04-.45.14-.9.2-1.35Z"
|
||||
></path>
|
||||
<path
|
||||
fill="#98bf00"
|
||||
d="M132.33 51.49c-.85-.1-1.65-.2-2.5-.25-4.6-.3-9 .15-13.2 1.3a39.42 39.42 0 0 0-13.84 7.15 38.4 38.4 0 0 0-14.7 24.14c4.36.74 8.36 2 12.05 3.85a26.53 26.53 0 0 1 10.35-18.14 26.59 26.59 0 0 1 20.3-5.66h.14c7.44.96 13.5 4.45 18.14 10.4 4.7 5.95 6.6 12.7 5.65 20.24a26.77 26.77 0 0 1-10.34 18.34 26.42 26.42 0 0 1-20.15 5.6c.85 4.05 1.1 8.3.8 12.7 9.95.65 18.94-2.2 26.99-8.45 8.7-6.8 13.75-15.7 15.1-26.64 1.34-10.94-1.4-20.79-8.2-29.49-6.3-8.05-14.35-12.94-24.14-14.69-.85-.15-1.65-.3-2.45-.4Z"
|
||||
></path>
|
||||
<path
|
||||
d="M128.93 78.73c-3.45-.4-6.5.45-9.25 2.6a11.9 11.9 0 0 0-4.7 8.3c-.45 3.44.4 6.5 2.55 9.24a11.9 11.9 0 0 0 8.35 4.7c3.4.45 6.45-.4 9.2-2.55 2.75-2.15 4.3-4.9 4.74-8.35.4-3.4-.44-6.44-2.6-9.2a12.15 12.15 0 0 0-8.29-4.74Z"
|
||||
></path>
|
||||
<path
|
||||
fill="#98bf00"
|
||||
d="M12.83 73.63c.95-7.55 4.4-13.7 10.4-18.34a26.12 26.12 0 0 1 20.09-5.6 44.33 44.33 0 0 1-.8-12.7c-9.95-.65-18.95 2.16-27 8.45C6.79 52.24 1.79 61.14.44 72.08c-1.35 10.95 1.35 20.74 8.2 29.49 6.24 8.05 14.3 12.95 24.14 14.7.8.14 1.6.24 2.45.4.85.1 1.65.2 2.5.24 4.6.3 9-.15 13.19-1.3 4.85-1.4 9.5-3.8 13.85-7.14 4.3-3.4 7.7-7.3 10.24-11.7a39.2 39.2 0 0 0 4.45-12.44 44.68 44.68 0 0 1-12.04-3.85c-.25 1.75-.6 3.45-1.1 5.1a26.53 26.53 0 0 1-9.25 13.04 26.59 26.59 0 0 1-20.3 5.65c-.04 0-.1 0-.14-.05a26.46 26.46 0 0 1-18.15-10.35 26.3 26.3 0 0 1-5.64-20.24Z"
|
||||
></path>
|
||||
<path
|
||||
d="M32.47 67.13c-2.75 2.1-4.3 4.9-4.75 8.35a12 12 0 0 0 2.6 9.14 12 12 0 0 0 8.3 4.8 12.55 12.55 0 0 0 13.94-10.9c.45-3.44-.4-6.54-2.55-9.24a11.9 11.9 0 0 0-8.35-4.7c-3.45-.45-6.5.4-9.2 2.55ZM97.3 32.35a12 12 0 0 0-8.35-4.7c-3.45-.45-6.5.4-9.2 2.55A11.84 11.84 0 0 0 75 38.54c-.45 3.4.45 6.45 2.6 9.2a12.1 12.1 0 0 0 8.3 4.75c3.4.35 6.44-.5 9.2-2.6a12.26 12.26 0 0 0 4.74-8.3c.4-3.45-.45-6.54-2.55-9.24Z"
|
||||
></path>
|
||||
<path
|
||||
fill="#98bf00"
|
||||
d="m85.05 88.43-1.35-.16a42.3 42.3 0 0 1-5.15 12.35c1.55-.1 3.15-.05 4.8.15.05 0 .1 0 .15.05 1.85.2 3.6.55 5.3 1.1a26.63 26.63 0 0 1 13.04 9.3 26.23 26.23 0 0 1 5.6 20.24v.2a26.47 26.47 0 0 1-10.35 18.14 26.52 26.52 0 0 1-20.29 5.6 26.56 26.56 0 0 1-18.3-10.35c-4.7-6-6.59-12.74-5.64-20.29.2-1.7.55-3.3 1.05-4.85a43.3 43.3 0 0 1-13.25 2c-.04.45-.14.9-.2 1.35-1.34 10.95 1.36 20.74 8.2 29.49 6.8 8.7 15.7 13.74 26.64 15.1 10.95 1.34 20.74-1.4 29.49-8.2 8.05-6.3 12.94-14.35 14.7-24.2.14-.8.24-1.6.4-2.44.04-.85.14-1.65.2-2.45.3-4.65-.16-9.05-1.3-13.2a40.16 40.16 0 0 0-7.1-13.84 39.9 39.9 0 0 0-11.7-10.3 38.72 38.72 0 0 0-12.5-4.4c-.8-.14-1.6-.3-2.44-.4Z"
|
||||
></path>
|
||||
<path
|
||||
d="M90 120.41a12.14 12.14 0 0 0-8.35-4.75c-3.45-.4-6.5.45-9.2 2.6a12.14 12.14 0 0 0-4.75 8.3c-.45 3.45.46 6.5 2.6 9.25 2.1 2.75 4.85 4.3 8.3 4.7 3.45.44 6.5-.4 9.25-2.56 2.7-2.14 4.24-4.9 4.7-8.34.4-3.4-.46-6.45-2.55-9.2Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
Loading…
Add table
Add a link
Reference in a new issue