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. Use when adding service documentation, creating service pages, onboarding services from templates/compose/, or updating the services catalog with new entries.
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下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer