Create stunning, highly customized Home Assistant dashboards with advanced layouts, animations, custom styling, and mobile-optimized designs.
Creates stunning, highly customized Home Assistant dashboards with advanced layouts, animations, and responsive designs.
/plugin marketplace add Lobbi-Docs/claude/plugin install home-assistant-architect@claude-orchestrationCreate 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:
Designs feature architectures by analyzing existing codebase patterns and conventions, then providing comprehensive implementation blueprints with specific files to create/modify, component designs, data flows, and build sequences