<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#liszt posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/liszt/</link>
    <atom:link href="https://bencrowder.net/blog/tag/liszt/feed/" rel="self" />
    <description>Feed for blog posts tagged with #liszt.</description>
    <lastBuildDate>Sat, 04 Apr 2026 05:22:16 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Since the phone is now the window to the soul, here’s my current home screen: Things of possible int...</title>
      <link>https://bencrowder.net/blog/2021/1260/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1260/</guid>
      <pubDate>Fri, 20 Aug 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Since the phone is now the window to the soul, here’s my current home screen:</p>
<p><figure>
        <a href="https://cdn.bencrowder.net/blog/2021/08/iphone-home-screen.png"><img src="https://cdn.bencrowder.net/blog/2021/08/iphone-home-screen.png" alt="iphone-home-screen.png" title="iphone-home-screen.png" /></a>
        
      </figure></p>
<p>Things of possible interest (or more likely imminent boredom):</p>
<ul>
<li>30 Seconds is a system shortcut I made that starts a thirty-second timer, which I use for my physical therapy exercises morning and night (I used to use a third-party app until I realized I didn’t need one)</li>
<li>Projectile (an app version of my <a href="https://bencrowder.net/project-tracker/">project tracker</a>), Bookshelf (reading tracker), Slash (blog engine), Storybook (writing app), Momentum (time tracker), and Liszt (to-do list) are all PWAs I’ve built</li>
<li>While it’s kind of weird (they’re the same exact app), I love that Marvin SxS is on the App Store alongside Marvin; I use the dark-background Marvin for fiction and the white-background Marvin for nonfiction</li>
<li>From left, the three bottom apps in the dock are Codex (notes app), Saturn (launcher), and Gate (Drafts clone), which are also PWAs I’ve built, and clearly I have a problem</li>
<li>I currently have 136 tabs open in mobile Safari, and clearly I have two problems</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Since the phone is now the window to the soul, here’s my current home screen: Things of possible int...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Momentum intro</title>
      <link>https://bencrowder.net/blog/2020/momentum-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/momentum-intro/</guid>
      <pubDate>Sun, 09 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Another entry in the <a href="https://bencrowder.net/blog/2020/910/">neverending series</a> talking about my personal productivity tools.</em></p>
<p>Momentum is my daily goal app, for keeping a goal chain/streak going. It’s a Python app running Django. The name comes from the momentum that a long streak gives.</p>
<h2 id="overview">Overview</h2>
<p>Goals can be either binary flags (whether I did it that day or not) or timed (in which case Momentum keeps track of the time spent). The default mode is focus mode, which shows only the top unfinished goal at a time and looks like this (with dummy data):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/momentum-1.png" alt="momentum-1.png" title="momentum-1.png" />
        
      </figure></p>
<p>The thin red line along the top is a progress bar showing how close I am to finishing my Momentum goals for the day. The red boxes show the last few weeks of the streak, the green box at the right is the button for saying I’ve completed that goal for the day, and the blue text under the goal name shows how long the total streak is.</p>
<p>When focus mode is off, it looks like this:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/momentum-2.png" alt="momentum-2.png" title="momentum-2.png" />
        
      </figure></p>
<p>You can see a partially completed timed goal along with a binary goal. Momentum also supports ignoring goals for Saturdays and/or Sundays (the gray boxes among the red), which I use for things I don’t usually do on the weekends.</p>
<p>When the timer on a goal is running, the favicon changes and the page looks like this, with the pink box at right showing the elapsed time for the current session:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/momentum-3.png" alt="momentum-3.png" title="momentum-3.png" />
        
      </figure></p>
<p>(The idea with the timer is that it may take multiple sessions spread throughout the day to meet the daily goal, by the way — if I wanted to make sure I spend an hour writing each day but don’t usually have time to do it all in one block, for example.)</p>
<h2 id="howiusemomentum">How I use Momentum</h2>
<p>On my laptop, I have Momentum open in Firefox as a pinned tab. On my phone, I have it saved to my homescreen as a PWA.</p>
<p>I use Momentum every day for my morning routine, primarily on my phone. The goals I put into it (as opposed to just adding things to my to-do list in Liszt) are things I want to do each day and, to some degree, are things I might not do if I didn’t have a streak pushing me forward (thus “Momentum”).</p>
<h2 id="thefuture">The future</h2>
<p>I’m happy with the app as it is, but I’ve been thinking about merging it into Liszt, since goals like these are fundamentally to-do items. (Every morning Liszt already automatically adds all the items in my  ::streak list to my ::today list, so that I can work off my to-do list without necessarily having to go back to Momentum as much.)</p>
<p>Giving Liszt items the ability to be timed is already in place with belt mode, so I’d just need to add the ability to keep track of both partially finished goals and total streaks. Seems worthwhile.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Momentum intro">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Liszt intro</title>
      <link>https://bencrowder.net/blog/2020/liszt-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/liszt-intro/</guid>
      <pubDate>Thu, 30 Jul 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>First in the <a href="https://bencrowder.net/blog/2020/910/">series</a> introducing my personal productivity tools. Buckle up, this is going to be nerdy. And long.</em></p>
<p>Liszt is my to-do list app. Named after the composer, though I regret it a little since I butcher his name by pronouncing it <em>lisht</em> to differentiate it from the ordinary <em>list</em>. Heresy. The next version will have a better name, though. It’s a Python app running on Django.</p>
<p>Disclaimer: I don’t think this app is perfect. (Or any of the other tools I’ll talk about, for that matter.) I’ll describe things as they are, acknowledging here that there’s a lot of room for improvement.</p>
<h2 id="overview">Overview</h2>
<p>This is what the dashboard looks like, populated with some dummy data:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-1.png" alt="liszt-1.png" title="liszt-1.png" />
        
      </figure></p>
<p>And on mobile, where the controls move to the bottom for easier access:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-1mobile.png" alt="liszt-1mobile.png" title="liszt-1mobile.png" />
        
      </figure></p>
<p>The top bit is my stats panel, with the data pulled in from my other tools’ APIs. Daily writing counts, daily words left, total words written on the novel (all three from Storybook), daily pages left (from Bookshelf), and daily goals left (from Momentum). I’ll cover those tools later.</p>
<p>There’s also a slide-in menu on the side, with my most commonly used top-level lists:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-2.png" alt="liszt-2.png" title="liszt-2.png" />
        
      </figure></p>
<p>Double-clicking on a list item opens up an edit panel, which also allows me to move the item to another list with some commonly used lists included as buttons (this whole panel is kind of clunky and needs improvement):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-7.png" alt="liszt-7.png" title="liszt-7.png" />
        
      </figure></p>
<h2 id="payloadsyntax">Payload syntax</h2>
<p>The basic idea behind Liszt (and this is common to many of my apps) is the text-based payload, which enables some nice cross-app integrations (more on this when I cover Gate and Quill). Adding items looks like this:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-3.png" alt="liszt-3.png" title="liszt-3.png" />
        
      </figure></p>
<p>A Liszt payload (the text entered into the add tray) has one item per line, with optional blank lines and optional list specifiers. If there’s no specifier, it’ll assume the current list if there is one, otherwise it’ll default to <code>::inbox</code>. (I use the double-colon prefix to mark lists, with a slash to specify sublists.) Here’s a fuller example of the syntax, again with dummy data:</p>
<pre><code>Process email :5
Review the merge requests :10

::work/notifications
Read up on Python futures ::: https://docs.python.org/3/library/concurrent.futures.html
Refactor [::work/notifications/refactor]
Write up the design doc
</code></pre>
<p>The first two items (which have belt-mode durations, I’ll explain those in a minute) would go into the <code>::today</code> list (which is the dashboard list). The last three items would go into the <code>::work/notifications</code> list, as pictured here:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-3b.png" alt="liszt-3b.png" title="liszt-3b.png" />
        
      </figure></p>
<p>Of these, the first line sets a subtitle by putting it after the triple-colon marker. I use this all the time.</p>
<p>The second line is a symlink of sorts, pulling in the top item from the linked list (different meaning here) and showing it in place, with the <code>Refactor</code> text shown as the subtitle. I used to use this more often but haven’t as much lately.</p>
<p>You can also see that this list has a child list (<code>::work/notifications/refactor</code>).</p>
<h2 id="beltmode">Belt mode</h2>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-4.png" alt="liszt-4.png" title="liszt-4.png" />
        
      </figure></p>
<p>If an item has a duration marker included, that triggers belt mode (ala conveyer belts), as evidenced by the new bar at the top of the screen in the image above.</p>
<p>Brief backstory: I initially wrote an Electron app called Belt that did the same sort of thing, then a few months ago ported it to Go as a menubar app. Shortly after I finished that, I realized it would make much more sense in Liszt and brought the functionality in.</p>
<p>And what is that functionality? It’s just an easy way to time tasks from the list. When I hit Start, it switches into belt mode (also changing the favicon so I can tell that it’s running and turning on focus mode so I can only see the task I’m actively working on):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-5.png" alt="liszt-5.png" title="liszt-5.png" />
        
      </figure></p>
<p>When the timer runs out, it plays a sound and brings up a panel allowing me to continue on to the next item in the list, stop belt mode, or add more time to the timer. (There are also keyboard shortcuts for all of this.)</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/07/liszt-6.png" alt="liszt-6.png" title="liszt-6.png" />
        
      </figure></p>
<h2 id="howiuseliszt">How I use Liszt</h2>
<p>On my laptop, I have Liszt open in Firefox as a pinned tab. On my phone, I have it saved to my homescreen as a PWA.</p>
<p>Every morning I go through the main lists and move the items I’m going to work on to the today list. I then work out of the today list the rest of the day, opening it often.</p>
<p>I use belt mode most days, primarily to help me stop avoiding tasks I don’t really want to work on (but that still need to be done).</p>
<h2 id="thefuture">The future</h2>
<p>Lately I’ve grown enamored of the idea of storing data as plain text files in directories, rather than using an actual database like Postgres or Mongo. There are plenty of apps where this doesn’t make sense, but for personal, small tools, it works nicely, so I’m planning to migrate Liszt off SQLite to plain text, and I am very excited about it. Yes, I am that kind of a person.</p>
<p>While Django is fine (we use it at work and I love it), I’m planning to move to FastAPI, which I’m already using for Ditto and Arc. It’s a bit faster and feels more lightweight. I think in my mind I mostly use Django because of the ORM and admin; once I’ve given that up, the baby goes out with the bathwater.</p>
<p>I’m also looking forward to simplifying things, removing vestigial functionality, and sanding down as many of the friction points as I can.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Liszt intro">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
