Renames a service documentation file and updates all references across docs/services/, List.vue, and nginx/redirects.conf...
This skill guides you through renaming a service in the Coolify documentation, ensuring all references are updated correctly.
The slug used to live in three hand-edited places (the file, List.vue's services array, and all.md). With the new generation pipeline, the markdown filename is the slug, and the listing + all.md are regenerated from it. So renaming now touches:
docs/services/<old>.md → docs/services/<new>.md) — the slugdocs/public/images/services/) — only if you want it renamed toonginx/redirects.conf) — to keep old URLs workingdocs/ referencing the old slug)docs/.vitepress/theme/components/Services/List.vue, docs/.vitepress/theme/data/services.json, and docs/services/all.md are regenerated — do not hand-edit them.
git mv docs/services/old-name.md docs/services/new-name.md
Naming rules:
service-templates-latest.jsondenoKV → denokv.md)The icon resolver matches the file's basename against <slug>-logo, <slug>_logo, <slug>logo, and bare <slug>. After renaming the markdown:
icon: field in frontmatter pointing to the existing file.git mv docs/public/images/services/old-name-logo.svg docs/public/images/services/new-name-logo.svg
The slug isn't in frontmatter — it's the filename. But check:
icon: — if you set it explicitly to a path that included the old slug, update ittitle: — usually unchanged unless the rename also reflects a display-name changeExample:
---
title: "New Service Name" # update if the display name changed
description: "..."
category: "..."
icon: "/docs/images/services/new-name-logo.svg" # update if you set it explicitly
---
Edit nginx/redirects.conf:
# Redirect old service URL to new URL
location = /docs/services/old-name { return 301 /docs/services/new-name; }
# Also redirect legacy knowledge-base path if it existed
location = /knowledge-base/services/old-name { return 301 /docs/services/new-name; }
Keep redirects even for renamed/removed pages — they prevent 404s from search engines and bookmarks.
Search for references to the old slug:
grep -r "old-name" docs/
Update any found references. Be careful: the regenerated all.md and services.json will already have the new slug after step 6 — focus on hand-written cross-links in other docs pages.
bun run generate:services
This rewrites:
docs/.vitepress/theme/data/services.json (the entry now uses the new slug and, by extension, the new URL)docs/services/all.md (the entry's link now points to /services/new-name)Commit both alongside the rename.
After renaming, verify:
docs/services/new-name.mdgit mv)icon: frontmatter points to a real filenginx/redirects.confgrep -r "old-name" docs/ shows only intentional matches (e.g., the redirect itself)bun run generate:servicesservices.json and all.md use the new slughttp://localhost:5173/docs/services/new-nameCoolify's JSON sometimes uses camelCase, but docs slugs are always lowercase kebab-case:
denoKV → denokv.mdhomeAssistant → home-assistant.mdWhen Coolify adds version-specific services:
mautic.md → mautic5.md (if JSON specifies mautic5)When the upstream slug becomes more specific:
ente.md → ente-photos.mdnginx/redirects.confbun run generate:services and confirm services.json has the new slugredirects.conf<new-slug>-logo.<ext> or set icon: in frontmatterThis skill used to instruct you to update slug in List.vue's services array and to hand-edit docs/services/all.md. Both files are now generated from the markdown filename and frontmatter. Do not edit either by hand — run bun run generate:services instead.
adding-service-documentation — for creating new service docsdisabling-services — for hiding deprecated services