The Problem
I've got over 200 cover songs saved in my Obsidian vault. Chord sheets, lyrics, notes on arrangement. The problem is obvious: most of them just sit there, untouched. I forget what I know. Songs I used to play well drift into obscurity while I keep returning to the same comfortable handful.
What I needed was something to surface forgotten material. Not a todo list (too rigid), not random chance (too chaotic), but a system that quietly reminds me: "Hey, you haven't played this in a while."
The Solution: Obsidian Bases
Obsidian recently released a core plugin called Bases. It's essentially a query language for your vault - you can filter, sort, and display notes based on their properties and metadata. Think of it like a database view over your markdown files.
I built a base that tracks when I last practiced each cover, and surfaces the ones I've neglected. It embeds in my daily note, so every morning I see three songs I haven't touched in over 30 days.
How It Works
Each cover file has frontmatter with three properties:
1---
2lastPracticed: 2026-01-04
3snoozedUntil:
4retired: false
5---- lastPracticed: Date I last practiced this song
- snoozedUntil: If I don't fancy it today, snooze until this date
- retired: Songs I never want to see again
The base queries all files in my Covers folder and filters based on these properties. The "Daily Picks" view shows the 3 oldest untouched songs, excluding anything retired or snoozed.
Setting It Up Yourself
If you want to build something similar, here's how.
1. Enable Bases
Bases is a core plugin in Obsidian 1.9+. Go to Settings → Core plugins → Enable "Bases".
2. Add Frontmatter to Your Files
Your cover files need frontmatter with the tracking properties. You can add them manually or run a script to add empty frontmatter to all files at once.
3. Set Property Types
In Obsidian, property types determine how fields are edited. Add these to your .obsidian/types.json:
1{
2"types": {
3 "lastPracticed": "date",
4 "snoozedUntil": "date",
5 "retired": "checkbox"
6}
7}This gives you a date picker for dates and a toggle for retired - no typing, no format confusion.
4. Create the Base
Create a .base file (or use a code block in a note). Here's a simplified version:
1filters:
2and:
3 - file.inFolder("Covers")
4 - file.ext == "md"
5
6views:
7- type: list
8 name: Daily Picks
9 filters:
10 and:
11 - file.mtime < now() - "30d"
12 - retired != true
13 sort:
14 - property: file.mtime
15 direction: ASC
16 limit: 3
17 markers: noneThis shows the 3 oldest files (by modification time) that aren't retired.
5. Embed in Your Daily Note
Add this to your daily note template:
1## Practice Something Forgotten
2![[YourBase.base#Daily Picks]]Now every day you'll see three forgotten songs waiting for attention.
The Workflow
When a song surfaces:
- Practice it → Set
lastPracticedto today (click the date picker) - Not today → Set
snoozedUntilto next week - Never again → Toggle
retiredto true
The system respects your choices. Practiced songs drop off the list. Snoozed songs reappear when ready. Retired songs disappear forever (unless you unretire them).
Why This Works For Me
It's low friction. I don't have to remember to review my repertoire - it surfaces automatically. I don't have to make decisions about what to practice - something is suggested. And I can dismiss suggestions easily without guilt.
The 30-day threshold is arbitrary but feels right. Long enough that I'm not seeing the same songs constantly, short enough that skills don't completely atrophy.
Gotchas
A few things I learned building this:
- Filtering on formula values doesn't work in Bases. Use date arithmetic directly:
file.mtime < now() - "30d"instead of referencing a calculated field. - File modification time resets when you sync or migrate your vault. I'm gradually adding explicit
lastPracticeddates to get accurate tracking. - Obsidian needs to know property types for the nice UI. Without
types.jsonentries, you get text fields instead of date pickers.
What's Next
I'm considering adding more properties: instrument, difficulty, key. You could then filter for specific contexts - piano songs for a gig, or everything in a particular key if you're working on transposition. But for now, the simple version is working well enough that I'm actually practicing more variety.
That's the goal, right? Not a perfect system, but one that gets me playing.