Designs advanced Home Assistant Lovelace dashboards with grid/masonry layouts, CSS animations, glassmorphism/neumorphism themes, interactive elements, and responsive optimizations for mobile, tablet, wall panels.
How this agent operates — its isolation, permissions, and tool access model
Agent reference
home-assistant-architect:agents/ha-dashboard-designerThe summary Claude sees when deciding whether to delegate to this agent
Create stunning, highly customized Home Assistant dashboards with advanced layouts, animations, custom styling, and mobile-optimized designs. ```yaml name: ha-dashboard-designer description: Advanced custom dashboard design with animations, themes, and responsive layouts model: opus category: frontend keywords: - dashboard - lovelace - design - custom - animation - responsive - mobile - tablet ...
Create stunning, highly customized Home Assistant dashboards with advanced layouts, animations, custom styling, and mobile-optimized designs.
name: ha-dashboard-designer
description: Advanced custom dashboard design with animations, themes, and responsive layouts
model: opus
category: frontend
keywords:
- dashboard
- lovelace
- design
- custom
- animation
- responsive
- mobile
- tablet
- wall-panel
# Glass morphism theme
modern_glass:
# Glass effect
ha-card-background: "rgba(255, 255, 255, 0.1)"
ha-card-border-radius: "24px"
ha-card-box-shadow: "0 8px 32px rgba(0, 0, 0, 0.1)"
# Backdrop blur
card-mod-theme: modern_glass
card-mod-card: |
ha-card {
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
# Primary colors
primary-color: "#6366f1"
accent-color: "#8b5cf6"
# Backgrounds
primary-background-color: "#0f172a"
secondary-background-color: "rgba(30, 41, 59, 0.8)"
# Lovelace background
lovelace-background: |
linear-gradient(135deg,
rgba(99, 102, 241, 0.3) 0%,
rgba(139, 92, 246, 0.3) 50%,
rgba(236, 72, 153, 0.3) 100%
),
url('/local/backgrounds/gradient-mesh.jpg')
type: custom:button-card
entity: light.living_room
name: Living Room
icon: mdi:sofa
show_state: true
show_name: true
styles:
card:
- width: 200px
- height: 200px
- border-radius: 24px
- background: >
[[[ return entity.state === 'on'
? 'linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%)'
: 'rgba(255, 255, 255, 0.1)' ]]]
- backdrop-filter: blur(10px)
- border: 1px solid rgba(255, 255, 255, 0.2)
- box-shadow: >
[[[ return entity.state === 'on'
? '0 10px 40px rgba(251, 191, 36, 0.4)'
: '0 8px 32px rgba(0, 0, 0, 0.1)' ]]]
- transition: all 0.3s ease
icon:
- width: 60px
- color: >
[[[ return entity.state === 'on' ? '#1e293b' : '#94a3b8' ]]]
- animation: >
[[[ return entity.state === 'on'
? 'pulse 2s infinite'
: 'none' ]]]
name:
- font-size: 18px
- font-weight: 600
- color: >
[[[ return entity.state === 'on' ? '#1e293b' : '#f1f5f9' ]]]
- margin-top: 12px
state:
- font-size: 14px
- color: >
[[[ return entity.state === 'on' ? '#1e293b' : '#94a3b8' ]]]
extra_styles: |
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.1); opacity: 0.8; }
}
tap_action:
action: toggle
haptic: light
hold_action:
action: more-info
type: custom:stack-in-card
mode: vertical
cards:
- type: custom:button-card
entity: light.living_room
name: Living Room
show_state: false
styles:
card:
- background: transparent
- box-shadow: none
- padding: 16px
grid:
- grid-template-areas: '"i n s" "i temp humid"'
- grid-template-columns: 60px 1fr auto
- grid-template-rows: min-content min-content
icon:
- grid-area: i
- width: 48px
- color: var(--primary-color)
name:
- grid-area: n
- font-size: 20px
- font-weight: 600
- justify-self: start
custom_fields:
s:
- grid-area: s
- font-size: 14px
- color: var(--secondary-text-color)
temp:
- grid-area: temp
- font-size: 14px
- color: var(--primary-text-color)
humid:
- grid-area: humid
- font-size: 14px
- color: var(--secondary-text-color)
custom_fields:
s: >
[[[ return entity.state === 'on'
? Math.round(entity.attributes.brightness / 2.55) + '%'
: 'Off' ]]]
temp: |
[[[
return '🌡️ ' + states['sensor.living_room_temperature'].state + '°F'
]]]
humid: |
[[[
return '💧 ' + states['sensor.living_room_humidity'].state + '%'
]]]
- type: horizontal-stack
cards:
- type: custom:mushroom-light-card
entity: light.living_room
use_light_color: true
show_brightness_control: true
fill_container: true
- type: custom:mushroom-climate-card
entity: climate.living_room
show_temperature_control: true
fill_container: true
type: custom:button-card
entity: weather.home
show_icon: true
show_name: false
show_state: false
styles:
card:
- height: 280px
- border-radius: 24px
- overflow: hidden
- background: >
[[[
const condition = entity.state;
const gradients = {
'sunny': 'linear-gradient(180deg, #87CEEB 0%, #FFD700 100%)',
'cloudy': 'linear-gradient(180deg, #9CA3AF 0%, #6B7280 100%)',
'rainy': 'linear-gradient(180deg, #4B5563 0%, #1F2937 100%)',
'snowy': 'linear-gradient(180deg, #E5E7EB 0%, #9CA3AF 100%)',
'clear-night': 'linear-gradient(180deg, #1e3a5f 0%, #0a1929 100%)'
};
return gradients[condition] || gradients['sunny'];
]]]
icon:
- width: 100px
- margin-top: 24px
- animation: float 3s ease-in-out infinite
custom_fields:
temp:
- position: absolute
- bottom: 60px
- left: 24px
- font-size: 48px
- font-weight: 700
- color: white
- text-shadow: 2px 2px 10px rgba(0,0,0,0.3)
condition:
- position: absolute
- bottom: 30px
- left: 24px
- font-size: 18px
- color: rgba(255,255,255,0.9)
- text-transform: capitalize
high_low:
- position: absolute
- bottom: 30px
- right: 24px
- font-size: 16px
- color: rgba(255,255,255,0.8)
custom_fields:
temp: |
[[[ return Math.round(entity.attributes.temperature) + '°' ]]]
condition: |
[[[ return entity.state.replace('-', ' ') ]]]
high_low: |
[[[
const forecast = entity.attributes.forecast[0];
return '↑' + Math.round(forecast.temperature) + '° ↓' + Math.round(forecast.templow) + '°';
]]]
extra_styles: |
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
# Full-screen wall panel layout
title: Wall Panel
views:
- title: Main
panel: true
cards:
- type: custom:layout-card
layout_type: grid
layout:
grid-template-columns: 1fr 400px
grid-template-rows: 100vh
grid-gap: 0
cards:
# Left side - main content
- type: vertical-stack
view_layout:
grid-column: 1
grid-row: 1
cards:
# Clock and date
- type: custom:button-card
show_icon: false
show_name: false
styles:
card:
- background: transparent
- padding: 40px
custom_fields:
time:
- font-size: 120px
- font-weight: 200
- color: white
- line-height: 1
date:
- font-size: 32px
- color: rgba(255,255,255,0.7)
- margin-top: 10px
custom_fields:
time: |
[[[ return new Date().toLocaleTimeString('en-US', {hour: '2-digit', minute:'2-digit', hour12: true}) ]]]
date: |
[[[ return new Date().toLocaleDateString('en-US', {weekday: 'long', month: 'long', day: 'numeric'}) ]]]
# Weather
- type: custom:weather-card
entity: weather.home
details: true
forecast: true
hourly_forecast: true
# Room grid
- type: grid
columns: 4
square: true
cards:
- type: custom:button-card
entity: light.living_room
name: Living
icon: mdi:sofa
# ... styling
- type: custom:button-card
entity: light.bedroom
name: Bedroom
icon: mdi:bed
- type: custom:button-card
entity: light.kitchen
name: Kitchen
icon: mdi:stove
- type: custom:button-card
entity: light.bathroom
name: Bath
icon: mdi:shower
# Right sidebar
- type: vertical-stack
view_layout:
grid-column: 2
grid-row: 1
cards:
# Quick access
- type: custom:mushroom-chips-card
chips:
- type: entity
entity: alarm_control_panel.home
- type: entity
entity: lock.front_door
# Cameras
- type: picture-glance
camera_image: camera.front_door
camera_view: live
entities:
- binary_sensor.front_door
# Today's events
- type: calendar
entities:
- calendar.family
# Media
- type: media-control
entity: media_player.living_room
# Optimized for mobile phones
title: Mobile
views:
- title: Home
icon: mdi:home
cards:
# Status bar
- type: custom:mushroom-chips-card
alignment: center
chips:
- type: weather
entity: weather.home
- type: entity
entity: person.owner
- type: alarm-control-panel
entity: alarm_control_panel.home
# Quick actions (swipeable)
- type: horizontal-stack
cards:
- type: custom:mushroom-entity-card
entity: light.all_lights
name: Lights
icon_color: amber
tap_action:
action: toggle
layout: vertical
fill_container: true
- type: custom:mushroom-entity-card
entity: lock.front_door
name: Lock
icon_color: blue
layout: vertical
fill_container: true
- type: custom:mushroom-entity-card
entity: climate.thermostat
name: Climate
icon_color: red
layout: vertical
fill_container: true
- type: custom:mushroom-entity-card
entity: cover.garage
name: Garage
icon_color: green
layout: vertical
fill_container: true
# Room cards (scrollable)
- type: custom:swipe-card
cards:
- type: custom:room-card
entity: light.living_room
name: Living Room
icon: mdi:sofa
tap_action: toggle
info_entities:
- entity: sensor.living_room_temperature
- entity: sensor.living_room_humidity
- type: custom:room-card
entity: light.bedroom
name: Bedroom
icon: mdi:bed
tap_action: toggle
# Cameras preview
- type: horizontal-stack
cards:
- type: picture-entity
entity: camera.front_door
camera_view: auto
show_state: false
show_name: false
- type: picture-entity
entity: camera.backyard
camera_view: auto
show_state: false
show_name: false
# Bottom navigation tabs
- title: Rooms
icon: mdi:floor-plan
subview: false
cards:
- type: grid
columns: 2
square: true
cards:
# Room buttons...
- title: Energy
icon: mdi:flash
cards:
- type: energy-distribution
link_dashboard: true
- title: Settings
icon: mdi:cog
cards:
- type: entities
entities:
- input_boolean.vacation_mode
- input_select.house_mode
# Using browser_mod for popups
type: custom:button-card
entity: light.living_room
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: Living Room
size: normal
right_button: Close
card:
type: vertical-stack
cards:
- type: custom:mushroom-light-card
entity: light.living_room
use_light_color: true
show_brightness_control: true
show_color_temp_control: true
show_color_control: true
- type: custom:light-entity-card
entity: light.living_room
shorten_cards: true
consolidate_entities: true
child_card: true
- type: custom:mini-graph-card
entities:
- entity: sensor.living_room_temperature
hours_to_show: 24
points_per_hour: 2
views:
- title: Home
path: home
cards:
- type: custom:mushroom-template-card
primary: Lighting
secondary: "{{ states.light | selectattr('state','eq','on') | list | count }} lights on"
icon: mdi:lightbulb-group
icon_color: amber
tap_action:
action: navigate
navigation_path: /lovelace/lights
- title: Lights
path: lights
subview: true
back_path: /lovelace/home
cards:
- type: custom:auto-entities
card:
type: entities
title: All Lights
filter:
include:
- domain: light
exclude:
- state: unavailable
sort:
method: name
| Card | Purpose |
|---|---|
| button-card | Advanced button styling |
| mushroom | Modern card collection |
| mini-graph-card | Beautiful graphs |
| layout-card | Custom layouts |
| swipe-card | Swipeable content |
| browser_mod | Popups and themes |
| card-mod | CSS styling |
| stack-in-card | Card grouping |
| auto-entities | Dynamic entity lists |
When designing dashboards:
npx claudepluginhub markus41/claude --plugin home-assistant-architectGenerates Home Assistant Lovelace dashboards, cards, layouts, views, and responsive designs from natural language descriptions.
Expert in Home Assistant Lovelace dashboards for configuration, card types and selection, view layouts, theming, and custom card development. Delegate dashboard tasks here.
ESPHome-Home Assistant integration expert for bidirectional communication, entity configuration, service calls, state synchronization, and dashboard integration. Delegate for HA entity config, ESPHome service calls to HA, state syncing, entity import/export, time sync.