From 12a1c90fbbe0f8182f9ac18137122e896634b6a5 Mon Sep 17 00:00:00 2001
From: Viktor Avelino <64113566+viktoravelino@users.noreply.github.com>
Date: Tue, 20 Jan 2026 17:18:55 -0500
Subject: [PATCH 01/28] docs(service): add langflow service docs (#492)
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
---
.../theme/components/Services/List.vue | 7 +++++
docs/public/images/services/langflow.svg | 5 ++++
docs/services/all.md | 1 +
docs/services/langflow.md | 29 +++++++++++++++++++
4 files changed, 42 insertions(+)
create mode 100644 docs/public/images/services/langflow.svg
create mode 100644 docs/services/langflow.md
diff --git a/docs/.vitepress/theme/components/Services/List.vue b/docs/.vitepress/theme/components/Services/List.vue
index 54eac201..15a36325 100644
--- a/docs/.vitepress/theme/components/Services/List.vue
+++ b/docs/.vitepress/theme/components/Services/List.vue
@@ -1116,6 +1116,13 @@ const services = [
description: 'Open source LLM engineering platform.',
category: 'AI'
},
+ {
+ name: 'Langflow',
+ slug: 'langflow',
+ icon: '/docs/images/services/langflow.svg',
+ description: 'Open source Python-based framework for building AI applications.',
+ category: 'AI'
+ },
{
name: 'Linkding',
slug: 'linkding',
diff --git a/docs/public/images/services/langflow.svg b/docs/public/images/services/langflow.svg
new file mode 100644
index 00000000..08bd5557
--- /dev/null
+++ b/docs/public/images/services/langflow.svg
@@ -0,0 +1,5 @@
+
diff --git a/docs/services/all.md b/docs/services/all.md
index 35b41328..8de51d65 100644
--- a/docs/services/all.md
+++ b/docs/services/all.md
@@ -28,6 +28,7 @@ Complete directory of all one-click services available in Coolify, organized by
- [Chroma](/services/chroma) - Open-source, AI-native vector database for building applications with embeddings
- [Flowise](/services/flowise) - Drag & drop UI to build your customized LLM flow
- [Label Studio](/services/labelstudio) - Open source data labeling platform
+- [Langflow](/services/langflow) - Open-source Python-based framework for building AI agents and workflows with visual drag-and-drop interface
- [Langfuse](/services/langfuse) - Open source LLM engineering platform
- [LibreChat](/services/librechat) - Self-hosted, powerful, and privacy-focused chat UI for multiple AI models
- [LibreTranslate](/services/libretranslate) - Free and open-source machine translation API
diff --git a/docs/services/langflow.md b/docs/services/langflow.md
new file mode 100644
index 00000000..cf36bbc4
--- /dev/null
+++ b/docs/services/langflow.md
@@ -0,0 +1,29 @@
+---
+title: "Langflow"
+description: "Host Langflow on Coolify to build and deploy AI-powered agents and workflows with a visual drag-and-drop interface and Python extensibility."
+---
+
+# Langflow
+
+
+
+## What is Langflow?
+
+Langflow is an open-source Python-based framework for building AI applications. It combines a visual authoring experience with full programmatic access, enabling teams to prototype, test, and deploy AI-powered agents and workflows.
+
+It accelerates development by providing a **drag-and-drop interface** while maintaining the flexibility of **custom Python components** for advanced use cases.
+
+## Credentials
+
+After deploying Langflow on Coolify you can login to the dashboard with the autogenerated credentials stored in the following environment variables:
+
+| Variable | Description |
+|--------------------------------|----------------------------------|
+| `LANGFLOW_SUPERUSER` | Username for the admin account |
+| `LANGFLOW_SUPERUSER_PASSWORD` | Password for the admin account |
+
+## Links
+
+- [Langflow Website](https://www.langflow.org/?utm_source=coolify.io)
+- [Documentation](https://docs.langflow.org/?utm_source=coolify.io)
+- [GitHub Repository](https://github.com/langflow-ai/langflow)
From 376024ac585c53edb555b7b708c944b6efa05239 Mon Sep 17 00:00:00 2001
From: luo jiyin
Date: Thu, 22 Jan 2026 21:39:32 +0800
Subject: [PATCH 02/28] [docs] fixed alot of small spelling errors (#496)
---
docs/api-reference/authorization.md | 2 +-
docs/applications/build-packs/nixpacks.md | 4 ++--
docs/applications/ci-cd/github/setup-app.md | 2 +-
.../cloudflare/tunnels/all-resource.md | 6 +++---
.../cloudflare/tunnels/single-resource.md | 4 ++--
docs/knowledge-base/change-localhost-key.md | 2 +-
docs/knowledge-base/commands.md | 2 +-
.../how-to/hetzner-loadbalancing.md | 2 +-
docs/knowledge-base/internal/scalability.md | 2 +-
docs/knowledge-base/notifications.md | 2 +-
docs/public/images/services/autobase-logo.svg | 12 +++++++++---
docs/services/appwrite.md | 2 +-
docs/services/autobase.md | 16 +++++++++++++++-
docs/services/bluesky-pds.md | 2 +-
docs/services/calcom.md | 2 +-
docs/services/ente-photos.md | 2 +-
docs/services/forgejo.md | 2 +-
docs/services/signoz.md | 2 +-
.../applications/failed-to-get-token.md | 2 +-
.../dns-and-domains/lets-encrypt-not-working.md | 2 +-
20 files changed, 46 insertions(+), 26 deletions(-)
diff --git a/docs/api-reference/authorization.md b/docs/api-reference/authorization.md
index 3ff8af41..42899be2 100644
--- a/docs/api-reference/authorization.md
+++ b/docs/api-reference/authorization.md
@@ -9,7 +9,7 @@ API request requires a `Bearer` token in `Authorization` header, which could be
## Access
-The API can be accesed through `http://:8000/api`.
+The API can be accessed through `http://:8000/api`.
With the exception of `/health` and `/feedback`, all routes are additionally prefixed with `/v1` resulting in the base rouce `http://:8000/api/v1`.
diff --git a/docs/applications/build-packs/nixpacks.md b/docs/applications/build-packs/nixpacks.md
index 7cfb530d..14e5fac4 100644
--- a/docs/applications/build-packs/nixpacks.md
+++ b/docs/applications/build-packs/nixpacks.md
@@ -56,7 +56,7 @@ First, follow the previous section in this documentation: [How to use Nixpacks](
-1. **Branch:** Coolify will automatically detect the branch from your Repostiory.
+1. **Branch:** Coolify will automatically detect the branch from your Repository.
2. **Base Directory:** Enter the directory Nixpacks should use as the root (for example, `/` if your files are at the root, or a subfolder if applicable).
@@ -100,7 +100,7 @@ First, follow the previous section in this documentation: [How to use Nixpacks](
-1. **Branch:** Coolify will automatically detect the branch from your Repostiory.
+1. **Branch:** Coolify will automatically detect the branch from your Repository.
2. **Base Directory:** Enter the directory Nixpacks should use as the root (for example, `/` if your files are at the root, or a subfolder if applicable).
diff --git a/docs/applications/ci-cd/github/setup-app.md b/docs/applications/ci-cd/github/setup-app.md
index 03984096..54b6160f 100644
--- a/docs/applications/ci-cd/github/setup-app.md
+++ b/docs/applications/ci-cd/github/setup-app.md
@@ -4,7 +4,7 @@ description: "Set up a GitHub App in Coolify to access and deploy from private G
---
# GitHub App
-Github app allows you to grant access to a single or mulitple private repositories from your either personal github account or your organization on github.
+Github app allows you to grant access to a single or multiple private repositories from your either personal github account or your organization on github.
### Why use github app with Coolify?
diff --git a/docs/integrations/cloudflare/tunnels/all-resource.md b/docs/integrations/cloudflare/tunnels/all-resource.md
index 9c0b2187..0f05b507 100644
--- a/docs/integrations/cloudflare/tunnels/all-resource.md
+++ b/docs/integrations/cloudflare/tunnels/all-resource.md
@@ -11,7 +11,7 @@ Accessing All Resource deployed on Coolify using a Cloudflare Tunnel allows you
This setup is ideal for people who:
-- Don't have a public IP for their server (could be a laptop, rasberry pi etc..).
+- Don't have a public IP for their server (could be a laptop, raspberry pi etc..).
- Are unable to port forward (e.g., using home internet or on a private network).
- Want to keep their server’s IP address private and avoid exposing it to the public internet.
- Have an resource already deployed on Coolify and need an external method to access it securely.
@@ -43,7 +43,7 @@ A simple high-level overview diagram to give you a visual idea of how this works
- [Setup Cloudflare Tunnel on Coolify](#_3-setup-cloudflare-tunnel-on-coolify)
- [Start Coolify Proxy](#_4-start-coolify-proxy)
- [Configure Your Resource to Use the Tunnel Domain](#_5-configure-your-resource-to-use-the-tunnel-domain)
-- [How to use Mutiple Different Domains](#how-to-use-mutiple-different-domains)
+- [How to use Multiple Different Domains](#how-to-use-multiple-different-domains)
- [Known issues and Solutions](#known-issues-and-solutions)
---
@@ -154,7 +154,7 @@ If your app requires **HTTPS** for features like cookies or login, follow the [F
**Congratulations**! You've successfully set up a resource that can be accessed by anyone on the internet your domain.
-## How to use Mutiple Different Domains?
+## How to use Multiple Different Domains?
You don't need to create new tunnels for each domain, just create a new hostname with the new domain and point it to the `localhost:80`.
diff --git a/docs/integrations/cloudflare/tunnels/single-resource.md b/docs/integrations/cloudflare/tunnels/single-resource.md
index e8bbbe24..0e5665b3 100644
--- a/docs/integrations/cloudflare/tunnels/single-resource.md
+++ b/docs/integrations/cloudflare/tunnels/single-resource.md
@@ -11,7 +11,7 @@ Accessing an Resource deployed on Coolify using a Cloudflare Tunnel allows you t
This setup is ideal for people who:
-- Don't have a public IP for their server (could be a laptop, rasberry pi etc..).
+- Don't have a public IP for their server (could be a laptop, raspberry pi etc..).
- Are unable to port forward (e.g., using home internet or on a private network).
- Want to keep their server’s IP address private and avoid exposing it to the public internet.
- Have an app already deployed on Coolify and need an external method to access it securely.
@@ -42,7 +42,7 @@ A simple high-level overview diagram to give you a visual idea of how this works
- [Setup your app for tunneling](#_1-setup-your-app-for-tunneling)
- [Create a Cloudflare Tunnel](#_2-create-a-cloudflare-tunnel)
- [Setup Cloudflare Tunnel on Coolify](#_3-setup-cloudflare-tunnel-on-coolify)
-- [Expose Mutiple Resource on Different Domains](#expose-mutiple-resource-on-different-domains)
+- [Expose Multiple Resource on Different Domains](#expose-multiple-resource-on-different-domains)
- [Known issues and Solutions](#known-issues-and-solutions)
---
diff --git a/docs/knowledge-base/change-localhost-key.md b/docs/knowledge-base/change-localhost-key.md
index 72c162e9..78f56093 100644
--- a/docs/knowledge-base/change-localhost-key.md
+++ b/docs/knowledge-base/change-localhost-key.md
@@ -48,5 +48,5 @@ After the key has been deleted from the database, you need to add the new keys i
- Make sure the Database\Seeders\PopulateSshKeysDirectorySeeder does not error.
::: info Note
- If you recieve an output of "SSH key found for the Coolify host machine (localhost)", the operation completed successfully and unless you get any other output, your new key shall now be working.
+ If you receive an output of "SSH key found for the Coolify host machine (localhost)", the operation completed successfully and unless you get any other output, your new key shall now be working.
:::
diff --git a/docs/knowledge-base/commands.md b/docs/knowledge-base/commands.md
index 8a70b168..9a512a03 100644
--- a/docs/knowledge-base/commands.md
+++ b/docs/knowledge-base/commands.md
@@ -23,7 +23,7 @@ docker exec -ti coolify sh -c "php artisan root:change-email"
```
## Delete a stuck service
- You can easily delete a stucked service.
+ You can easily delete a stuck service.
Login to your server through SSH and execute the following command:
diff --git a/docs/knowledge-base/how-to/hetzner-loadbalancing.md b/docs/knowledge-base/how-to/hetzner-loadbalancing.md
index 131d74db..9ade8b30 100644
--- a/docs/knowledge-base/how-to/hetzner-loadbalancing.md
+++ b/docs/knowledge-base/how-to/hetzner-loadbalancing.md
@@ -129,7 +129,7 @@ The whole infrastructure costs around ~15€ per month.
As the load balancer communicates with your servers over the private network, we only need to add rules for the public IP addresses.
- The `Inbound` rules includes everything that is allowed. Everyting else is blocked by default.
+ The `Inbound` rules includes everything that is allowed. Everything else is blocked by default.
1. Go to the Hetzner Cloud Console and click on `Firewalls` in the left sidebar.
2. Click on the `Create Firewall` button.
diff --git a/docs/knowledge-base/internal/scalability.md b/docs/knowledge-base/internal/scalability.md
index cf9d2e71..188f21fb 100644
--- a/docs/knowledge-base/internal/scalability.md
+++ b/docs/knowledge-base/internal/scalability.md
@@ -66,7 +66,7 @@ We also recommend to use [Hetzner](https://coolify.io/hetzner) (referral link) f
- Requires a proxy on the servers - Coolify automatically configures the proxy for you, but it is +1 component that can fail.
- "Less expensive" (as one server can host multiple applications).
- **Cons**:
- - As a plus proxy is added, there is a small performance hit as the proxy needs to be initialized on each server - not noticable for most use cases.
+ - As a plus proxy is added, there is a small performance hit as the proxy needs to be initialized on each server - not noticeable for most use cases.
- You need bigger servers to host more applications, as more applications will be running on the same server.
- Healthcheck are not available for each application, only for the server.
diff --git a/docs/knowledge-base/notifications.md b/docs/knowledge-base/notifications.md
index ef2a4829..abd76d99 100644
--- a/docs/knowledge-base/notifications.md
+++ b/docs/knowledge-base/notifications.md
@@ -124,7 +124,7 @@ Email notifications can be configured using either SMTP or Resend.
- Make sure the bot is an admin in the group/channel
- Include the minus sign (-) in the chat ID if present
- If `getUpdates` returns an empty response, send another message and try again
-- if you can not acces `getUpdates` make sure you have the correct bot token and you have replace the `{YOUR_BOT_TOKEN}` with your actual bot token (replace everything including the quotes)
+- if you can not access `getUpdates` make sure you have the correct bot token and you have replace the `{YOUR_BOT_TOKEN}` with your actual bot token (replace everything including the quotes)
:::
### Discord
diff --git a/docs/public/images/services/autobase-logo.svg b/docs/public/images/services/autobase-logo.svg
index 1ae0493c..83ab88f6 100644
--- a/docs/public/images/services/autobase-logo.svg
+++ b/docs/public/images/services/autobase-logo.svg
@@ -1,3 +1,9 @@
-
+
+
+
\ No newline at end of file
diff --git a/docs/services/appwrite.md b/docs/services/appwrite.md
index 4682aacd..40361d9d 100644
--- a/docs/services/appwrite.md
+++ b/docs/services/appwrite.md
@@ -664,7 +664,7 @@ description: "Deploy Appwrite BaaS on Coolify for authentication, databases, sto
# - appwrite-functions:/storage/functions:rw
# - /tmp:/tmp:rw
# environment:
-# - OPR_EXECUTOR_INACTIVE_TRESHOLD=${_APP_FUNCTIONS_INACTIVE_THRESHOLD}
+# - OPR_EXECUTOR_INACTIVE_THRESHOLD=${_APP_FUNCTIONS_INACTIVE_THRESHOLD}
# - >-
# OPR_EXECUTOR_MAINTENANCE_INTERVAL=${_APP_FUNCTIONS_MAINTENANCE_INTERVAL}
# - OPR_EXECUTOR_NETWORK=${_APP_FUNCTIONS_RUNTIMES_NETWORK:-runtimes}
diff --git a/docs/services/autobase.md b/docs/services/autobase.md
index eec1f5d7..c8a117d3 100644
--- a/docs/services/autobase.md
+++ b/docs/services/autobase.md
@@ -9,7 +9,21 @@ description: "Autobase for PostgreSQL® is an open-source alternative to cloud-m
## What is Autobase?
-Autobase for PostgreSQL® automates the deployment and management of highly available PostgreSQL clusters in production environments. This solution is tailored for use on dedicated physical servers, virtual machines, and within both on-premises and cloud-based infrastructures.
+**Autobase for PostgreSQL®** is an open-source alternative to cloud-managed databases (DBaaS) such as Amazon RDS, Google Cloud SQL, Azure Database, and others.
+
+This automated database platform enables you to create and manage production-ready, highly available PostgreSQL clusters. It simplifies the deployment process, reduces operational costs, and makes database management accessible even for teams without specialized expertise.
+
+*Automate deployment, failover, backups, restore, upgrades, scaling, and more with ease.*
+
+Say goodbye to manual database management 👋
+
+## Demo
+
+[https://demo.autobase.tech/](https://demo.autobase.tech/?utm_source=coolify.io)
+
+Note: use the token *demo* to access.
+
+
## Links
diff --git a/docs/services/bluesky-pds.md b/docs/services/bluesky-pds.md
index 006bb794..c32a008d 100644
--- a/docs/services/bluesky-pds.md
+++ b/docs/services/bluesky-pds.md
@@ -17,7 +17,7 @@ Pdsadmin requires you to have https in your Bluesky PDS, make sure you have set
## Creating an account in your PDS
-To create an account and start using your PDS, you can use the following pdsadmin commnands in the Terminal tab of the Coolify UI:
+To create an account and start using your PDS, you can use the following pdsadmin commands in the Terminal tab of the Coolify UI:
```bash
pdsadmin create-invite-code
diff --git a/docs/services/calcom.md b/docs/services/calcom.md
index b1d6d643..20ee61ed 100644
--- a/docs/services/calcom.md
+++ b/docs/services/calcom.md
@@ -18,7 +18,7 @@ You need to change default docker compose to the following to make cal.com work
```yaml
services:
calcom:
- image: 'calcom/cal.com:
+ image: 'calcom/cal.com:
platform: linux/amd64
(... same ...)
```
diff --git a/docs/services/ente-photos.md b/docs/services/ente-photos.md
index a56e5b21..9002f305 100644
--- a/docs/services/ente-photos.md
+++ b/docs/services/ente-photos.md
@@ -19,7 +19,7 @@ Learn more at [help.ente.io](https://help.ente.io/).
### 1. Remote S3 bucket
-- For AWS S3 you can create a bucket and allow access via IAM Roles/User Permissions. Which will generate an access key and secrect key for your S3 Bucket.
+- For AWS S3 you can create a bucket and allow access via IAM Roles/User Permissions. Which will generate an access key and secret key for your S3 Bucket.
- For the S3 bucket, apply the following CORS policy for proper access control from the museum service.
diff --git a/docs/services/forgejo.md b/docs/services/forgejo.md
index 3040b639..3f94a48d 100644
--- a/docs/services/forgejo.md
+++ b/docs/services/forgejo.md
@@ -51,7 +51,7 @@ Coolify includes Forgejo services with a single runner, using [Docker-in-Docker]
Due to the alpha status of the Forgejo runner, rebooting the Forejo application container after the initial setup is required to fully register the shared secret into Forejo for runners to validate:
1. In the **Environment Variables** section of the service configuration, you may set as `RUNNER_SHARED_SECRET` a random 40-character hexagesimal string. The command `openssl rand -hex 20` creates something you can copy and paste.
-2. After sucessfully setting up Forejo, **reboot the `forgejo` service** and wait some seconds until the runner appears in Forgejo _Actions_ Configuration section.
+2. After successfully setting up Forejo, **reboot the `forgejo` service** and wait some seconds until the runner appears in Forgejo _Actions_ Configuration section.
Forejo is also compatible with third-party CI apps and platforms. Forgejo is a Gitea-fork, so instructions to incorporate these CI may be the same for both.
diff --git a/docs/services/signoz.md b/docs/services/signoz.md
index c9074140..a6d85e7f 100644
--- a/docs/services/signoz.md
+++ b/docs/services/signoz.md
@@ -90,7 +90,7 @@ To enable email alerts, you need to set the following variables from the Environ
More environment variables are [available to use](https://signoz.io/docs/manage/administrator-guide/configuration/alertmanager/) to authenticate via Identity / Secret or use TLS instead of SmartTLS. Read [Passing environment variables not included in the template](passing-environment-variables-not-included-in-the-template) to learn how to add them.
-## Permision issue while using non root user
+## Permission issue while using non root user
The issue is mostly due to Coolify re-apply its user' ownership & chmod to the files mounted in the container.
diff --git a/docs/troubleshoot/applications/failed-to-get-token.md b/docs/troubleshoot/applications/failed-to-get-token.md
index 1204405c..082ce874 100644
--- a/docs/troubleshoot/applications/failed-to-get-token.md
+++ b/docs/troubleshoot/applications/failed-to-get-token.md
@@ -11,7 +11,7 @@ The error is usually related to NTP time synchronization issue.
## Error
-`'Issued at' claim (iat) must be an Integer representing the time that assertation issued.`
+`'Issued at' claim (iat) must be an Integer representing the time that assertion issued.`
## Solution
diff --git a/docs/troubleshoot/dns-and-domains/lets-encrypt-not-working.md b/docs/troubleshoot/dns-and-domains/lets-encrypt-not-working.md
index ae82eb99..318ed6bf 100644
--- a/docs/troubleshoot/dns-and-domains/lets-encrypt-not-working.md
+++ b/docs/troubleshoot/dns-and-domains/lets-encrypt-not-working.md
@@ -37,7 +37,7 @@ Sometimes, Let's Encrypt might be having issues on their end. Check the Let's En
## 5. Note on Certificate Validity
-Let's Encrypt certificates are valid for 90 days. If your certificate is still valid, your domain may work fine even if requied port 80 is closed or your domain is being proxied. This is because Coolify will continue using the existing valid certificate until it expires.
+Let's Encrypt certificates are valid for 90 days. If your certificate is still valid, your domain may work fine even if required port 80 is closed or your domain is being proxied. This is because Coolify will continue using the existing valid certificate until it expires.
However, if your domain has been working fine over HTTPS for several months and suddenly fails to generate a new SSL certificate, it’s likely that the existing certificate has expired. At this point, Coolify won’t be able to generate a new certificate due to the issues mentioned earlier (like port 80 being closed or proxy interference).
From 80d6e3d24a3822a13edd19270f1ecbf551b078eb Mon Sep 17 00:00:00 2001
From: Utsav Deep
Date: Mon, 26 Jan 2026 16:33:21 +0100
Subject: [PATCH 03/28] [docs] [integration] fixed broken links on cloudflare
integrations overview page (#501)
---
.../cloudflare/tunnels/all-resource.md | 4 +-
.../cloudflare/tunnels/full-tls.md | 41 +++++++++++++++----
.../cloudflare/tunnels/overview.md | 10 ++---
.../cloudflare/tunnels/single-resource.md | 7 ++--
4 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/docs/integrations/cloudflare/tunnels/all-resource.md b/docs/integrations/cloudflare/tunnels/all-resource.md
index 0f05b507..26dc1903 100644
--- a/docs/integrations/cloudflare/tunnels/all-resource.md
+++ b/docs/integrations/cloudflare/tunnels/all-resource.md
@@ -26,7 +26,7 @@ To follow this guide, you'll need:
## Before We Start
- We assume you have Coolify running on your server.
-- If your app requires HTTPS for functionality like cookies or login, then you need to follow the [Full TLS HTTPS guide](/knowledge-base/cloudflare/tunnels/full-tls) after following this guide. This is because in this guide, Cloudflare will manage HTTPS externally, while your app will run over HTTP within Coolify.
+- If your app requires HTTPS for functionality like cookies or login, then you need to follow the [Full TLS HTTPS guide](/integrations/cloudflare/tunnels/full-tls) after following this guide. This is because in this guide, Cloudflare will manage HTTPS externally, while your app will run over HTTP within Coolify.
## How It Works?
@@ -149,7 +149,7 @@ Enter the domain you want to use for your resource/app and deploy your resource.
::: warning HEADS UP!
You should enter the domain as **HTTP** because Cloudflare handles **HTTPS** and TLS terminations. If you use **HTTPS** for your resource, you may encounter a **TOO_MANY_REDIRECTS** error.
-If your app requires **HTTPS** for features like cookies or login, follow the [Full TLS HTTPS Guide](/knowledge-base/cloudflare/tunnels/full-tls) after completing this guide.
+If your app requires **HTTPS** for features like cookies or login, follow the [Full TLS HTTPS Guide](/integrations/cloudflare/tunnels/full-tls) after completing this guide.
:::
**Congratulations**! You've successfully set up a resource that can be accessed by anyone on the internet your domain.
diff --git a/docs/integrations/cloudflare/tunnels/full-tls.md b/docs/integrations/cloudflare/tunnels/full-tls.md
index 1c3135c8..c5c049db 100644
--- a/docs/integrations/cloudflare/tunnels/full-tls.md
+++ b/docs/integrations/cloudflare/tunnels/full-tls.md
@@ -15,7 +15,7 @@ This guide solves that issue by configuring your resources to run fully on HTTPS
This guide is ideal for users who:
-- Have followed our [Tunnel All Resources Using Cloudflare Tunnel](/knowledge-base/cloudflare/tunnels/all-resource) or [Tunnel Specific Resources Using Cloudflare Tunnel](/knowledge-base/cloudflare/tunnels/single-resource) guide.
+- Have followed our [Tunnel All Resources Using Cloudflare Tunnel](/integrations/cloudflare/tunnels/all-resource) or [Tunnel Specific Resources Using Cloudflare Tunnel](/integrations/cloudflare/tunnels/single-resource) guide.
- Need their resources deployed with Coolify to run on HTTPS for applications requiring HTTPS for JWT issuance, callback functions, or similar features.
## Setup Requirements
@@ -94,12 +94,15 @@ Your certificate will now be generated.
Next, you'll add these to your server running Coolify and configure Coolify to use this certificate.
## 2. Add Origin Certificate to Your Server
+
SSH into your server or use Coolify's terminal feature. For this guide, I’m using SSH:
+
```sh
ssh shadowarcanist@203.0.113.1
```
Once logged in, navigate to the Coolify proxy directory:
+
```sh
$ cd /data/coolify/proxy
```
@@ -110,90 +113,108 @@ Adding certificates slightly varies for Caddy and Traefik proxy so choose the co
== Traefik
Create the `certs` directory:
+
```sh
$ mkdir certs
```
Verify it was created:
+
```sh
$ ls
> acme.json certs docker-compose.yml dynamic
```
Now, navigate into the **certs** directory:
+
```sh
$ cd certs
```
Create two new files for the certificate and private key:
+
```sh
$ touch shadowarcanist.cert shadowarcanist.key
```
Verify the files were created:
+
```sh
$ ls
> shadowarcanist.cert shadowarcanist.key
```
Open the **shadowarcanist.cert** file and paste the certificate from the Cloudflare dashboard:
+
```sh
-$ nano shadowarcanist.cert
+$ nano shadowarcanist.cert
```
+
Save and exit after pasting the certificate.
Do the same for the **shadowarcanist.key** file and paste the private key:
+
```sh
-$ nano shadowarcanist.key
+$ nano shadowarcanist.key
```
+
Save and exit.
== Caddy
Create the `caddy/data/certs` directory:
+
```sh
$ mkdir -p caddy/data/certs
```
Verify it was created:
+
```sh
$ ls caddy/data
> certs
```
Now, navigate into the **certs** directory:
+
```sh
$ cd caddy/data/certs
```
Create two new files for the certificate and private key:
+
```sh
$ touch shadowarcanist.cert shadowarcanist.key
```
Verify the files were created:
+
```sh
$ ls
> shadowarcanist.cert shadowarcanist.key
```
Open the **shadowarcanist.cert** file and paste the certificate from the Cloudflare dashboard:
+
```sh
-$ nano shadowarcanist.cert
+$ nano shadowarcanist.cert
```
+
Save and exit after pasting the certificate.
Do the same for the **shadowarcanist.key** file and paste the private key:
+
```sh
-$ nano shadowarcanist.key
+$ nano shadowarcanist.key
```
+
Save and exit.
:::
Now the origin certificate is installed on your server.
-
## 3. Configure Coolify to Use the Origin Certificate
+
1. Go to the **Server** section in the sidebar.
@@ -213,6 +234,7 @@ Adding Dynamic Configuration slightly varies for Caddy and Traefik proxy so choo
1. Choose a name for your configuration (must end with `.yaml`).
2. Enter the following details in the configuration field:
+
```sh
tls:
certificates:
@@ -222,8 +244,11 @@ tls:
```
3. Save the configuration
+
---
+
If you want to add multiple certificates and keys, you can do it like this:
+
```sh
tls:
certificates:
@@ -243,6 +268,7 @@ tls:
1. Choose a name for your configuration (must end with `.caddy`).
2. Enter the following details in the configuration field:
+
```sh
*.shadowarcanist.com, shadowarcanist.com {
tls /data/certs/shadowarcanist.cert /data/certs/shadowarcanist.key
@@ -256,6 +282,7 @@ tls:
---
If you want to add multiple certificates and keys, you can do it like this:
+
```sh
*.shadowarcanist.com, shadowarcanist.com {
tls /data/certs/shadowarcanist.cert /data/certs/shadowarcanist.key
@@ -269,8 +296,8 @@ If you want to add multiple certificates and keys, you can do it like this:
tls /data/certs/name3.cert /data/certs/name3.key
}
```
-:::
+:::
From now on, Coolify will use the origin certificate for requests matching the hostname.
diff --git a/docs/integrations/cloudflare/tunnels/overview.md b/docs/integrations/cloudflare/tunnels/overview.md
index 99c3b64d..92769a7f 100644
--- a/docs/integrations/cloudflare/tunnels/overview.md
+++ b/docs/integrations/cloudflare/tunnels/overview.md
@@ -29,14 +29,14 @@ This makes them a great option for hosting projects on devices like old laptops
You can set up Cloudflare Tunnels with Coolify in several ways, depending on your needs. Below are the available options, each linked to a detailed guide for easy setup:
-1. [All Resources](/knowledge-base/cloudflare/tunnels/all-resource) -> Use a tunnel for all resources deployed through Coolify. This is the **easiest** and **most recommended** way for beginners.
+1. [All Resources](/integrations/cloudflare/tunnels/all-resource) -> Use a tunnel for all resources deployed through Coolify. This is the **easiest** and **most recommended** way for beginners.
-2. [Single Resource](/knowledge-base/cloudflare/tunnels/single-resource) -> Use a tunnel for a single resource deployed through Coolify.
+2. [Single Resource](/integrations/cloudflare/tunnels/single-resource) -> Use a tunnel for a single resource deployed through Coolify.
-3. [Server SSH Access](/knowledge-base/cloudflare/tunnels/server-ssh) -> Securely connect your server to Coolify using a domain through Cloudflare Tunnel.
+3. [Server SSH Access](/integrations/cloudflare/tunnels/server-ssh) -> Securely connect your server to Coolify using a domain through Cloudflare Tunnel.
-4. [Full HTTPS/TLS](/knowledge-base/cloudflare/tunnels/full-tls) -> Setup always-on **HTTPS** for all domains and subdomains. Normally, Coolify uses **HTTP** while Cloudflare manages **HTTPS**. If certain apps require **HTTPS** directly on Coolify.
+4. [Full HTTPS/TLS](/integrations/cloudflare/tunnels/full-tls) -> Setup always-on **HTTPS** for all domains and subdomains. Normally, Coolify uses **HTTP** while Cloudflare manages **HTTPS**. If certain apps require **HTTPS** directly on Coolify.
::: success Tip:
-It’s highly recommended to go with the first option [All Resources](/knowledge-base/cloudflare/tunnels/all-resource) if you're new to Coolify and Cloudflare Tunnels, as it’s much easier to set up and manage.
+It’s highly recommended to go with the first option [All Resources](/integrations/cloudflare/tunnels/all-resource) if you're new to Coolify and Cloudflare Tunnels, as it’s much easier to set up and manage.
:::
diff --git a/docs/integrations/cloudflare/tunnels/single-resource.md b/docs/integrations/cloudflare/tunnels/single-resource.md
index 0e5665b3..2918d4ff 100644
--- a/docs/integrations/cloudflare/tunnels/single-resource.md
+++ b/docs/integrations/cloudflare/tunnels/single-resource.md
@@ -27,7 +27,7 @@ To follow this guide, you'll need:
## Before We Start
- We assume you have Coolify running and an app already deployed.
-- If your app requires HTTPS for functionality like cookies or login, then you need to follow the [Full TLS HTTPS guide](/knowledge-base/cloudflare/tunnels/full-tls) after following this guide. This is because in this guide, Cloudflare will manage HTTPS externally, while your app will run over HTTP within Coolify.
+- If your app requires HTTPS for functionality like cookies or login, then you need to follow the [Full TLS HTTPS guide](/integrations/cloudflare/tunnels/full-tls) after following this guide. This is because in this guide, Cloudflare will manage HTTPS externally, while your app will run over HTTP within Coolify.
## How It Works?
@@ -131,7 +131,7 @@ Go to the **Environment Variables** page, enter your tunnel token, and deploy th
## Tunnel Multiple Resources
-The easiest way to tunnel multiple resources is by following our [Tunnel All Resources](/knowledge-base/cloudflare/tunnels/all-resource) guide, which uses Coolify's built-in proxy. However, if you prefer not to use the proxy, there are two alternative methods:
+The easiest way to tunnel multiple resources is by following our [Tunnel All Resources](/integrations/cloudflare/tunnels/all-resource) guide, which uses Coolify's built-in proxy. However, if you prefer not to use the proxy, there are two alternative methods:
- [Tunnel Multiple Single Resources](#tunnel-multiple-single-resources)
- [Tunnel Coolify](#tunnel-coolify)
@@ -140,7 +140,7 @@ Tunneling multiple single resources is straightforward, but tunneling Coolify it
## Tunnel Multiple Single Resources
-If you want to expose different apps individually, you can follow our [Tunnel All Resources](/knowledge-base/cloudflare/tunnels/all-resource), or take an alternate approach:
+If you want to expose different apps individually, you can follow our [Tunnel All Resources](/integrations/cloudflare/tunnels/all-resource), or take an alternate approach:
@@ -160,7 +160,6 @@ Follow [Step 2](#_2-create-a-cloudflare-tunnel) from the main guide to create pu
- **Hostnames**:
-
1. `app.shadowarcanist.com/terminal/ws` → `localhost:6002` (WebSocket terminal)
2. `realtime.shadowarcanist.com` → `localhost:6001` (Realtime server)
3. `app.shadowarcanist.com` → `localhost:8000` (Coolify dashboard)
From 5da9e10b5f3cccbb873d9ab8799d6edaf509e759 Mon Sep 17 00:00:00 2001
From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
Date: Mon, 26 Jan 2026 18:08:34 +0100
Subject: [PATCH 04/28] [ui] [table] fixed some two column tables having empty
spacing between the last right column and right border
---
docs/.vitepress/theme/style.css | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
index 797b1bd7..81cd902d 100644
--- a/docs/.vitepress/theme/style.css
+++ b/docs/.vitepress/theme/style.css
@@ -1075,7 +1075,8 @@ pre[class*='language-'] *:hover {
.vp-doc table {
border-collapse: collapse;
border-spacing: 0;
- width: 100%;
+ width: fit-content;
+ max-width: 100%;
margin: 1.5rem 0;
font-size: 0.875rem;
line-height: 1.5;
@@ -1102,7 +1103,7 @@ pre[class*='language-'] *:hover {
.vp-doc th:first-child,
.vp-doc td:first-child {
- width: 200px;
+ width: 240px;
min-width: 200px;
vertical-align: middle;
}
From c4efe58ddc830683a1cf20d85bf8c790c59056b8 Mon Sep 17 00:00:00 2001
From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
Date: Mon, 26 Jan 2026 19:18:48 +0100
Subject: [PATCH 05/28] [docs] [apps] left aligned nixpacks Node.js Version
Reference SHA columns
---
docs/applications/build-packs/nixpacks/node-versioning.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/applications/build-packs/nixpacks/node-versioning.md b/docs/applications/build-packs/nixpacks/node-versioning.md
index f733d86c..611f1736 100644
--- a/docs/applications/build-packs/nixpacks/node-versioning.md
+++ b/docs/applications/build-packs/nixpacks/node-versioning.md
@@ -64,7 +64,7 @@ These hashes are provided for reference only. They have not been verified for ac
### Node.js 20.x
| Version | SHA256 |
-| ------- | ------------------------------------------------------------------ |
+| ------- | :------------------------------------------------------------------ |
| 20.0.0 | `sha256-dFDnV5Vo99HLOYGFz85HLaKDeyqjbFliCyLOS5d7XLU=` |
| 20.1.0 | `sha256-YA+eEYYJlYFLkSKxrFMY9q1WQnR4Te7ZjYqSBmSUNrU=` |
| 20.2.0 | `sha256-IlI98jFsNVaXFP8fabBTwuKGztRgiYQX3uRpRe/N+Yk=` |
@@ -105,7 +105,7 @@ These hashes are provided for reference only. They have not been verified for ac
### Node.js 22.x
| Version | SHA256 |
-| ------- | ------------------------------------------------------------------ |
+| ------- | :------------------------------------------------------------------ |
| 22.0.0 | `sha256-IuKPv/MfaQc7gCTLQnReUQX4QEHzR1smC5fVoUEDnRo=` |
| 22.1.0 | `sha256-nX1fQNnb1iYMmbXklLX5vHVejw/6xw4SGtzl+0QvI8s=` |
| 22.2.0 | `sha256-iJkIqIKNFISRDX5lm2qlet6NUo/w45Dpp372WadihHQ=` |
@@ -135,7 +135,7 @@ These hashes are provided for reference only. They have not been verified for ac
### Node.js 24.x
| Version | SHA256 |
-| ----------- | ------------------------------------------------------------------ |
+| ----------- | :------------------------------------------------------------------ |
| 24.0.0-rc.2 | `729fca42bb7266031dd020f3935423ea8d4b4e2d119b34b608f1d079e5c1621a` |
| 24.0.0-rc.3 | `9bbca08fba05f075a20f734ea80b195a4a39218476b60b32db79e1d393fda20b` |
| 24.0.0 | `914f3f1b03f84a0994d7357f190ff13c038800c693b6c06da2290eb588c82761` |
@@ -159,5 +159,5 @@ These hashes are provided for reference only. They have not been verified for ac
### Node.js 25.x
| Version | SHA256 |
-| ------- | ------------------------------------------------------------------ |
+| ------- | :------------------------------------------------------------------ |
| 25.2.1 | `aa7c4ac1076dc299a8949b8d834263659b2408ec0e5bba484673a8ce0766c8b9` |
From cbca3bd4338b5218c73c5a154ccbe7bedf1da60a Mon Sep 17 00:00:00 2001
From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
Date: Thu, 29 Jan 2026 12:33:52 +0530
Subject: [PATCH 06/28] [docs] [service] added service deprecated callout
---
docs/services/mautic.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/docs/services/mautic.md b/docs/services/mautic.md
index 74fdc029..15695783 100644
--- a/docs/services/mautic.md
+++ b/docs/services/mautic.md
@@ -7,6 +7,10 @@ description: "Deploy Mautic open-source marketing automation platform on Coolify
+::: danger SERVICE REMOVED FROM COOLIFY
+This service has been removed from Coolify’s one-click service catalog because the official Docker images no longer include AMQP transport, so RabbitMQ integration does not work with our template. More info on https://github.com/coollabsio/coolify/pull/8088
+:::
+
## What is Mautic
Mautic is the world's largest open-source marketing automation project, trusted by over 200,000 organizations worldwide. It provides a privacy-focused, fully customizable marketing automation platform that gives you complete control over your data and marketing infrastructure.
From 5df0a5f2cf7dc4ff5f95fc4204db35e030d8b9e6 Mon Sep 17 00:00:00 2001
From: Darren Bennett
Date: Tue, 3 Feb 2026 16:52:49 +0000
Subject: [PATCH 07/28] [docs] [api] Fixed typo in authorization guide (#510)
---
docs/api-reference/authorization.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/api-reference/authorization.md b/docs/api-reference/authorization.md
index 42899be2..cdbd05d8 100644
--- a/docs/api-reference/authorization.md
+++ b/docs/api-reference/authorization.md
@@ -11,7 +11,7 @@ API request requires a `Bearer` token in `Authorization` header, which could be
The API can be accessed through `http://:8000/api`.
-With the exception of `/health` and `/feedback`, all routes are additionally prefixed with `/v1` resulting in the base rouce `http://:8000/api/v1`.
+With the exception of `/health` and `/feedback`, all routes are additionally prefixed with `/v1` resulting in the base route `http://:8000/api/v1`.
## Generate
From 1884faadf5f1b2bec6dd96552008eb24bfb40b65 Mon Sep 17 00:00:00 2001
From: Konstantinos Voulgaropoulos <54834800+voulkon@users.noreply.github.com>
Date: Tue, 3 Feb 2026 18:55:42 +0200
Subject: [PATCH 08/28] [docs] [s3] Fixed typo in aws s3 guide (#507)
---
docs/knowledge-base/s3/aws.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/knowledge-base/s3/aws.md b/docs/knowledge-base/s3/aws.md
index 648ec606..05ed6c76 100644
--- a/docs/knowledge-base/s3/aws.md
+++ b/docs/knowledge-base/s3/aws.md
@@ -140,7 +140,7 @@ Once you have entered the name, scroll down till the bottom of the page and clic
Once the Policy is created you will be redirected to this page:
::: success Tip
-You won't see the policy you just created, you have to search for it's name on the search box.
+You won't see the policy you just created, you have to search for its name on the search box.
:::
@@ -160,7 +160,7 @@ You’ll be asked to choose a name for the user:
3. Click on **Next** button
- - Click on **Create user** button (you don't have to change anything on this page />
+ - Click on **Create user** button (you don't have to change anything on this page)
Once the Policy is created you will be redirected to this page:
@@ -168,7 +168,7 @@ Once the Policy is created you will be redirected to this page:
## 4. Create an Access Key
-After you have clicked on the username on previous step, you will be redirect to this page:
+After you have clicked on the username on previous step, you will be redirected to this page:
- Click on **Create access key** option to setup a new access key.
@@ -179,7 +179,7 @@ After you have clicked on the username on previous step, you will be redirect to
- Click on **Create access key** button.
- - Save the Access Key and Secrete Access Key somewhere safe and click on **Done** button
+ - Save the Access Key and Secret Access Key somewhere safe and click on **Done** button
::: warning Note
You won't able able to see the access key after you click the **Done** button, so make sure to save the keys somewhere safe.
:::
From 97ce82bdb6e6eeda01bedfbcffc64602bce5156b Mon Sep 17 00:00:00 2001
From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
Date: Wed, 4 Feb 2026 00:38:38 +0530
Subject: [PATCH 09/28] [docs] [installation] added TencentOS to supported
distro list
---
docs/get-started/installation.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/get-started/installation.md b/docs/get-started/installation.md
index 8b1f040c..62f3d2bf 100644
--- a/docs/get-started/installation.md
+++ b/docs/get-started/installation.md
@@ -59,7 +59,7 @@ If you haven't picked a server provider yet, consider using [Hetzner](https://co
Coolify supports several Linux distributions:
- Debian-based (e.g., Debian, Ubuntu - all versions supported, but non-LTS Ubuntu requires manual installation)
-- Redhat-based (e.g., CentOS, Fedora, Redhat, AlmaLinux, Rocky, Asahi)
+- Redhat-based (e.g., CentOS, TencentOS, Fedora, Redhat, AlmaLinux, Rocky, Asahi)
- SUSE-based (e.g., SLES, SUSE, openSUSE)
- Arch Linux (Note: Not all Arch derivatives are supported)
- Alpine Linux
From 16f1af3a1cfb72acc4d387b34f256dec46d4b929 Mon Sep 17 00:00:00 2001
From: Rodrigo
Date: Wed, 4 Feb 2026 00:30:33 -0300
Subject: [PATCH 10/28] [docs] [service] added bento-pdf service (#508)
---
.../theme/components/Services/List.vue | 7 ++++
docs/public/images/services/bento-pdf.png | Bin 0 -> 18435 bytes
docs/services/all.md | 3 +-
docs/services/bento-pdf.md | 36 ++++++++++++++++++
4 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 docs/public/images/services/bento-pdf.png
create mode 100644 docs/services/bento-pdf.md
diff --git a/docs/.vitepress/theme/components/Services/List.vue b/docs/.vitepress/theme/components/Services/List.vue
index 15a36325..9487fac3 100644
--- a/docs/.vitepress/theme/components/Services/List.vue
+++ b/docs/.vitepress/theme/components/Services/List.vue
@@ -379,6 +379,13 @@ const services = [
description: 'It helps parents track their baby\'s daily activities, growth, and health with ease.',
category: 'Health'
},
+ {
+ name: 'BentoPDF',
+ slug: 'bento-pdf',
+ icon: '/docs/images/services/bento-pdf.png',
+ description: 'Process PDFs entirely in your browser. No uploads. No servers. Complete privacy.',
+ category: 'Productivity'
+ },
{
name: 'Beszel',
slug: 'beszel',
diff --git a/docs/public/images/services/bento-pdf.png b/docs/public/images/services/bento-pdf.png
new file mode 100644
index 0000000000000000000000000000000000000000..7926d09bb5662d7b45311866833e61ae404fba66
GIT binary patch
literal 18435
zcmZ8}cU+C{|Nj~36xC@M4J`^Ol{BPr8fenqR4Ae-qdm?^%Nr?ap%e|;NmJ`6qk*D@
z)=6mBp-vr*bAH!-->3KY{rUaj!NYy7`+8lk>-BoR_Wh6faRcs+!W&U26t|J#VM`PW
z1OACYaj=8G76Q7L!C#y{h7MOzs7(UUA2jMgnji`#figO*YaNg_lRiPTcJHkiZu}*M
zw!HuD-s2V>!HF@RE98%v5mM;a%{I0yrw_M&=HBi8s!ab%&uyH$TXT<+)V>>))7!+z*watgnPw|E
zlyd1Ctk9+U69+tNy}r=w0x5TyLYt@jRvqLUFV$!Nu+C?$lGp=K_=B5KresOMI$U&a
zQcL#vhfNz98D)Me8QDwuKNAG^91dQ@<0rc{4glnpkBgDHu9}?~jxNiFPf(S_B*nkr7;o$nM^SedNLA06LXgEG`
z-Kn>jv4Rn%p!-sUscdADBuQO3(bh$k8eVT7!)!Dr_jY|xjSJ^M|w3wj$cn2
z?eRrHKk;V$q$e}~d>dKq@A)Wbqs4hkrF?NhsldOao}Lc3_+X_lu_^4d1x7DJpS%(v
z4wx3R8oQcP8dGu2;_`&vF0
zOeV&9x2>ajj`nIA*i)ZfBGuxf-lskg=V*~p<
z23+TPB^~5yIyX}mIEbkE{8;7HksB92NcPx;Ts3r*)2}nT4NSNZwmxg5?F0Gx^dcRX1y%HAxtJsOP{;&yF8%w&cNi+{Cw$Bx#
zeAuN!e&bwO;tp%y9
z0|}u_CBpE`RyFNxv9{l5Khs2dD&TAN6{bq+V53o=IGB1hjO6;sQ-yD~bnQV;^Hs6o
zs{t{T68(6=J&EV9ido=KT`W#xke208KxRB+*)`FMt{gt+M+l*_VKk~rl*|i%uDUJP
zpMH@AY}&pNwTn6_X=u#dR=B~eAg1`dX?cV2~zBIu+UWqzt
zM%51+nomWPh&R!a-|E(H!Qg0cfk0=%E5PETc>|R{GJ~Fdd;8&*bG+n4bI%yggM@qk
z2W5uh62z=lvWFLLtU2>nWAfAm*(%1Yw9o_F>wRC;plimEI1AO;!l&<+`Mjx}l)RuZ
zKNom1+C4F^L!c9duRiKQ7C-^UH5TeR&hDw1V&Hq4yJQC%rjH3FJKP!jqM;don;r1a
zbz0J}qu}nFg1G#c+&=r#>3FGgvE~^Hkg(bS1SpL>Dt{^{ELP4r*i=idzU@iUoQd)A
zoaHn~F-_29w(Zw%iM8zYO3V>Co*$Fl=TJU*Bm0;2^WbSQF~h~D$R$v{xyx=oaQph!
zth@P>!a)76FXXPRnk{1A(S7~^K%k@QM+~?Y3@nkyCLfQhB^PSQ3;p$_$De$SZDo8W
zLChp4)g`Dp{HAQ1JT-1N>p;{~+9XWfv2p{Ku$Beu6kW8c{3JlBq#%yv^kB901ORQm
z1Qfs+HF>a!y=srUZ2ow{iuj=du`nv0JK39IdL?4tcGp=9ptJ!n0~<}TyJ@i4a-nIs
z`VU`_@Mv;H!3q}Q=KdZMhMbTm=TLg3t}u|E7WCznLL#Z?>6?8b@6f-rDdBE&7jz(T
z3(G3}b;Y4-v?H=)WWzc{4JrU^Cdd8*wn&yOZdZBYmr&UMw^8h9I$x5TUTcbK$33-e`ylZ1~40Xi(-xaS>JF-zjEW#o&U
z-fA7A
zsMq%-kxmX9xsST>DEedZQvD?`KLe6-FRQiY))RMzXxZxMnOy}CmAA49Vn<3gdIL%N
zW-EW}MEyzCxfNZlLJ3u2uYs$&7o476CDn)rNPKmMG5eM0?U~vL>XPnXj`|9#VO6U^
zZ