<?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>#bookshelf posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/bookshelf/</link>
    <atom:link href="https://bencrowder.net/blog/tag/bookshelf/feed/" rel="self" />
    <description>Feed for blog posts tagged with #bookshelf.</description>
    <lastBuildDate>Sun, 23 Aug 2026 17:27:49 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>Bookshelf in 2024</title>
      <link>https://bencrowder.net/blog/2024/bookshelf-in-2024/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2024/bookshelf-in-2024/</guid>
      <pubDate>Fri, 01 Mar 2024 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>In writing my /uses page, I realized it’s been <a href="https://bencrowder.net/blog/2020/bookshelf-intro/">a little while</a> since I last showed what my Bookshelf app looks like. Time for an update. (What is Bookshelf, you ask? A web app I wrote to track my reading.)</p>
<p>Here’s the current state, and note that I took this screenshot last night, so the monthly stats are for February:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2024/03/bookshelf-2024.png" alt="bookshelf-2024.png" title="bookshelf-2024.png" />
        
      </figure></p>
<p>I forgot to mention this back in 2020, but the app started in late 2011 as <a href="https://bencrowder.net/blog/2011/bookkeeper/">Bookkeeper</a>. A few years later I rewrote it in Python (Django) and renamed it (because o-o k-k e-e). I’m pretty happy with its current incarnation and use it every day except Sundays. My brain likes those stats. It really does. I’m sure I’d still read a lot even without them, but boy, the stats certainly motivate me to spend more time reading. (Well, some days more than others.)</p>
<p>Notes:</p>
<ul>
<li>Top left is monthly stats (genre breakdown, pages read, books read this month to date, average pages per day, and how far into the month we are).</li>
<li>Top right is yearly stats.</li>
<li>The bar chart tracks how many pages I’ve read over the past couple weeks, with each color representing a different genre (red is nonfiction, green is fantasy, blue is science fiction, brown is general fiction, etc.). The page count gets brighter the closer I get to my goal of 100 pages per day. And yes, the dashed gray dividers are one pixel off. I need to fix that.</li>
<li>For each book, I have some metadata under the title and author: percentage completed, number of pages I’ve read so far (included because in ebook land most books don’t start on page 1), number of days I’ve been reading the book, how many days are left at my current rate, how many pages per day I’m averaging so far, how many pages I’ve read today (this is used as my current rate if it’s greater than my average pages per day, and this is red if it’s lower than my average pages per day, as motivation to maintain my rate for each book), and how many pages are left.</li>
<li>The part at the right of each book row is the current page and how long it’s been since I last read that book (which also affects the background color). I tap the page number to enter whatever page I’m on. If it’s a book in Libby, by the way, I tag the book that way when adding it and it’ll adjust how it counts the pages (it takes around three Libby screens to get to a page the way I’m counting it).</li>
<li>The very faint ellipsis button in the lower right opens a menu with links to add books, search, see previous reads, and see stats for previous years.</li>
</ul>
<p>tl;dr I’m nerdier than you thought.</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 in 2024">Reply by email</a></p>]]></description>
    </item>
    <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 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>
    
  </channel>
</rss>
