Homepage dashboard
Dashy vault/Guides/Homepage dashboard
Guides/Homepage dashboard.md

An Obsidian homepage dashboard without code

Properties
blocks
todaystatstilescountdown
keys
clocklayout: inlinebadge: count
needs dataview
checked on
Dashy 2.0.0

A home note is the page you see first: the time, today's note, how full the inbox is, a way into each part of the vault, and what is coming up. Usually it is a note full of dataviewjs. Here it is four Dashy blocks, each a few lines of YAML, and every number on it updates as the vault changes.

A home note: a clock above today's date with links to the daily and weekly notes; a line of counts for notes, the inbox, diary days and books; four folder tiles with note counts; three countdown cards for a holiday, a birthday and a passport
What you have at the end of step 4. From a demo vault.

1The day and the clock

Make a note for the home page, say Home.md, and start with this block.

Home.md
```today
clock: true
daily: true
weekly: true
```
  • clock: trueHours and minutes above the date, ticking. 12 or 24 hours follows your language. clock: seconds adds the seconds.
  • daily, weeklyLinks to today's note and this week's. monthly: true adds the month's.

The folder and the name format come from the Periodic Notes plugin or the core Daily notes plugin, or from the folders set in Dashy's settings. With none of them, the daily note is YYYY-MM-DD at the vault root. A note that does not exist yet is still linked, dimmed, and a click creates it.

2A line of counts

Number cards take room. For a header, layout: inline puts the same numbers on one line of text.

Home.md
```stats
layout: inline
items:
  - { label: notes, agg: count }
  - { label: in the inbox, source: Inbox, agg: count }
  - { label: diary days this month, source: Diary, agg: count, period: month }
  - { label: books this year, source: Reading, date_field: date_read, period: year, agg: count }
```
  • label: notes, agg: countNo source: every note in the vault.
  • period: monthOnly notes dated this month, by the date in the note's name. date_field reads the date from a property instead, as on the books item.
  • Narrow paneThe line wraps between items, never inside one.

Inline keeps icon, unit and the compare change, but not trend or sub. Leave those on, and the block warns that they are not drawn.

3Tiles for your folders

One tile per part of the vault, with the number of notes in it.

Home.md
```tiles
items:
  - { label: Inbox, path: Inbox, icon: 📥, badge: count }
  - { label: Diary, path: Diary, icon: 📔, badge: count, period: week, sub: this week }
  - { label: Reading, path: Reading, icon: 📚, badge: count }
  - { label: Projects, path: Projects, icon: 🗂, badge: count, accent: true }
```
  • path: InboxA folder. The tile opens its folder note, Inbox/Inbox.md or Inbox.md next to the folder. Without one, a click shows the folder in the file explorer.
  • badge: countThe number of notes in the folder, subfolders included. An empty folder shows 0, not nothing.
  • period: weekNarrows the badge to notes dated this week. tag and where narrow it too.
  • pathCan also be a note, or File.base#View for a view of a base.
Cover images, if you want them

Add image: to a tile for a picture above its label: a path in the vault, a [[wikilink]], or an https:// address. See the variations below.

4What is coming up

The days to a holiday, a birthday and a passport's expiry. The last two are read from notes, so they stay right without edits.

Home.md
```countdown
items:
  - { label: Holiday, date: 2027-01-20, icon: 🏖 }
  - { label: Anna, field: birthday, repeat: yearly, source: People, where: "name = Anna", icon: 🎂 }
  - { label: Passport, field: expires, where: "type = passport", icon: 🛂 }
```

How the birthday and the passport cards find their dates, and why where is there: countdown to a birthday.

The whole note

All four blocks, ready to paste into an empty note. Change the folder names to yours.

Home.md
```today
clock: true
daily: true
weekly: true
```

```stats
layout: inline
items:
  - { label: notes, agg: count }
  - { label: in the inbox, source: Inbox, agg: count }
  - { label: diary days this month, source: Diary, agg: count, period: month }
  - { label: books this year, source: Reading, date_field: date_read, period: year, agg: count }
```

```tiles
items:
  - { label: Inbox, path: Inbox, icon: 📥, badge: count }
  - { label: Diary, path: Diary, icon: 📔, badge: count, period: week, sub: this week }
  - { label: Reading, path: Reading, icon: 📚, badge: count }
  - { label: Projects, path: Projects, icon: 🗂, badge: count, accent: true }
```

```countdown
items:
  - { label: Holiday, date: 2027-01-20, icon: 🏖 }
  - { label: Anna, field: birthday, repeat: yearly, source: People, where: "name = Anna", icon: 🎂 }
  - { label: Passport, field: expires, where: "type = passport", icon: 🛂 }
```
Opening it when Obsidian starts

Dashy draws the note; it does not choose which note Obsidian opens first. If the Homepage plugin does that for you, keep it and point it at Home.md.

Ask your agent

With Dashy's skill installed, an AI agent can write this from a request in plain words: it looks at your property names and folders first, then writes the blocks. Open the note in Reading view and paste any error a block shows back to the agent.

Prompt
Make a new note called Home my home page. Put the time and today's date at the top, with links to my daily and weekly notes. Then a line of counts (all my notes, notes in the inbox, diary days this month, books read this year), a tile for each of my main folders with how many notes it holds (for the Diary, only this week's), and the days left until my holiday on 20 January, Anna's birthday and my passport expiry.

What comes back is something like the note above. The agent's YAML may differ from the guide's, with your own property names and labels, but it should do the same, and this guide is the reference to compare it against. More on working with an agent.

The same home note with dataviewjs

The usual setup: the Homepage plugin opens a note, and the note is a script.

With Dataview, JavaScript queries on
```dataviewjs
dv.header(2, moment().format("dddd, MMMM D"));
const all = dv.pages().length;
const inbox = dv.pages('"Inbox"').length;
const month = dv.pages('"Diary"')
  .where(p => p.file.day && p.file.day.hasSame(dv.luxon.DateTime.now(), "month")).length;
dv.paragraph(`${all} notes · ${inbox} in the inbox · ${month} diary days this month`);
```
  • Needs Enable JavaScript queries in Dataview's settings. It is off by default.
  • The date is printed once. A ticking clock is a timer you write and clean up yourself.
  • Tiles with counts and countdowns are more code each, usually HTML built in the script and styled with a CSS snippet.
  • A mistake in the script shows a JavaScript error, or nothing.
Dashydataviewjs
Live clockclock: trueA timer you write
Today's notesdaily, weekly, monthlyBuild the paths yourself
Line of countslayout: inlineThe script above
Folder tiles with countsbadge: countHTML and a CSS snippet
A config mistakeA message naming the keyA JavaScript error
What you installDashyDataview, JavaScript queries on

Variations

Tiles with covers

A picture above each label, from the vault or the web.

tiles
```tiles
columns: 3
items:
  - { label: Reading, path: Reading, image: Attachments/books.jpg, badge: count }
  - { label: Projects, path: Projects, image: "[[desk.jpg]]", badge: count }
  - { label: Inbox, path: Inbox, image: https://example.com/inbox.jpg }
```

This week against last

compare works on the inline line too: the change sits after the label.

stats
```stats
layout: inline
items:
  - { label: diary days this week, source: Diary, agg: count, period: week, compare: true, better: up }
  - { label: in the inbox, source: Inbox, agg: count, icon: 📥 }
```

A greeting instead of the date

title replaces the date line. The clock and the links stay.

today
```today
title: Good to see you
clock: seconds
daily: true
monthly: true
```

A tile for what is left to read

The badge counts only the notes that match where.

tiles
```tiles
items:
  - { label: To read, path: Reading, icon: 📚, badge: count, where: "status = to-read" }
```

If a block shows an error

A block that cannot do what you asked says so, inside the note. The ones you are likely to see here:

  • Nothing is filed under Inbox. A counted tile's path or a card's source names a folder with no notes in your vault. Use your own folder names.
  • trend is not drawn with layout: inline. Inline has no room for a sparkline. Remove trend, or switch back to cards.
  • clock expects true, false, minutes or seconds. Something like clock: yes was written. No clock is shown until you fix it.
  • None of the selected notes has a name starting with a date like YYYY-MM-DD. A period needs dated notes. If the names write the date another way, add date_format: DD.MM.YYYY on the stats card or the tile that counts them. Without it, both read the day format set in the Daily notes or Periodic Notes settings. Add date_field if the date lives in a property.