Initialize public data and docs repository

This commit is contained in:
AltStack Bot
2026-02-25 22:36:27 +05:30
commit 2a0ac1b107
357 changed files with 50685 additions and 0 deletions

35
.gitignore vendored Normal file
View File

@@ -0,0 +1,35 @@
# Dependencies
node_modules
/.pnp
.pnp.js
# Testing
/coverage
# Next.js
.next/
out/
# Production
/build
# Misc
.DS_Store
*.pem
*.key
# Debug
npm-debug.log*
yarn-debug.log*
pnpm-debug.log*
# Local env files
.env*.local
*.bak
*_keys.json
cors.json
# Vercel build artifacts
.vercel/output/
.vercel/builders/
build.log

36
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,36 @@
# Contributing to The Alt Stack Data & Docs 🥞
Thank you for your interest in contributing! Our community helps maintain the accuracy and quality of our open source data and documentation.
## Types of Contributions
1. **New Tools:** Adding an alternative to our dataset.
2. **Data Fixes:** Correcting URLs, pricing, descriptions, or pros/cons.
3. **Deployment Guides:** Writing or updating guides in `docs/app/deploy/`.
## 1. Modifying Data (`/data/`)
Our core data is stored in `data/tools.json`.
1. Find the parent SaaS tool (e.g., "Slack") in the JSON structure.
2. Add or modify the alternative under the `alternatives` array.
3. Ensure you follow the structure defined in `data/schema/types.ts`.
4. Run validation (if applicable locally) before committing.
## 2. Modifying Documentation (`/docs/`)
Our documentation is built with Next.js and Nextra. All pages are under `docs/app/`.
1. Navigate to the appropriate folder (e.g., `docs/app/deploy` for guides).
2. Create or edit the `.mdx` file.
3. If creating a new page, make sure to add it to the adjacent `_meta.ts` file so it appears in the sidebar!
## Pull Request Process
1. Fork the repository and create your feature branch: `git checkout -b fix/name-of-tool-data`
2. Make your targeted changes. **Keep PRs small** (e.g., fix one tool, don't change 50 things at once).
3. Commit your changes with a descriptive message: `fix(data): update RocketChat pricing link`
4. Open a Pull Request against our `main` branch.
5. A maintainer will review your PR. We may request changes or ask clarifying questions.
By contributing to this repository, you agree that your data and documentation contributions will be licensed under the CC BY 4.0 license.

39
README.md Normal file
View File

@@ -0,0 +1,39 @@
# The Alt Stack Data & Docs 🥞
Welcome to the public repository for **The Alt Stack** context and data!
This repository contains:
1. **The Alt Stack Dataset** (`/data`): Our curated JSON data of open source alternatives to popular SaaS products.
2. **The Documentation Site** (`/docs`): The source code for [docs.thealtstack.com](https://docs.thealtstack.com) containing 60+ deployment guides, concepts, and more.
If you are looking for the main application (the UI, comparison engine, etc.), please note that the core application is closed-source. We open-source the data and documentation so the community can contribute to keeping the alternative software ecosystem accurate and well-documented.
## 🤝 Contributing
We welcome community contributions! This is the fastest way to get a new tool added or a deployment guide updated.
Before submitting a pull request, please read our [Contributing Guidelines](CONTRIBUTING.md).
### What you can contribute:
- **New Tools:** Submit an addition to `data/tools.json`.
- **Data Corrections:** Fix broken links, update pricing, or correct pros/cons.
- **Deployment Guides:** Write or update a self-hosting guide in `docs/app/deploy/`.
- **Typo Fixes:** Help us keep the documentation clean.
### What NOT to contribute here:
- Feature requests for the main application UI.
- Bug reports for the closed-source platform (use the contact form on the main site).
## 🗄️ Working with the Data
Our core dataset lives in `data/tools.json` and follows the TypeScript schema defined in `data/schema/types.ts`.
If you're building a project that references our data, you are welcome to consume it directly from this repository!
## 📄 License
This repository uses a dual-license model:
* **Documentation & Data** (`/docs/**/*.mdx`, `/data/**/*.json`): Creative Commons Attribution 4.0 International ([CC BY 4.0](https://creativecommons.org/licenses/by/4.0/))
* **Scripts & Code** (`/scripts`, `.ts`/`.js` files): [Apache License 2.0](LICENSE)
*All tool logos in `assets/logos/` are the property of their respective trademark holders and are used for identification purposes only.*

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>1Password</title><path d="M12 .007C5.373.007 0 5.376 0 11.999c0 6.624 5.373 11.994 12 11.994S24 18.623 24 12C24 5.376 18.627.007 12 .007Zm-.895 4.857h1.788c.484 0 .729.002.914.096a.86.86 0 0 1 .377.377c.094.185.095.428.095.912v6.016c0 .12 0 .182-.015.238a.427.427 0 0 1-.067.137.923.923 0 0 1-.174.162l-.695.564c-.113.092-.17.138-.191.194a.216.216 0 0 0 0 .15c.02.055.078.101.191.193l.695.565c.094.076.14.115.174.162.03.042.053.087.067.137a.936.936 0 0 1 .015.238v2.746c0 .484-.001.727-.095.912a.86.86 0 0 1-.377.377c-.185.094-.43.096-.914.096h-1.788c-.484 0-.726-.002-.912-.096a.86.86 0 0 1-.377-.377c-.094-.185-.095-.428-.095-.912v-6.016c0-.12 0-.182.015-.238a.437.437 0 0 1 .067-.139c.034-.047.08-.083.174-.16l.695-.564c.113-.092.17-.138.191-.194a.216.216 0 0 0 0-.15c-.02-.055-.078-.101-.191-.193l-.695-.565a.92.92 0 0 1-.174-.162.437.437 0 0 1-.067-.139.92.92 0 0 1-.015-.236V6.25c0-.484.001-.727.095-.912a.86.86 0 0 1 .377-.377c.186-.094.428-.096.912-.096z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Appwrite</title><path d="M24 17.291v5.29H10.557A10.58 10.58 0 0 1 0 12.715v-1.43c.048-.735.174-1.463.374-2.171C1.63 4.673 5.713 1.419 10.557 1.419c4.844 0 8.927 3.254 10.183 7.695h-5.749a5.283 5.283 0 0 0-4.434-2.404 5.282 5.282 0 0 0-4.434 2.404A5.23 5.23 0 0 0 5.267 12a5.27 5.27 0 0 0 1.66 3.848 5.27 5.27 0 0 0 3.63 1.443H24Zm0-6.734v5.291h-9.813A5.276 5.276 0 0 0 15.848 12c0-.5-.07-.984-.199-1.443H24Z"/></svg>

After

Width:  |  Height:  |  Size: 509 B

1
assets/logos/auth0.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Auth0</title><path d="M21.98 7.448L19.62 0H4.347L2.02 7.448c-1.352 4.312.03 9.206 3.815 12.015L12.007 24l6.157-4.552c3.755-2.81 5.182-7.688 3.815-12.015l-6.16 4.58 2.343 7.45-6.157-4.597-6.158 4.58 2.358-7.433-6.188-4.55 7.63-.045L12.008 0l2.356 7.404 7.615.044z"/></svg>

After

Width:  |  Height:  |  Size: 364 B

1
assets/logos/autocad.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Autodesk</title><path d="m.129 20.202 14.7-9.136h7.625c.235 0 .445.188.445.445 0 .21-.092.305-.21.375l-7.222 4.323c-.47.283-.633.845-.633 1.265l-.008 2.725H24V4.362a.561.561 0 0 0-.585-.562h-8.752L0 12.893V20.2h.129z"/></svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Bitwarden</title><path d="M21.722.296A.964.964 0 0 0 21.018 0H2.982a.959.959 0 0 0-.703.296.96.96 0 0 0-.297.702v12c0 .895.174 1.783.523 2.665.349.88.783 1.66 1.3 2.345.517.68 1.132 1.346 1.848 1.993a21.807 21.807 0 0 0 1.98 1.609c.605.427 1.235.83 1.893 1.212.657.381 1.125.638 1.4.772.276.134.5.241.664.311a.916.916 0 0 0 .814 0c.168-.073.389-.177.667-.311.275-.134.743-.394 1.401-.772a25.305 25.305 0 0 0 1.894-1.212A21.891 21.891 0 0 0 18.348 20c.716-.647 1.33-1.31 1.847-1.993s.949-1.463 1.3-2.345c.35-.879.524-1.767.524-2.665V1.001a.95.95 0 0 0-.297-.705zm-2.325 12.815c0 4.344-7.397 8.087-7.397 8.087V2.57h7.397v10.54z"/></svg>

After

Width:  |  Height:  |  Size: 727 B

1
assets/logos/calcom.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Cal.com</title><path d="M2.408 14.488C1.035 14.488 0 13.4 0 12.058c0-1.346.982-2.443 2.408-2.443.758 0 1.282.233 1.691.765l-.66.55a1.343 1.343 0 0 0-1.03-.442c-.93 0-1.44.711-1.44 1.57 0 .86.559 1.557 1.44 1.557.413 0 .765-.147 1.043-.443l.651.573c-.391.51-.929.743-1.695.743zM6.948 10.913h.89v3.49h-.89v-.51c-.185.362-.493.604-1.083.604-.943 0-1.695-.82-1.695-1.826 0-1.007.752-1.825 1.695-1.825.585 0 .898.241 1.083.604zm.026 1.758c0-.546-.374-.998-.964-.998-.568 0-.938.457-.938.998 0 .528.37.998.938.998.586 0 .964-.456.964-.998zM8.467 9.503h.89v4.895h-.89zM9.752 13.937a.53.53 0 0 1 .542-.528c.313 0 .533.242.533.528a.527.527 0 0 1-.533.537.534.534 0 0 1-.542-.537zM14.23 13.839c-.33.403-.832.658-1.426.658a1.806 1.806 0 0 1-1.84-1.826c0-1.007.778-1.825 1.84-1.825.572 0 1.07.241 1.4.622l-.687.577c-.172-.215-.396-.376-.713-.376-.568 0-.938.456-.938.998 0 .541.37.997.938.997.343 0 .58-.179.757-.42zM14.305 12.671c0-1.007.78-1.825 1.84-1.825 1.061 0 1.84.818 1.84 1.825 0 1.007-.779 1.826-1.84 1.826-1.06-.005-1.84-.82-1.84-1.826zm2.778 0c0-.546-.37-.998-.938-.998-.568-.004-.937.452-.937.998 0 .542.37.998.937.998.568 0 .938-.456.938-.998zM24 12.269v2.13h-.89v-1.911c0-.604-.281-.864-.704-.864-.396 0-.678.197-.678.864v1.91h-.89v-1.91c0-.604-.285-.864-.704-.864-.396 0-.744.197-.744.864v1.91h-.89v-3.49h.89v.484c.185-.376.52-.564 1.035-.564.489 0 .898.241 1.123.649.224-.417.554-.65 1.153-.65.731.005 1.299.56 1.299 1.442z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Calendly</title><path d="M19.655 14.262c.281 0 .557.023.828.064 0 .005-.005.01-.005.014-.105.267-.234.534-.381.786l-1.219 2.106c-1.112 1.936-3.177 3.127-5.411 3.127h-2.432c-2.23 0-4.294-1.191-5.412-3.127l-1.218-2.106a6.251 6.251 0 0 1 0-6.252l1.218-2.106C6.736 4.832 8.8 3.641 11.035 3.641h2.432c2.23 0 4.294 1.191 5.411 3.127l1.219 2.106c.147.252.271.519.381.786 0 .004.005.009.005.014-.267.041-.543.064-.828.064-1.816 0-2.501-.607-3.291-1.306-.764-.676-1.711-1.517-3.44-1.517h-1.029c-1.251 0-2.387.455-3.2 1.278-.796.805-1.233 1.904-1.233 3.099v1.411c0 1.196.437 2.295 1.233 3.099.813.823 1.949 1.278 3.2 1.278h1.034c1.729 0 2.676-.841 3.439-1.517.791-.703 1.471-1.306 3.287-1.301Zm.005-3.237c.399 0 .794-.036 1.179-.11-.002-.004-.002-.01-.002-.014-.073-.414-.193-.823-.349-1.218.731-.12 1.407-.396 1.986-.819 0-.004-.005-.013-.005-.018-.331-1.085-.832-2.101-1.489-3.03-.649-.915-1.435-1.719-2.331-2.395-1.867-1.398-4.088-2.138-6.428-2.138-1.448 0-2.855.28-4.175.841-1.273.543-2.423 1.315-3.407 2.299S2.878 6.552 2.341 7.83c-.557 1.324-.842 2.726-.842 4.175 0 1.448.281 2.855.842 4.174.542 1.274 1.314 2.423 2.298 3.407s2.129 1.761 3.407 2.299c1.324.556 2.727.841 4.175.841 2.34 0 4.561-.74 6.428-2.137a10.815 10.815 0 0 0 2.331-2.396c.652-.929 1.158-1.949 1.489-3.03 0-.004.005-.014.005-.018-.579-.423-1.255-.699-1.986-.819.161-.395.276-.804.349-1.218.005-.009.005-.014.005-.023.869.166 1.692.506 2.404 1.035.685.505.552 1.075.446 1.416C22.184 20.437 17.619 24 12.221 24c-6.625 0-12-5.375-12-12s5.37-12 12-12c5.398 0 9.963 3.563 11.471 8.464.106.341.239.915-.446 1.421-.717.529-1.535.873-2.404 1.034.128.716.128 1.45 0 2.166-.387-.074-.782-.11-1.182-.11-4.184 0-3.968 2.823-6.736 2.823h-1.029c-1.899 0-3.15-1.357-3.15-3.095v-1.411c0-1.738 1.251-3.094 3.15-3.094h1.034c2.768 0 2.552 2.823 6.731 2.827Z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

After

Width:  |  Height:  |  Size: 837 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Confluence</title><path d="M.87 18.257c-.248.382-.53.875-.763 1.245a.764.764 0 0 0 .255 1.04l4.965 3.054a.764.764 0 0 0 1.058-.26c.199-.332.454-.763.733-1.221 1.967-3.247 3.945-2.853 7.508-1.146l4.957 2.337a.764.764 0 0 0 1.028-.382l2.364-5.346a.764.764 0 0 0-.382-1 599.851 599.851 0 0 1-4.965-2.361C10.911 10.97 5.224 11.185.87 18.257zM23.131 5.743c.249-.405.531-.875.764-1.25a.764.764 0 0 0-.256-1.034L18.675.404a.764.764 0 0 0-1.058.26c-.195.335-.451.763-.734 1.225-1.966 3.246-3.945 2.85-7.508 1.146L4.437.694a.764.764 0 0 0-1.027.382L1.046 6.422a.764.764 0 0 0 .382 1c1.039.49 3.105 1.467 4.965 2.361 6.698 3.246 12.392 3.029 16.738-4.04z"/></svg>

After

Width:  |  Height:  |  Size: 746 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Dashlane</title><path d="M20.89 7.7189c0-.1488-.1488-.2976-.3575-.3571l-2.502-.9221c-.4166-.1786-.8932.0297-.8932.3277V17.25c0 .1487.1488.3273.2977.3868l2.5614.9222c.3872.1487.8936-.0596.8936-.3873zm-4.676-3.663c0-.1492-.1489-.298-.3576-.3575l-2.5015-.9221c-.417-.1786-.8936.0297-.8936.3278v6.3723c0 .1488.1487.3273.2976.3873l2.5614.9221c.3873.1492.8937-.0595.8937-.3869zm0 11.4663c0-.1488-.1489-.2975-.3576-.3571l-2.5015-.9221c-.417-.1786-.8936.0297-.8936.3277v6.3724c0 .1488.1487.3273.2976.3869l2.5614.922c.3873.1493.8937-.0594.8937-.3872zm-4.6761 1.281c0-.1489-.1488-.298-.3575-.3576l-2.5015-.9221c-.4192-.1786-.8937.0297-.8937.3277v6.7903c0 .1487.1488.3277.2977.3872l2.5614.9222c.3872.1493.8936-.0595.8936-.387zm0-15.4579c0-.1488-.1488-.2976-.3575-.3571L8.6789.066c-.4192-.1786-.8937.0297-.8937.3277v6.7903c0 .1492.1488.3277.2977.3873l2.5614.922c.3872.1488.8936-.0594.8936-.3872zm-4.6752.2683c0-.1488-.1488-.298-.3575-.3576L4.0037.334C3.5867.1553 3.11.3636 3.11.6617v21.7409c0 .1487.1488.3273.298.3868l2.561.9222c.3874.1488.8937-.0595.8937-.3874z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
assets/logos/datadog.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Datadog</title><path d="M19.57 17.04l-1.997-1.316-1.665 2.782-1.937-.567-1.706 2.604.087.82 9.274-1.71-.538-5.794zm-8.649-2.498l1.488-.204c.241.108.409.15.697.223.45.117.97.23 1.741-.16.18-.088.553-.43.704-.625l6.096-1.106.622 7.527-10.444 1.882zm11.325-2.712l-.602.115L20.488 0 .789 2.285l2.427 19.693 2.306-.334c-.184-.263-.471-.581-.96-.989-.68-.564-.44-1.522-.039-2.127.53-1.022 3.26-2.322 3.106-3.956-.056-.594-.15-1.368-.702-1.898-.02.22.017.432.017.432s-.227-.289-.34-.683c-.112-.15-.2-.199-.319-.4-.085.233-.073.503-.073.503s-.186-.437-.216-.807c-.11.166-.137.48-.137.48s-.241-.69-.186-1.062c-.11-.323-.436-.965-.343-2.424.6.421 1.924.321 2.44-.439.171-.251.288-.939-.086-2.293-.24-.868-.835-2.16-1.066-2.651l-.028.02c.122.395.374 1.223.47 1.625.293 1.218.372 1.642.234 2.204-.116.488-.397.808-1.107 1.165-.71.358-1.653-.514-1.713-.562-.69-.55-1.224-1.447-1.284-1.883-.062-.477.275-.763.445-1.153-.243.07-.514.192-.514.192s.323-.334.722-.624c.165-.109.262-.178.436-.323a9.762 9.762 0 0 0-.456.003s.42-.227.855-.392c-.318-.014-.623-.003-.623-.003s.937-.419 1.678-.727c.509-.208 1.006-.147 1.286.257.367.53.752.817 1.569.996.501-.223.653-.337 1.284-.509.554-.61.99-.688.99-.688s-.216.198-.274.51c.314-.249.66-.455.66-.455s-.134.164-.259.426l.03.043c.366-.22.797-.394.797-.394s-.123.156-.268.358c.277-.002.838.012 1.056.037 1.285.028 1.552-1.374 2.045-1.55.618-.22.894-.353 1.947.68.903.888 1.609 2.477 1.259 2.833-.294.295-.874-.115-1.516-.916a3.466 3.466 0 0 1-.716-1.562 1.533 1.533 0 0 0-.497-.85s.23.51.23.96c0 .246.03 1.165.424 1.68-.039.076-.057.374-.1.43-.458-.554-1.443-.95-1.604-1.067.544.445 1.793 1.468 2.273 2.449.453.927.186 1.777.416 1.997.065.063.976 1.197 1.15 1.767.306.994.019 2.038-.381 2.685l-1.117.174c-.163-.045-.273-.068-.42-.153.08-.143.241-.5.243-.572l-.063-.111c-.348.492-.93.97-1.414 1.245-.633.359-1.363.304-1.838.156-1.348-.415-2.623-1.327-2.93-1.566 0 0-.01.191.048.234.34.383 1.119 1.077 1.872 1.56l-1.605.177.759 5.908c-.337.048-.39.071-.757.124-.325-1.147-.946-1.895-1.624-2.332-.599-.384-1.424-.47-2.214-.314l-.05.059a2.851 2.851 0 0 1 1.863.444c.654.413 1.181 1.481 1.375 2.124.248.822.42 1.7-.248 2.632-.476.662-1.864 1.028-2.986.237.3.481.705.876 1.25.95.809.11 1.577-.03 2.106-.574.452-.464.69-1.434.628-2.456l.714-.104.258 1.834 11.827-1.424zM15.05 6.848c-.034.075-.085.125-.007.37l.004.014.013.032.032.073c.14.287.295.558.552.696.067-.011.136-.019.207-.023.242-.01.395.028.492.08.009-.048.01-.119.005-.222-.018-.364.072-.982-.626-1.308-.264-.122-.634-.084-.757.068a.302.302 0 0 1 .058.013c.186.066.06.13.027.207m1.958 3.392c-.092-.05-.52-.03-.821.005-.574.068-1.193.267-1.328.372-.247.191-.135.523.047.66.511.382.96.638 1.432.575.29-.038.546-.497.728-.914.124-.288.124-.598-.058-.698m-5.077-2.942c.162-.154-.805-.355-1.556.156-.554.378-.571 1.187-.041 1.646.053.046.096.078.137.104a4.77 4.77 0 0 1 1.396-.412c.113-.125.243-.345.21-.745-.044-.542-.455-.456-.146-.749"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

1
assets/logos/falcon.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Technology Innovation Institute</title><path d="M11.098 7.563H4.75V9.77h1.77v6.668h2.807V9.77h1.77V7.563zM14.812 7.563h-2.807v8.875h2.807V7.563zM19.433 7.563h-2.807v8.875h2.807V7.563z"></path><path d="M12 24v-1.055c3.01 0 5.613-1.079 7.737-3.208 2.123-2.13 3.209-4.727 3.209-7.737 0-3.009-1.08-5.607-3.209-7.736-2.128-2.13-4.732-3.21-7.736-3.21V0c3.294 0 6.148 1.184 8.482 3.518C22.817 5.852 24 8.706 24 12c0 3.295-1.183 6.155-3.518 8.483C18.147 22.811 15.3 24 12.001 24z"></path></svg>

After

Width:  |  Height:  |  Size: 651 B

1
assets/logos/figma.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Figma</title><path d="M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 1.471H8.148c-2.476 0-4.49-2.014-4.49-4.49S5.672 0 8.148 0h4.588v8.981zm-4.587-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.354 3.02 3.019 3.02h3.117V1.471H8.148zm4.587 15.019H8.148c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.98zM8.148 8.981c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.981H8.148zM8.172 24c-2.489 0-4.515-2.014-4.515-4.49s2.014-4.49 4.49-4.49h4.588v4.441c0 2.503-2.047 4.539-4.563 4.539zm-.024-7.51a3.023 3.023 0 0 0-3.019 3.019c0 1.665 1.365 3.019 3.044 3.019 1.705 0 3.093-1.376 3.093-3.068v-2.97H8.148zm7.704 0h-.098c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h.098c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49zm-.097-7.509c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h.098c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-.098z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Firebase</title><path d="M19.455 8.369c-.538-.748-1.778-2.285-3.681-4.569-.826-.991-1.535-1.832-1.884-2.245a146 146 0 0 0-.488-.576l-.207-.245-.113-.133-.022-.032-.01-.005L12.57 0l-.609.488c-1.555 1.246-2.828 2.851-3.681 4.64-.523 1.064-.864 2.105-1.043 3.176-.047.241-.088.489-.121.738-.209-.017-.421-.028-.632-.033-.018-.001-.035-.002-.059-.003a7.46 7.46 0 0 0-2.28.274l-.317.089-.163.286c-.765 1.342-1.198 2.869-1.252 4.416-.07 2.01.477 3.954 1.583 5.625 1.082 1.633 2.61 2.882 4.42 3.611l.236.095.071.025.003-.001a9.59 9.59 0 0 0 2.941.568q.171.006.342.006c1.273 0 2.513-.249 3.69-.742l.008.004.313-.145a9.63 9.63 0 0 0 3.927-3.335c1.01-1.49 1.577-3.234 1.641-5.042.075-2.161-.643-4.304-2.133-6.371m-7.083 6.695c.328 1.244.264 2.44-.191 3.558-1.135-1.12-1.967-2.352-2.475-3.665-.543-1.404-.87-2.74-.974-3.975.48.157.922.366 1.315.622 1.132.737 1.914 1.902 2.325 3.461zm.207 6.022c.482.368.99.712 1.513 1.028-.771.21-1.565.302-2.369.273a8 8 0 0 1-.373-.022c.458-.394.869-.823 1.228-1.279zm1.347-6.431c-.516-1.957-1.527-3.437-3.002-4.398-.647-.421-1.385-.741-2.194-.95.011-.134.026-.268.043-.4.014-.113.03-.216.046-.313.133-.689.332-1.37.589-2.025.099-.25.206-.499.321-.74l.004-.008c.177-.358.376-.719.61-1.105l.092-.152-.003-.001c.544-.851 1.197-1.627 1.942-2.311l.288.341c.672.796 1.304 1.548 1.878 2.237 1.291 1.549 2.966 3.583 3.612 4.48 1.277 1.771 1.893 3.579 1.83 5.375-.049 1.395-.461 2.755-1.195 3.933-.694 1.116-1.661 2.05-2.8 2.708-.636-.318-1.559-.839-2.539-1.599.79-1.575.952-3.28.479-5.072zm-2.575 5.397c-.725.939-1.587 1.55-2.09 1.856-.081-.029-.163-.06-.243-.093l-.065-.026c-1.49-.616-2.747-1.656-3.635-3.01-.907-1.384-1.356-2.993-1.298-4.653.041-1.19.338-2.327.882-3.379.316-.07.638-.114.96-.131l.084-.002c.162-.003.324-.003.478 0 .227.011.454.035.677.07.073 1.513.445 3.145 1.105 4.852.637 1.644 1.694 3.162 3.144 4.515z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

1
assets/logos/flux.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Flux</title><path d="M0 20.683L12.01 2.5 24 20.683h-2.233L12.009 5.878 3.471 18.806h12.122l1.239 1.877H0z"></path><path d="M8.069 16.724l2.073-3.115 2.074 3.115H8.069zM18.24 20.683l-5.668-8.707h2.177l5.686 8.707h-2.196zM19.74 11.676l2.13-3.19 2.13 3.19h-4.26z"></path></svg>

After

Width:  |  Height:  |  Size: 439 B

1
assets/logos/freecad.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>FreeCAD</title><path d="M6 0h16v7.996a.7.7 0 0 1-.288.566l-2.173 1.58a.7.7 0 0 0-.289.565v.586c0 .224.107.434.289.566l1.895 1.377a.7.7 0 0 1 .254.783l-.649 1.997a.7.7 0 0 1-.665.484H18.03a.7.7 0 0 0-.566.288l-.344.474a.7.7 0 0 0-.1.627l.724 2.229a.7.7 0 0 1-.254.782l-1.699 1.234a.7.7 0 0 1-.823 0l-1.895-1.377a.7.7 0 0 0-.628-.099l-.556.18a.7.7 0 0 0-.45.45l-.724 2.228a.7.7 0 0 1-.665.484H2V4zm12 8V4H6v16h4v-5h4v-4h-4V8z"/></svg>

After

Width:  |  Height:  |  Size: 525 B

1
assets/logos/gemma.svg Normal file
View File

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemma</title><defs><linearGradient id="lobe-icons-gemma-fill" x1="24.419%" x2="75.194%" y1="75.581%" y2="25.194%"><stop offset="0%" stop-color="#446EFF"></stop><stop offset="36.661%" stop-color="#2E96FF"></stop><stop offset="83.221%" stop-color="#B1C5FF"></stop></linearGradient></defs><path d="M12.34 5.953a8.233 8.233 0 01-.247-1.125V3.72a8.25 8.25 0 015.562 2.232H12.34zm-.69 0c.113-.373.199-.755.257-1.145V3.72a8.25 8.25 0 00-5.562 2.232h5.304zm-5.433.187h5.373a7.98 7.98 0 01-.267.696 8.41 8.41 0 01-1.76 2.65L6.216 6.14zm-.264-.187H2.977v.187h2.915a8.436 8.436 0 00-2.357 5.767H0v.186h3.535a8.436 8.436 0 002.357 5.767H2.977v.186h2.976v2.977h.187v-2.915a8.436 8.436 0 005.767 2.357V24h.186v-3.535a8.436 8.436 0 005.767-2.357v2.915h.186v-2.977h2.977v-.186h-2.915a8.436 8.436 0 002.357-5.767H24v-.186h-3.535a8.436 8.436 0 00-2.357-5.767h2.915v-.187h-2.977V2.977h-.186v2.915a8.436 8.436 0 00-5.767-2.357V0h-.186v3.535A8.436 8.436 0 006.14 5.892V2.977h-.187v2.976zm6.14 14.326a8.25 8.25 0 005.562-2.233H12.34c-.108.367-.19.743-.247 1.126v1.107zm-.186-1.087a8.015 8.015 0 00-.258-1.146H6.345a8.25 8.25 0 005.562 2.233v-1.087zm-8.186-7.285h1.107a8.23 8.23 0 001.125-.247V6.345a8.25 8.25 0 00-2.232 5.562zm1.087.186H3.72a8.25 8.25 0 002.232 5.562v-5.304a8.012 8.012 0 00-1.145-.258zm15.47-.186a8.25 8.25 0 00-2.232-5.562v5.315c.367.108.743.19 1.126.247h1.107zm-1.086.186c-.39.058-.772.144-1.146.258v5.304a8.25 8.25 0 002.233-5.562h-1.087zm-1.332 5.69V12.41a7.97 7.97 0 00-.696.267 8.409 8.409 0 00-2.65 1.76l3.346 3.346zm0-6.18v-5.45l-.012-.013h-5.451c.076.235.162.468.26.696a8.698 8.698 0 001.819 2.688 8.698 8.698 0 002.688 1.82c.228.097.46.183.696.259zM6.14 17.848V12.41c.235.078.468.167.696.267a8.403 8.403 0 012.688 1.799 8.404 8.404 0 011.799 2.688c.1.228.19.46.267.696H6.152l-.012-.012zm0-6.245V6.326l3.29 3.29a8.716 8.716 0 01-2.594 1.728 8.14 8.14 0 01-.696.259zm6.257 6.257h5.277l-3.29-3.29a8.716 8.716 0 00-1.728 2.594 8.135 8.135 0 00-.259.696zm-2.347-7.81a9.435 9.435 0 01-2.88 1.96 9.14 9.14 0 012.88 1.94 9.14 9.14 0 011.94 2.88 9.435 9.435 0 011.96-2.88 9.14 9.14 0 012.88-1.94 9.435 9.435 0 01-2.88-1.96 9.434 9.434 0 01-1.96-2.88 9.14 9.14 0 01-1.94 2.88z" fill="url(#lobe-icons-gemma-fill)" fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

1
assets/logos/gimp.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GIMP</title><path d="M15.496 8.608a2.175 2.385 0 0 0-2.175 2.384 2.175 2.385 0 0 0 2.175 2.385 2.175 2.385 0 0 0 2.175-2.385 2.175 2.385 0 0 0-2.175-2.384zm0 .15a.934.934 0 0 1 .933.935.934.934 0 0 1-.933.934.934.934 0 0 1-.934-.934.934.934 0 0 1 .934-.934zm4.903 9.433a.314.314 0 0 0-.094.014c-.278.08-.642.735-.563 1.013.079.278.356.152.524.245.149.083.196.33.4.329-.033.446.125.903.398 1.231.464.564 1.173.576 1.627.68.453.103.789.38.955.683h-.01c.14.253.413-.965.313-1.81-.199-1.692-1.827-2.294-2.657-1.856-.095-.218-.349-.112-.507-.2-.147-.082-.195-.323-.39-.329zM2.01 8.207a2.938 2.279 78.561 0 0-.296.036 2.938 2.279 78.561 0 0-1.637 3.343 2.938 2.279 78.561 0 0 2.824 2.412 2.938 2.279 78.561 0 0 1.637-3.343A2.938 2.279 78.561 0 0 2.01 8.207zm.02.182a1.24 1.24 89.982 0 1 1.24 1.24 1.24 1.24 89.982 0 1-1.24 1.241 1.24 1.24 89.982 0 1-1.24-1.24 1.24 1.24 89.982 0 1 1.24-1.24zm7.296.619a1.61 1.957 0 0 0-1.61 1.957 1.61 1.957 0 0 0 1.61 1.957 1.61 1.957 0 0 0 1.61-1.957 1.61 1.957 0 0 0-1.61-1.957zm.01.142a.734.734 0 0 1 .733.733.734.734 0 0 1-.733.734.734.734 0 0 1-.734-.734.734.734 0 0 1 .734-.733zm13.785-7.57c-.082.01-.178.056-.278.184-2.255 3.385-5.54 4.902-7.936 5.521a3.513 3.586 0 0 1 3.25 3.576 3.513 3.586 0 0 1-3.513 3.586 3.513 3.586 0 0 1-3.375-2.595 2.676 2.998 0 0 1-2.52 2 2.676 2.998 0 0 1-2.676-2.998 2.676 2.998 0 0 1 2.675-2.999 2.676 2.998 0 0 1 2.517 2.037 3.513 3.586 0 0 1 1.878-2.27c-1.887.246-2.89-.025-4.335-.649-1.024-.56-1.722-1.173-2.48-2.359-.036-.055-.11-.086-.16-.025-.18.241-.97 5.723-.98 6.227-.033 1.632-.706 3.593-2.73 3.661 1.864 3.799 5.919 5.465 10.586 5.397 1.404.01 3.329-.332 5.171-1.243a213.84 213.84 0 0 1-1.568-.996c-1.347.788-2.935 1.09-4.674 1.019-2.217-.09-1.847-.732-1.36-.667 3.574.506 5.82-.624 7.315-2.547a34.596 34.596 0 0 1-.556-.377c-.164-.114.032-.291.385-.304h.04c.205-.002.458.056.722.206.757.433.783.965.535 1.081-.08.037-.263-.048-.439-.151-.255.329-.53.622-.818.887h.01c.668.29 1.568.684 2.005.89a9.634 9.634 0 0 0 3.017-3.574c2.18-4.449.652-12.176.614-12.29-.039-.112-.15-.211-.242-.226h-.076z"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Google Analytics</title><path d="M22.84 2.9982v17.9987c.0086 1.6473-1.3197 2.9897-2.967 2.9984a2.9808 2.9808 0 01-.3677-.0208c-1.528-.226-2.6477-1.5558-2.6105-3.1V3.1204c-.0369-1.5458 1.0856-2.8762 2.6157-3.1 1.6361-.1915 3.1178.9796 3.3093 2.6158.014.1201.0208.241.0202.3619zM4.1326 18.0548c-1.6417 0-2.9726 1.331-2.9726 2.9726C1.16 22.6691 2.4909 24 4.1326 24s2.9726-1.3309 2.9726-2.9726-1.331-2.9726-2.9726-2.9726zm7.8728-9.0098c-.0171 0-.0342 0-.0513.0003-1.6495.0904-2.9293 1.474-2.891 3.1256v7.9846c0 2.167.9535 3.4825 2.3505 3.763 1.6118.3266 3.1832-.7152 3.5098-2.327.04-.1974.06-.3983.0593-.5998v-8.9585c.003-1.6474-1.33-2.9852-2.9773-2.9882z"/></svg>

After

Width:  |  Height:  |  Size: 753 B

1
assets/logos/grok.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg>

After

Width:  |  Height:  |  Size: 757 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Hootsuite</title><path d="M11.417 11.14c.505.75.28 1.572-.38 2.017-.66.444-1.505.343-2.01-.407-.506-.75-.282-1.572.378-2.017.66-.444 1.506-.343 2.012.407zm5.017-.274c-.66.444-.884 1.266-.379 2.016.506.75 1.352.852 2.012.407.66-.444.884-1.266.379-2.016-.506-.75-1.352-.852-2.012-.407zm7.422-7.086L19.03 6.638l.236.272c2.224 2.613 3.591 6.409 4.247 8.606a4.362 4.362 0 0 1-.638 3.8C21.449 21.295 18.398 24 12.369 24c-6.58 0-10-3.25-11.644-5.251a3.117 3.117 0 0 1-.51-3.067c.909-2.444 2.766-7.126 4.257-8.825a13.158 13.158 0 0 1 2.897-2.478L2.4.534c-.27-.208-.034-.632.285-.513l8.077 3.006c.38-.066.758-.1 1.13-.1 1.407 0 2.737.307 4.074 1.084l7.744-.695c.266-.024.378.331.147.464zm-8.218 13.656a4.126 4.126 0 0 1-3.316-.232c-.073-.037-.143.055-.087.115.457.49 1.273 1.35 1.766 1.775.102.088.259.077.35-.023l1.369-1.512c.053-.059-.008-.15-.082-.123zm.24-1.156-1.796-2.018a.34.34 0 0 0-.513.008l-1.44 1.716a.18.18 0 0 0 .031.262c.333.239 1.148.76 1.942.76.734 0 1.402-.285 1.724-.447a.18.18 0 0 0 .052-.281zm1.616-8.409c-.3-.034-.603.035-.862.188l-1.808 1.07c-.45.268-1.02.231-1.432-.091L11.819 7.82a4.669 4.669 0 0 0-1.776-.858c-2.698-.638-4.532.78-5.914 3.44-1.32 2.539-.583 6.184 2.672 7.05 3.438.914 5.71-2.903 6.618-4.175a.439.439 0 0 1 .712-.002c1.408 1.916 3.306 3.968 5.34 3.557 2.656-.535 2.342-3.905 1.512-5.7-.735-1.588-1.83-3.074-3.49-3.262z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Intercom</title><path d="M21 0H3C1.343 0 0 1.343 0 3v18c0 1.658 1.343 3 3 3h18c1.658 0 3-1.342 3-3V3c0-1.657-1.342-3-3-3zm-5.801 4.399c0-.44.36-.8.802-.8.44 0 .8.36.8.8v10.688c0 .442-.36.801-.8.801-.443 0-.802-.359-.802-.801V4.399zM11.2 3.994c0-.44.357-.799.8-.799s.8.359.8.799v11.602c0 .44-.357.8-.8.8s-.8-.36-.8-.8V3.994zm-4 .405c0-.44.359-.8.799-.8.443 0 .802.36.802.8v10.688c0 .442-.36.801-.802.801-.44 0-.799-.359-.799-.801V4.399zM3.199 6c0-.442.36-.8.802-.8.44 0 .799.358.799.8v7.195c0 .441-.359.8-.799.8-.443 0-.802-.36-.802-.8V6zM20.52 18.202c-.123.105-3.086 2.593-8.52 2.593-5.433 0-8.397-2.486-8.521-2.593-.335-.288-.375-.792-.086-1.128.285-.334.79-.375 1.125-.09.047.041 2.693 2.211 7.481 2.211 4.848 0 7.456-2.186 7.479-2.207.334-.289.839-.25 1.128.086.289.336.25.84-.086 1.128zm.281-5.007c0 .441-.36.8-.801.8-.441 0-.801-.36-.801-.8V6c0-.442.361-.8.801-.8.441 0 .801.357.801.8v7.195z"/></svg>

After

Width:  |  Height:  |  Size: 998 B

1
assets/logos/jira.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Jira</title><path d="M11.571 11.513H0a5.218 5.218 0 0 0 5.232 5.215h2.13v2.057A5.215 5.215 0 0 0 12.575 24V12.518a1.005 1.005 0 0 0-1.005-1.005zm5.723-5.756H5.736a5.215 5.215 0 0 0 5.215 5.214h2.129v2.058a5.218 5.218 0 0 0 5.215 5.214V6.758a1.001 1.001 0 0 0-1.001-1.001zM23.013 0H11.455a5.215 5.215 0 0 0 5.215 5.215h2.129v2.057A5.215 5.215 0 0 0 24 12.483V1.005A1.001 1.001 0 0 0 23.013 0Z"/></svg>

After

Width:  |  Height:  |  Size: 493 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Kdenlive</title><path d="m8.727 1.554 2.727 4.334v16.558h1.091V5.889l2.728-4.335zm-6 4.948V9.8h7.091c.003-.83 0-1.672-.006-2.498 0-.383-.356-.732-.718-.8H2.727zm12.303.001c-.402.024-.835.41-.834.837l-.014 12.619c0 .57.767 1.065 1.207.727l8.28-6.331c.441-.335.44-1.12 0-1.455l-8.265-6.287a.553.553 0 0 0-.374-.11zM-.001 12v3.299h9.818V12zm4.363 5.497v3.3h5.455v-3.3z"/></svg>

After

Width:  |  Height:  |  Size: 467 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>KeePassXC</title><path d="M12 0C5.378 0 0 5.378 0 12c0 6.623 5.378 12 12 12 6.623 0 12-5.377 12-12 0-6.622-5.377-12-12-12zm0 .791a11.203 11.203 0 0 1 11.209 11.21A11.202 11.202 0 0 1 12 23.208 11.203 11.203 0 0 1 .791 12 11.203 11.203 0 0 1 12.001.791zm0 1.871a9.356 9.356 0 0 0-1.705.162A1.746 1.746 0 0 0 12 4.95a1.746 1.746 0 0 0 1.706-2.126A9.342 9.342 0 0 0 12 2.662zM7.2 4a9.338 9.338 0 0 0-4.54 8 9.338 9.338 0 0 0 18.677 0 9.338 9.338 0 0 0-4.54-7.998 4.888 4.888 0 0 1-2.701 5.365l-.12 2.066 1.482 1.483-1.483 1.482.989.989-.989.988.12 1.857L12 20.328l-2.096-2.096V9.367A4.89 4.89 0 0 1 7.2 4zm3.4 6.543v6.99h.7v-6.99z"/></svg>

After

Width:  |  Height:  |  Size: 729 B

1
assets/logos/krita.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Krita</title><path d="M.652.76a.625.625 0 00-.5.246c-.352.448-.035.898.362 1.262.206.189 1.77 1.794 3.428 3.527a11.054 11.054 0 011.815-1.983C3.667 2.515 1.694 1.266 1.461 1.1 1.201.914.917.762.652.76zm5.105 3.052c1.848 1.148 3.786 2.332 4.693 2.84 1.469.821 3.758 2.684 4.092 4.434.535.466 2.182 1.916 2.596 2.413.698-.211 1.518.133 2.06 1.12.866 1.583.227 3.747-1.968 4.988a5.42 5.42 0 01-.296.267l.296-.267c1.14-1.468-.714-2.44-1.175-3.864a2.06 2.06 0 01-.11-.78c-.533-.282-2.11-1.452-2.795-1.965-1.801.16-4.207-1.773-5.35-3.08-.7-.802-2.32-2.517-3.858-4.123a11.052 11.052 0 00-2.046 6.393A11.052 11.052 0 1012.948 1.136c-2.64.004-5.19.954-7.19 2.676zm8.71 7.552c-.515.126-.968.831-1.118 1.306-.038.115-.04.303.066.342.802.592 1.556 1.168 2.4 1.7.162-.393.746-.963 1.096-1.2zm-11.53 1.639c.812 1.898 5.798 7.17 12.06 2.695a2.07 2.07 0 00.114.715c.46 1.42 2.36 2.427 1.238 3.89-2.135 1.364-5 1.201-6.989.528-3.558-1.204-5.914-4.332-6.424-7.828zm13.782.7a.771.771 0 00-.065.049c-.004.003-.008.008-.011.008.003-.003.007-.008.01-.008.024-.015.044-.034.066-.048z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>MailChimp</title><path d="M11.267 0C6.791-.015-1.82 10.246 1.397 12.964l.79.669a3.88 3.88 0 0 0-.22 1.792c.084.84.518 1.644 1.22 2.266.666.59 1.542.964 2.392.964 1.406 3.24 4.62 5.228 8.386 5.34 4.04.12 7.433-1.776 8.854-5.182.093-.24.488-1.316.488-2.267 0-.956-.54-1.352-.885-1.352-.01-.037-.078-.286-.172-.586-.093-.3-.19-.51-.19-.51.375-.563.382-1.065.332-1.35-.053-.353-.2-.653-.496-.964-.296-.311-.902-.63-1.753-.868l-.446-.124c-.002-.019-.024-1.053-.043-1.497-.014-.32-.042-.822-.197-1.315-.186-.668-.508-1.253-.911-1.627 1.112-1.152 1.806-2.422 1.804-3.511-.003-2.095-2.576-2.729-5.746-1.416l-.672.285A678.22 678.22 0 0 0 12.7.504C12.304.159 11.817.002 11.267 0zm.073.873c.166 0 .322.019.465.058.297.084 1.28 1.224 1.28 1.224s-1.826 1.013-3.52 2.426c-2.28 1.757-4.005 4.311-5.037 7.082-.811.158-1.526.618-1.963 1.253-.261-.218-.748-.64-.834-.804-.698-1.326.761-3.902 1.781-5.357C5.834 3.44 9.37.867 11.34.873zm3.286 3.273c.04-.002.06.05.028.074-.143.11-.299.26-.413.414a.04.04 0 0 0 .031.064c.659.004 1.587.235 2.192.574.041.023.012.103-.034.092-.915-.21-2.414-.369-3.97.01-1.39.34-2.45.863-3.224 1.426-.04.028-.086-.023-.055-.06.896-1.035 1.999-1.935 2.987-2.44.034-.018.07.019.052.052-.079.143-.23.447-.278.678-.007.035.032.063.062.042.615-.42 1.684-.868 2.622-.926zm3.023 3.205l.056.001a.896.896 0 0 1 .456.146c.534.355.61 1.216.638 1.845.015.36.059 1.229.074 1.478.034.571.184.651.487.751.17.057.33.098.563.164.706.198 1.125.4 1.39.658.157.162.23.333.253.497.083.608-.472 1.36-1.942 2.041-1.607.746-3.557.935-4.904.785l-.471-.053c-1.078-.145-1.693 1.247-1.046 2.201.417.615 1.552 1.015 2.688 1.015 2.604 0 4.605-1.111 5.35-2.072a.987.987 0 0 0 .06-.085c.036-.055.006-.085-.04-.054-.608.416-3.31 2.069-6.2 1.571 0 0-.351-.057-.672-.182-.255-.1-.788-.344-.853-.891 2.333.72 3.801.039 3.801.039a.072.072 0 0 0 .042-.072.067.067 0 0 0-.074-.06s-1.911.283-3.718-.378c.197-.64.72-.408 1.51-.345a11.045 11.045 0 0 0 3.647-.394c.818-.234 1.892-.697 2.727-1.356.281.618.38 1.299.38 1.299s.219-.04.4.073c.173.106.299.326.213.895-.176 1.063-.628 1.926-1.387 2.72a5.714 5.714 0 0 1-1.666 1.244c-.34.18-.704.334-1.087.46-2.863.935-5.794-.093-6.739-2.3a3.545 3.545 0 0 1-.189-.522c-.403-1.455-.06-3.2 1.008-4.299.065-.07.132-.153.132-.256 0-.087-.055-.179-.102-.243-.374-.543-1.669-1.466-1.409-3.254.187-1.284 1.31-2.189 2.357-2.135.089.004.177.01.266.015.453.027.85.085 1.223.1.625.028 1.187-.063 1.853-.618.225-.187.405-.35.71-.401.028-.005.092-.028.215-.028zm.022 2.18a.42.42 0 0 0-.06.005c-.335.054-.347.468-.228 1.04.068.32.187.595.32.765.175-.02.343-.022.498 0 .089-.205.104-.557.024-.942-.112-.535-.261-.872-.554-.868zm-3.66 1.546a1.724 1.724 0 0 0-1.016.326c-.16.117-.311.28-.29.378.008.032.031.056.088.063.131.015.592-.217 1.122-.25.374-.023.684.094.923.2.239.104.386.173.443.113.037-.038.026-.11-.031-.204-.118-.192-.36-.387-.618-.497a1.601 1.601 0 0 0-.621-.129zm4.082.81c-.171-.003-.313.186-.317.42-.004.236.131.43.303.432.172.003.314-.185.318-.42.004-.236-.132-.429-.304-.432zm-3.58.172c-.05 0-.102.002-.155.008-.311.05-.483.152-.593.247-.094.082-.152.173-.152.237a.075.075 0 0 0 .075.076c.07 0 .228-.063.228-.063a1.98 1.98 0 0 1 1.001-.104c.157.018.23.027.265-.026.01-.016.022-.049-.01-.1-.063-.103-.311-.269-.66-.275zm2.26.4c-.127 0-.235.051-.283.148-.075.154.035.363.246.466.21.104.443.063.52-.09.075-.155-.035-.364-.246-.467a.542.542 0 0 0-.237-.058zm-11.635.024c.048 0 .098 0 .149.003.73.04 1.806.6 2.052 2.19.217 1.41-.128 2.843-1.449 3.069-.123.02-.248.029-.374.026-1.22-.033-2.539-1.132-2.67-2.435-.145-1.44.591-2.548 1.894-2.811.117-.024.252-.04.398-.042zm-.07.927a1.144 1.144 0 0 0-.847.364c-.38.418-.439.988-.366 1.19.027.073.07.094.1.098.064.008.16-.039.22-.2a1.2 1.2 0 0 0 .017-.052 1.58 1.58 0 0 1 .157-.37.689.689 0 0 1 .955-.199c.266.174.369.5.255.81-.058.161-.154.469-.133.721.043.511.357.717.64.738.274.01.466-.143.515-.256.029-.067.005-.107-.011-.125-.043-.053-.113-.037-.18-.021a.638.638 0 0 1-.16.022.347.347 0 0 1-.294-.148c-.078-.12-.073-.3.013-.504.011-.028.025-.058.04-.092.138-.308.368-.825.11-1.317-.195-.37-.513-.602-.894-.65a1.135 1.135 0 0 0-.138-.01z"/></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

1
assets/logos/mailgun.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mailgun</title><path d="M11.837 0c6.602 0 11.984 5.381 11.984 11.994-.017 2.99-3.264 4.84-5.844 3.331a3.805 3.805 0 0 1-.06-.035l-.055-.033-.022.055c-2.554 4.63-9.162 4.758-11.894.232-2.732-4.527.46-10.313 5.746-10.416a6.868 6.868 0 0 1 7.002 6.866 1.265 1.265 0 0 0 2.52 0c0-5.18-4.197-9.38-9.377-9.387C4.611 2.594.081 10.41 3.683 16.673c3.238 5.632 11.08 6.351 15.289 1.402l1.997 1.686A11.95 11.95 0 0 1 11.837 24C2.6 23.72-2.87 13.543 1.992 5.684A12.006 12.006 0 0 1 11.837 0Zm0 7.745c-3.276-.163-5.5 3.281-4.003 6.2a4.26 4.26 0 0 0 4.014 2.31c3.276-.171 5.137-3.824 3.35-6.575a4.26 4.26 0 0 0-3.36-1.935Zm0 2.53c1.324 0 2.152 1.433 1.49 2.58a1.72 1.72 0 0 1-1.49.86 1.72 1.72 0 1 1 0-3.44Z"/></svg>

After

Width:  |  Height:  |  Size: 795 B

1
assets/logos/matomo.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Matomo</title><path d="M6.664 15.37a3.336 3.336 0 0 1-3.332 3.332C1.495 18.702 0 17.208 0 15.37s1.495-3.333 3.332-3.333a3.338 3.338 0 0 1 3.332 3.333zm11.565-3.644a3.658 3.658 0 0 1-1.987.591 3.642 3.642 0 0 1-1.872-.529l.008.012a3.728 3.728 0 0 1-1.235-1.19l-2.612-3.693a.17.17 0 0 1-.027-.033A3.312 3.312 0 0 0 7.67 5.298a3.318 3.318 0 0 0-2.848 1.586.146.146 0 0 1-.021.028l-3.428 5.343a3.663 3.663 0 0 1 5.094 1.18.13.13 0 0 1 .015.018l2.756 3.869a3.305 3.305 0 0 0 2.699 1.38 3.31 3.31 0 0 0 2.711-1.379l.009-.013c.073-.103.137-.202.195-.305l1.442-2.255 1.935-3.024zm5.275 1.902l-.014-.028-.044-.066a1.109 1.109 0 0 0-.029-.044l-3.525-5.37c.024.168.052.335.052.51 0 .741-.219 1.457-.634 2.068l-2.803 4.38 1.416 2.179-.002.002a.131.131 0 0 1 .024.028 3.338 3.338 0 0 0 2.723 1.415A3.335 3.335 0 0 0 24 15.37c0-.613-.171-1.216-.496-1.742zm-7.262-1.666a3.336 3.336 0 0 0 3.332-3.333 3.336 3.336 0 0 0-3.332-3.332 3.336 3.336 0 0 0-3.332 3.332 3.338 3.338 0 0 0 3.332 3.333z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mattermost</title><path d="M12.081 0C7.048-.034 2.339 3.125.637 8.153c-2.125 6.276 1.24 13.086 7.516 15.21 6.276 2.125 13.086-1.24 15.21-7.516 1.727-5.1-.172-10.552-4.311-13.557l.126 2.547c2.065 2.282 2.88 5.512 1.852 8.549-1.534 4.532-6.594 6.915-11.3 5.321-4.708-1.593-7.28-6.559-5.745-11.092 1.031-3.046 3.655-5.121 6.694-5.67l1.642-1.94A4.87 4.87 0 0 0 12.08 0zm3.528 1.094a.284.284 0 0 0-.123.024l-.004.001a.33.33 0 0 0-.109.071c-.145.142-.657.828-.657.828L13.6 3.4l-1.3 1.585-2.232 2.776s-1.024 1.278-.798 2.851c.226 1.574 1.396 2.34 2.304 2.648.907.307 2.302.408 3.438-.704 1.135-1.112 1.098-2.75 1.098-2.75l-.087-3.56-.07-2.05-.047-1.775s.01-.856-.02-1.057a.33.33 0 0 0-.035-.107l-.006-.012-.007-.011a.277.277 0 0 0-.229-.14z"/></svg>

After

Width:  |  Height:  |  Size: 835 B

1
assets/logos/meta.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

1
assets/logos/minio.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>MinIO</title><path d="M13.2072.006c-.6216-.0478-1.2.1943-1.6211.582a2.15 2.15 0 0 0-.0938 3.0352l3.4082 3.5507a3.042 3.042 0 0 1-.664 4.6875l-.463.2383V7.2853a15.4198 15.4198 0 0 0-8.0174 10.4862v.0176l6.5487-3.3281v7.621L13.7794 24V13.6817l.8965-.4629a4.4432 4.4432 0 0 0 1.2207-7.0292l-3.371-3.5254a.7489.7489 0 0 1 .037-1.0547.7522.7522 0 0 1 1.0567.0371l.4668.4863-.006.0059 4.0704 4.2441a.0566.0566 0 0 0 .082 0 .06.06 0 0 0 0-.0703l-3.1406-5.1425-.1484.1425.1484-.1445C14.4945.3926 13.8287.0538 13.2072.006Zm-.9024 9.8652v2.9941l-4.1523 2.1484a13.9787 13.9787 0 0 1 2.7676-3.9277 14.1784 14.1784 0 0 1 1.3847-1.2148z"/></svg>

After

Width:  |  Height:  |  Size: 724 B

1
assets/logos/mistral.svg Normal file
View File

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Mistral</title><path d="M3.428 3.4h3.429v3.428H3.428V3.4zm13.714 0h3.43v3.428h-3.43V3.4z" fill="gold"></path><path d="M3.428 6.828h6.857v3.429H3.429V6.828zm10.286 0h6.857v3.429h-6.857V6.828z" fill="#FFAF00"></path><path d="M3.428 10.258h17.144v3.428H3.428v-3.428z" fill="#FF8205"></path><path d="M3.428 13.686h3.429v3.428H3.428v-3.428zm6.858 0h3.429v3.428h-3.429v-3.428zm6.856 0h3.43v3.428h-3.43v-3.428z" fill="#FA500F"></path><path d="M0 17.114h10.286v3.429H0v-3.429zm13.714 0H24v3.429H13.714v-3.429z" fill="#E10500"></path></svg>

After

Width:  |  Height:  |  Size: 656 B

1
assets/logos/n8n.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>n8n</title><path d="M21.4737 5.6842c-1.1772 0-2.1663.8051-2.4468 1.8947h-2.8955c-1.235 0-2.289.893-2.492 2.111l-.1038.623a1.263 1.263 0 0 1-1.246 1.0555H11.289c-.2805-1.0896-1.2696-1.8947-2.4468-1.8947s-2.1663.8051-2.4467 1.8947H4.973c-.2805-1.0896-1.2696-1.8947-2.4468-1.8947C1.1311 9.4737 0 10.6047 0 12s1.131 2.5263 2.5263 2.5263c1.1772 0 2.1663-.8051 2.4468-1.8947h1.4223c.2804 1.0896 1.2696 1.8947 2.4467 1.8947 1.1772 0 2.1663-.8051 2.4468-1.8947h1.0008a1.263 1.263 0 0 1 1.2459 1.0555l.1038.623c.203 1.218 1.257 2.111 2.492 2.111h.3692c.2804 1.0895 1.2696 1.8947 2.4468 1.8947 1.3952 0 2.5263-1.131 2.5263-2.5263s-1.131-2.5263-2.5263-2.5263c-1.1772 0-2.1664.805-2.4468 1.8947h-.3692a1.263 1.263 0 0 1-1.246-1.0555l-.1037-.623A2.52 2.52 0 0 0 13.9607 12a2.52 2.52 0 0 0 .821-1.4794l.1038-.623a1.263 1.263 0 0 1 1.2459-1.0555h2.8955c.2805 1.0896 1.2696 1.8947 2.4468 1.8947 1.3952 0 2.5263-1.131 2.5263-2.5263s-1.131-2.5263-2.5263-2.5263m0 1.2632a1.263 1.263 0 0 1 1.2631 1.2631 1.263 1.263 0 0 1-1.2631 1.2632 1.263 1.263 0 0 1-1.2632-1.2632 1.263 1.263 0 0 1 1.2632-1.2631M2.5263 10.7368A1.263 1.263 0 0 1 3.7895 12a1.263 1.263 0 0 1-1.2632 1.2632A1.263 1.263 0 0 1 1.2632 12a1.263 1.263 0 0 1 1.2631-1.2632m6.3158 0A1.263 1.263 0 0 1 10.1053 12a1.263 1.263 0 0 1-1.2632 1.2632A1.263 1.263 0 0 1 7.579 12a1.263 1.263 0 0 1 1.2632-1.2632m10.1053 3.7895a1.263 1.263 0 0 1 1.2631 1.2632 1.263 1.263 0 0 1-1.2631 1.2631 1.263 1.263 0 0 1-1.2632-1.2631 1.263 1.263 0 0 1 1.2632-1.2632"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
assets/logos/notion.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Notion</title><path d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"/></svg>

After

Width:  |  Height:  |  Size: 993 B

1
assets/logos/odoo.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Odoo</title><path d="M21.1002 15.7957c-1.6015 0-2.8997-1.2983-2.8997-2.8998s1.2983-2.8997 2.8997-2.8997c1.6015 0 2.8998 1.2982 2.8998 2.8997 0 1.5999-1.2979 2.8998-2.8998 2.8998zm0-1.2c.9388.0006 1.7003-.7601 1.7008-1.6989.0004-.9388-.7602-1.7003-1.699-1.7007h-.0018c-.9388.0004-1.6994.7619-1.699 1.7007.0005.9381.761 1.6985 1.699 1.699zm-6.0655 1.2c-1.6014 0-2.8997-1.2983-2.8997-2.8998s1.2983-2.8997 2.8997-2.8997c1.6015 0 2.8998 1.2982 2.8998 2.8997 0 1.5999-1.2999 2.8998-2.8998 2.8998zm0-1.2c.9389.0006 1.7003-.7601 1.7008-1.6989.0005-.9388-.7602-1.7003-1.699-1.7007h-.0018c-.9388.0004-1.6994.7619-1.699 1.7007.0005.9381.761 1.6985 1.699 1.699zM11.865 12.858c0 1.6199-1.2979 2.9378-2.8977 2.9378s-2.8998-1.314-2.8998-2.9358 1.1799-2.8597 2.8998-2.8597c.6359 0 1.2239.134 1.6998.484v-1.68a.6.6 0 0 1 1.2 0v4.0537h-.002zm-2.8977 1.7399c.9388.0005 1.7002-.7602 1.7007-1.699.0005-.9388-.7602-1.7003-1.699-1.7007h-.0017c-.9389.0004-1.6995.7619-1.699 1.7007.0004.9381.7608 1.6985 1.699 1.699zm-6.0675 1.1979C1.2983 15.7957 0 14.4974 0 12.8959s1.2983-2.8997 2.8998-2.8997 2.8997 1.2982 2.8997 2.8997c0 1.5999-1.2999 2.8998-2.8997 2.8998zm0-1.2c.9388.0006 1.7002-.7601 1.7007-1.699.0005-.9387-.7602-1.7002-1.699-1.7006h-.0017c-.9388.0004-1.6995.7619-1.699 1.7007.0004.9381.7608 1.6985 1.699 1.699z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

1
assets/logos/okta.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Okta</title><path d="M12 0C5.389 0 0 5.35 0 12s5.35 12 12 12 12-5.35 12-12S18.611 0 12 0zm0 18c-3.325 0-6-2.675-6-6s2.675-6 6-6 6 2.675 6 6-2.675 6-6 6z"/></svg>

After

Width:  |  Height:  |  Size: 254 B

1
assets/logos/ollama.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Ollama</title><path d="M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z"/></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>ONLYOFFICE</title><path d="M10.501 11.724.631 7.16c-.841-.399-.841-1.014 0-1.376l9.87-4.563c.841-.399 2.194-.399 2.998 0l9.87 4.563c.841.398.841 1.014 0 1.376l-9.87 4.563c-.841.362-2.194.362-2.998 0zm0 5.468-9.87-4.563c-.841-.399-.841-1.014 0-1.376l3.363-1.558 6.507 3.006c.841.398 2.194.398 2.998 0l6.507-3.006 3.363 1.558c.841.398.841 1.014 0 1.376l-9.87 4.563c-.841.398-2.194.398-2.998 0zm0 0.0001-9.87-4.563c-.841-.399-.841-1.014 0-1.376l3.363-1.558 6.507 3.006c.841.398 2.194.398 2.998 0l6.507-3.006 3.363 1.558c.841.398.841 1.014 0 1.376l-9.87 4.563c-.841.398-2.194.398-2.998 0zm0 5.613-9.87-4.563c-.841-.398-.841-1.014 0-1.376l3.436-1.593 6.398 2.97c.84.398 2.193.398 2.997 0l6.398-2.97 3.436 1.593c.841.399.841 1.014 0 1.376l-9.87 4.563c-.768.362-2.12.362-2.925 0z"/></svg>

After

Width:  |  Height:  |  Size: 874 B

1
assets/logos/penpot.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Penpot</title><path d="M7.654 0 5.13 3.554v2.01L2.934 6.608l-.02-.009v13.109l8.563 4.045L12 24l.523-.247 8.563-4.045V6.6l-.017.008-2.196-1.045V3.555l-.077-.108L16.349.001l-2.524 3.554v.004L11.989.973l-1.823 2.566-.065-.091zm.447 2.065.976 1.374H6.232l.964-1.358zm8.694 0 .976 1.374h-2.845l.965-1.358zm-4.36.971.976 1.375h-2.845l.965-1.359zM5.962 4.132h1.35v4.544l-1.35-.638Zm2.042 0h1.343v5.506l-1.343-.635zm6.652 0h1.35V9l-1.35.637V4.132zm2.042 0h1.343v3.905l-1.343.634zm-6.402.972h1.35v5.62l-1.35-.638zm2.042 0h1.343v4.993l-1.343.634zm6.534 1.493 1.188.486-1.188.561zM5.13 6.6v1.047l-1.187-.561ZM3.96 8.251l7.517 3.55v10.795l-7.516-3.55zm16.08 0v10.794l-7.517 3.55V11.802z"/></svg>

After

Width:  |  Height:  |  Size: 776 B

1
assets/logos/phi.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Azure</title><path d="M11.49 2H2v9.492h9.492V2h-.002z"></path><path d="M22 2h-9.492v9.492H22V2z"></path><path d="M11.49 12.508H2V22h9.492v-9.492h-.002z"></path><path d="M22 12.508h-9.492V22H22v-9.492z"></path></svg>

After

Width:  |  Height:  |  Size: 380 B

1
assets/logos/plane.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Plane</title><path d="M0 5.358a.854.854 0 0 1 1.235-.767L6.134 7.05v5.768c0 .81.456 1.553 1.179 1.915l4.42 2.218v1.692a.853.853 0 0 1-1.235.766L1.18 14.732A2.14 2.14 0 0 1 0 12.817zm6.134 0a.853.853 0 0 1 1.235-.766l4.898 2.458v5.768c0 .81.457 1.552 1.18 1.915l4.42 2.218v1.692a.853.853 0 0 1-1.235.765l-4.899-2.457v-5.769a2.14 2.14 0 0 0-1.179-1.914L6.134 7.05zm6.133 0a.853.853 0 0 1 1.235-.766l9.319 4.676A2.14 2.14 0 0 1 24 11.182v7.46a.853.853 0 0 1-1.235.766l-4.899-2.457v-5.769a2.14 2.14 0 0 0-1.179-1.914l-4.42-2.218z"/></svg>

After

Width:  |  Height:  |  Size: 627 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Plausible Analytics</title><path d="M12.1835.0017c-.6378-.0097-1.2884.022-1.7246.0996C8.601.424 7.035 1.2116 5.7384 2.4782 4.406 3.7806 3.582 5.299 3.1818 7.1929l-.1387.6445c-.0118 5.3872-.0233 10.7744-.035 16.1617.2914.0081.591-.0392.8416-.0606 2.348-.2868 4.3442-1.7083 5.4315-3.8651.2749-.5497.472-1.182.6094-1.9707.1135-.6691.1195-.8915.1016-4.3807l-.0176-3.6737.1425-.3574c.1972-.49.7425-1.0352 1.2324-1.2324l.3574-.1426 3.3457-.0058c1.8401 0 3.4545-.025 3.58-.0489.5854-.1135 1.2118-.6027 1.4628-1.1464.0717-.1494.1671-.4415.209-.6387.0657-.3286.0604-.4186-.0352-.789-.2987-1.0993-1.3503-2.6234-2.4257-3.5136C16.6247 1.1638 15.2798.4887 13.828.1482c-.3824-.0866-1.0067-.1368-1.6445-.1465zm8.5369 6.8006c-.0506.1798-.098.3662-.172.5215-.3358.7278-1.0382 1.2776-1.8221 1.4296-3.6737.0566-2.5392.0561-3.6737.0566l-3.248.0059-.2695.1074c-.3135.1262-.827.6397-.9531.9531l-.1074.2676.0175 3.576c.0149 2.8888.007 3.5821-.0605 4.125a8.9918 8.9918 0 0 0 1.5683.1386c4.9662.0001 8.992-4.0258 8.992-8.992a8.9918 8.9918 0 0 0-.2715-2.1893Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PocketBase</title><path d="M5.684 12a.632.632 0 0 1-.631-.632V4.421c0-.349.282-.632.631-.632h2.37c.46 0 .889.047 1.287.139.407.084.758.23 1.053.44.303.202.541.475.715.82.173.335.26.75.26 1.246 0 .479-.092.894-.273 1.247a2.373 2.373 0 0 1-.715.869 3.11 3.11 0 0 1-1.053.503c-.398.11-.823.164-1.273.164h-.46a.632.632 0 0 0-.632.632v1.52a.632.632 0 0 1-.632.631Zm1.279-4.888c0 .349.283.632.632.632h.343c1.04 0 1.56-.437 1.56-1.31 0-.428-.135-.73-.404-.907-.26-.176-.645-.264-1.156-.264h-.343a.632.632 0 0 0-.632.631Zm6.3 13.098a.632.632 0 0 1-.631-.631v-6.947a.63.63 0 0 1 .631-.632h2.203c.44 0 .845.034 1.216.1.38.06.708.169.984.328.276.16.492.37.647.63.164.26.246.587.246.982 0 .185-.03.37-.09.554a1.537 1.537 0 0 1-.26.516 1.857 1.857 0 0 1-1.076.7.031.031 0 0 0-.023.03c0 .015.01.028.025.03.591.111 1.04.32 1.346.626.311.31.466.743.466 1.297 0 .42-.082.78-.246 1.083a2.153 2.153 0 0 1-.685.755 3.4 3.4 0 0 1-1.036.441 5.477 5.477 0 0 1-1.268.139zm1.271-5.542c0 .349.283.631.632.631h.21c.465 0 .802-.088 1.009-.264.207-.176.31-.424.31-.743 0-.302-.107-.516-.323-.642-.207-.135-.535-.202-.984-.202h-.222a.632.632 0 0 0-.632.632Zm0 3.463c0 .349.283.631.632.631h.39c1.019 0 1.528-.369 1.528-1.108 0-.36-.125-.621-.376-.78-.241-.16-.625-.24-1.152-.24h-.39a.632.632 0 0 0-.632.632zM1.389 0C.629 0 0 .629 0 1.389V15.03a1.4 1.4 0 0 0 1.389 1.39H8.21a.632.632 0 0 0 .63-.632.632.632 0 0 0-.63-.63H1.389c-.078 0-.125-.05-.125-.128V1.39c0-.078.047-.125.125-.125H15.03c.078 0 .127.047.127.125v6.82a.632.632 0 0 0 .631.63.632.632 0 0 0 .633-.63V1.389A1.4 1.4 0 0 0 15.032 0ZM15.79 7.578a.632.632 0 0 0-.632.633.632.632 0 0 0 .631.63h6.822c.078 0 .125.05.125.128V22.61c0 .078-.047.125-.125.125H8.97c-.077 0-.127-.047-.127-.125v-6.82a.632.632 0 0 0-.631-.63.632.632 0 0 0-.633.63v6.822A1.4 1.4 0 0 0 8.968 24h13.643c.76 0 1.389-.629 1.389-1.389V8.97a1.4 1.4 0 0 0-1.389-1.39Z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

1
assets/logos/posthog.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PostHog</title><path d="M9.854 14.5 5 9.647.854 5.5A.5.5 0 0 0 0 5.854V8.44a.5.5 0 0 0 .146.353L5 13.647l.147.146L9.854 18.5l.146.147v-.049c.065.03.134.049.207.049h2.586a.5.5 0 0 0 .353-.854L9.854 14.5zm0-5-4-4a.487.487 0 0 0-.409-.144.515.515 0 0 0-.356.21.493.493 0 0 0-.089.288V8.44a.5.5 0 0 0 .147.353l9 9a.5.5 0 0 0 .853-.354v-2.585a.5.5 0 0 0-.146-.354l-5-5zm1-4a.5.5 0 0 0-.854.354V8.44a.5.5 0 0 0 .147.353l4 4a.5.5 0 0 0 .853-.354V9.854a.5.5 0 0 0-.146-.354l-4-4zm12.647 11.515a3.863 3.863 0 0 1-2.232-1.1l-4.708-4.707a.5.5 0 0 0-.854.354v6.585a.5.5 0 0 0 .5.5H23.5a.5.5 0 0 0 .5-.5v-.6c0-.276-.225-.497-.499-.532zm-5.394.032a.8.8 0 1 1 0-1.6.8.8 0 0 1 0 1.6zM.854 15.5a.5.5 0 0 0-.854.354v2.293a.5.5 0 0 0 .5.5h2.293c.222 0 .39-.135.462-.309a.493.493 0 0 0-.109-.545L.854 15.501zM5 14.647.854 10.5a.5.5 0 0 0-.854.353v2.586a.5.5 0 0 0 .146.353L4.854 18.5l.146.147h2.793a.5.5 0 0 0 .353-.854L5 14.647z"/></svg>

After

Width:  |  Height:  |  Size: 1011 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>QuickBooks</title><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm.642 4.1335c.9554 0 1.7296.776 1.7296 1.7332v9.0667h1.6c1.614 0 2.9275-1.3156 2.9275-2.933 0-1.6173-1.3136-2.9333-2.9276-2.9333h-.6654V7.3334h.6654c2.5722 0 4.6577 2.0897 4.6577 4.667 0 2.5774-2.0855 4.6666-4.6577 4.6666H12.642zM7.9837 7.333h3.3291v12.533c-.9555 0-1.73-.7759-1.73-1.7332V9.0662H7.9837c-1.6146 0-2.9277 1.316-2.9277 2.9334 0 1.6175 1.3131 2.9333 2.9277 2.9333h.6654v1.7332h-.6654c-2.5725 0-4.6577-2.0892-4.6577-4.6665 0-2.5771 2.0852-4.6666 4.6577-4.6666Z"/></svg>

After

Width:  |  Height:  |  Size: 677 B

1
assets/logos/qwen.svg Normal file
View File

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Qwen</title><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-fill)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-fill" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Rocket.Chat</title><path d="M22.909 8.381c-.651-1.01-1.564-1.905-2.71-2.66-2.215-1.457-5.127-2.259-8.197-2.259-1.027 0-2.038.09-3.018.266a9.978 9.978 0 0 0-2.075-1.53C4.11.803 1.646 1.323.4 1.77a.598.598 0 0 0-.233.977c.879.907 2.332 2.698 1.974 4.327C.753 8.493 0 10.203 0 11.982c0 1.815.752 3.524 2.142 4.942.357 1.63-1.096 3.421-1.975 4.328a.597.597 0 0 0 .233.977c1.245.448 3.71.968 6.508-.427a10.031 10.031 0 0 0 2.075-1.53 17.06 17.06 0 0 0 3.018.265c3.071 0 5.983-.801 8.197-2.257 1.147-.755 2.06-1.65 2.71-2.661C23.633 14.493 24 13.28 24 12.017c.001-1.297-.366-2.508-1.091-3.636zM11.875 18.437c-1.328 0-2.594-.171-3.748-.48l-.844.81a7.716 7.716 0 0 1-1.556 1.154 6.118 6.118 0 0 1-2.2.621c.042-.074.079-.149.119-.224.844-1.553 1.073-2.948.683-4.186-1.382-1.086-2.212-2.476-2.212-3.99 0-3.476 4.369-6.294 9.757-6.294s9.757 2.818 9.757 6.294c.001 3.477-4.367 6.295-9.756 6.295zm-3.229-6.315c0 .788-.644 1.427-1.438 1.427a1.433 1.433 0 0 1-1.438-1.427c0-.788.644-1.426 1.438-1.426.794 0 1.438.638 1.438 1.426zm4.627 0c0 .788-.644 1.427-1.438 1.427a1.433 1.433 0 0 1-1.438-1.427c0-.788.644-1.426 1.438-1.426.794 0 1.438.638 1.438 1.426zm4.63 0c0 .788-.645 1.427-1.439 1.427a1.433 1.433 0 0 1-1.438-1.427c0-.788.644-1.426 1.438-1.426.794 0 1.438.638 1.438 1.426z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

1
assets/logos/sap.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>SAP</title><path d="M0 6.064v11.872h12.13L24 6.064zm3.264 2.208h.005c.863.001 1.915.245 2.676.633l-.82 1.43c-.835-.404-1.255-.442-1.73-.467-.708-.038-1.064.215-1.069.488-.007.332.669.633 1.305.838.964.306 2.19.715 2.377 1.9L7.77 8.437h2.046l2.064 5.576-.007-5.575h2.37c2.257 0 3.318.764 3.318 2.519 0 1.575-1.09 2.514-2.936 2.514h-.763l-.01 2.094-3.588-.003-.25-.908c-.37.122-.787.189-1.23.189-.456 0-.885-.071-1.263-.2l-.358.919-2 .006.09-.462c-.029.025-.057.05-.087.074-.535.43-1.208.629-2.037.644l-.213.002a5.075 5.075 0 0 1-2.581-.675l.73-1.448c.79.467 1.286.572 1.956.558.347-.007.598-.07.761-.239a.557.557 0 0 0 .156-.369c.007-.376-.53-.553-1.185-.756-.531-.164-1.135-.389-1.606-.735-.559-.41-.825-.924-.812-1.65a1.99 1.99 0 0 1 .566-1.377c.519-.537 1.357-.863 2.363-.863zm10.597 1.67v1.904h.521c.694 0 1.247-.23 1.248-.964 0-.709-.554-.94-1.248-.94zm-5.087.767l-.748 2.362c.223.085.481.133.757.133.268 0 .52-.047.742-.126l-.736-2.37z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
assets/logos/sentry.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Sentry</title><path d="M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 0 1 8.53 12.811h-2.221A13.301 13.301 0 0 0 5.784 9.814l-2.926 5.06a7.65 7.65 0 0 1 4.435 5.848H2.194a.365.365 0 0 1-.298-.534l1.413-2.402a5.16 5.16 0 0 0-1.614-.913L.296 19.275a2.182 2.182 0 0 0 .812 2.999 2.24 2.24 0 0 0 1.086.288h6.983a9.322 9.322 0 0 0-3.845-8.318l1.11-1.922a11.47 11.47 0 0 1 4.95 10.24h5.915a17.242 17.242 0 0 0-7.885-15.28l2.244-3.845a.37.37 0 0 1 .504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 0 1-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 0 0 1.922-3.31z"/></svg>

After

Width:  |  Height:  |  Size: 701 B

1
assets/logos/shopify.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Shopify</title><path d="M15.337 23.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914 21.104h.023zM11.71 11.305s-.81-.424-1.774-.424c-1.447 0-1.504.906-1.504 1.141 0 1.232 3.24 1.715 3.24 4.629 0 2.295-1.44 3.76-3.406 3.76-2.354 0-3.54-1.465-3.54-1.465l.646-2.086s1.245 1.066 2.28 1.066c.675 0 .975-.545.975-.932 0-1.619-2.654-1.694-2.654-4.359-.034-2.237 1.571-4.416 4.827-4.416 1.257 0 1.875.361 1.875.361l-.945 2.715-.02.01zM11.17.83c.136 0 .271.038.405.135-.984.465-2.064 1.639-2.508 3.992-.656.213-1.293.405-1.889.578C7.697 3.75 8.951.84 11.17.84V.83zm1.235 2.949v.135c-.754.232-1.583.484-2.394.736.466-1.777 1.333-2.645 2.085-2.971.193.501.309 1.176.309 2.1zm.539-2.234c.694.074 1.141.867 1.429 1.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992 1.289c-.02 0-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209 11.669 0 11.265 0 8.159 0 6.675 3.877 6.21 5.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83 14.063-1.83 14.063L15.009 24l.927-21.166z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Stability</title><path d="M7.223 21c4.252 0 7.018-2.22 7.018-5.56 0-2.59-1.682-4.236-4.69-4.918l-1.93-.571c-1.694-.375-2.683-.825-2.45-1.975.194-.957.773-1.497 2.122-1.497 4.285 0 5.873 1.497 5.873 1.497v-3.6S11.62 3 7.293 3C3.213 3 1 5.07 1 8.273c0 2.59 1.534 4.097 4.645 4.812l.334.083c.473.144 1.112.335 1.916.572 1.59.375 1.999.773 1.999 1.966 0 1.09-1.15 1.71-2.67 1.71C2.841 17.416 1 15.231 1 15.231v3.989S2.152 21 7.223 21z" fill="url(#lobe-icons-stability-fill)"></path><path d="M20.374 20.73c1.505 0 2.626-1.073 2.626-2.526 0-1.484-1.089-2.526-2.626-2.526-1.505 0-2.594 1.042-2.594 2.526 0 1.484 1.089 2.526 2.594 2.526z" fill="#E80000"></path><defs><linearGradient id="lobe-icons-stability-fill" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#9D39FF"></stop><stop offset="100%" stop-color="#A380FF"></stop></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 991 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Supabase</title><path d="M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z"/></svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Typeform</title><path d="M15.502 13.035c-.5 0-.756-.411-.756-.917 0-.505.252-.894.756-.894.513 0 .756.407.756.894-.004.515-.261.917-.756.917Zm-4.888-1.81c.292 0 .414.17.414.317 0 .357-.365.514-1.126.536 0-.442.253-.854.712-.854Zm-3.241 1.81c-.473 0-.67-.384-.67-.917 0-.527.202-.894.67-.894.477 0 .702.38.702.894 0 .537-.234.917-.702.917Zm-3.997-2.334h-.738l1.224 2.808c-.234.519-.36.648-.522.648-.171 0-.333-.138-.45-.259l-.324.43c.22.232.522.366.832.366.387 0 .685-.224.856-.626l1.413-3.371h-.725l-.738 2.012-.828-2.008Zm19.553.523c.36 0 .432.246.432.823v1.516H24v-1.914c0-.689-.473-.988-.91-.988-.386 0-.742.241-.94.688a.901.901 0 0 0-.891-.688c-.365 0-.73.232-.927.666v-.626h-.64v2.857h.64v-1.22c0-.617.324-1.114.765-1.114.36 0 .427.246.427.823v1.516h.64l-.005-1.225c0-.617.329-1.114.77-1.114Zm-5.1-.523h-.324v2.857h.639v-1.095c0-.693.306-1.163.76-1.163.118 0 .217.005.325.05l.099-.676c-.081-.009-.153-.018-.225-.018-.45 0-.774.309-.964.707V10.7h-.31Zm-2.327-.045c-.846 0-1.418.644-1.418 1.458 0 .845.58 1.475 1.418 1.475.85 0 1.431-.648 1.431-1.475-.004-.818-.594-1.458-1.431-1.458Zm-4.852 2.38c-.333 0-.581-.17-.685-.515.847-.036 1.675-.242 1.675-.988 0-.43-.423-.872-1.03-.872-.82 0-1.374.666-1.374 1.457 0 .828.545 1.476 1.36 1.476.567 0 .927-.228 1.21-.559l-.31-.42c-.329.335-.531.42-.846.42Zm-3.151-2.38c-.324 0-.648.188-.774.483v-.438h-.64v3.98h.64v-1.422c.135.205.445.34.72.34.85 0 1.3-.631 1.3-1.48-.004-.841-.445-1.463-1.246-1.463Zm-4.483-1.1H0v.622h1.18v3.38h.67v-3.38h1.166v-.622Zm9.502 1.145h-.383v.572h.383v2.285h.639v-2.285h.621v-.572h-.621v-.447c0-.286.117-.385.382-.385.1 0 .19.027.311.068l.144-.537c-.117-.067-.351-.094-.504-.094-.612 0-.972.367-.972 1.002v.393Z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

1
assets/logos/zapier.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Zapier</title><path d="M4.157 0A4.151 4.151 0 0 0 0 4.161v15.678A4.151 4.151 0 0 0 4.157 24h15.682A4.152 4.152 0 0 0 24 19.839V4.161A4.152 4.152 0 0 0 19.839 0H4.157Zm10.61 8.761h.03a.577.577 0 0 1 .23.038.585.585 0 0 1 .201.124.63.63 0 0 1 .162.431.612.612 0 0 1-.162.435.58.58 0 0 1-.201.128.58.58 0 0 1-.23.042.529.529 0 0 1-.235-.042.585.585 0 0 1-.332-.328.559.559 0 0 1-.038-.235.613.613 0 0 1 .17-.431.59.59 0 0 1 .405-.162Zm2.853 1.572c.03.004.061.004.095.004.325-.011.646.064.937.219.238.144.431.355.552.609.128.279.189.582.185.888v.193a2 2 0 0 1 0 .219h-2.498c.003.227.075.45.204.642a.78.78 0 0 0 .646.265.714.714 0 0 0 .484-.136.642.642 0 0 0 .23-.318l.915.257a1.398 1.398 0 0 1-.28.537c-.14.159-.321.284-.521.355a2.234 2.234 0 0 1-.836.136 1.923 1.923 0 0 1-1.001-.245 1.618 1.618 0 0 1-.665-.703 2.221 2.221 0 0 1-.227-1.036 1.95 1.95 0 0 1 .48-1.398 1.9 1.9 0 0 1 1.3-.488Zm-9.607.023c.162.004.325.026.48.079.207.065.4.174.563.314.26.302.393.692.366 1.088v2.276H8.53l-.109-.711h-.065c-.064.163-.155.31-.272.439a1.122 1.122 0 0 1-.374.264 1.023 1.023 0 0 1-.453.083 1.334 1.334 0 0 1-.866-.264.965.965 0 0 1-.329-.801.993.993 0 0 1 .076-.431 1.02 1.02 0 0 1 .242-.363 1.478 1.478 0 0 1 1.043-.303h.952v-.181a.696.696 0 0 0-.136-.454.553.553 0 0 0-.438-.154.695.695 0 0 0-.378.086.48.48 0 0 0-.193.254l-.99-.144a1.26 1.26 0 0 1 .257-.563c.14-.174.321-.302.533-.378.261-.091.54-.136.82-.129.053-.003.106-.007.163-.007Zm4.384.007c.174 0 .347.038.506.114.182.083.34.211.458.374.257.423.377.911.351 1.406a2.53 2.53 0 0 1-.355 1.448 1.148 1.148 0 0 1-1.009.517c-.204 0-.401-.045-.582-.136a1.052 1.052 0 0 1-.48-.457 1.298 1.298 0 0 1-.114-.234h-.045l.004 1.784h-1.059v-4.713h.904l.117.805h.057c.068-.208.177-.401.328-.56a1.129 1.129 0 0 1 .843-.344h.076v-.004Zm7.559.084h.903l.113.805h.053a1.37 1.37 0 0 1 .235-.484.813.813 0 0 1 .313-.242.82.82 0 0 1 .39-.076h.234v1.051h-.401a.662.662 0 0 0-.313.008.623.623 0 0 0-.272.155.663.663 0 0 0-.174.26.683.683 0 0 0-.027.314v1.875h-1.054v-3.666Zm-17.515.003h3.262v.896L3.73 13.104l.034.113h1.973l.042.9H2.4v-.9l1.931-1.754-.045-.117H2.441v-.896Zm11.815 0h1.055v3.659h-1.055V10.45Zm3.443.684.019.016a.69.69 0 0 0-.351.045.756.756 0 0 0-.287.204c-.11.155-.174.336-.189.522h1.545c-.034-.526-.257-.787-.74-.787h.003Zm-5.718.163c-.026 0-.057 0-.083.004a.78.78 0 0 0-.31.053.746.746 0 0 0-.257.189 1.016 1.016 0 0 0-.204.695v.064c-.015.257.057.507.204.711a.634.634 0 0 0 .253.196.638.638 0 0 0 .314.061.644.644 0 0 0 .578-.265c.14-.223.204-.48.189-.74a1.216 1.216 0 0 0-.181-.711.677.677 0 0 0-.503-.257Zm-4.509 1.266a.464.464 0 0 0-.268.102.373.373 0 0 0-.114.276c0 .053.008.106.027.155a.375.375 0 0 0 .087.132.576.576 0 0 0 .397.11v.004a.863.863 0 0 0 .563-.182.573.573 0 0 0 .211-.457v-.14h-.903Z"/></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

1
assets/logos/zendesk.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Zendesk</title><path d="M12.914 2.904V16.29L24 2.905H12.914zM0 2.906C0 5.966 2.483 8.45 5.543 8.45s5.542-2.484 5.543-5.544H0zm11.086 4.807L0 21.096h11.086V7.713zm7.37 7.84c-3.063 0-5.542 2.48-5.542 5.543H24c0-3.06-2.48-5.543-5.543-5.543z"/></svg>

After

Width:  |  Height:  |  Size: 339 B

1
assets/logos/zoom.svg Normal file
View File

@@ -0,0 +1 @@
<svg fill="#ffffff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Zoom</title><path d="M5.033 14.649H.743a.74.74 0 0 1-.686-.458.74.74 0 0 1 .16-.808L3.19 10.41H1.06A1.06 1.06 0 0 1 0 9.35h3.957c.301 0 .57.18.686.458a.74.74 0 0 1-.161.808L1.51 13.59h2.464c.585 0 1.06.475 1.06 1.06zM24 11.338c0-1.14-.927-2.066-2.066-2.066-.61 0-1.158.265-1.537.686a2.061 2.061 0 0 0-1.536-.686c-1.14 0-2.066.926-2.066 2.066v3.311a1.06 1.06 0 0 0 1.06-1.06v-2.251a1.004 1.004 0 0 1 2.013 0v2.251c0 .586.474 1.06 1.06 1.06v-3.311a1.004 1.004 0 0 1 2.012 0v2.251c0 .586.475 1.06 1.06 1.06zM16.265 12a2.728 2.728 0 1 1-5.457 0 2.728 2.728 0 0 1 5.457 0zm-1.06 0a1.669 1.669 0 1 0-3.338 0 1.669 1.669 0 0 0 3.338 0zm-4.82 0a2.728 2.728 0 1 1-5.458 0 2.728 2.728 0 0 1 5.457 0zm-1.06 0a1.669 1.669 0 1 0-3.338 0 1.669 1.669 0 0 0 3.338 0z"/></svg>

After

Width:  |  Height:  |  Size: 852 B

View File

@@ -0,0 +1,226 @@
{
"Communication": {
"industry": [
"Team communication is the backbone of every modern organization. Whether your team is remote, hybrid, or co-located, the tools you choose to communicate shape how quickly decisions get made, how aligned people stay, and ultimately, how fast you can ship. A poorly configured messaging setup leads to scattered conversations, missed updates, and the kind of context-switching that quietly erodes productivity over weeks and months.",
"The dominant players in this space have built their products around a simple bet: once a team adopts a communication platform, switching costs are high enough to justify annual price increases. And for the most part, that bet has paid off — Slack's per-seat pricing has become one of the most debated line items in SaaS budgets, especially at companies north of 50 employees. Microsoft Teams bundles itself into the Microsoft 365 suite, making the true cost harder to isolate but no less real.",
"What's changed in recent years is the maturity of open-source alternatives. Self-hosted messaging platforms now offer threaded conversations, video calling, file sharing, integrations with CI/CD pipelines, and the kind of compliance certifications (SOC2, HIPAA) that used to be exclusive to enterprise vendors. The real unlock isn't just cost savings — it's the ability to own your communication infrastructure the same way you own your code."
],
"oss_benefits_title": "Why Open-Source Communication Tools Make Sense",
"oss_benefits": [
"**Full data sovereignty** — every message, file, and call recording stays on your infrastructure. Essential for regulated industries, government contracts, and teams handling sensitive IP.",
"**No per-seat pricing** — most open-source communication platforms charge nothing regardless of team size. Even those with enterprise tiers charge a fraction of proprietary alternatives.",
"**Deep customization** — white-label the interface, build custom integrations, modify notification behavior, or integrate directly with your internal tools via open APIs.",
"**Community-driven roadmaps** — feature development is driven by actual users, not product managers optimizing for upsell opportunities."
]
},
"AI Models": {
"industry": [
"Large language models have become foundational infrastructure for a growing number of companies — powering everything from customer support automation and code generation to legal document analysis and creative workflows. The pace of improvement has been relentless: models that would have been considered state-of-the-art six months ago are routinely surpassed by newer releases that are both more capable and more efficient to run.",
"For most of 2023 and 2024, the landscape was dominated by proprietary APIs — OpenAI's GPT series and Anthropic's Claude set the benchmarks, and building on top of them was the path of least resistance. But the economics of API-based inference don't scale well. At production volumes, per-token costs can easily reach five or six figures monthly. And once you factor in data privacy requirements, latency constraints, and the operational risk of depending on a single vendor, the calculus shifts significantly toward self-hosted alternatives.",
"The open-weight movement has delivered models that genuinely compete with proprietary offerings across most practical benchmarks. Meta's Llama series, DeepSeek's reasoning models, Mistral's efficient architectures, and Qwen's multilingual capabilities have collectively proven that you don't need to pay per token to get frontier-level performance. The remaining gap, which narrows with each release cycle, is increasingly a matter of fine-tuning and deployment infrastructure rather than raw model quality."
],
"oss_benefits_title": "The Case for Open-Weight Models",
"oss_benefits": [
"**Zero marginal cost at scale** — once you've invested in inference hardware, every additional query is essentially free. This transforms the economics of AI-powered features from variable cost to fixed cost.",
"**Complete data privacy** — your prompts, context, and outputs never leave your network. Critical for healthcare, finance, legal, and any business handling PII.",
"**Full customization** — fine-tune on your domain data, adjust system prompts without restrictions, modify tokenizers, or quantize for your specific hardware profile.",
"**No vendor lock-in** — swap models as better ones emerge without rewriting integration code. Most open-weight models converge on compatible APIs and inference formats."
]
},
"AI Runners": {
"industry": [
"Running AI models locally has gone from a hobbyist curiosity to a legitimate infrastructure choice. The shift was driven by three converging forces: rapidly improving open-weight models, dramatic reductions in quantization quality loss, and the rising cost consciousness around API-based inference. What was once a weekend experiment — getting a model to respond on your laptop — is now a production deployment pattern used by companies that need predictable costs and absolute data privacy.",
"The tooling around local inference has matured to match. Modern AI runners handle model downloading, quantization, context management, GPU memory allocation, and API serving with minimal configuration. Many offer OpenAI-compatible endpoints, which means existing application code that was built against commercial APIs can switch to self-hosted inference with a single URL change.",
"The hardware requirements have also dropped significantly. GGUF quantization, mixed-precision inference, and speculative decoding techniques mean that capable 7B-13B models run comfortably on consumer GPUs, and even larger 70B models are practical on workstation-grade hardware. For teams that don't need frontier-scale reasoning on every query, local inference is now the more economical choice by a wide margin."
],
"oss_benefits_title": "Why Self-Hosted Inference Matters",
"oss_benefits": [
"**Predictable, fixed costs** — no per-token billing, no usage spikes, no surprise invoices. Your inference cost is your hardware amortization, period.",
"**Complete privacy and compliance** — prompts and outputs never leave your premises. Non-negotiable for legal, medical, and classified workloads.",
"**Latency control** — local inference eliminates network round-trips. Sub-100ms time-to-first-token is achievable for many model sizes.",
"**Model flexibility** — swap, fine-tune, or quantize models to match your exact performance-cost trade-off without waiting for a vendor to add support."
]
},
"Monitoring": {
"industry": [
"Monitoring is one of those infrastructure investments that only gets appreciated after something goes wrong. Every minute of undetected downtime translates directly to lost revenue, eroded user trust, and cascading failures that are exponentially harder to debug the longer they persist. For modern web applications with distributed architectures, monitoring isn't optional — it's the difference between catching a degradation at 2% error rate versus discovering it at 20% when customers start complaining on social media.",
"The commercial monitoring landscape has consolidated around a few major players — Datadog, New Relic, and Splunk — that offer comprehensive platforms with enterprise features. But their pricing models, which typically scale with data ingestion volume, create a perverse incentive: the more you instrument your application (which you should), the more you pay. Teams routinely find themselves reducing log verbosity or sampling metrics just to stay within budget, which defeats the purpose of monitoring in the first place.",
"Open-source monitoring has matured to the point where self-hosted stacks built on Prometheus, Grafana, and OpenTelemetry can match commercial platforms in capability. The trade-off is operational overhead — you're responsible for keeping the monitoring infrastructure itself running. But for teams with the DevOps muscle to maintain it, the cost savings at scale are substantial, and the absence of data ingestion limits means you can instrument without compromise."
],
"oss_benefits_title": "Why Open-Source Monitoring Wins at Scale",
"oss_benefits": [
"**No data ingestion limits** — instrument everything without worrying about per-GB pricing that punishes thoroughness.",
"**Full stack visibility** — combine metrics, logs, traces, and alerting in a single self-hosted stack with complete control over retention policies.",
"**Community-maintained integrations** — Prometheus exporters exist for virtually every database, message queue, web server, and cloud service you're running.",
"**Customizable alerting** — define alert rules, escalation policies, and notification channels that match your operational workflow exactly."
]
},
"Analytics": {
"industry": [
"Understanding how users interact with your product is fundamental to making good decisions — about which features to build, where friction exists, and what's actually driving growth. Analytics tooling has become ubiquitous, but the way most teams implement it creates a quiet tension between insight and privacy. Every pageview, click, and scroll event sent to a third-party analytics service is data about your users that lives on someone else's infrastructure.",
"Google Analytics dominated this space for over a decade by being free and comprehensive. But the shift to GA4, growing regulatory pressure from GDPR and CCPA, and increasing user awareness of tracking have created an opening for alternatives that respect privacy by default. The question has moved from 'Should we track user behavior?' to 'Can we understand our users without compromising their privacy?'",
"The answer, increasingly, is yes. Privacy-first analytics platforms — both commercial and open-source — have proven that you can get actionable insights from aggregate data without building individual user profiles, dropping cookies, or sending behavioral data to third-party ad networks. For many teams, the switch isn't just about compliance; it's about building trust with users who are increasingly aware of how their data is being used."
],
"oss_benefits_title": "Why Privacy-First Analytics is the Future",
"oss_benefits": [
"**GDPR compliant without banners** — no cookies means no consent dialogs interrupting your users' experience.",
"**Lightweight by design** — most open-source analytics scripts are under 5KB, versus 40-70KB for Google Analytics, directly improving page load times.",
"**Complete data ownership** — your analytics data stays on your servers. No data mining, no profile building, no third-party data sharing.",
"**Transparent methodology** — open-source means you can audit exactly how metrics are calculated and ensure the numbers are trustworthy."
]
},
"Backend as a Service": {
"industry": [
"Building a backend from scratch — authentication, database, file storage, realtime subscriptions, serverless functions — is weeks or months of work before you ship a single user-facing feature. Backend-as-a-service platforms compress that timeline by providing these building blocks as managed services with SDKs for every major frontend framework. Firebase showed the industry what's possible; Supabase proved it could be done with open-source technology.",
"The trade-off with managed BaaS has always been control. Firebase's real-time database is fast to get started with but notoriously difficult to migrate away from. Pricing structures that charge per read/write operation create anxiety at scale. And for applications that need to comply with data residency requirements, the inability to choose where your data lives is a non-starter.",
"Self-hosted BaaS platforms have reached the point where the developer experience is genuinely comparable to managed alternatives. PostgreSQL-backed platforms like Supabase offer SQL access, row-level security, and realtime subscriptions. Appwrite and PocketBase provide complete backend stacks that deploy with a single Docker command. The infrastructure complexity that once made self-hosting impractical has been abstracted away by mature tooling."
],
"oss_benefits_title": "Why Self-Hosted Backends Make Sense",
"oss_benefits": [
"**Zero vendor lock-in** — your data lives in standard PostgreSQL or SQLite databases. Migration is a pg_dump away.",
"**Predictable costs** — no per-operation billing. Your costs scale with your infrastructure, not your traffic patterns.",
"**Data residency control** — deploy wherever compliance requires, from EU data centers to air-gapped environments.",
"**Full stack access** — extend functionality at the database level, not just through vendor-defined SDKs and rules."
]
},
"Project Management": {
"industry": [
"Project management tools are the operating system for how teams plan, prioritize, and track work. Get it right and you have visibility into what's happening across the organization, clear ownership of tasks, and a shared source of truth for deadlines. Get it wrong — or outgrow your tooling — and you end up with scattered context across Slack threads, Google Docs, and someone's mental model of what 'in progress' means.",
"Jira has been the default choice in enterprise settings for years, but its complexity has become its own kind of cost. Teams routinely spend more time configuring workflows, maintaining custom fields, and navigating a UI that feels designed for administrators rather than the people doing the actual work. Linear's success proved there's massive demand for tools that are fast, opinionated, and pleasant to use — but Linear's pricing and closed-source nature aren't for everyone.",
"Open-source project management tools have learned from both extremes. The current generation offers clean, modern interfaces inspired by Linear's speed and simplicity, while providing the flexibility to customize workflows that Jira users expect. Self-hosting means your planning data — which often contains sensitive roadmap and strategy information — stays within your infrastructure."
],
"oss_benefits_title": "Why Open-Source Project Management",
"oss_benefits": [
"**No per-seat tax on growth** — add team members without budget conversations with finance.",
"**Sensitive roadmap data stays internal** — product strategy, timelines, and resource allocation don't leave your network.",
"**Customizable workflows** — modify issue types, states, and automation rules at the code level, not through limited configuration UIs.",
"**Integration freedom** — connect with your CI/CD, Slack, Git, and custom internal tools through open APIs."
]
},
"Security": {
"industry": [
"Security infrastructure — password management, identity providers, authentication services, and encryption tooling — sits at the foundation of every application. A breach in any of these layers doesn't just affect one feature; it compromises the entire trust relationship with your users. The stakes are high enough that many teams default to commercial security products, reasoning that the cost of a vendor is trivial compared to the cost of a security incident.",
"But trusting a security vendor also means trusting their infrastructure, their access controls, their employee vetting, and their incident response. After high-profile breaches at LastPass and Okta, more teams are asking whether the convenience of managed security services justifies the concentration of risk. When your password vault or identity provider is a single vendor's cloud service, a compromise at that vendor becomes your compromise too.",
"Open-source security tools offer an alternative model: trust through transparency. When the source code is public, security researchers worldwide can audit it. When the data stays on your infrastructure, a vendor breach doesn't affect you. The trade-off is operational responsibility — but for teams that already manage their own infrastructure, self-hosting a password manager or identity provider is a natural extension."
],
"oss_benefits_title": "Why Open-Source Security Infrastructure",
"oss_benefits": [
"**Auditable code** — the source is public, reviewed by the community, and regularly audited by independent security researchers.",
"**Zero-knowledge architecture** — your secrets never leave your infrastructure. No vendor employees can access your vaults or tokens.",
"**Air-gap capability** — deploy in fully isolated environments when compliance or classification requirements demand it.",
"**No subscription for essential security** — password management and authentication shouldn't be a recurring cost per user."
]
},
"DevOps": {
"industry": [
"The promise of DevOps was simple: developers should be able to deploy their code without filing tickets, waiting for ops teams, or configuring infrastructure by hand. Platforms like Heroku, Vercel, and Railway delivered on that promise beautifully — git push and your app is live. But the convenience comes with constraints: vendor-specific build systems, pricing that scales with compute time, and the nagging awareness that your deployment pipeline is someone else's product decision.",
"Self-hosted Platform-as-a-Service alternatives have closed the experience gap significantly. Tools like Coolify, Dokku, and CapRover provide the same git-push deployment workflow on your own servers, with the added benefit of running on hardware you control. The pricing model shifts from per-project or per-build-minute to a flat monthly VPS cost that supports as many projects as your server can handle.",
"For freelancers and small teams running multiple projects, the economics are especially compelling. A $20/month VPS running a self-hosted PaaS can handle workloads that would cost $200+ across managed platforms. For larger teams, the value proposition shifts toward control: custom build pipelines, deployment policies, and the ability to integrate with internal infrastructure that cloud PaaS providers don't support."
],
"oss_benefits_title": "Why Self-Hosted Deployment Platforms",
"oss_benefits": [
"**Flat infrastructure costs** — one server, unlimited projects. No per-app or per-build pricing.",
"**Full pipeline control** — customize build, test, and deployment steps without platform constraints.",
"**Infrastructure portability** — move between cloud providers or on-prem without rewriting deployment configurations.",
"**Multi-service support** — deploy databases, message queues, and background workers alongside your apps on the same platform."
]
},
"Productivity": {
"industry": [
"Productivity software — document editors, note-taking apps, knowledge bases, wikis — is the digital workspace where ideas become artifacts. Notion's success proved that people want more than just a text editor; they want tools that can organize information spatially, link concepts together, and serve as both a writing surface and a lightweight database. But Notion and its commercial peers store every thought, draft, and internal document on their servers.",
"For companies, that means proprietary knowledge, strategic planning documents, and sensitive internal communications live on third-party infrastructure. For individuals, it means personal notes, journals, and creative work exist at the mercy of a subscription billing cycle. When your knowledge base is someone else's SaaS product, they have leverage over your most important asset: your accumulated knowledge.",
"Open-source productivity tools have evolved from basic Markdown editors into full workspace platforms. AppFlowy and AFFiNE offer Notion-like block editors with local-first architectures. Outline provides team knowledge bases with Slack integration. ONLYOFFICE delivers collaborative document editing that genuinely competes with Google Workspace. The common thread is data ownership — your documents, your server, your rules."
],
"oss_benefits_title": "Why Open-Source Productivity Tools",
"oss_benefits": [
"**Local-first architecture** — your data exists on your device first, synced on your terms. No internet required to access your own notes.",
"**No content lock-in** — export everything in standard formats. Your knowledge base shouldn't be trapped in a proprietary database.",
"**Collaborative without compromise** — real-time editing and sharing without routing every keystroke through a third-party server.",
"**Offline-capable** — work anywhere, sync when you're ready. Perfect for environments with intermittent connectivity."
]
},
"Design": {
"industry": [
"Design tools shape how products look and feel. For the last decade, Adobe's Creative Suite and Figma have defined what professional design tooling looks like — and what it costs. Adobe's subscription model transformed perpetual licenses into recurring revenue, while Figma proved that browser-based collaboration could rival native application performance. Both are excellent tools. Both also represent significant ongoing costs and deep vendor dependencies.",
"The open-source design ecosystem has expanded beyond GIMP as the sole Photoshop alternative. Krita has become the tool of choice for digital painters and illustrators, with a brush engine that many artists prefer over Photoshop's. Penpot offers browser-based collaborative design with SVG-native output. Inkscape handles vector graphics with a feature set that covers 90% of what Illustrator does. Each has carved out a niche where it genuinely excels rather than trying to replicate commercial tools feature-for-feature.",
"For teams considering a switch, the question isn't whether open-source design tools are 'good enough' — several are genuinely better for specific workflows. The question is whether your existing asset libraries, plugins, and team workflows can adapt. The answer, increasingly, is yes."
],
"oss_benefits_title": "Why Open-Source Design Tools",
"oss_benefits": [
"**No subscription treadmill** — professional design capability without monthly fees that increase every year.",
"**Standard file formats** — SVG, PNG, PSD, and OpenRaster support means your assets aren't locked into one vendor's format.",
"**Extensible through plugins** — customize your workflow with community-built extensions, scripts, and brush packs.",
"**Cross-platform freedom** — run the same tool on Linux, macOS, and Windows without feature disparity."
]
},
"CRM": {
"industry": [
"Customer relationship management sits at the heart of revenue operations. Every interaction — from first touchpoint through closed deal to ongoing account management — flows through the CRM. That centrality is exactly why CRM vendors can charge premium prices: once your sales process, reporting, and integrations are built around a platform, the switching cost feels enormous.",
"Salesforce perfected this dynamic. Its ecosystem of apps, consultants, and certifications creates gravitational pull that's hard to escape. HubSpot offered a friendlier on-ramp but follows the same playbook: free tier to get you in, premium features to keep you paying. For growing companies, CRM costs can quietly become one of the largest line items in the tools budget.",
"Open-source CRM alternatives approach the problem differently. Platforms like Twenty and Odoo offer modern interfaces with full control over your customer data. The functionality gap has narrowed — pipeline management, email tracking, activity logging, and reporting are all available. What's changed is the recognition that customer data is too strategically important to store on someone else's servers."
],
"oss_benefits_title": "Why Open-Source CRM",
"oss_benefits": [
"**Your customer data, your servers** — sales intelligence and customer communications are among the most sensitive data a company has.",
"**No per-seat sales tax** — add SDRs, AEs, and CSMs without budget negotiations for each headcount.",
"**Deep customization** — modify deal stages, fields, automations, and reporting at the code level.",
"**Integration on your terms** — connect to your email, calendar, and internal tools without marketplace surcharges."
]
},
"Marketing": {
"industry": [
"Marketing technology — email automation, newsletter platforms, campaign management, and transactional email — has become a critical layer in how businesses communicate with their audiences. The volume of email sent by companies has grown year over year, and with it, the bills from platforms like Mailchimp, SendGrid, and HubSpot. What starts as $50/month for a small list can grow to thousands as your subscriber base expands.",
"The economics of email marketing have a unique quirk: the value of your list compounds over time, but so does the cost of maintaining it on a managed platform. Switching providers means migrating subscriber data, rebuilding templates, re-verifying domains, and potentially losing engagement history. This lock-in is subtle but expensive — many teams continue paying premium prices simply because migration is daunting.",
"Self-hosted email and marketing tools fundamentally change this equation. Platforms like Listmonk can handle millions of subscribers on a single server. Mautic provides marketing automation comparable to HubSpot. Postal handles transactional email delivery at scale. The infrastructure cost is a fraction of managed alternatives, and the data — your subscriber lists, engagement metrics, and campaign history — stays entirely within your control."
],
"oss_benefits_title": "Why Self-Hosted Marketing Infrastructure",
"oss_benefits": [
"**Scale without per-subscriber pricing** — your list can grow to millions without your bill growing proportionally.",
"**Full deliverability control** — manage your own IP reputation, DKIM, SPF, and DMARC settings.",
"**No data sharing with ad platforms** — your subscriber data isn't being used to train ad targeting models.",
"**Campaign data ownership** — engagement metrics, A/B test results, and audience segments stay on your infrastructure."
]
},
"Support": {
"industry": [
"Customer support tooling directly impacts how quickly and effectively you can help your users. The experience of submitting a ticket, chatting with support, or reading documentation shapes perception of your entire product. Zendesk and Intercom have set the baseline for what teams expect from support platforms, but their per-agent pricing means that scaling your support team scales your tooling costs linearly.",
"The support space has also seen significant feature creep in pricing. Chatbots, knowledge bases, analytics dashboards, and multichannel inboxes are increasingly gated behind higher-tier plans. Teams frequently find themselves paying for an 'enterprise' plan not because they need enterprise features, but because the one specific capability they need was strategically placed in that tier.",
"Open-source helpdesk platforms offer the core functionality — ticketing, live chat, knowledge bases, and multichannel support — without per-agent pricing or feature gating. Tools like Zammad and Chaskiq provide mature platforms that can be self-hosted and customized to match your support workflow exactly."
],
"oss_benefits_title": "Why Open-Source Support Platforms",
"oss_benefits": [
"**No per-agent pricing** — scale your support team without scaling your tooling costs.",
"**Omnichannel without upsells** — email, chat, social, and phone support in one platform, included by default.",
"**Complete conversation history ownership** — support interactions contain valuable product feedback. Keep that data accessible on your terms.",
"**Customizable workflows** — build escalation rules, SLA tracking, and routing logic that matches your specific support process."
]
},
"Automation": {
"industry": [
"Workflow automation connects the tools your team already uses, eliminating the repetitive manual work that consumes hours every week. When a new lead fills out a form, automation can create a CRM record, send a welcome email, notify the sales team, and update a spreadsheet — all without human intervention. Zapier and Make have made this accessible to non-technical users, but at $20-50+ per month for serious usage, the cost adds up.",
"The real cost of managed automation isn't just the subscription — it's the per-task or per-operation pricing that makes complex workflows expensive. A workflow that triggers 10,000 times per month might cost $100+ on Zapier. Run that same workflow on a self-hosted platform like n8n, and the cost is whatever you're already paying for your server.",
"Open-source automation platforms have reached the point where they offer comparable visual builders, similar integration libraries, and the added benefit of running custom code nodes for anything the pre-built integrations don't cover. For technical teams, the ability to add JavaScript or Python logic directly into a workflow is a significant advantage over the more constrained no-code approaches."
],
"oss_benefits_title": "Why Open-Source Automation",
"oss_benefits": [
"**No per-execution pricing** — run workflows as often as needed without counting operations.",
"**Code when you need it** — drop into JavaScript or Python for custom logic that no-code builders can't handle.",
"**Data stays local** — sensitive business data flowing through automation workflows doesn't leave your infrastructure.",
"**Custom integrations** — build connectors for internal APIs that managed platforms will never support."
]
},
"E-commerce": {
"industry": [
"E-commerce platforms are the foundation of online retail. Shopify has made launching a store remarkably simple, but that simplicity comes with trade-offs: transaction fees on every sale, limited customization depth, and a dependency on Shopify's infrastructure for your entire business. When the platform decides to change its API, adjust its pricing, or deprecate a feature you rely on, you adapt or you scramble.",
"The headless commerce movement has shifted the conversation from 'which all-in-one platform' to 'which best-of-breed components.' By decoupling the storefront from the commerce engine, teams can use any frontend framework while plugging into a commerce backend for product management, orders, payments, and fulfillment. Open-source headless platforms like Medusa.js make this architecture accessible without enterprise licensing fees.",
"For brands that have outgrown template-based storefronts or need multi-market support, self-hosted commerce infrastructure offers the flexibility to build exactly the shopping experience their customers expect, without the constraints and costs of managed platforms."
],
"oss_benefits_title": "Why Open-Source Commerce",
"oss_benefits": [
"**No transaction fees** — zero percent commission on every sale, regardless of volume.",
"**Complete storefront control** — build any frontend experience without template limitations.",
"**Multi-region and multi-currency** — handle international commerce without per-market licensing fees.",
"**Plugin architecture** — extend functionality with community-built modules for payments, fulfillment, and CMS integrations."
]
}
}

66
data/schema/types.ts Normal file
View File

@@ -0,0 +1,66 @@
export interface DeploymentConfig {
image: string;
port: number;
env?: { key: string; value: string }[];
volumes?: string[];
command?: string;
local_path?: string;
type?: 'docker-compose' | 'dockerfile';
}
export interface Tool {
slug: string;
name: string;
category: string;
is_open_source: boolean;
description: string;
website: string;
github_repo?: string;
stars?: number;
description_long?: string;
pros?: string[];
cons?: string[];
min_cost?: number;
avg_monthly_cost?: number; // Estimated self-hosting or SaaS cost
pricing_model?: 'Free' | 'Freemium' | 'Paid' | 'Paid (Subscription)' | 'Paid (One-time)';
has_free_trial?: boolean;
self_hostable?: boolean;
license?: string;
language?: string;
tags?: string[];
alternatives?: string[];
last_commit?: string;
logo_url?: string;
affiliate_url?: string;
referral_url?: string; // New field for specific referral links
deployment?: DeploymentConfig;
hardware_req?: string; // e.g., "16GB VRAM", "CPU only", "Cloud API"
hosting_type?: 'cloud' | 'self-hosted' | 'both'; // How the tool/model is accessed
ai_metadata?: {
vram_inference_gb?: number; // Recommended VRAM for inference (FP16/BF16)
context_window_tokens?: number; // Max sequence length
parameters_total_b?: number; // Billion parameters
parameters_active_b?: number; // For MoE models
is_multimodal?: boolean;
};
}
export interface Stack {
id: string;
name: string;
emoji: string;
tagline: string;
description: string;
monthlySaved: number;
// Ordered list of tools with specific roles in this stack
tools: {
category: string; // e.g. "The Database", "Authentication"
toolSlug: string;
}[];
// SEO
seo_title?: string;
seo_description?: string;
}

34
data/seo.ts Normal file
View File

@@ -0,0 +1,34 @@
import { Tool } from '../app/types';
import toolsData from './tools.json';
const tools = toolsData as Tool[];
export interface VsPair {
slug: string; // "slack-vs-mattermost"
proprietaryTool: Tool;
opensourceTool: Tool;
}
export function generateVsPairs(): VsPair[] {
const pairs: VsPair[] = [];
// Find all proprietary tools
const proprietaryTools = tools.filter(t => !t.is_open_source);
proprietaryTools.forEach(propTool => {
if (!propTool.alternatives) return;
propTool.alternatives.forEach(altSlug => {
const altTool = tools.find(t => t.slug === altSlug);
if (altTool) {
pairs.push({
slug: `${propTool.slug}-vs-${altTool.slug}`,
proprietaryTool: propTool,
opensourceTool: altTool
});
}
});
});
return pairs;
}

90
data/stacks.ts Normal file
View File

@@ -0,0 +1,90 @@
import { Stack } from '../app/types';
export const STACKS: Stack[] = [
{
id: 'bootstrapper',
name: 'The Bootstrapper Stack',
emoji: '🚀',
tagline: 'Launch for $0/mo',
description: 'Everything you need to build, ship, and manage a SaaS product without spending a dime on software. Perfect for solo founders and early-stage startups.',
monthlySaved: 310,
tools: [
{ category: 'Database & Auth', toolSlug: 'supabase' },
{ category: 'Project Mgmt', toolSlug: 'plane' },
{ category: 'Communication', toolSlug: 'rocketchat' },
{ category: 'Deployment', toolSlug: 'coolify' },
{ category: 'Analytics', toolSlug: 'plausible' },
{ category: 'Design', toolSlug: 'penpot' }
],
seo_title: 'The Bootstrapper Stack - Build SaaS for Free',
seo_description: 'The ultimate open-source stack for solo founders. Database, Auth, DevOps, and Design tools that cost $0/mo.'
},
{
id: 'designer',
name: 'The Designer Stack',
emoji: '🎨',
tagline: 'Ditch Creative Cloud',
description: 'Professional design tools that rival Adobe. From UI/UX prototyping to photo editing and digital art — all open source, all free.',
monthlySaved: 110,
tools: [
{ category: 'UI/UX Design', toolSlug: 'penpot' },
{ category: 'Photo Editing', toolSlug: 'gimp' },
{ category: 'Digital Art', toolSlug: 'krita' },
{ category: 'Knowledge Base', toolSlug: 'appflowy' }
],
seo_title: 'Open Source Design Stack - Adobe Alternatives',
seo_description: 'Free, professional design tools to replace Adobe Creative Cloud. Penpot, GIMP, Krita, and more.'
},
{
id: 'ai-first',
name: 'The AI-First Stack',
emoji: '🤖',
tagline: 'Own your AI',
description: 'Run powerful AI locally. No API keys, no usage limits, no data leaving your machine. LLMs, image generation, and code completion — all self-hosted.',
monthlySaved: 69,
tools: [
{ category: 'LLM Inference', toolSlug: 'llama' },
{ category: 'Coding Model', toolSlug: 'deepseek' },
{ category: 'Image Generation', toolSlug: 'stable-diffusion' },
{ category: 'IDE Assistant', toolSlug: 'continue-dev' },
{ category: 'Autocomplete', toolSlug: 'tabby' }
],
seo_title: 'Local AI Stack - Self-Hosted LLMs & Tools',
seo_description: 'Run AI locally with this curated stack. Llama 3, Stable Diffusion, and coding assistants that respect your privacy.'
},
{
id: 'devops',
name: 'The DevOps Stack',
emoji: '⚙️',
tagline: 'Self-host everything',
description: 'From backend to hosting to monitoring — deploy and manage your entire infrastructure on your own terms. Zero vendor lock-in.',
monthlySaved: 375,
tools: [
{ category: 'Backend as a Service', toolSlug: 'supabase' },
{ category: 'PaaS (Vercel Alt)', toolSlug: 'coolify' },
{ category: 'Git Deployment', toolSlug: 'dokku' },
{ category: 'Web Analytics', toolSlug: 'plausible' },
{ category: 'Product Analytics', toolSlug: 'posthog' }
],
seo_title: 'Open Source DevOps Stack - Self-Hosted PaaS',
seo_description: 'Deploy like a pro with tools like Coolify, Dokku, and Supabase. The ultimate self-hosted infrastructure stack.'
},
{
id: 'privacy',
name: 'The Privacy Stack',
emoji: '🔒',
tagline: 'Zero data leaks',
description: 'Every tool runs on your infrastructure. Your data never touches a third-party server. For teams and individuals who take privacy seriously.',
monthlySaved: 185,
tools: [
{ category: 'Password Manager', toolSlug: 'bitwarden' },
{ category: 'Team Chat', toolSlug: 'mattermost' },
{ category: 'Video Calls', toolSlug: 'jitsi' },
{ category: 'Analytics', toolSlug: 'matomo' },
{ category: 'Notes & Docs', toolSlug: 'appflowy' },
{ category: 'Knowledge Base', toolSlug: 'affine' }
],
seo_title: 'Privacy-First Software Stack - Secure Alternatives',
seo_description: 'A 100% self-hostable stack for maximum privacy. Bitwarden, Mattermost, Jitsi, and more.'
}
];

1653
data/tools-min.json Normal file

File diff suppressed because it is too large Load Diff

18080
data/tools.json Normal file

File diff suppressed because it is too large Load Diff

9193
data/tools_expanded.json Normal file

File diff suppressed because it is too large Load Diff

36
docs/app/_meta.ts Normal file
View File

@@ -0,0 +1,36 @@
import type { MetaRecord } from 'nextra'
const meta: MetaRecord = {
index: {
title: 'Home',
type: 'page',
display: 'hidden',
},
why: {
title: '📜 Why These Docs Exist',
},
'quick-start': {
title: '🚀 Quick Start',
},
deploy: {
title: '📦 Deploy Guides',
},
stacks: {
title: '🔥 Stacks',
},
concepts: {
title: '🧠 Concepts',
},
// -- External links --
directory: {
title: '← Back to Directory',
href: 'https://thealtstack.com',
type: 'page',
},
contact: {
title: 'Contact Us',
display: 'hidden'
},
}
export default meta

View File

@@ -0,0 +1,33 @@
import type { MetaRecord } from 'nextra'
const meta: MetaRecord = {
'docker-basics': {
title: 'Docker in 10 Minutes',
},
networking: {
title: 'Networking for Self-Hosters',
},
'reverse-proxies': {
title: 'Reverse Proxies Explained',
},
'ssl-tls': {
title: 'SSL/TLS for Self-Hosters',
},
'env-secrets': {
title: 'Environment Variables & Secrets',
},
monitoring: {
title: 'Monitoring & Observability',
},
updates: {
title: 'Updating & Maintaining Containers',
},
backups: {
title: 'Backups That Actually Work',
},
hardware: {
title: 'Hardware & VPS Sizing',
},
}
export default meta

View File

@@ -0,0 +1,103 @@
---
title: Backups That Actually Work
description: "How to back up your self-hosted tools. Docker volumes, database dumps, and automated backup scripts that run while you sleep."
---
# Backups That Actually Work
Self-hosting means *you're* responsible for your data. No "Contact Support to restore from backup." **You are the support.**
The good news: backing up Docker-based tools is simple once you set up a system.
## What to Back Up
| Component | Where It Lives | How to Back Up |
|---|---|---|
| **Docker volumes** | `/var/lib/docker/volumes/` | Volume export or rsync |
| **Databases (Postgres)** | Inside a Docker container | `pg_dump` |
| **Config files** | Your `docker-compose.yml` and `.env` | Git or file copy |
> ⚠️ **Heads Up:** `docker-compose.yml` files are easy to recreate. Database data is not. Prioritize database backups above everything else.
## Method 1: Database Dumps (Essential)
Most self-hosted tools use PostgreSQL. Here's how to dump it:
```bash
# Dump a Postgres database running in a container
docker exec your-db-container \
pg_dump -U postgres your_database > backup_$(date +%Y%m%d).sql
```
To restore:
```bash
cat backup_20260218.sql | docker exec -i your-db-container \
psql -U postgres your_database
```
## Method 2: Volume Backup
For tools that store data in Docker volumes:
```bash
# Find your volumes
docker volume ls
# Backup a volume to a tar file
docker run --rm \
-v my_volume:/data \
-v $(pwd)/backups:/backup \
alpine tar czf /backup/my_volume_backup.tar.gz /data
```
## Method 3: Automated Script
Create a backup script that runs daily via cron:
```bash
#!/bin/bash
# /opt/backup.sh
BACKUP_DIR="/opt/backups"
DATE=$(date +%Y%m%d_%H%M)
mkdir -p $BACKUP_DIR
# Dump Postgres databases
docker exec supabase-db pg_dump -U postgres postgres > $BACKUP_DIR/supabase_$DATE.sql
docker exec plausible_db pg_dump -U postgres plausible_db > $BACKUP_DIR/plausible_$DATE.sql
# Clean backups older than 7 days
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
echo "Backup complete: $DATE"
```
Add to cron:
```bash
# Run at 3 AM every day
crontab -e
# Add this line:
0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1
```
## The 3-2-1 Rule
For serious setups, follow the **3-2-1 backup rule**:
- **3** copies of your data
- **2** different storage types (local + remote)
- **1** offsite copy (rsync to another server, or upload to B2/S3)
```bash
# Sync backups to a remote server
rsync -avz /opt/backups/ user@backup-server:/backups/
```
## Next Steps
You now have the four foundational concepts: Docker, reverse proxies, SSL, and backups. Time to build:
→ [Deploy Guides](/deploy) — 65+ tools ready to deploy
→ [The Bootstrapper Stack](/stacks/bootstrapper) — A complete SaaS toolkit

View File

@@ -0,0 +1,127 @@
---
title: Understanding Docker in 10 Minutes
description: "Docker explained for self-hosters. No CS degree required. Containers, images, volumes, and Docker Compose — the only concepts you actually need."
---
# Understanding Docker in 10 Minutes
Docker is the reason self-hosting went from "sysadmin hobby" to "anyone can do it." It packages software into neat, isolated containers that run the same everywhere.
You don't need to become a Docker expert. You need to understand **four concepts**.
## Concept 1: Images
An **image** is a snapshot of software — pre-built, pre-configured, ready to run. Think of it like an `.iso` file, but for apps.
```bash
# Download the Plausible Analytics image
docker pull plausible/analytics:latest
```
Images live on [Docker Hub](https://hub.docker.com) — a public registry of 100,000+ images. When our deploy guides say `image: plausible/analytics:latest`, they're pulling from here.
## Concept 2: Containers
A **container** is a running instance of an image. Image = blueprint. Container = the actual building.
```bash
# Start a container from an image
docker run -d --name my-plausible plausible/analytics:latest
# See running containers
docker ps
# Stop a container
docker stop my-plausible
# Remove a container (data in volumes is safe)
docker rm my-plausible
```
> 💡 **Why?** Containers are isolated from each other and from your host system. Breaking one container doesn't break anything else.
## Concept 3: Volumes
**Volumes** store your data *outside* the container. This is critical because containers are disposable — when you update an image, you destroy the old container and create a new one. Volumes survive this process.
```bash
# Mount a volume called "plausible-data"
docker run -v plausible-data:/var/lib/clickhouse plausible/analytics
```
Without volumes, your data dies when the container dies. **Always use volumes.**
```bash
# List all volumes
docker volume ls
# Backup a volume (copy to local tar)
docker run --rm -v plausible-data:/data -v $(pwd):/backup alpine \
tar czf /backup/plausible-backup.tar.gz /data
```
## Concept 4: Docker Compose
This is the big one. **Docker Compose** lets you define multi-container setups in a single YAML file. Most real-world tools need multiple containers (app + database + cache), and Docker Compose handles that.
```yaml
# docker-compose.yml
version: '3.8'
services:
app:
image: plausible/analytics:latest
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:14-alpine
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: supersecret
volumes:
db_data:
```
Then run it:
```bash
# Start everything
docker compose up -d
# See logs
docker compose logs -f
# Stop everything
docker compose down
# Update to latest images
docker compose pull && docker compose up -d
```
That's the pattern for **every single deploy guide** in these docs:
1. Copy the `docker-compose.yml`
2. Tweak the environment variables
3. Run `docker compose up -d`
4. Done.
## The 5 Commands You'll Actually Use
| Command | What it does |
|---|---|
| `docker compose up -d` | Start all services in the background |
| `docker compose down` | Stop all services |
| `docker compose logs -f` | Watch live logs (Ctrl+C to exit) |
| `docker compose pull` | Download latest images |
| `docker ps` | List running containers |
That's it. That's Docker for self-hosters.
## Next Steps
→ [Reverse Proxies Explained](/concepts/reverse-proxies) — How to access your tools via `app.yourdomain.com`
→ [Your First Deployment](/quick-start/first-deployment) — Put this knowledge to use

View File

@@ -0,0 +1,153 @@
---
title: "Environment Variables & Secrets"
description: "How to manage .env files, Docker secrets, and sensitive configuration for self-hosted tools. Stop hardcoding passwords."
---
# Environment Variables & Secrets
Every self-hosted tool needs configuration: database passwords, API keys, admin emails. The **wrong** way is hardcoding them in `docker-compose.yml`. The **right** way is environment variables.
## The Basics: `.env` Files
Docker Compose automatically reads a `.env` file in the same directory as your `docker-compose.yml`:
```bash
# .env
POSTGRES_PASSWORD=super_secret_password_123
ADMIN_EMAIL=you@yourdomain.com
SECRET_KEY=a1b2c3d4e5f6g7h8i9j0
```
```yaml
# docker-compose.yml
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
```
Docker Compose substitutes `${POSTGRES_PASSWORD}` with the value from `.env`. Your secrets stay out of your Compose file.
> ⚠️ **Critical:** Add `.env` to your `.gitignore` immediately. Never commit secrets to Git.
```bash
echo ".env" >> .gitignore
```
## Generating Strong Passwords
Don't use `password123`. Generate proper secrets:
```bash
# Generate a 32-character random string
openssl rand -base64 32
# Generate a hex string (great for SECRET_KEY)
openssl rand -hex 32
# Generate a URL-safe string
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
```
### Template for Common Tools
Most self-hosted tools need similar variables. Here's a reusable `.env` template:
```bash
# .env template — generate all values before first run
# Database
POSTGRES_USER=app
POSTGRES_PASSWORD= # openssl rand -base64 32
POSTGRES_DB=app_db
# App
SECRET_KEY= # openssl rand -hex 32
ADMIN_EMAIL=you@yourdomain.com
ADMIN_PASSWORD= # openssl rand -base64 24
BASE_URL=https://app.yourdomain.com
# SMTP (for email notifications)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=you@gmail.com
SMTP_PASSWORD= # Use app-specific password
```
## Default Values (Fallbacks)
Use the `:-` syntax for non-sensitive defaults:
```yaml
environment:
NODE_ENV: ${NODE_ENV:-production} # Defaults to "production"
LOG_LEVEL: ${LOG_LEVEL:-info} # Defaults to "info"
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # No default — MUST be set
```
## Docker Secrets (Advanced)
For production setups, Docker Secrets are more secure than environment variables — they're stored encrypted and mounted as files:
```yaml
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txt
```
```bash
# Create the secret file
mkdir -p secrets
openssl rand -base64 32 > secrets/db_password.txt
chmod 600 secrets/db_password.txt
```
> 💡 Not all images support `_FILE` suffix variables. Check the image's documentation on Docker Hub.
## Multiple Environments
Keep separate `.env` files for different environments:
```bash
.env # Production (default)
.env.local # Local development
.env.staging # Staging server
```
Use them explicitly:
```bash
# Use a specific env file
docker compose --env-file .env.staging up -d
```
## Security Checklist
- [ ] `.env` is in `.gitignore`
- [ ] No secrets are hardcoded in `docker-compose.yml`
- [ ] All passwords are randomly generated (32+ characters)
- [ ] Database ports are NOT exposed to the internet
- [ ] Secret files have `chmod 600` permissions
- [ ] Default passwords from docs have been changed
## Common Mistakes
**"Variable is empty in the container"** → Check for typos. Variable names are case-sensitive. `POSTGRES_password` ≠ `POSTGRES_PASSWORD`.
**"Changes to .env aren't applying"** → You need to recreate the container: `docker compose up -d --force-recreate`.
**"I committed my .env to Git"** → Even after removing it, it's in Git history. Rotate ALL secrets immediately and use `git filter-branch` or BFG Repo Cleaner.
## Next Steps
→ [Monitoring & Observability](/concepts/monitoring) — Know when things break
→ [Docker in 10 Minutes](/concepts/docker-basics) — Review the fundamentals

View File

@@ -0,0 +1,145 @@
---
title: "Hardware & VPS Sizing"
description: "How much RAM, CPU, and disk you actually need for self-hosting. VPS provider comparison and scaling strategies."
---
# Hardware & VPS Sizing
The #1 question new self-hosters ask: **"What server do I need?"**
Short answer: less than you think to start, more than you think once you're hooked.
## Quick Sizing Guide
### How Much RAM Do I Need?
| Setup | RAM | What You Can Run |
|---|---|---|
| **Starter** | 2 GB | 12 lightweight tools (Uptime Kuma, Plausible) |
| **Hobbyist** | 4 GB | 35 tools + a database + reverse proxy |
| **Power User** | 8 GB | 812 tools + multiple databases |
| **Homelab** | 16 GB | Everything + AI models (small ones) |
| **AI Workloads** | 32+ GB | LLMs, image generation, video AI |
> 💡 **Start with 4 GB.** You can always upgrade. Most VPS providers let you resize without downtime.
### CPU Guidelines
| Workload | vCPUs Needed |
|---|---|
| Static tools (Uptime Kuma, PocketBase) | 1 vCPU |
| Web apps (Plausible, Outline, n8n) | 2 vCPUs |
| Heavy apps (PostHog, Supabase, Metabase) | 4 vCPUs |
| AI inference (Ollama, Stable Diffusion) | 4+ vCPUs + GPU |
### Disk Space
| Component | Typical Usage |
|---|---|
| Base OS + Docker | 58 GB |
| Each Docker image | 100 MB 2 GB |
| PostgreSQL database (small app) | 500 MB 5 GB |
| Log files (unmanaged) | 110 GB |
| AI models (per model) | 470 GB |
**Minimum recommended:** 50 GB SSD.
**Comfortable:** 80160 GB SSD.
**AI workloads:** 200+ GB NVMe.
## VPS Provider Comparison
| Provider | Starting At | Pros | Best For |
|---|---|---|---|
| [**DigitalOcean**](https://m.do.co/c/2ed27757a361) | $6/mo (1 GB) | Simple UI, great docs, predictable pricing | Beginners |
| **Hetzner** | €3.79/mo (2 GB) | Best price-to-performance in EU | Power users, EU hosting |
| **Contabo** | €5.99/mo (4 GB) | Cheapest for RAM-heavy setups | Budget homelab |
| **Linode (Akamai)** | $5/mo (1 GB) | Reliable, good network | Small projects |
| **Vultr** | $5/mo (1 GB) | Global locations, hourly billing | Testing and experimentation |
| **Oracle Cloud** | Free (4 vCPUs, 24 GB ARM) | Unbeatable free tier | Zero-budget hosting |
| **Home Server** | One-time cost | Full control, unlimited bandwidth | Privacy maximalists |
> 🏆 **Our Pick:** [DigitalOcean](https://m.do.co/c/2ed27757a361) for beginners (simple, reliable, [$200 free credit](https://m.do.co/c/2ed27757a361)). **Hetzner** for best value. **Oracle Cloud free tier** if you want to pay nothing.
## Real-World Stack Sizing
Here's what actual AltStack setups typically need:
### The Bootstrapper Stack (4 GB RAM)
- Coolify (deployment platform)
- Plausible (analytics)
- Uptime Kuma (monitoring)
- Listmonk (newsletters)
- Caddy (reverse proxy)
### The Privacy Stack (4 GB RAM)
- Vaultwarden (passwords)
- Jitsi Meet (video calls)
- Mattermost (messaging)
- Caddy (reverse proxy)
### The AI Stack (1632 GB RAM)
- Ollama (LLM inference)
- Stable Diffusion (image generation)
- TabbyML (code completion)
- Continue.dev (AI coding)
## Scaling Strategies
### Vertical Scaling (Bigger Server)
The simplest approach. Just resize your VPS:
- **DigitalOcean:** Resize droplet (takes ~1 minute)
- **Hetzner:** Rescale server (may require reboot)
- **Home server:** Add RAM sticks
### Horizontal Scaling (More Servers)
When one server isn't enough:
```
Server 1: Databases (Postgres, Redis)
Server 2: Application containers
Server 3: AI workloads (GPU)
```
Connect them with a private network (most VPS providers offer this for free) or a VPN like WireGuard.
### The "Start Small" Strategy
1. **Month 1:** $6/mo droplet (1 GB) — Deploy 12 tools
2. **Month 3:** Resize to $12/mo (2 GB) — Add more tools
3. **Month 6:** Resize to $24/mo (4 GB) — Running your full stack
4. **Month 12+:** Add a second server or move to Hetzner for better value
## Monitoring Your Resources
Always know how much headroom you have:
```bash
# Quick resource check
free -h # RAM usage
df -h # Disk usage
nproc # CPU cores
uptime # Load average
# Docker resource usage
docker stats # Live container metrics
docker system df # Docker disk usage
```
## Red Flags
🚩 **RAM constantly above 90%** → Resize or move a service to another server.
🚩 **Disk above 80%** → Clean Docker images (`docker system prune -f`) or resize disk.
🚩 **CPU at 100% for extended periods** → Check which container is the culprit with `docker stats`.
🚩 **Swap usage above 1 GB** → You need more RAM. Swap is a band-aid, not a solution.
## Next Steps
→ [Quick Start](/quick-start) — Deploy your first tool
→ [Deploy Guides](/deploy) — Browse 65+ tools
→ [Docker in 10 Minutes](/concepts/docker-basics) — Foundation knowledge

View File

@@ -0,0 +1,163 @@
---
title: "Monitoring & Observability"
description: "Know when things break before your users do. Uptime monitoring, disk alerts, log aggregation, and observability for self-hosters."
---
# Monitoring & Observability
You deployed 5 tools. They're running great. You go to bed. At 3 AM, the disk fills up, Postgres crashes, and everything dies. You find out at 9 AM when a user emails you.
**Monitoring prevents this.**
## The Three Layers
| Layer | What It Watches | Tool |
|---|---|---|
| **Uptime** | "Is the service responding?" | Uptime Kuma |
| **System** | CPU, RAM, disk, network | Node Exporter + Grafana |
| **Logs** | What's actually happening inside | Docker logs, Dozzle, SigNoz |
You need **at least** the first layer. The other two are for when you get serious.
## Layer 1: Uptime Monitoring (Essential)
[Uptime Kuma](/deploy/uptime-kuma) is the single best tool for self-hosters. Deploy it first, always.
```yaml
# docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- uptime_data:/app/data
volumes:
uptime_data:
```
### What to Monitor
Add a monitor for **every** service you run:
| Type | Target | Check Interval |
|---|---|---|
| HTTP(s) | `https://plausible.yourdomain.com` | 60s |
| HTTP(s) | `https://uptime.yourdomain.com` | 60s |
| TCP Port | `localhost:5432` (Postgres) | 120s |
| Docker Container | Container name | 60s |
| DNS | `yourdomain.com` | 300s |
### Notifications
Uptime Kuma supports 90+ notification channels. Set up **at least two**:
- **Email** — For non-urgent alerts
- **Telegram/Discord/Slack** — For instant mobile alerts
> 🔥 **Pro Tip:** Monitor your monitoring. Set up an external free ping service (like [UptimeRobot](https://uptimerobot.com)) to watch your Uptime Kuma instance.
## Layer 2: System Metrics
### Quick Disk Alert Script
The #1 cause of self-hosting outages is **running out of disk space**. This script sends an alert when disk usage exceeds 80%:
```bash
#!/bin/bash
# /opt/scripts/disk-alert.sh
THRESHOLD=80
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
echo "⚠️ Disk usage is at ${USAGE}% on $(hostname)" | \
mail -s "Disk Alert: ${USAGE}%" you@yourdomain.com
fi
```
Add to cron:
```bash
# Check every hour
0 * * * * /opt/scripts/disk-alert.sh
```
### What to Watch
| Metric | Warning Threshold | Critical Threshold |
|---|---|---|
| Disk usage | 70% | 85% |
| RAM usage | 80% | 95% |
| CPU sustained | 80% for 5 min | 95% for 5 min |
| Container restarts | 3 in 1 hour | 10 in 1 hour |
### Docker Resource Monitoring
Quick commands to check what's eating your resources:
```bash
# Live resource usage per container
docker stats
# Show container sizes (disk)
docker system df -v
# Find large volumes
du -sh /var/lib/docker/volumes/*/
```
## Layer 3: Log Aggregation
Docker captures all stdout/stderr from your containers. Use it:
```bash
# Live logs for a service
docker compose logs -f plausible
# Last 100 lines
docker compose logs --tail=100 plausible
# Logs since a specific time
docker compose logs --since="2h" plausible
```
### Dozzle (Docker Log Viewer)
For a beautiful web-based log viewer:
```yaml
services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
ports:
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
```
### For Serious Setups: SigNoz
If you need traces, metrics, **and** logs in one place, deploy [SigNoz](/deploy/signoz). It's an open-source Datadog alternative built on OpenTelemetry.
## Maintenance Routine
Set a weekly calendar reminder:
```
☐ Check Uptime Kuma — all green?
☐ Run `docker stats` — anything hogging resources?
☐ Run `df -h` — disk space OK?
☐ Run `docker system prune -f` — clean unused images
☐ Check logs for any errors — `docker compose logs --since=168h | grep -i error`
```
## Next Steps
→ [Updating & Maintaining Containers](/concepts/updates) — Keep your tools up to date safely
→ [Backups That Actually Work](/concepts/backups) — Protect your data
→ [Deploy Uptime Kuma](/deploy/uptime-kuma) — Set up monitoring now

View File

@@ -0,0 +1,160 @@
---
title: "Networking for Self-Hosters"
description: "Ports, DNS, firewalls, and private networks — the networking basics every self-hoster needs to know."
---
# Networking for Self-Hosters
You deployed a tool. It works on `localhost:3000`. You try to access it from your phone. Nothing. Welcome to networking.
This guide covers the **four things** standing between your server and the outside world.
## 1. Ports
Every network service listens on a **port** — a numbered door on your server. Some well-known ones:
| Port | Service |
|---|---|
| `22` | SSH |
| `80` | HTTP |
| `443` | HTTPS |
| `5432` | PostgreSQL |
| `30009000` | Where most self-hosted tools live |
When Docker maps `-p 8080:3000`, it's saying: "When traffic hits port 8080 on the host, send it to port 3000 inside the container."
```yaml
# In docker-compose.yml
ports:
- "8080:3000" # host:container
```
> ⚠️ **Never expose database ports** (5432, 3306, 27017) to the internet. Keep them internal to Docker networks.
## 2. DNS (Domain Name System)
DNS translates human-readable names to IP addresses:
```
plausible.yourdomain.com → 203.0.113.42
```
### Setting Up DNS Records
In your domain registrar (Cloudflare, Namecheap, etc.):
| Type | Name | Value | What it does |
|---|---|---|---|
| **A** | `@` | `203.0.113.42` | Points root domain to your server |
| **A** | `plausible` | `203.0.113.42` | Points subdomain to your server |
| **CNAME** | `www` | `yourdomain.com` | Aliases `www` to root |
| **A** | `*` | `203.0.113.42` | Wildcard — catch-all for any subdomain |
> 💡 **Pro Tip:** A wildcard `*` A record + Caddy reverse proxy = unlimited subdomains with zero DNS management. Just add entries to your Caddyfile.
### DNS Propagation
After changing DNS records, it can take **5 minutes to 48 hours** to propagate globally. Use [dnschecker.org](https://dnschecker.org) to verify.
## 3. Firewalls (UFW)
A firewall controls which ports are open to the internet. On Ubuntu/Debian, use **UFW** (Uncomplicated Firewall):
```bash
# Check current status
ufw status
# Allow essential ports
ufw allow 22/tcp # SSH — DON'T lock yourself out
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# Enable the firewall
ufw enable
# Deny everything else by default
ufw default deny incoming
ufw default allow outgoing
```
### The Golden Rule
Only open three ports to the internet: **22** (SSH), **80** (HTTP), **443** (HTTPS).
Your reverse proxy (Caddy/Nginx) handles port 80/443 and routes traffic internally to your containers. Individual tool ports (3000, 8080, etc.) should **never** be exposed publicly.
```
Internet → Port 443 → Caddy → Internal Docker Network → Your Tools
```
### Common Mistakes
**"I can't SSH into my server"** → You blocked port 22 before enabling UFW. Contact your hosting provider for console access.
**"My tool works locally but not remotely"** → Port 80/443 isn't open. Run `ufw allow 80/tcp && ufw allow 443/tcp`.
**"I opened port 8080 and got hacked"** → Never expose app ports directly. Use a reverse proxy instead.
## 4. Docker Networks
Docker creates isolated **networks** for your containers. By default, containers in the same `docker-compose.yml` can talk to each other by service name:
```yaml
services:
app:
image: myapp:latest
depends_on:
- db # Can reach the database at "db:5432"
db:
image: postgres:16
# No "ports:" = not accessible from outside Docker
```
### When to Create Custom Networks
If you need containers from **different** Compose files to communicate (e.g., a shared Caddy reverse proxy):
```yaml
# In your Caddyfile's docker-compose.yml
networks:
proxy:
external: true
# In your app's docker-compose.yml
networks:
default:
name: proxy
external: true
```
Create the shared network first:
```bash
docker network create proxy
```
Now all containers on the `proxy` network can reach each other by service name — across different Compose files.
## Quick Reference
```bash
# See what's listening on which port
ss -tlnp
# Test if a port is open from outside
nc -zv your-server-ip 443
# See Docker networks
docker network ls
# Check DNS resolution
dig plausible.yourdomain.com
nslookup plausible.yourdomain.com
```
## Next Steps
→ [Reverse Proxies Explained](/concepts/reverse-proxies) — Route traffic from domains to containers
→ [SSL/TLS for Self-Hosters](/concepts/ssl-tls) — Encrypt your traffic
→ [Environment Variables & Secrets](/concepts/env-secrets) — Secure your configuration

View File

@@ -0,0 +1,56 @@
---
title: "Concepts"
description: "The foundational knowledge for self-hosting. Docker, networking, security, backups — explained like you're a human, not a sysadmin."
---
# Concepts
Before you deploy anything, understand the building blocks. These guides cover the **why** and **how** behind self-hosting infrastructure — no fluff, no PhD required.
> 📖 **Reading order matters.** Start from the top and work down. Each article builds on the one before it.
---
## The Foundations
These four are non-negotiable. Read them before your first deploy.
| # | Guide | What You'll Learn |
|---|---|---|
| 1 | [Docker in 10 Minutes](/concepts/docker-basics) | Images, containers, volumes, Docker Compose — the only 4 concepts you need |
| 2 | [Networking for Self-Hosters](/concepts/networking) | Ports, DNS, firewalls, and why your tool isn't accessible from the internet |
| 3 | [Reverse Proxies Explained](/concepts/reverse-proxies) | Map `app.yourdomain.com` to your containers with Caddy |
| 4 | [SSL/TLS for Self-Hosters](/concepts/ssl-tls) | HTTPS, Let's Encrypt, and why it matters |
---
## Running in Production
Once your tools are deployed, keep them alive and healthy.
| # | Guide | What You'll Learn |
|---|---|---|
| 5 | [Environment Variables & Secrets](/concepts/env-secrets) | `.env` files, Docker secrets, and never hardcoding passwords again |
| 6 | [Monitoring & Observability](/concepts/monitoring) | Know when things break before your users do |
| 7 | [Updating & Maintaining Containers](/concepts/updates) | Safe update workflows, rollbacks, and automating the boring parts |
| 8 | [Backups That Actually Work](/concepts/backups) | Database dumps, volume backups, and the 3-2-1 rule |
---
## Planning & Scaling
Before you buy a server (or a bigger one).
| # | Guide | What You'll Learn |
|---|---|---|
| 9 | [Hardware & VPS Sizing](/concepts/hardware) | How much RAM/CPU you actually need, and which providers are worth it |
---
## Ready to Deploy?
You've got the knowledge. Now put it to work:
→ [Deploy Guides](/deploy) — 65+ tools with Docker Compose configs
→ [Quick Start](/quick-start) — Your first deployment in 5 minutes
→ [Curated Stacks](/stacks) — Pre-built tool bundles for specific use cases

View File

@@ -0,0 +1,113 @@
---
title: Reverse Proxies Explained
description: "What a reverse proxy does and why you need one. Set up Caddy or Nginx to serve your self-hosted tools on proper domains with automatic HTTPS."
---
# Reverse Proxies Explained
Right now your tools run on ports like `:3001`, `:8000`, `:8080`. That's fine for testing, but you don't want users visiting `http://your-ip:8000`.
A **reverse proxy** maps clean domains to those ugly ports:
```
plausible.yourdomain.com → localhost:8000
uptime.yourdomain.com → localhost:3001
supabase.yourdomain.com → localhost:8443
```
It also handles **HTTPS** (SSL certificates) automatically.
## Which One to Use?
| Proxy | Our Take |
|---|---|
| **Caddy** ✅ | **Use this.** Automatic HTTPS, zero-config SSL, human-readable config. Built for self-hosters. |
| **Nginx Proxy Manager** | GUI-first option. Great if you hate config files. Slightly more resource-heavy. |
| **Traefik** | Powerful but complex. Built for Kubernetes. Overkill for most self-hosting setups. |
| **Nginx (raw)** | The classic. Fine but verbose. No auto-SSL without certbot scripts. |
> 🏆 **The Verdict:** Start with Caddy. Seriously. The config file is 6 lines.
## Setting Up Caddy (Recommended)
### Step 1: Deploy Caddy
```yaml
# docker-compose.yml
version: '3.8'
services:
caddy:
image: caddy:2-alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
```
### Step 2: Configure Your Domains
Create a `Caddyfile` in the same directory:
```
plausible.yourdomain.com {
reverse_proxy localhost:8000
}
uptime.yourdomain.com {
reverse_proxy localhost:3001
}
git.yourdomain.com {
reverse_proxy localhost:3000
}
```
That's the entire config. Caddy automatically obtains and renews Let's Encrypt SSL certificates for every domain listed.
### Step 3: Point DNS
In your domain registrar (Cloudflare, Namecheap, etc.), add A records:
| Type | Name | Value |
|---|---|---|
| A | `plausible` | `your-server-ip` |
| A | `uptime` | `your-server-ip` |
| A | `git` | `your-server-ip` |
### Step 4: Start
```bash
docker compose up -d
```
Within 60 seconds, Caddy will obtain SSL certificates and your tools will be live on proper HTTPS domains.
## How It Works (Simplified)
```
User visits plausible.yourdomain.com
DNS resolves to your server IP
Caddy receives the request on port 443
Caddy reads Caddyfile: "plausible.yourdomain.com → localhost:8000"
Caddy forwards the request to your Plausible container
User sees Plausible dashboard over HTTPS 🔒
```
→ [Setting Up a Reverse Proxy (Practical Guide)](/quick-start/reverse-proxy) — Get Nginx, Caddy, or Traefik running now
→ [SSL/TLS for Self-Hosters](/concepts/ssl-tls) — Deep dive into certificates and security
→ [Deploy Guides](/deploy) — All our guides include reverse proxy config

View File

@@ -0,0 +1,56 @@
---
title: "SSL/TLS for Self-Hosters"
description: "HTTPS for your self-hosted tools. How SSL works, why you need it, and how to set it up with Caddy or Let's Encrypt."
---
# SSL/TLS for Self-Hosters
**SSL/TLS** is what makes the padlock appear in your browser. It encrypts traffic between your users and your server so nobody can snoop on it.
Every self-hosted tool accessible from the internet **must** have HTTPS. No exceptions.
## The Easy Way: Caddy (Automatic)
If you followed our [reverse proxy guide](/concepts/reverse-proxies) and are using Caddy, **you already have SSL**. Caddy obtains and renews Let's Encrypt certificates automatically for every domain in your Caddyfile.
No config needed. No cron jobs. No certbot. It just works.
> 🔥 **Pro Tip:** This is the #1 reason we recommend Caddy over Nginx.
## The Manual Way: Let's Encrypt + Certbot
If you're using raw Nginx, you'll need certbot:
```bash
# Install certbot
apt install certbot python3-certbot-nginx -y
# Obtain a certificate
certbot --nginx -d plausible.yourdomain.com
# Verify auto-renewal
certbot renew --dry-run
```
Certbot will modify your Nginx config automatically and set up a cron job for renewal.
## SSL Checklist
After setting up SSL, verify:
- [ ] Site loads on `https://` (padlock visible)
- [ ] `http://` redirects to `https://` automatically
- [ ] Certificate is from Let's Encrypt (click padlock → "Certificate")
- [ ] No mixed-content warnings in browser console
## Common Gotchas
**"Certificate not found"** → Your DNS hasn't propagated yet. Wait 510 minutes and try again.
**"Too many requests"** → Let's Encrypt rate-limits to 50 certificates/week per domain. If you're testing, use `--staging` flag first.
**"Connection refused on port 443"** → Port 443 isn't open in your firewall. Run: `ufw allow 443/tcp`
## Next Steps
→ [Backups That Actually Work](/concepts/backups) — Protect the data you're securing with SSL

View File

@@ -0,0 +1,153 @@
---
title: "Updating & Maintaining Containers"
description: "How to safely update self-hosted tools running in Docker. Update workflows, rollbacks, and optional automation with Watchtower."
---
# Updating & Maintaining Containers
Your tools need updates — security patches, bug fixes, new features. But updating a self-hosted tool isn't like clicking "Update" in an app store. You need a process.
## The Safe Update Workflow
Follow this **every time** you update a tool:
```bash
# 1. Backup first (ALWAYS)
docker exec my-db pg_dump -U postgres mydb > backup_$(date +%Y%m%d).sql
# 2. Pull the new image
docker compose pull
# 3. Recreate containers with new image
docker compose up -d
# 4. Check logs for errors
docker compose logs -f --tail=50
# 5. Verify the tool works
curl -I https://app.yourdomain.com
```
> ⚠️ **Golden Rule:** Never update without a backup. If something breaks, you can roll back in 60 seconds.
## Rolling Back
Something went wrong? Here's how to revert to the previous version:
### Option 1: Pin to Previous Version
```yaml
# docker-compose.yml — change the tag
services:
app:
image: plausible/analytics:v2.0.0 # Was :v2.1.0
```
```bash
docker compose up -d
```
### Option 2: Restore From Backup
```bash
# Stop the broken service
docker compose down
# Restore the database backup
cat backup_20260218.sql | docker exec -i my-db psql -U postgres mydb
# Start with the old image
docker compose up -d
```
## Image Tags: `latest` vs Pinned Versions
| Approach | Pros | Cons |
|---|---|---|
| `image: app:latest` | Always gets newest | Can break unexpectedly |
| `image: app:v2.1.0` | Predictable, reproducible | Manual updates required |
| `image: app:2` | Gets patches within major version | Some risk of breaking changes |
> 🏆 **Our Recommendation:** Use **major version tags** (`image: postgres:16`) for databases and **pinned versions** (`image: plausible/analytics:v2.1.0`) for applications. Avoid `latest` in production.
## Automated Updates with Watchtower
If you want hands-off updates (with some risk), **Watchtower** watches your containers and auto-updates them:
```yaml
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_SCHEDULE: "0 0 4 * * *" # 4 AM daily
WATCHTOWER_NOTIFICATIONS: "email"
command: --include-restarting
```
### Watchtower Caveats
- It updates **all** containers by default. Use labels to control which ones:
```yaml
services:
plausible:
image: plausible/analytics:latest
labels:
- "com.centurylinklabs.watchtower.enable=true"
database:
image: postgres:16
labels:
- "com.centurylinklabs.watchtower.enable=false" # NEVER auto-update databases
```
- It doesn't run migrations. Some tools need `docker exec app migrate` after updates.
- It can't roll back automatically.
> ⚠️ **Never auto-update databases.** Postgres, MySQL, and Redis major version upgrades require manual migration steps. Always pin database images.
## Cleanup: Reclaiming Disk Space
Old images pile up. Docker doesn't clean them automatically:
```bash
# See how much space Docker is using
docker system df
# Remove unused images (safe)
docker image prune -f
# Nuclear option: remove ALL unused data
docker system prune -a -f --volumes
# ⚠️ This deletes stopped containers, unused images, AND orphaned volumes
```
### Automate Cleanup
Add to your crontab:
```bash
# Weekly cleanup at 3 AM Sunday
0 3 * * 0 docker image prune -f >> /var/log/docker-cleanup.log 2>&1
```
## Update Checklist
Before updating any tool:
- [ ] Database backed up
- [ ] Current version noted (in case of rollback)
- [ ] Changelog reviewed for breaking changes
- [ ] `.env` file backed up
- [ ] Update applied and logs checked
- [ ] Service verified working
## Next Steps
→ [Backups That Actually Work](/concepts/backups) — Make sure you can actually roll back
→ [Monitoring & Observability](/concepts/monitoring) — Catch failed updates automatically

View File

@@ -0,0 +1,9 @@
import ContactForm from '../../components/ContactForm'
# Contact Us
Have a question regarding self-hosting, a suggestion for a new stack, or just want to say hello? We're here to help.
Fill out the form below and we'll get back to you as soon as possible.
<ContactForm />

201
docs/app/deploy/_meta.ts Normal file
View File

@@ -0,0 +1,201 @@
import type { MetaRecord } from 'nextra'
const meta: MetaRecord = {
"activepieces": {
"title": "Activepieces"
},
"affine": {
"title": "AFFiNE"
},
"akaunting": {
"title": "Akaunting"
},
"appflowy": {
"title": "AppFlowy"
},
"appwrite": {
"title": "Appwrite"
},
"authentik": {
"title": "Authentik"
},
"bitwarden": {
"title": "Bitwarden"
},
"calcom": {
"title": "Cal.com"
},
"chaskiq": {
"title": "Chaskiq"
},
"coder": {
"title": "Coder"
},
"continue-dev": {
"title": "Continue"
},
"coolify": {
"title": "Coolify"
},
"deepseek": {
"title": "DeepSeek-V3 / R1"
},
"documenso": {
"title": "Documenso"
},
"dokku": {
"title": "Dokku"
},
"erpnext": {
"title": "ERPNext"
},
"flux": {
"title": "FLUX"
},
"freecad": {
"title": "FreeCAD"
},
"gemma": {
"title": "Google Gemma 2"
},
"gimp": {
"title": "GIMP"
},
"glitchtip": {
"title": "GlitchTip"
},
"gpt4all": {
"title": "GPT4All"
},
"hunyuan-video": {
"title": "HunyuanVideo 1.5"
},
"jitsi-meet": {
"title": "Jitsi Meet"
},
"jitsu": {
"title": "Jitsu"
},
"kdenlive": {
"title": "Kdenlive"
},
"keepassxc": {
"title": "KeePassXC"
},
"keycloak": {
"title": "Keycloak"
},
"krita": {
"title": "Krita"
},
"librecad": {
"title": "LibreCAD"
},
"listmonk": {
"title": "Listmonk"
},
"llama": {
"title": "Meta Llama 3.1"
},
"matomo": {
"title": "Matomo"
},
"mattermost": {
"title": "Mattermost"
},
"mautic": {
"title": "Mautic"
},
"medusa": {
"title": "Medusa.js"
},
"metabase": {
"title": "Metabase"
},
"minio": {
"title": "MinIO"
},
"mistral": {
"title": "Mistral Large 2"
},
"mixpost": {
"title": "Mixpost"
},
"mochi-1": {
"title": "Mochi-1"
},
"n8n": {
"title": "n8n"
},
"odoo": {
"title": "Odoo"
},
"ollama": {
"title": "Ollama"
},
"onlyoffice": {
"title": "ONLYOFFICE"
},
"orangehrm": {
"title": "OrangeHRM"
},
"outline": {
"title": "Outline"
},
"penpot": {
"title": "Penpot"
},
"plane": {
"title": "Plane"
},
"plausible": {
"title": "Plausible"
},
"pocketbase": {
"title": "PocketBase"
},
"postal": {
"title": "Postal"
},
"posthog": {
"title": "PostHog"
},
"qwen": {
"title": "Qwen 2.5"
},
"rocketchat": {
"title": "Rocket.Chat"
},
"signoz": {
"title": "SigNoz"
},
"stable-diffusion": {
"title": "Stable Diffusion 3.5"
},
"supabase": {
"title": "Supabase"
},
"superset": {
"title": "Apache Superset"
},
"tabby": {
"title": "TabbyML"
},
"taiga": {
"title": "Taiga"
},
"twenty": {
"title": "Twenty"
},
"uptime-kuma": {
"title": "Uptime Kuma"
},
"vaultwarden": {
"title": "Vaultwarden"
},
"zammad": {
"title": "Zammad"
}
}
export default meta

View File

@@ -0,0 +1,158 @@
---
title: "Deploy Activepieces Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Activepieces with Docker Compose. "
---
# Deploy Activepieces
Open source alternative to Zapier. Automate your work with 200+ apps.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 11.0k stars</span>
<span className="deploy-hero-item">📜 MIT</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Activepieces instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Activepieces and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
activepieces:
image: activepieces/activepieces:latest
container_name: activepieces
restart: unless-stopped
depends_on:
- db
- redis
ports:
- "8080:80"
environment:
- AP_FRONTEND_URL=http://localhost:8080
- AP_POSTGRES_DATABASE=activepieces
- AP_POSTGRES_HOST=db
- AP_POSTGRES_PORT=5432
- AP_POSTGRES_USERNAME=activepieces
- AP_POSTGRES_PASSWORD=activepieces
- AP_REDIS_HOST=redis
- AP_REDIS_PORT=6379
db:
image: postgres:14-alpine
container_name: activepieces-db
restart: unless-stopped
environment:
- POSTGRES_USER=activepieces
- POSTGRES_PASSWORD=activepieces
- POSTGRES_DB=activepieces
volumes:
- activepieces_db_data:/var/lib/postgresql/data
redis:
image: redis:alpine
container_name: activepieces-redis
restart: unless-stopped
volumes:
activepieces_db_data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/activepieces && cd /opt/activepieces
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `AP_FRONTEND_URL` | `http://localhost:8080` | No |
| `AP_POSTGRES_DATABASE` | `activepieces` | No |
| `AP_POSTGRES_HOST` | `db` | No |
| `AP_POSTGRES_PORT` | `5432` | No |
| `AP_POSTGRES_USERNAME` | `activepieces` | No |
| `AP_POSTGRES_PASSWORD` | `activepieces` | No |
| `AP_REDIS_HOST` | `redis` | No |
| `AP_REDIS_PORT` | `6379` | No |
| `POSTGRES_USER` | `activepieces` | No |
| `POSTGRES_PASSWORD` | `activepieces` | No |
| `POSTGRES_DB` | `activepieces` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs activepieces | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Activepieces on AltStack Directory](https://thealtstack.com/alternative-to/activepieces)
- [Activepieces Self-Hosted Guide](https://thealtstack.com/self-hosted/activepieces)
- [Official Documentation](https://www.activepieces.com)
- [GitHub Repository](https://github.com/activepieces/activepieces)

View File

@@ -0,0 +1,171 @@
---
title: "Deploy AFFiNE Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting AFFiNE with Docker Compose. "
---
# Deploy AFFiNE
There can be more than Notion and Miro. AFFiNE(pronounced [əfain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 62.7k stars</span>
<span className="deploy-hero-item">📜 Other</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working AFFiNE instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for AFFiNE and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
# Docker Compose for AFFiNE
version: '3.8'
services:
affine:
image: ghcr.io/toeverything/affine-graphql:latest # Using official as fallback but custom build setup exists in Dockerfile
container_name: affine
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://affine:affine@db:5432/affine
- REDIS_URL=redis://redis:6379
- NODE_ENV=production
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- affine_net
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:3000/" ]
interval: 30s
timeout: 10s
retries: 3
db:
image: postgres:15-alpine
container_name: affine-db
environment:
POSTGRES_USER: affine
POSTGRES_PASSWORD: affine
POSTGRES_DB: affine
volumes:
- affine_db_data:/var/lib/postgresql/data
networks:
- affine_net
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U affine" ]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: affine-redis
networks:
- affine_net
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 5s
retries: 5
networks:
affine_net:
driver: bridge
volumes:
affine_db_data:
name: affine_db_data
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/affine && cd /opt/affine
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `DATABASE_URL` | `postgres://affine:affine@db:5432/affine` | No |
| `REDIS_URL` | `redis://redis:6379` | No |
| `NODE_ENV` | `production` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs affine | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [AFFiNE on AltStack Directory](https://thealtstack.com/alternative-to/affine)
- [AFFiNE Self-Hosted Guide](https://thealtstack.com/self-hosted/affine)
- [Official Documentation](https://affine.pro)
- [GitHub Repository](https://github.com/toeverything/AFFiNE)

View File

@@ -0,0 +1,146 @@
---
title: "Deploy Akaunting Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Akaunting with Docker Compose. "
---
# Deploy Akaunting
Free and open source online accounting software for small businesses and freelancers.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 12.0k stars</span>
<span className="deploy-hero-item">📜 GPL-3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Akaunting instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Akaunting and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
akaunting:
image: akaunting/akaunting:latest
container_name: akaunting
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
- DB_HOST=db
- DB_DATABASE=akaunting
- DB_USERNAME=akaunting
- DB_PASSWORD=akaunting
db:
image: mariadb:10.6
container_name: akaunting-db
restart: unless-stopped
environment:
- MYSQL_DATABASE=akaunting
- MYSQL_USER=akaunting
- MYSQL_PASSWORD=akaunting
- MYSQL_ROOT_PASSWORD=root
volumes:
- akaunting_db_data:/var/lib/mysql
volumes:
akaunting_db_data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/akaunting && cd /opt/akaunting
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `DB_HOST` | `db` | No |
| `DB_DATABASE` | `akaunting` | No |
| `DB_USERNAME` | `akaunting` | No |
| `DB_PASSWORD` | `akaunting` | No |
| `MYSQL_DATABASE` | `akaunting` | No |
| `MYSQL_USER` | `akaunting` | No |
| `MYSQL_PASSWORD` | `akaunting` | No |
| `MYSQL_ROOT_PASSWORD` | `root` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs akaunting | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Akaunting on AltStack Directory](https://thealtstack.com/alternative-to/akaunting)
- [Akaunting Self-Hosted Guide](https://thealtstack.com/self-hosted/akaunting)
- [Official Documentation](https://akaunting.com)
- [GitHub Repository](https://github.com/akaunting/akaunting)

View File

@@ -0,0 +1,171 @@
---
title: "Deploy AppFlowy Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting AppFlowy with Docker Compose. "
---
# Deploy AppFlowy
Bring projects, wikis, and teams together with AI. AppFlowy is the AI collaborative workspace where you achieve more without losing control of your data. The leading open source Notion alternative.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 68.0k stars</span>
<span className="deploy-hero-item">📜 GNU Affero General Public License v3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working AppFlowy instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for AppFlowy and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
# Docker Compose for AppFlowy Cloud
version: '3.8'
services:
appflowy:
build:
context: .
dockerfile: Dockerfile
container_name: appflowy-cloud
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowy
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- appflowy_net
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ]
interval: 10s
timeout: 5s
retries: 5
db:
image: postgres:15-alpine
container_name: appflowy-db
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
POSTGRES_DB: appflowy
volumes:
- appflowy_db_data:/var/lib/postgresql/data
networks:
- appflowy_net
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: appflowy-redis
networks:
- appflowy_net
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 5s
retries: 5
networks:
appflowy_net:
driver: bridge
volumes:
appflowy_db_data:
name: appflowy_db_data
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/appflowy && cd /opt/appflowy
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `DATABASE_URL` | `postgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowy` | No |
| `REDIS_URL` | `redis://redis:6379` | No |
| `POSTGRES_PASSWORD` | `password` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs appflowy | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [AppFlowy on AltStack Directory](https://thealtstack.com/alternative-to/appflowy)
- [AppFlowy Self-Hosted Guide](https://thealtstack.com/self-hosted/appflowy)
- [Official Documentation](https://www.appflowy.io)
- [GitHub Repository](https://github.com/AppFlowy-IO/AppFlowy)

View File

@@ -0,0 +1,181 @@
---
title: "Deploy Appwrite Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Appwrite with Docker Compose. "
---
# Deploy Appwrite
Appwrite® - complete cloud infrastructure for your web, mobile and AI apps. Including Auth, Databases, Storage, Functions, Messaging, Hosting, Realtime and more
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 54.7k stars</span>
<span className="deploy-hero-item">📜 BSD 3-Clause "New" or "Revised" License</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Appwrite instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Appwrite and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
# Docker Compose for Appwrite
# Note: Appwrite is a complex multi-service system.
# This is a production-ready configuration for the core services.
version: '3.8'
services:
appwrite:
image: appwrite/appwrite:1.5.4
container_name: appwrite
ports:
- "80:80"
- "443:443"
environment:
- _APP_ENV=production
- _APP_DB_HOST=db
- _APP_DB_USER=appwrite
- _APP_DB_PASS=${DB_PASSWORD:-password}
- _APP_REDIS_HOST=redis
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- appwrite_net
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost/v1/health" ]
interval: 30s
timeout: 10s
retries: 3
db:
image: mariadb:10.11 # Appwrite uses MariaDB by default
container_name: appwrite-db
environment:
MARIADB_USER: appwrite
MARIADB_PASSWORD: ${DB_PASSWORD:-password}
MARIADB_DATABASE: appwrite
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpassword}
volumes:
- appwrite_db_data:/var/lib/mysql
networks:
- appwrite_net
healthcheck:
test: [ "CMD-SHELL", "mysqladmin ping -h localhost -u root -p${DB_ROOT_PASSWORD:-rootpassword}" ]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: appwrite-redis
networks:
- appwrite_net
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 5s
retries: 5
networks:
appwrite_net:
driver: bridge
volumes:
appwrite_db_data:
name: appwrite_db_data
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/appwrite && cd /opt/appwrite
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `_APP_ENV` | `production` | No |
| `_APP_DB_HOST` | `db` | No |
| `_APP_DB_USER` | `appwrite` | No |
| `_APP_DB_PASS` | `${DB_PASSWORD:-password}` | No |
| `_APP_REDIS_HOST` | `redis` | No |
| `DB_PASSWORD` | `password` | No |
| `DB_ROOT_PASSWORD` | `rootpassword` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs appwrite | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Appwrite on AltStack Directory](https://thealtstack.com/alternative-to/appwrite)
- [Appwrite Self-Hosted Guide](https://thealtstack.com/self-hosted/appwrite)
- [Official Documentation](https://appwrite.io)
- [GitHub Repository](https://github.com/appwrite/appwrite)

View File

@@ -0,0 +1,172 @@
---
title: "Deploy Authentik Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Authentik with Docker Compose. "
---
# Deploy Authentik
The overall-best open-source identity provider, focused on flexibility and versatility.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 15.0k stars</span>
<span className="deploy-hero-item">📜 MIT</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Authentik instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Authentik and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
server:
image: ghcr.io/goauthentik/server:latest
container_name: authentik-server
restart: unless-stopped
command: server
depends_on:
- db
- redis
ports:
- "9000:9000"
- "9443:9443"
environment:
- AUTHENTIK_REDIS__HOST=redis
- AUTHENTIK_POSTGRESQL__HOST=db
- AUTHENTIK_POSTGRESQL__USER=authentik
- AUTHENTIK_POSTGRESQL__NAME=authentik
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik
- AUTHENTIK_SECRET_KEY=generate-a-random-secret-key
worker:
image: ghcr.io/goauthentik/server:latest
container_name: authentik-worker
restart: unless-stopped
command: worker
depends_on:
- db
- redis
environment:
- AUTHENTIK_REDIS__HOST=redis
- AUTHENTIK_POSTGRESQL__HOST=db
- AUTHENTIK_POSTGRESQL__USER=authentik
- AUTHENTIK_POSTGRESQL__NAME=authentik
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik
- AUTHENTIK_SECRET_KEY=generate-a-random-secret-key
db:
image: postgres:12-alpine
container_name: authentik-db
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=authentik
- POSTGRES_USER=authentik
- POSTGRES_DB=authentik
volumes:
- authentik_db_data:/var/lib/postgresql/data
redis:
image: redis:6-alpine
container_name: authentik-redis
restart: unless-stopped
volumes:
authentik_db_data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/authentik && cd /opt/authentik
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `AUTHENTIK_REDIS__HOST` | `redis` | No |
| `AUTHENTIK_POSTGRESQL__HOST` | `db` | No |
| `AUTHENTIK_POSTGRESQL__USER` | `authentik` | No |
| `AUTHENTIK_POSTGRESQL__NAME` | `authentik` | No |
| `AUTHENTIK_POSTGRESQL__PASSWORD` | `authentik` | No |
| `AUTHENTIK_SECRET_KEY` | `generate-a-random-secret-key` | No |
| `POSTGRES_PASSWORD` | `authentik` | No |
| `POSTGRES_USER` | `authentik` | No |
| `POSTGRES_DB` | `authentik` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs authentik | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Authentik on AltStack Directory](https://thealtstack.com/alternative-to/authentik)
- [Authentik Self-Hosted Guide](https://thealtstack.com/self-hosted/authentik)
- [Official Documentation](https://goauthentik.io)
- [GitHub Repository](https://github.com/goauthentik/authentik)

View File

@@ -0,0 +1,117 @@
---
title: "Deploy Bitwarden Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Bitwarden with Docker Compose. "
---
# Deploy Bitwarden
Bitwarden infrastructure/backend (API, database, Docker, etc).
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 18.0k stars</span>
<span className="deploy-hero-item">📜 Other</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Bitwarden instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Bitwarden and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
bitwarden:
image: vaultwarden/server:latest
container_name: bitwarden
restart: unless-stopped
ports:
- "8088:80"
volumes:
- bw-data:/data
volumes:
bw-data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/bitwarden && cd /opt/bitwarden
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs bitwarden | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Bitwarden on AltStack Directory](https://thealtstack.com/alternative-to/bitwarden)
- [Bitwarden Self-Hosted Guide](https://thealtstack.com/self-hosted/bitwarden)
- [Official Documentation](https://bitwarden.com)
- [GitHub Repository](https://github.com/bitwarden/server)

View File

@@ -0,0 +1,112 @@
---
title: "Deploy Cal.com Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Cal.com with Docker Compose. "
---
# Deploy Cal.com
The open-source Calendly alternative. Take control of your scheduling.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 30.0k stars</span>
<span className="deploy-hero-item">📜 AGPL-3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Cal.com instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Cal.com and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
calcom:
image: calcom/cal.com:latest
container_name: calcom
restart: unless-stopped
ports:
- "3000:3000"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/calcom && cd /opt/calcom
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs calcom | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Cal.com on AltStack Directory](https://thealtstack.com/alternative-to/calcom)
- [Cal.com Self-Hosted Guide](https://thealtstack.com/self-hosted/calcom)
- [Official Documentation](https://cal.com)
- [GitHub Repository](https://github.com/calcom/cal.com)

View File

@@ -0,0 +1,112 @@
---
title: "Deploy Chaskiq Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Chaskiq with Docker Compose. "
---
# Deploy Chaskiq
Open source conversational marketing platform alternative to Intercom and Drift.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 4.0k stars</span>
<span className="deploy-hero-item">📜 GPL-3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Chaskiq instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Chaskiq and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
chaskiq:
image: chaskiq/chaskiq:latest
container_name: chaskiq
restart: unless-stopped
ports:
- "3000:3000"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/chaskiq && cd /opt/chaskiq
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs chaskiq | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Chaskiq on AltStack Directory](https://thealtstack.com/alternative-to/chaskiq)
- [Chaskiq Self-Hosted Guide](https://thealtstack.com/self-hosted/chaskiq)
- [Official Documentation](https://chaskiq.io)
- [GitHub Repository](https://github.com/chaskiq/chaskiq)

View File

@@ -0,0 +1,144 @@
---
title: "Deploy Coder Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Coder with Docker Compose. "
---
# Deploy Coder
Provision software development environments as code on your infrastructure.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 20.0k stars</span>
<span className="deploy-hero-item">📜 AGPL-3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Coder instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Coder and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
coder:
image: ghcr.io/coder/coder:latest
container_name: coder
restart: unless-stopped
depends_on:
- db
ports:
- "7080:7080"
environment:
- CODER_PG_CONNECTION_URL=postgresql://coder:coder@db:5432/coder
- CODER_ACCESS_URL=http://localhost:7080
- CODER_HTTP_ADDRESS=0.0.0.0:7080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
db:
image: postgres:13
container_name: coder-db
restart: unless-stopped
environment:
- POSTGRES_USER=coder
- POSTGRES_PASSWORD=coder
- POSTGRES_DB=coder
volumes:
- coder_db_data:/var/lib/postgresql/data
volumes:
coder_db_data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/coder && cd /opt/coder
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `CODER_PG_CONNECTION_URL` | `postgresql://coder:coder@db:5432/coder` | No |
| `CODER_ACCESS_URL` | `http://localhost:7080` | No |
| `CODER_HTTP_ADDRESS` | `0.0.0.0:7080` | No |
| `POSTGRES_USER` | `coder` | No |
| `POSTGRES_PASSWORD` | `coder` | No |
| `POSTGRES_DB` | `coder` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs coder | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Coder on AltStack Directory](https://thealtstack.com/alternative-to/coder)
- [Coder Self-Hosted Guide](https://thealtstack.com/self-hosted/coder)
- [Official Documentation](https://coder.com)
- [GitHub Repository](https://github.com/coder/coder)

View File

@@ -0,0 +1,112 @@
---
title: "Deploy Continue Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Continue with Docker Compose. "
---
# Deploy Continue
Open-source AI code assistant for VS Code and JetBrains. Use any model (local or API).
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 25.0k stars</span>
<span className="deploy-hero-item">📜 Apache License 2.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Continue instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Continue and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
continue:
image: continuedev/continue:latest
container_name: continue
restart: unless-stopped
ports:
- "8080:8080"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/continue-dev && cd /opt/continue-dev
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs continue-dev | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Continue on AltStack Directory](https://thealtstack.com/alternative-to/continue-dev)
- [Continue Self-Hosted Guide](https://thealtstack.com/self-hosted/continue-dev)
- [Official Documentation](https://continue.dev)
- [GitHub Repository](https://github.com/continuedev/continue)

View File

@@ -0,0 +1,171 @@
---
title: "Deploy Coolify Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Coolify with Docker Compose. "
---
# Deploy Coolify
An open-source, self-hostable PaaS alternative to Vercel, Heroku & Netlify that lets you easily deploy static sites, databases, full-stack applications and 280+ one-click services on your own servers.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 50.4k stars</span>
<span className="deploy-hero-item">📜 Apache License 2.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
A fully operational Coolify instance. Think of Coolify as a self-hosted Vercel or Heroku. Once installed, it manages your other Docker containers, handles deployments from GitHub/GitLab, and provides an integrated reverse proxy.
> 🚀 **Self-Hosting Level:** If you only deploy one thing, let it be Coolify. It makes deploying everything else 10x easier.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Coolify and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
# Docker Compose for Coolify
# Note: Coolify is a self-hosted PaaS.
version: '3.8'
services:
coolify:
image: ghcr.io/coollabsio/coolify:latest
container_name: coolify
ports:
- "8000:8000"
environment:
- APP_ENV=production
- DB_CONNECTION=pgsql
- DB_HOST=db
- DB_DATABASE=coolify
- DB_USERNAME=coolify
- DB_PASSWORD=${DB_PASSWORD:-password}
volumes:
- coolify_data:/var/www/html/storage
- /var/run/docker.sock:/var/run/docker.sock # Essential for controlling Docker
depends_on:
db:
condition: service_healthy
networks:
- coolify_net
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8000/api/health" ]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
db:
image: postgres:15-alpine
container_name: coolify-db
environment:
POSTGRES_USER: coolify
POSTGRES_PASSWORD: ${DB_PASSWORD:-password}
POSTGRES_DB: coolify
volumes:
- coolify_db_data:/var/lib/postgresql/data
networks:
- coolify_net
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U coolify" ]
interval: 5s
timeout: 5s
retries: 5
networks:
coolify_net:
driver: bridge
volumes:
coolify_data:
name: coolify_data
coolify_db_data:
name: coolify_db_data
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/coolify && cd /opt/coolify
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `APP_ENV` | `production` | No |
| `DB_CONNECTION` | `pgsql` | No |
| `DB_HOST` | `db` | No |
| `DB_DATABASE` | `coolify` | No |
| `DB_USERNAME` | `coolify` | No |
| `DB_PASSWORD` | `${DB_PASSWORD:-password}` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs coolify | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Coolify on AltStack Directory](https://thealtstack.com/alternative-to/coolify)
- [Coolify Self-Hosted Guide](https://thealtstack.com/self-hosted/coolify)
- [Official Documentation](https://coolify.io)
- [GitHub Repository](https://github.com/coollabsio/coolify)

View File

@@ -0,0 +1,117 @@
---
title: "Deploy DeepSeek-V3 / R1 Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting DeepSeek-V3 / R1 with Docker Compose. Replaces: meta-llama-3-1, mistral, qwen-2-5."
---
# Deploy DeepSeek-V3 / R1
Powerful open-source models including V3 (671B) and R1 (Reasoning). Rivals GPT-4o and o1.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 110.0k stars</span>
<span className="deploy-hero-item">📜 MIT License</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working DeepSeek-V3 / R1 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for DeepSeek-V3 / R1 and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
ollama-deepseek:
image: ollama/ollama:latest
container_name: ollama-deepseek
restart: unless-stopped
ports:
- "11435:11434"
volumes:
- ollama_deepseek:/root/.ollama
volumes:
ollama_deepseek:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/deepseek && cd /opt/deepseek
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs deepseek | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [DeepSeek-V3 / R1 on AltStack Directory](https://thealtstack.com/alternative-to/deepseek)
- [DeepSeek-V3 / R1 Self-Hosted Guide](https://thealtstack.com/self-hosted/deepseek)
- [Official Documentation](https://deepseek.com)
- [GitHub Repository](https://github.com/deepseek-ai/DeepSeek-V3)

View File

@@ -0,0 +1,142 @@
---
title: "Deploy Documenso Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Documenso with Docker Compose. "
---
# Deploy Documenso
The open-source DocuSign alternative. We aim to be the world's most trusted document signing platform.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 8.0k stars</span>
<span className="deploy-hero-item">📜 AGPL-3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Documenso instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Documenso and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
documenso:
image: documenso/documenso:latest
container_name: documenso
restart: unless-stopped
depends_on:
- db
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://documenso:documenso@db:5432/documenso
- NEXTAUTH_URL=http://localhost:3000
- NEXTAUTH_SECRET=supersecret
db:
image: postgres:15-alpine
container_name: documenso-db
restart: unless-stopped
environment:
- POSTGRES_USER=documenso
- POSTGRES_PASSWORD=documenso
- POSTGRES_DB=documenso
volumes:
- documenso_db_data:/var/lib/postgresql/data
volumes:
documenso_db_data:
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/documenso && cd /opt/documenso
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Environment Variables
| Variable | Default | Required |
|---|---|---|
| `DATABASE_URL` | `postgresql://documenso:documenso@db:5432/documenso` | No |
| `NEXTAUTH_URL` | `http://localhost:3000` | No |
| `NEXTAUTH_SECRET` | `supersecret` | No |
| `POSTGRES_USER` | `documenso` | No |
| `POSTGRES_PASSWORD` | `documenso` | No |
| `POSTGRES_DB` | `documenso` | No |
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs documenso | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Documenso on AltStack Directory](https://thealtstack.com/alternative-to/documenso)
- [Documenso Self-Hosted Guide](https://thealtstack.com/self-hosted/documenso)
- [Official Documentation](https://documenso.com)
- [GitHub Repository](https://github.com/documenso/documenso)

View File

@@ -0,0 +1,114 @@
---
title: "Deploy Dokku Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting Dokku with Docker Compose. "
---
# Deploy Dokku
A docker-powered PaaS that helps you build and manage the lifecycle of applications
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 31.9k stars</span>
<span className="deploy-hero-item">📜 MIT License</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working Dokku instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for Dokku and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
dokku:
image: dokku/dokku:latest
container_name: dokku
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "22:22"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/dokku && cd /opt/dokku
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs dokku | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [Dokku on AltStack Directory](https://thealtstack.com/alternative-to/dokku)
- [Dokku Self-Hosted Guide](https://thealtstack.com/self-hosted/dokku)
- [Official Documentation](https://dokku.com)
- [GitHub Repository](https://github.com/dokku/dokku)

View File

@@ -0,0 +1,112 @@
---
title: "Deploy ERPNext Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting ERPNext with Docker Compose. "
---
# Deploy ERPNext
A free and open-source integrated Enterprise Resource Planning (ERP) software.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 31.6k stars</span>
<span className="deploy-hero-item">📜 GNU General Public License v3.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working ERPNext instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for ERPNext and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
erpnext:
image: frappe/erpnext-worker:latest
container_name: erpnext
restart: unless-stopped
ports:
- "8000:8000"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/erpnext && cd /opt/erpnext
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs erpnext | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [ERPNext on AltStack Directory](https://thealtstack.com/alternative-to/erpnext)
- [ERPNext Self-Hosted Guide](https://thealtstack.com/self-hosted/erpnext)
- [Official Documentation](https://erpnext.com)
- [GitHub Repository](https://github.com/frappe/erpnext)

View File

@@ -0,0 +1,112 @@
---
title: "Deploy FLUX Self-Hosted (Docker)"
description: "Step-by-step guide to self-hosting FLUX with Docker Compose. "
---
# Deploy FLUX
Next-gen open image generation model from Black Forest Labs. State-of-the-art quality rivaling Midjourney.
<div className="deploy-hero">
<span className="deploy-hero-item">⭐ 20.0k stars</span>
<span className="deploy-hero-item">📜 Apache License 2.0</span>
<span className="deploy-hero-item">🔴 Advanced</span>
<span className="deploy-hero-item">⏱ ~20 minutes</span>
</div>
<div className="mt-8 mb-4">
<a
href="https://m.do.co/c/2ed27757a361"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
>
🚀 Deploy on DigitalOcean ($200 Free Credit)
</a>
</div>
## What You'll Get
A fully working FLUX instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
## Prerequisites
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
- A domain name pointed to your server (optional but recommended)
- Basic terminal access (SSH)
## The Config
Create a directory for FLUX and add this `docker-compose.yml`:
```yaml
# -------------------------------------------------------------------------
# 🚀 Created and distributed by The AltStack
# 🌍 https://thealtstack.com
# -------------------------------------------------------------------------
version: '3.8'
services:
flux:
image: blackforestlabs/flux:latest
container_name: flux
restart: unless-stopped
ports:
- "8000:8000"
```
## Let's Ship It
```bash
# Create a directory
mkdir -p /opt/flux && cd /opt/flux
# Create the docker-compose.yml (paste the config above)
nano docker-compose.yml
# Pull images and start
docker compose up -d
# Watch the logs
docker compose logs -f
```
## Post-Deployment Checklist
- [ ] Service is accessible on the configured port
- [ ] Admin account created (if applicable)
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
- [ ] SSL/HTTPS working
- [ ] Backup script set up ([backup guide](/concepts/backups))
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
## The "I Broke It" Section
**Container won't start?**
```bash
docker compose logs flux | tail -50
```
**Port already in use?**
```bash
# Find what's using the port
lsof -i :PORT_NUMBER
```
**Need to start fresh?**
```bash
docker compose down -v # ⚠️ This deletes volumes/data!
docker compose up -d
```
## Going Further
- [FLUX on AltStack Directory](https://thealtstack.com/alternative-to/flux)
- [FLUX Self-Hosted Guide](https://thealtstack.com/self-hosted/flux)
- [Official Documentation](https://blackforestlabs.ai)
- [GitHub Repository](https://github.com/black-forest-labs/flux)

Some files were not shown because too many files have changed in this diff Show More