<?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>#plain-text posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/plain-text/</link>
    <atom:link href="https://bencrowder.net/blog/tag/plain-text/feed/" rel="self" />
    <description>Feed for blog posts tagged with #plain-text.</description>
    <lastBuildDate>Mon, 24 Aug 2026 16:43:25 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Homegrown apps retrospective</title>
      <link>https://bencrowder.net/blog/2026/homegrown-apps-retrospective/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2026/homegrown-apps-retrospective/</guid>
      <pubDate>Sat, 08 Aug 2026 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I know these kinds of posts about internal apps may be less interesting since you can’t actually use any of the mentioned software, but on the off chance that some of the ideas somehow prove useful in some small way to someone, here we go. These apps were all written by hand, by the way, no AI involved. I should probably include updated screenshots, but then I might never actually get around to posting this, so we’re going purely verbal for now. In alphabetical order:</p>
<p><a href="https://bencrowder.net/blog/tag/bookshelf/">Bookshelf</a>, my reading tracker, which I’ve been using pretty much daily over the past fifteen years to keep track of which page I’m on in each book and also (via the automatically generated stats) as strong motivation to reach my per-day and per-book page count reading goals. I love it. No plans to move to something else.</p>
<p><a href="https://bencrowder.net/blog/tag/cast/">Cast</a>, my static site generator, used to build this site for the last year and a half. Glad I finally put in the time to make this happen, because I love static files and having fewer moving parts, and I’ve been very happy with Cast itself. No plans to move to a third-party SSG like Origami or Hugo. (Nothing against those, to be clear.)</p>
<p><a href="https://bencrowder.net/blog/tag/codex/">Codex</a>, my notes app, which I use daily to track which books I want to read, notes on house and car maintenance, tracking progress on my journal transcription work, story outlines, genealogy research notes, blog drafts (I’m writing this post in it), and more. I like it a lot, but lately I’ve gotten back into taking notes by hand in my Field Notes and other pocket notebooks (as mentioned in the last links post, and probably in other posts before that), and I’m now figuring out when I want to use this app vs. paper notes. Long-lived notes that I modify a lot over time still seem like a better fit for digital, for example. Anyway, no immediate plans to move to something else, though I imagine more types of notes will probably move to paper over time.</p>
<p><a href="https://bencrowder.net/blog/tag/digest/">Digest</a>, my static RSS reader. It’s been six months so far, and this way of reading feeds still works really well on my brain — the self-contained nature of bundling posts by day is soothing, and instead of feeling anxious that I need (“need,” I should say) to keep up with an endless stream of new posts, I feel like I can read at whatever pace I want to, which usually ends up being every few days instead of daily. I love that each day is its own static HTML file that I rsync up to my server. I also have really loved reading posts on their original sites instead of in a homogeneous design of my own make. Feels much more human and more delightful.</p>
<p><a href="https://bencrowder.net/blog/tag/gate/">Gate</a>, my quick entry app. I use it dozens of times a day to send to-dos to Liszt and journal notes/entries to Leaf, and it’s working really well. No plans to move away from it.</p>
<p><a href="https://bencrowder.net/blog/tag/leaf/">Leaf</a>, my journal app, where I keep my daily journal and my project logs. While it’s tempting to write paper journals again, I’ve been transcribing my older journals and it’s nice being able to read older entries and search through all of them to find out when something happened, and I don’t see myself wanting to give that up. The app automatically exports each day’s entries to a day-specific text file for extra preservation beyond the database itself, which I love and plan to do in other applicable apps of mine. No plans to move to something else, though I do write some types of entries in my Field Notes.</p>
<p><a href="https://bencrowder.net/blog/tag/liszt/">Liszt</a>, my to-do list app, which I use dozens of times a day, and it’s working well. I love being able to quickly add items via Gate, including multiple items at a time (each on its own line). I love the text-based annotations. (<code>Write that blog post ! #writing 5m</code> marks it as important, tags it, and indicates I should spend five minutes on it.) I love having my daily routine autopopulated in the list each morning. All of that said, however, I do find myself thinking about going back to pen and paper for to-do lists, because I don’t know that I strictly <em>need</em> any of the extra functionality the app is giving me. Also, for the past few years I’ve been using a plain text Markdown file on my work laptop for my work to-do list, and that same model could easily work for my projects where I’m almost always working on them mainly on my laptop. In fact, as I write these words I’m now remembering that when I was younger I used to keep my to-do lists as plain text files. (Part of these thoughts, by the way, come from wanting to move more analogward, and part come from wanting fewer dependencies, fewer moving parts, fewer things to maintain on my server.) Not sure yet what I’ll do.</p>
<p><a href="https://bencrowder.net/blog/tag/momentum/">Momentum</a>, my time tracker, which I use daily to track time (go figure) for scripture study and conference talk study and, primarily, to make sure I’m walking enough each day (for my back pain). It’s nice being able to just tap a button to start or stop tracking, and to see the recent history of how much time I’ve spent per category, but I’ve also been thinking I could probably do this via pen and paper, or via the stopwatch on my phone. We’ll see.</p>
<p><a href="https://bencrowder.net/blog/tag/saturn/">Saturn</a>, my quick launcher web page, which I use daily for fast access to notes and other bookmarks and as a quick search entry point — I type in a query and then choose where I want to search (my journal, Project Gutenberg, Standard Ebooks, eReaderIQ, my library, etc.). Works great, love it, no plans to move to something else.</p>
<p><a href="https://bencrowder.net/blog/tag/scroll/">Scroll</a>, my ebook reader. An absolute win in my book. It’s been almost two years now and I still love it and use it almost every day and wish I’d made the move earlier. I love having full typographic control, bleedthrough and paper backgrounds, autoscroll (and scrolling in general, instead of swiping), and the lightweight feel of knowing it’s just static HTML files with some JavaScript. There are admittedly some things I still want to fix — changing pagination from percentage-based (which is unstable across font changes) to statically built in (which has the extra advantage of being usable in other apps and devices, like the Xteink X4) (which I got for my birthday, by the way; been meaning to post about it), and using publisher styles instead of overriding everything like the madman that I am — but overall I’d say it’s perhaps my favorite among all the things I’ve built.</p>
<p><a href="https://bencrowder.net/blog/tag/storybook/">Storybook</a>, my fiction writing app. It’s working fine, though I don’t use it often enough — and wish I did, so I would be finishing stories more often. The daily word count tracking is nice. Per that Neal Stephenson link earlier today, though, the idea of writing more by hand has intrigued me, and if I do that (and even if I don’t), I think plain text files are fully adequate for story drafts. (As opposed to using a database in an app.) So&hellip;we’ll see.</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%20Homegrown apps retrospective">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Brief and no doubt boring update on internal tooling: As of a few days ago, I’m planning to take Vin...</title>
      <link>https://bencrowder.net/blog/2021/1223/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1223/</guid>
      <pubDate>Fri, 04 Jun 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Brief and no doubt boring update on internal tooling:</p>
<p>As of a few days ago, I’m planning to take Vinci (logs), Arc (notes), Storybook (fiction writing), and possibly Slash (blog) and smush them all together into a new, streamlined Django app called Writ. (Fundamentally, they’re all tools for writing, and there’s enough overlap among them that keeping them split out isn’t worth it to me.) Still in the initial design/planning stage. Looking forward to simplifying things a bit.</p>
<p>I’m no longer intent on using plain text as the data store for my apps. The main reasons I wanted to do this in the first place: a) archival durability and b) rampant minimalism. For the first, I’ll instead have all my apps export everything to plain text whenever there’s a change. It won’t be canonical, but it will be a redundant copy of the data so it’s even more archivally durable. As for the minimalism, well, sometimes one can go too far.</p>
<p>Lastly, I’m looking into hosting my site statically via Linode Object Storage (ala S3). Still exploring ramifications — redirects, etc. Main goal with this is to make my site more resilient, and even if the object storage part doesn’t work out, I’ll still move the site over to a new static engine (which I’m naming Cast, and I plan to write it in Go).</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%20Brief and no doubt boring update on internal tooling: As of a few days ago, I’m planning to take Vin...">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Links #37</title>
      <link>https://bencrowder.net/blog/2021/links-37/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-37/</guid>
      <pubDate>Tue, 23 Feb 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Trying out a new format with these link bundles, in the hope that dropping the bulleted list format is a) more flexible and b) more conducive to writing a bit more about the links, rather than limiting myself to a single line with an awkward semicolon shoved in if I need more room.</p>
<p><a href="https://www.smashingmagazine.com/2021/02/things-you-can-do-with-css-today/">Andy Bell on recent/upcoming CSS changes</a>. Good stuff here. I’m probably most looking forward to using <code>:is</code> and <code>clamp()</code> and <code>ch</code> (all of which I’d read about before but had mostly forgotten). Oh, and <code>scroll-margin-top</code>.</p>
<p><a href="https://www.designbetter.co/design-engineering-handbook"><em>Design Engineering Handbook</em> by Natalya Shelburne et al.</a>, a free ebook which looks interesting. (I’ve read part of the first chapter so far.) Design Better (which appears to be an InVision thing) has <a href="https://www.designbetter.co/books">other free books</a> available as well, on various design-related topics.</p>
<p><a href="https://maxkoehler.com/posts/continuous-typography/">Max Koehler on continuous typography</a>. Also see his <a href="https://maxkoehler.com/work/continuous-type-tester/">post about the tool</a> and <a href="https://awesomephant.github.io/continuous-typography/">the tool itself</a>. This is great, and I hope these ideas get broader traction. (Also, I’m excited to start using Source Serif 4 and its optical sizing axis.)</p>
<p><a href="https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html">Aleksey Kladov on including an ARCHITECTURE.md file</a>. Great idea. Having a high-level overview is so helpful.</p>
<p><a href="https://graydon2.dreamwidth.org/193447.html">Graydon Hoare on always betting on text</a>. I’ve probably linked to this before, but it’s good and worth rereading occasionally.</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%20Links #37">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Arc intro</title>
      <link>https://bencrowder.net/blog/2020/arc-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/arc-intro/</guid>
      <pubDate>Thu, 13 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>The last entry in the <a href="https://bencrowder.net/blog/2020/910/">navel-gazing series</a> talking about my personal productivity tools.</em></p>
<p>Arc is my private notes app. It’s a Python app running FastAPI. The name is short for Archive, as in an archive of notes. It’s my latest app, too — I wrote it around a month ago, as a replacement for Apple Notes (to try to get back to more of a Notational Velocity or Simplenote kind of thing). And just to be clear, this is distinct from the digital garden notes idea I talked about earlier.</p>
<h2 id="overview">Overview</h2>
<p>Notes are just text files, stored in a directory with UUIDs for filenames. By default it opens to a blank note screen, but that’s boring, so instead you get to see what it looks like when editing a note (with the bar at the top indicating the text isn’t saved — I originally implemented autosave but soon realized that I prefer manual):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/arc-1.png" alt="arc-1.png" title="arc-1.png" />
        
      </figure></p>
<p>The search page lists the twenty most recently modified notes (dummy data):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/arc-2.png" alt="arc-2.png" title="arc-2.png" />
        
      </figure></p>
<p>The search results page uses <a href="https://github.com/ggreer/the_silver_searcher">Ag</a> under the hood (since all the notes are just in a flat directory for now, it was super easy and took maybe ten minutes to implement):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/arc-3.png" alt="arc-3.png" title="arc-3.png" />
        
      </figure></p>
<h2 id="howiusearc">How I use Arc</h2>
<p>On my laptop, I have it open in Firefox as a pinned tab. On my phone, I have it saved to my dock as a PWA.</p>
<p>I’ve been using Arc daily, to keep track of things that I want to be able to refer to easily later on; normal notes usage, nothing too exciting here.</p>
<h2 id="thefuture">The future</h2>
<p>Arc is still pretty new, so we’ll see where continued usage takes us. I’m happy with the plain text storage and with FastAPI, though. (Thus the plans to move over to those for the other tools.) It too is a small app, with around 500 lines of code. Maybe at some point I’ll switch from Ag to ripgrep, but that’s about the only change I can think of right now.</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%20Arc intro">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Storybook intro</title>
      <link>https://bencrowder.net/blog/2020/storybook-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/storybook-intro/</guid>
      <pubDate>Tue, 11 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Still another entry in the <a href="https://bencrowder.net/blog/2020/910/">will-it-ever-end series</a> talking about my personal productivity tools.</em></p>
<p>Storybook is my fiction writing app. It’s a Python app running Django. The name comes from, uh, books with stories in them.</p>
<h2 id="overview">Overview</h2>
<p>First, the dashboard, which lists weekly writing stats and active stories at top and backburnered stories at bottom:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/storybook-1.png" alt="storybook-1.png" title="storybook-1.png" />
        
      </figure></p>
<p>The writing view has a stats bar at top (showing how close I am to meeting my daily 1,000-word goal) and then the textbox for the actual writing:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/storybook-2.png" alt="storybook-2.png" title="storybook-2.png" />
        
      </figure></p>
<p>The menu has some overall story stats and an outline (with somewhat vague and hopefully unspoilery scene titles), and some admin links:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/storybook-3.png" alt="storybook-3.png" title="storybook-3.png" />
        
      </figure></p>
<h2 id="syntax">Syntax</h2>
<p>As you can see from the screenshots, it expects Markdown. I’ve put in a convention hack where h2 tags (<code>##</code>) delineate scenes. Also, scene titles that begin with “Chapter X” create chapter divisions. (Clarification: a story has a flat list of scenes. The chapter divisions are display-only.)</p>
<h2 id="howiusestorybook">How I use Storybook</h2>
<p>On my laptop, I have it open in Firefox as a pinned tab. On my phone, I have it saved to my homescreen as a PWA.</p>
<p>I mostly avoid using Storybook (cough) but somehow still manage to put in a thousand words a day, one word after another.</p>
<p>There’s a payload syntax so I can send writing from Gate or Quill to Storybook, but I never use it.</p>
<h2 id="thefuture">The future</h2>
<p>Same old story: I’m planning to move it to FastAPI and start using plain text files for storage instead of a database.</p>
<p>At some point I want to refactor the outline UI and add search functionality.</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%20Storybook intro">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Bookshelf intro</title>
      <link>https://bencrowder.net/blog/2020/bookshelf-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/bookshelf-intro/</guid>
      <pubDate>Mon, 10 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Yet another entry in the <a href="https://bencrowder.net/blog/2020/910/">forever-long series</a> talking about my personal productivity tools.</em></p>
<p>Bookshelf is my reading tracking app. It’s a Python app running Django. The name comes from, uh, the thing that holds books.</p>
<h2 id="overview">Overview</h2>
<p>Behold the books:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/bookshelf-1.png" alt="bookshelf-1.png" title="bookshelf-1.png" />
        
      </figure></p>
<p>At the top there’s the stats panel, which shows how much I read the last six days with color coding for the genre tags (and yes, Wednesday and Friday I didn’t meet my 100-pages-per-day goal), my page total so far this month (932), how many books I’ve finished so far this month (2), and how much of my reading this month has come from each tag (I usually try to read around 50% nonfiction, but I usually fail).</p>
<p>And then there’s the book list itself. Title, progress bar with some extra data (including how long since I started the book), current page number (clicking this opens a panel where I can record the page I’m on along with a comment), and how long it’s been since my last entry.</p>
<p>Each book has a staleness limit (default is five days), where if I haven’t read the book at all in that period of time, it changes the color of the title to a glaring, awful red, and that’s sufficient motivation for me to get back to that book. (To be honest, lately I haven’t seen it come up much since I’ve been reading only a few books at a time, but in those crazy days when I was reading twenty to thirty books at a time, I saw it a lot.)</p>
<p>Also: the sixth book (in case you were wondering) is <em>A Disciple’s Life</em>, which is only visible on Sundays (I reserve it for Sunday reading).</p>
<p>And the mobile view, for the heck of it, and since it’s the one I use almost all of the time:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/bookshelf-1mobile.png" alt="bookshelf-1mobile.png" title="bookshelf-1mobile.png" />
        
      </figure></p>
<p>There’s also a stats page, since the statistics are surprisingly helpful in motivating me to make time for reading:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/bookshelf-2.png" alt="bookshelf-2.png" title="bookshelf-2.png" />
        
      </figure></p>
<p>(Yes, as of a couple days ago I’ve read more this year so far than all of last year in total. This makes me inordinately proud even though it really doesn’t matter.)</p>
<p>And, lastly, the hopefully self-evident history page:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/bookshelf-3.png" alt="bookshelf-3.png" title="bookshelf-3.png" />
        
      </figure></p>
<h2 id="howiusebookshelf">How I use Bookshelf</h2>
<p>On my phone, I have it saved to my homescreen as a PWA, and that’s primarily where I use it, since I mainly read on my phone these days. On my laptop, I have it open in Firefox as a pinned tab.</p>
<p>I use Bookshelf every day to track my reading, both for individual books and for my daily/monthly reading goals. It’s handy, too, as a bookmark that toddlers can’t pull out.</p>
<h2 id="thefuture">The future</h2>
<p>The desktop view needs some love, particularly that stats page. (I added those genre tags to it a month or two ago and realize now that I never actually looked at the desktop version. Whoops.)</p>
<p>Also (this should be no surprise by now), I’m planning to switch it to FastAPI along with plain text files for storage, for the same reasons I gave in those other posts.</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%20Bookshelf intro">Reply by 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 by email</a></p>]]></description>
    </item>
    <item>
      <title>Quill intro</title>
      <link>https://bencrowder.net/blog/2020/quill-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/quill-intro/</guid>
      <pubDate>Thu, 06 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/">eternally long series</a> talking about my personal productivity tools.</em></p>
<p>Quill is a quick entry app for macOS and is effectively a desktop version of Gate. It’s an Electron app for now. The name comes from quills being used to write.</p>
<h2 id="overview">Overview</h2>
<p>Not much to show here, actually. It looks like this (and the minimalism is very much intended):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/quill.png" alt="quill.png" title="quill.png" />
        
      </figure></p>
<p>There’s a textbox for writing and a word counter at top.</p>
<p>Once a payload is written, all the subsequent functionality is controlled via keyboard shortcuts: an app-wide prefix (<code>ctrl+l</code> — that’s an L) followed by the destination. <code>v</code> goes to Vinci, <code>l</code> goes to Liszt, <code>j</code> goes to my journal in Vinci, and <code>b</code> goes to my blog in Slash. (On my laptop, I prefer this to the buttons I used in Gate.)</p>
<p>The payload and action are then sent to an API in Gate, which does the actual sending to the destination systems.</p>
<h2 id="howiusequill">How I use Quill</h2>
<p>I leave it open all the time and use a global keyboard shortcut (configured in Hammerspoon) to bring it to the front.</p>
<p>Beyond the integration with my other systems, I often use Quill as a temporary scratchpad for drafting documents — emails, Slack chats, etc. — usually because the type size is larger. I also use it as a scratchpad for copy-pasting rich text into plain text.</p>
<h2 id="thefuture">The future</h2>
<p>I’d like to move off Electron at some point, probably to a native Swift app.</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%20Quill intro">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Gate intro</title>
      <link>https://bencrowder.net/blog/2020/gate-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/gate-intro/</guid>
      <pubDate>Thu, 06 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Yet another entry in the <a href="https://bencrowder.net/blog/2020/910/">seemingly endless series</a> talking about my personal productivity tools.</em></p>
<p>Gate is a small quick entry app for my phone. It’s a Go web app, and the name comes from it being a gateway to my other apps. I used to use Drafts, but when it switched to a subscription model I decided to do my own thing (which worked out well for me, since I was able to make other customizations I’d long been wanting to make).</p>
<h2 id="overview">Overview</h2>
<p>The main screen looks like this:</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/gate-1.png" alt="gate-1.png" title="gate-1.png" />
        
      </figure></p>
<p>Just a textbox and some basic controls at the bottom. When I tap the Submit button, it opens up a dialog with options for where to send the contents of the textbox (the payload):</p>
<p><figure class="clampvert">
        <img src="https://cdn.bencrowder.net/blog/2020/08/gate-2.png" alt="gate-2.png" title="gate-2.png" />
        
      </figure></p>
<p>Red buttons go to Liszt, blue to Vinci, green to Slash. And this is why I have the text-based payloads in all those apps.</p>
<h2 id="howiusegate">How I use Gate</h2>
<p>I have it saved as a PWA to the homescreen on my phone, nestled safely in my dock. I use it all the time. (I suppose I could use it from my laptop web browser as well, but I have Quill for that use case, so I never do.)</p>
<h2 id="thefuture">The future</h2>
<p>I’m happy with the app itself. There are, however, some recent bugs with text controls in PWAs in iOS Safari where the keyboard either won’t come up or can’t be dismissed, but that’s out of my control. Hoping those get fixed soon (they didn’t crop up until sometime in the last year or so, I think).</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%20Gate intro">Reply by email</a></p>]]></description>
    </item>
    <item>
      <title>Slash intro</title>
      <link>https://bencrowder.net/blog/2020/slash-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/slash-intro/</guid>
      <pubDate>Tue, 04 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/">patience-testing series</a> talking about my personal productivity tools.</em></p>
<p>Slash is the engine that runs this blog. It’s just a Python app running Django, but calling it an engine is too satisfying for me to stop anytime soon. The name comes from the ubiquitous forward slash in URLs.</p>
<h2 id="overview">Overview</h2>
<p>Slash has an internal frontend with some post management pages (see below) along with a small API which is used by Blackbullet (my current website engine, separate from the blog) to pull posts into my site template. The API also publishes the RSS and JSON feeds, which Blackbullet passes right through.</p>
<p>The dashboard lists current drafts and, lower on the page where you can’t see it in this screenshot, recently published posts:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/slash-1.png" alt="slash-1.png" title="slash-1.png" />
        
      </figure></p>
<p>Disclaimer: there’s no guarantee that these particular post drafts will ever see the light of day. I often put ideas in and then decide later that they’re not worth blogging about.</p>
<p>Here’s the post edit page, which is very much a work in progress (last week I added the visual tag controls, since adding tags via the metadata textbox made it impossible to tell whether I’d used a tag before or not):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/slash-2.png" alt="slash-2.png" title="slash-2.png" />
        
      </figure></p>
<p>It’s spartan but works for me.</p>
<h2 id="payloadsyntax">Payload syntax</h2>
<p>Other than the notebook specifier, the syntax is pretty much the same as <a href="https://bencrowder.net/blog/2020/vinci-intro/">Vinci’s</a>. Posts are written in Markdown. Metadata is specified with the initial-colon syntax.</p>
<p>One thing I realize I forgot to mention in the Vinci post is that in both apps I have a shortcut syntax for including images that looks like this:</p>
<pre><code><figure class="border">
        <a href="https://bencrowder.net/book-of-mormon-readers-edition/"><img src="https://cdn.bencrowder.net/blog/2020/08/readers-edition.png" alt="readers-edition.png" title="readers-edition.png" /></a>
        
      </figure>
</code></pre>
<p>I have a page for uploading images to a date-named folder — year and month — and this syntax relies on the image being in the matching folder for the post. A small bit of convention to make things simpler.</p>
<h2 id="howiuseslash">How I use Slash</h2>
<p>On my laptop, I open Slash when needed. On my phone, I have it saved to my homescreen as a PWA.</p>
<p>Other than that, I use it the way you’d expect — I write blog posts (usually directly in Slash, but occasionally in Gate or Quill), I edit them, I publish them. Months later I finally notice the typos. It’s not too exciting.</p>
<h2 id="thefuture">The future</h2>
<p>As of now, the plan is to replace both Blackbullet and Slash with a new, simpler, consolidated Slash, using plain text for the backend and probably moving to FastAPI. Since I’m in the middle of planning the rewrite right now (and since I’m now working in public), you’ll see posts about it soon.</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%20Slash intro">Reply by email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
