Use when: adding a service to the Homepage dashboard, creating homepage_service.yaml.j2 templates with correct YAML indentation, using blockinfile to insert service entries, or understanding the homepage/homepage_config tagging strategy for targeted playbook execution.
Scanned 9/1/2026
Install to Claude Code
npx -y skills add jimmybish/homelab --skill homepage-dashboard-integration --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Homepage Dashboard Integration?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jimmybish-homepage-dashboard-integration)More formats (shields.io, HTML) on the badges page.
---
name: homepage-dashboard-integration
description: 'Use when: adding a service to the Homepage dashboard, creating homepage_service.yaml.j2 templates with correct YAML indentation, using blockinfile to insert service entries, or understanding the homepage/homepage_config tagging strategy for targeted playbook execution.'
---
# Homepage Dashboard Integration
Patterns for adding services to the Homepage dashboard via Ansible, including template creation, indentation rules, blockinfile tasks, and the tagging strategy.
## When to Use
- A service has a web interface and needs to appear on the Homepage dashboard
- Creating a `homepage_service.yaml.j2` template for an Ansible role
- Adding or updating a `blockinfile` task for Homepage integration
- Understanding when to use `--tags homepage` vs `--tags homepage_config`
## Service Template
Create `ansible/templates/homepage/<service>_service.yaml.j2`. Templates are
playbook-level because both the service role and the centralized Homepage
rebuild use them.
Template checklist:
1. Check whether the service has a supported Homepage widget at `https://gethomepage.dev/widgets/`.
2. If no widget exists for the service, omit the `widget` block entirely.
3. Keep the YAML indentation exactly as shown below.
**With widget** (only if listed at `https://gethomepage.dev/widgets/`):
```yaml
- <Service Name>:
icon: <service>.png
href: {{ internal_<service>_url }}
description: Service description
widget:
type: <service>
url: {{ internal_<service>_url }}
key: {{ homepage_<service>_key }}
```
**Without widget** (service not listed on Homepage widgets page):
```yaml
- <Service Name>:
icon: <service>.png
href: {{ internal_<service>_url }}
description: Service description
```
### Indentation Rules
- List items (starting with `-`): 2 spaces under the top-level section
- Service properties (`icon`, `href`, etc.): 6 spaces
- Widget properties: 8 spaces
- Match the indentation of existing entries in the target section before deploying
## Role Integration Task
Add to `tasks/main.yaml` after DNS configuration:
```yaml
# Configure Homepage Services (REQUIRED for web interfaces)
- name: Add <Service Name> to Homepage <Section> section
ansible.builtin.include_tasks:
file: "{{ playbook_dir }}/tasks/homepage_add_service.yaml"
vars:
_homepage_service_name: <Service Name>
_homepage_marker: <service> service
_homepage_template: <service>_service.yaml.j2
_homepage_insertafter: "^- <Section>:"
when: <service>_configure_homepage | default(true)
tags:
- homepage
- homepage_config
- name: Notify Homepage restart for <service>
ansible.builtin.debug:
msg: "<service> homepage entry updated"
changed_when: _homepage_service_result is changed
notify:
- Restart Homepage
when: <service>_configure_homepage | default(true)
tags:
- homepage
- homepage_config
```
## Centralized Rebuild Registration
Every service integration MUST also be registered in
`ansible/tasks/homepage_populate_all_services.yaml`. Homepage can replace its
base `services.yaml` during deployment; this registry restores all managed
service blocks afterward. A role-only integration will disappear after such a
rebuild.
Add the service under its target section using the same marker, template,
insertion point, condition, and tags as the role task:
```yaml
- name: "Homepage config: <Service Name>"
ansible.builtin.include_tasks:
file: homepage_add_service.yaml
vars:
_homepage_service_name: <Service Name>
_homepage_marker: <service> service
_homepage_template: <service>_service.yaml.j2
_homepage_insertafter: "^- <Section>:"
when: <service>_configure_homepage | default(true)
tags:
- homepage
- homepage_config
```
## Important Notes
- **DO** use `homepage_add_service.yaml` in both the role and rebuild registry
- **DO** keep marker, template, insertion point, condition, and tags identical in both locations
- **DO** add the bridge notification task — ensures Homepage restarts when deploying a single service
- **DO NOT** add a check to skip if the block already exists — the shared `blockinfile` task updates it idempotently
- This allows the role to update Homepage entries when you add new services or modify descriptions
- The shared task's `blockinfile` operation only triggers changes when the block content differs
- All web interfaces MUST appear on Homepage for easy access
- When running `master_playbook.yaml --tags homepage_config`, handlers are flushed and one final restart occurs
## Tagging Strategy
All roles that integrate with Homepage use standardized tags to enable targeted playbook execution.
### Tag Definitions
**`homepage`** — Applied to all Homepage infrastructure and setup tasks
- Homepage role: All tasks (directory setup, Docker deployment, networking, DNS, proxy)
- Other roles: Homepage service integration tasks (blockinfile operations)
**`homepage_config`** — Applied to Homepage configuration file deployment tasks
- Homepage role: Config file deployment tasks (bookmarks, docker, services, settings, widgets)
- Other roles: Homepage service integration tasks (same as `homepage` tag)
### When to Use Tagged Execution
**Use `--tags homepage` when:**
- Adding a new service and want to update Homepage immediately
- Modifying Homepage service entries (descriptions, icons, widgets)
- Troubleshooting Homepage integration issues
- Re-deploying Homepage after configuration changes
- Updating every affected service entry after a shared Homepage template change
**Use `--tags homepage_config` when:**
- Only updating Homepage config files (settings, widgets, bookmarks)
- Making changes to Homepage base template without re-running service integrations
- Faster execution when infrastructure is already in place
**Use full playbook (no tags) when:**
- Initial deployment of new services
- Major infrastructure changes
- You want to ensure everything is in sync
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!