Skip to content
Back to skills

Homepage Dashboard Integration

ASecurity

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.

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 1, 2026
devopsdocker

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add jimmybish/homelab --skill homepage-dashboard-integration --agent claude-code

Installs 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 with every re-scan.

Security grade badge for Homepage Dashboard Integration
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jimmybish-homepage-dashboard-integration/badge)](https://www.skillsdirectory.com/skills/jimmybish-homepage-dashboard-integration)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

**CRITICAL: Each Homepage section (Slop, Media, Smart Home, Infra, ARR, etc.) must use ONE consistent indentation style throughout. Mixing 2-space and 4-space list items in the same section triggers `bad indentation of a sequence entry` and prevents `services.yaml` from loading at all — Homepage shows no services.**

Before creating a new template, check the target section's existing entries and match them exactly:

- **Media section** currently uses 2-space list items / 6-space properties
- **Slop, Smart Home, Infra, ARR sections** currently use 4-space list items / 8-space properties

Both styles are valid YAML; the requirement is consistency within a section.

**2-space style** (for the Media section):

```yaml
  - <Service Name>:
      icon: <service>.png
      href: {{ internal_<service>_url }}
      description: Service description
      widget:
        type: <service>
        url: {{ internal_<service>_url }}
        key: {{ homepage_<service>_key }}
```

**4-space style** (for Slop, Smart Home, Infra, ARR):

```yaml
    - <Service Name>:
        icon: <service>.png
        href: {{ internal_<service>_url }}
        description: Service description
```

After adding a new service, verify the merged `services.yaml` on the Homepage host and check `docker logs homepage --tail 20` for `YAMLException` errors.

## 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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.