📱 Mobile First Dashboard - A minimalist and user-friendly UI for your dashboard

I am hoping someone can help me figure this out… I have been using a template on this which looks really good, I am trying to re-create parts of it in sections. last night after battling for days on getting the picture, temp, weather working on the header from the example, today I have tried to take the learning and implement it in a different dashboard using sections. But I am failing. Has anyone done this before or have the code, or able to look at my YAML and see where I am going wrong. here is my current code https://dpaste.org/DwwOj

I have the weather and temp fine, but the picture just is not showing, I think I can see it loading as I refresh though

After nearly giving up, trying to get this working in sections view, I decided to enlist the help of chat gpt, starting off with a working version of the sidebar view and nothing else I managed to get the same functionality working; almost, I have a slight line around the outside of the card which I can’t seem to resolve, but I think that will do for me to move into building out my cards. below is the image, footer seems to work

decluttering_templates:
  header_live_weather_background:
    card:
      type: custom:stack-in-card
      cards:
        - type: picture-glance
          entities: []
          image: https://images.pexels.com/photos/2470655/pexels-photo-2470655.jpeg
          card_mod:
            style: |
              ha-card {
                position: absolute;
                filter: blur(2px);
                border-radius: 0 !important;
                background: none;
                width: 1500px;
                top: 0px;
                right: 0px;
              }
      card_mod:
        style: |
          ha-card {
            position: relative !important;
            margin-bottom: -164px;
            height: 164px;
            margin-top: -8px;
            margin-left: -8px;
            margin-right: -8px;
            background: none;
            animation: opacity 0s ease-in;
            border-radius: 0 var(--ha-card-border-radius) 0 0;
          }
          ha-card:after {
            content: '';
            display: block;
            position: absolute;
            top: 0px;
            left: -180px;
            height: 170px;
            width: 1700px;
            background: radial-gradient(ellipse at 50% -100%, rgba(35, 46, 66, 0) 25%, rgba(35, 46, 66, 0.8) 55%, rgba(35, 46, 66, 1) 67%);
          }
          @media only screen and (max-width: 768px) {
            ha-card {
              border-radius: 0 !important;
            }
          }
          @keyframes opacity {
            0% { opacity: 0; }
            40% { opacity: 0; }
            100% { opacity: 1; }
          }
  header_temperature_graph:
    card:
      type: custom:mini-graph-card
      entities:
        - entity: sensor.lounge_temp_temperature
          color: null
      hours_to_show: 24
      hour24: true
      animate: true
      update_interval: 30
      aggregate_func: avg
      line_width: 1
      bar_spacing: 10
      height: 40
      group: true
      show:
        labels: false
        fill: false
        state: false
        name: false
        icon: false
      card_mod:
        style: |
          ha-card {
            height: 84px;
            position: absolute;
            box-shadow: none;
            background: none;
            border-radius: 0;
            opacity: 0.3;
            margin-bottom: -90px;
            margin-left: -0.6em;
            margin-right: -0.6em;
          }
  header_main:
    card:
      type: custom:paper-buttons-row
      styles:
        justify-content: space-between
        background: none
        margin: 24px 20px 16px
        text-shadow: 0px 0px 20px var(--card-background-color);
      buttons:
        - layout: name_state
          name: '{{ states(''sensor.day_eng'') }}, {{ states(''sensor.date_eng'') }}'
          state: '{{ now().strftime(''%H'') }}:{{ now().strftime(''%M'')}}'
          styles:
            name:
              font-weight: 400
              font-size: 16px
              margin-left: 0
              display: block
              text-align: left
              float: left
              width: 140px
            button:
              pointer-events: none
              align-items: left
              width: 140px
              line-height: 1.6em
            state:
              font-weight: 700
              font-size: 30px
              letter-spacing: '-1px'
              margin-left: 0
              display: block
              text-align: left
              float: left
              width: 140px
        - layout: icon|name_state
          name: ⌂ {{ states('sensor.openweathermap_temperature') }}°C
          state: '{{ state_attr(''weather.openweathermap'',''temperature'') }}°C'
          image: |
            {% set mapper =
              { 'breezy':'cloudy',
                'clear-night':'night',
                'clear':'day',
                'mostly-clear':'day',
                'clear-day':'day',
                'cloudy':'cloudy',
                'fog':'fog',
                'hail':'rainy-7',
                'haze':'haze',
                'lightning':'thunder',
                'mostly-cloudy':'cloudy',
                'partlycloudy':'cloudy-day-3',
                'partly-cloudy-day':'partly-cloudy-day',
                'partly-cloudy-night':'partly-cloudy-night',
                'rain':'rainy-4',
                'scattered-showers':'rainy-3',
                'showers':'rainy-6',
                'sleet':'sleet',
                'snow':'snowy-6',
                'mostly-sunny':'day',
                'sunny':'day',
                'thunderstorm':'thunder',
                'tornado':'tornado',
                'wind':'wind',
                'windy':'wind'} %}
            {% set state = states('weather.openweathermap') %}
            {% set weather = mapper[state] if state in mapper else 'weather' %}
            {% set path = '/local/icons/weather_icons/animated/' %}
            {% set ext = '.svg'%}
              {{[path,weather,ext]|join('')}}
          styles:
            name:
              font-weight: 400
              font-size: 16px
              margin-left: 0
              display: block
              text-align: right
              width: 140px
            button:
              pointer-events: none
              align-items: right
              width: 140px
              line-height: 1.6em
            state:
              font-weight: 600
              font-size: 30px
              letter-spacing: '-1px'
              margin-left: 0
              display: block
              text-align: right
              width: 140px
            icon:
              position: absolute
              left: 2px
              transform: scale(0.17)
              transform-origin: 0 19.5%
              top: '-48px;'
              padding: 0;
              height: 380px !important;
              width: 380px !important;
  footer_sticky_menu:
    card:
      type: entities
      entities:
        - type: custom:paper-buttons-row
          buttons:
            - layout: icon
              icon: mdi:home-circle-outline
              name: Volets
              tap_action:
                action: navigate
                navigation_path: '#house'
              style:
                button:
                  width: 42px
                  height: 42px
                icon:
                  margin-top: 0
                name:
                  margin-top: 20px
            - layout: icon
              icon: mdi:lightbulb-group
              name: Liste
              tap_action:
                action: navigate
                navigation_path: '#alllights'
              style:
                button:
                  width: 42px
                  height: 42px
                icon:
                  margin-top: 0
                name:
                  margin-top: 20px
            - icon: mdi:video
              layout: icon
              name: Sécurité
              tap_action:
                action: navigate
                navigation_path: '#security'
              style:
                button:
                  width: 42px
                  height: 42px
                icon:
                  margin-top: 0
                name:
                  margin-top: 20px
            - layout: icon
              icon: mdi:thermostat
              name: Heating
              tap_action:
                action: navigate
                navigation_path: '#heating'
              style:
                button:
                  width: 42px
                  height: 42px
                icon:
                  margin-top: 0
                name:
                  margin-top: 20px
          card_mod:
            style: |
              div.flex-box {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin: -14px !important;   
              }
      card_mod:
        style: |
          ha-card { 
            margin-bottom: 10px !important;
            padding: 0 16px;
            border-radius: 34px !important;
            margin-left: 20px;
            margin-right: 20px;
          }
views:
  - title: Home
    theme: noctis
    type: sections
    sections:
      - type: grid
        cards:
          - type: custom:layout-card
            layout: vertical
            cards:
              - type: custom:stack-in-card
                cards:
                  - type: custom:decluttering-card
                    template: header_live_weather_background
                  - type: custom:decluttering-card
                    template: header_temperature_graph
                  - type: custom:decluttering-card
                    template: header_main
      - type: custom:vertical-stack-in-card
        cards:
          - type: custom:decluttering-card
            template: footer_sticky_menu
        card_mod:
          style: |
            :host {
              position: sticky !important;
              bottom: 26px;
              margin-bottom: 10px !important;
              animation: 1.2s position ease-in-out;
            }
            @keyframes position {
              0% { bottom: -80px; }
              20% { bottom: -80px; }
              70% { bottom: 26px; }
              90% { bottom: 24px; }
              100% { bottom: 26px; }
            }
            ha-card { 
              background: none;
              border-radius: 26px !important;
            }
            :host:before {
              content: '';
              display: block;
              position: absolute;
              bottom: -26px;
              left: -8px;
              padding-right: 16px;
              height: 130px;
              width: 100%; 
              background: linear-gradient(180deg, rgba(45, 56, 76, 0) 0%, rgba(35, 46, 66, 0.85) 50%);
              pointer-events: none;
              animation: 1.2s opacity ease-in-out;
            }
            @keyframes opacity {
              0% { opacity: 0; }
              20% { opacity: 0; }
              100% { opacity: 1; }
            }
            @media only screen and (min-width: 768px) {
              :host {
                position: fixed !important;
                width: 520px;
                bottom: 26px;
                margin-bottom: 10px !important;
                animation: 1.2s position ease-in-out;
              }
            }
            @media only screen and (max-width: 768px) {
              :host {
                position: fixed !important;
                width: 100vw;
                bottom: 26px;
                margin-bottom: 10px !important;
                animation: 1.2s position ease-in-out;
              }
            }
    max_columns: 1

Has anyone already build a tablet version of the Mobile First Dashboard, if so, would you mind to send some screenshots for inspiration ?

Thanks !

B.

Tanks you for this great job !!!

I’m currently started to try this dashboard and for the moment it’s the best one for me !!!

I dont know if i continue on it because it seem difficult to maintain and i’m not confortable with lot of css code :frowning:

I don’t know also if i can use bubble card into this dashboard ?

Hi, my advice is indeed to not use this dashboard as it is not maintened anymore.

You can achieve something similar with Bubble Card and it is a lot easier, I’m also planning to add a square layout to it that will look a lot like the Mobile First Dashboard. Wait and see!

First of all, you did a really great job. Thanks a lot.

I just have a small issue on my end. Whenever i open up the dashboard, where the weather card is located, i get the strange issue at the bottom.
Homeassistant creates a blank black bar, that stays there as long as i have opened homeassistant.
When i open up the dashboard with the weather card, the black bar also appears on any other dashboard.

If you or someone else has an idea, please let me know.
Thanks for your help.