Documents new Coolify one-click services by creating markdown pages in docs/services/, downloading logos to docs/public/images/services/, and updating List.vue catalog...
This skill guides you through documenting a new service in the Coolify documentation repository.
The services listing is generated, not hand-edited. There is no manual catalog to maintain.
| Generator | Reads | Writes |
|---|---|---|
scripts/generate-service-list.mjs |
every docs/services/*.md frontmatter |
docs/.vitepress/theme/data/services.json (consumed by List.vue) |
scripts/generate-services-page.mjs |
every docs/services/*.md frontmatter |
docs/services/all.md |
Both scripts share scripts/services-data.mjs, which:
docs/public/images/services/ for files matching <slug>-logo, <slug>_logo, <slug>logo, the bare <slug>, or the same variants of the titleicon and no asset matchesdisabled: true or the body contains SERVICE HIDDEN | NOT AVAILABLE | REMOVED FROM COOLIFY | TEMPORARILY DISABLEDThe generators run automatically on bun run dev, bun run build, and bun run preview. You can also run them on demand with bun run generate:services.
templates/compose/)docs/public/images/services/ using a name the resolver will pick updocs/services/{service-slug}.md with the required frontmatter (title, description, category)bun run generate:services (or just bun run dev ā it runs the generators first)services.json and all.mdCoolify Repository (GitHub):
āāā templates/compose/
ā āāā service-name.yaml # Service template with metadata
āāā public/svgs/
āāā service-logo.svg # Service logo
https://github.com/coollabsio/coolify/tree/main/templates/compose
https://github.com/coollabsio/coolify/tree/main/public/svgs
Documentation Repository:
āāā docs/
ā āāā services/
ā ā āāā service-name.md # Service documentation page (you create)
ā ā āāā all.md # Generated ā DO NOT hand-edit
ā āāā public/images/services/
ā ā āāā service-logo.svg # Logo (you add)
ā āāā .vitepress/theme/
ā āāā data/services.json # Generated ā DO NOT hand-edit
ā āāā components/Services/
ā āāā List.vue # Renders services.json (no service entries inside it)
āāā scripts/
āāā generate-service-list.mjs
āāā generate-services-page.mjs
āāā services-data.mjs
You only edit two things; the rest is generated:
docs/services/{slug}.md) ā with frontmatterdocs/public/images/services/)After your edits, bun run generate:services produces:
docs/.vitepress/theme/data/services.jsondocs/services/all.mdCommit all four files together.
---
title: "Service Name"
description: "Short description used on the listing card and in all.md."
og:
description: "Optional longer SEO/social-card description."
category: "Analytics"
icon: "/docs/images/services/service-name-logo.svg"
---
| Field | Required | Purpose |
|---|---|---|
title |
yes | Card title; also name in services.json |
description |
yes | Card description and all.md entry |
category |
yes | Group heading in all.md; filter in the listing |
icon |
optional | Only needed when the auto-resolver can't find a matching logo |
og.description |
optional | Longer text for social cards |
disabled |
optional | true hides the service from the listing while keeping the page accessible |
Service-specific:
Shared guidelines:
docs/services/all.md or docs/.vitepress/theme/data/services.json ā both are regenerated and your changes will be overwritten.# ignore: true, don't document it. for the logo; use <ZoomableImage> only for screenshots.?utm_source=coolify.io to all external links.icon field. <slug>.svg, <slug>-logo.svg, or <slug>_logo.svg all work.# Regenerate listings explicitly (optional ā dev does this for you)
bun run generate:services
# Start dev server (runs generate:services first)
bun run dev
# Verify:
# - Service appears on the listing page (/docs/services/)
# - Logo displays
# - Service page loads at /docs/services/{slug}
# - Service appears under the right category in /docs/services/all
# - Category filter includes it
# Build for production
bun run build
Logo not showing:
docs/public/images/services/ and the basename matches one of the resolver candidates (<slug>, <slug>-logo, <slug>_logo, <slug>logo, <title>, <title>-logo).icon: explicitly in frontmatter using a /docs/images/services/... path./docs/images/services/ (not /public/).Service missing from the listing:
bun run generate:services and check the resulting services.json and all.md.title, description, and category.all.md, introduction.md, or overview.md ā those are excluded.disabled: true is not set, and that the body doesn't contain a hide pattern (SERVICE HIDDEN, NOT AVAILABLE, REMOVED FROM COOLIFY, TEMPORARILY DISABLED).Wrong category grouping in all.md:
category field is matched verbatim. See CATALOG.md for the existing list./new-services ā automated service documentation generatordocs/services/ for reference frontmatter shapes