Paperback blog

Go to Site

Rebuild Like It's 2021

Well hello again old friend,

I hope time has treated you as best it can and that you’re managing through the pandemic in OK shape.

I’ve spent much of the spare time I had in 2020 working on a complete rewrite of the Paperback code base and I’m happy to relaunch it today. Paperback continues to have the simple utility you’ve come to love with a solid new foundation. Grab a drink and let me tell you a bit about it.

[Skip ahead to the part where I tell you about the features]

A lot has changed in and around the web since I started Paperback in 2013 and yet much remains the same. Snowden had just given an archive of classified NSA documents to journalists, much which would continue to be reported on over the next several years. This led to a recognition of both state and corporate surveillance at levels previously unimaginable. Plain Javascript went out of style only to come back into style a few years later. Monoliths have been torn apart into unmanageable pieces only to be stitched back together and deployed into unmanageable clusters. The world of containerized server infrastructure slowly moved in like a whale, filling up developer hard drives and servers around the globe.

Both change and time can be good and bad and it’s up to us to find the good and bad in it all.

Virtual private servers are great for small and medium size projects. Having to keep a VPS up-to-date is not good fun when you just want your software to run effortlessly.

Containers are good for keeping the interface of your code consistent across environments but are a pain in the ass if aren’t configured and deployed correctly.

Using third-party packages helps to not add more code and more bugs but dependencies are painful to manage if you’re not actively trying.

Not losing customer data is good but keeping customer data around forever is not good.

The technology I used for the rewrite generally doesn’t matter to customers. I could have built the same features using any stack out there. It all came down to my own preference and the amount of time and energy I can put into a hobby project. I won’t make any sweeping arguments for or against any system. I just want to share my thought process on how I designed this system around a few core things:

  • A low-cost, low-maintenance container hosting mechanism that doesn’t require crazy things like load balancers or ingress controllers just to access the server
  • Simple HTML, CSS, and JS that’ll mostly look the same in 10 years for an app that works as well in w3m as it does in a home screen PWA
  • A storage mechanism that respects my customers’ privacy and makes it easier for me to discard data than it does to keep it forever

What I ended up with:

  • A Flask app for server-side HTML with vanilla JS for any interactivity
  • Turbolinks for some SPA-like navigation and client-side caching features
    • When writing this I learned that Turbolinks is no longer under active development and is being replaced by Turbo but thanks to it’s minimal integration points takes only two lines of code to migrate
  • Workbox to help with some service worker caching to get offline support
  • RQ to help offload some slow running tasks and requests (Maciej, if I can lend a hand with API performance I have some PHP P.P.E on standby)
  • Redis to cache Pinboard and article data, all using a default but customizable expiry time so there isn’t any bit clutter
  • Postgres for storing as little customer data as possible like account information and settings
  • Tied together using docker compose
  • Deployed using docker stack deploy and the docker context feature
  • To a VPS running RancherOS for no-maintenance hosting

This is by no means novel or interesting and continues to support one of my original values: “Simple, proven technology; Nothing fancy to see here”. Server-side HTML + Redis + Postgres is the most boring combination ever, which is perfect for me. The more “innovative” parts that I found useful was deploying containers to RancherOS. I’ve long been a fan of boring old virtual private servers and have gotten comfortable over the years configuring and maintaining them. They’re cheap and are workhorses. It has taken a while for containers to become simplified enough for me to go all-in but the coming together of docker-compose with contexts and running a VPS with RancherOS has been the sweet spot for me. I can run a system that’s replicable and scalable, managed in code, with zero server configuration necessary for $5 a month. These are very nice upgrades from having to spin up apache myself.

The last major revision of Paperback used the original PHP-based back end but I had built the app using Angular (before it became the legacy Angular.js). Even at the time of first building the single page app in 2014, I felt pretty uncomfortable with it. The documentation was bad, there wasn’t much on Stack Overflow that helped me out, and I just generally felt like I was walking around in the dark. But at the time I felt resigned to the fact that it was how web apps had to be built to perform well. I continued to add small features bit by bit within the existing architecture but started to feel very limited by the aging and outdated PHP framework I was using and front-end tools I didn’t know how to use. I was happy to tear it all down and start fresh with a bit of regret for my misteps of 2014 (the year the web started dying).

I feel much more comfortable now getting back to basics and knowing that I have an infrastructure I can evolve more easily. It’s another important lesson in picking tools that are right for the job and make a healthy impact.

In America and around the world, we’re going to have to do a lot of rebuilding in 2021. We need to be thinking about how to build back something that’s better than where we’ve been. Something that’s simplified down to the important parts of making peoples’ lives better and more equitable while reducing and repairing the damage we’ve done to our natural ecosystems and climate, and thinking a few steps ahead so we make thoughtful and logical but swift and meaningful progress.

New Features

Here are the highlights:

New data retention policy

By default cached data like unread list from Pinboard or the URL and contents of articles are only stored for 90 days, then they expire. The benefit of this for customers is they don’t have to worry about their data lingering around forever. Most companies work very hard to keep your data forever, whether they use it or not. I’ve designed this update around you having the data you need quick and handy when you need it and gone when you want it. This expiry is configurable so you can make it shorter or longer.

Basic offline support in modern browsers

Most browser now support the ability to cache pages and assets for online use. Paperback now supports seeing your reading list and articles offline. Updating information or actions like marking articles as unread are disabled until and can be done once online again.

If you have Paperback open in a tab in Safari on iOS, you’ll be able to access articles again offline. To make sure Paperback is always accessible offline, add it to your home screen.

Tag-based reading list

You can now use a tag to define your reading list instead of using Pinboard’s “to read” list. Defined in Settings, Paperback’s reading list will be any item with that tag. When you mark the article as read Paperback will remove the tag for you.

Less Popular

Pinboard’s Popular page is great but has lots of stuff I’m not interested in. Paperback has a Popular page but allows you to filters out domains or keywords so you can keep up with what’s hot and stay anti-social.

So many newsletters

I’ve enjoyed the renaissance of newsletters but email apps don’t provide great reading experiences. With this new feature, you get a special address that you can forward emails to. Paperback will host a permanent web page with the HTML of the email, add the link to Pinboard, and parse the email content in your reading list. If you forward as an attachment, you can use the body of the email to add a description to the pin and Paperback will try to parse the headers of the attached email and pin the List-Post URL, if it exists. This works with platforms like Substack to let you pin the Substack permalink instead of the Paperback-hosted HTML page.

Definition lookup

Just selected a word in an article and Paperback will look up the definition. Work on your vocabulary without having to copy/paste.

PDF exports

Export beautiful PDFs for longterm storage or print for offline reading. If you have any highlights, they will be included in the PDF. You’ll get an email with a link to the PDF to download.

See the new Welcome page and the full feature overview.

If you ever have any questions or feature requests, feel welcome to email me at

Log in to start reading smarter.

Yours in unity,

Closing Paperback Registrations

For non-technical reasons, I am closing registrations for Paperback. Paperback has been a personal project and, as such, it needs to follow personal needs and goals. I’m really sorry to do this and hope to be able to make Paperback available to new people again in the future.

I hope you understand. If you have any questions, please email support.

Update (August 2, 2019):

My good friend and colleague, Chris, is going to take over running Paperback until further notice. This hopefully won’t be permanent, but currently, I must cease involvement in Paperback. Everything will continue to work as it always has, he’ll just be fielding your support requests and hopefully maybe even fix a bug or two.

Update (January 13, 2020):

Registrations are open again!


Change Log — April 25, 2019

It’s been a few good years since the last time you heard from me. I’m not dead yet!

Here’s what I’ve been up to. Some of these updates are recent and some are more than a year old that I haven’t even told you about yet:

Send to Kindle and Exports

  • This has been around for a little while but doesn’t show up unless you activate in settings: go to Settings and add your “Send-to-Kindle email address”. This will activate an option in the Export menu when on an article. “Send to Kindle” will package up the article you’re on and, well, send it to your Kindle. This is great for offline reading or for reading long articles on the beach. This also now works with PDFs. So if you have the URL to a PDF saved, Paperback will send the PDF document to your Kindle, as long as it’s not too big.
  • Also in the Export menu, you have options to view the article content as markdown and to download a Word doc of the article.

Improved Selection and Visual Highlights

This is a long requested featured!

  • Now, when you select text and add to notes, either using the “Add to Notes” button or the shortcut t, the text will be visually highlighted in the article.
    • This works by string matching lines of text from the notes field also called “description” in Pinboard. There’s also a new setting where you can optionally prepend an added selection with a >, like a quote in markdown or email. This might help you differentiate selections from your own notes.
  • Along with this feature, the “Add to Notes” button is positioned close to the text you’ve highlighted when on desktop. The button is also less likely to stay in view when you no longer have selected text, which annoyed me.

Other Fixes and Improvement

  • This one I’m embarrassed about: the tag syncing bug. This was first reported many years ago. I was able to reproduce it but couldn’t quite figure out what was going on. I had taken a few attempts at it over the years and finally solved it. Like a lot of bugs, it ended up being something stupid which I don’t need to divulge but tags should be fully working (for the first time).
  • Greatly improved sync times for people with a lot of articles
  • Set wider reading layouts for both the Large and Huge reading widths so that articles aren’t so tight at those sizes
  • Updated site configurations for better parsing of articles
  • Added shortcuts { and } for “Archive and go to Previous” and “Archive and go to Next” respectively
  • Improved alerts and error notification in various scenarios

What’s Next

A couple other feature I’d like to tackle next are: optionally displaying tags in the reading list then being able to filter your reading list by a tag, and exporting to PDF.

Like I mentioned when I started Paperback, it’s more of a hobby project for me than a business so far, so fixes and features come at a hobbyist’s pace. While sometimes I feel sad that I haven’t done more development on Paperback in the last several years, what I’ve done in my life during that time has been incredible. I’ve fallen in love, got married, and traveled the world!

It seems to me that we’re increasingly controlled by the work we do and the platforms we use. Instead, we should be using our work, hobbies, and platforms to enrich our lives, not be beholden by them. I’m proud that Paperback fits like a puzzle piece into my life. It is shaped by my life, rather than it shaping me.

Until next time,

Change Log — January 20, 2016

Time again for the yearly1 bug fix release:

  • New: hitting m in article view submits article content to and displays the article content in markdown text
  • New: y archives, for fellow Fastmail users
  • Improves behavior of navigating in article list
    • Hover doesn’t hijack selected article when paging
    • Selected item properly scrolls into view when paging
    • Changed from j/k looping through list to, added G/gg to navigate to top/bottom, vim-style
    • Properly selects the next item after archiving from the article detail screen
  • Improves print layout
  • Added several custom parsing configs to help parse content on certain sites (email me pages that frequently break for you)

  1. Kind of a joke but not really.↩︎

Change Log — February 23, 2015

I’ve finally been able to fix some long time bugs and test them out to make sure I’m not introducing any new ones:

  • Adds improved authentication to handle case where people could create account and bypass payment
  • Improved sync so the list stores properly after sync
  • Fixes an issue where an article that couldn’t be parsed properly displays the message directing you to the original page
  • Fixes an issue where the page could try to authenticate a few times in certain situations
  • Fixes issue where only a blank page would show after archiving all articles in your reading list

Paperback Is One Year Old

I introduced Paperback to the public one year ago today. In the last year since this launched, many other services have started, exploded in popularity, sold out, or shut down. Yet Paperback is still in its infancy. In the last year, it’s had decent uptime and relatively little support needs. It has also been slow moving in feature development but plans to be around for a long time.

One change I want to announce on it’s first birthday is that Paperback will go from a yearly subscription model to a one time fee.

From the start, subscriptions have been a bit confusing for customers and most support requests I see are about subscriptions.

Coming up to the 1 year mark meant subscriptions were about to renew. As with most services, only a small percentage of overall users and customers are actively using the site on a regular basis and I didn’t want to take “lazy tax” money from people who kept forgetting to cancel subscriptions for a service they weren’t using anymore. Nor did I want to an increase in support requests from people who wanted refunds for the automatic subscription.

It seemed like the best way to go for both customers and myself was to change to a one time fee and cancel any automatically renewing subscriptions from current customers.

But what about ongoing server costs with only a one time payment from users? It doesn’t cost too much per month to run my servers, so the income from the one time fee covers enough costs to operate. When I first launched Paperback, I didn’t know how quickly it would grow, how customers would receive paying for a service, or how much the server costs would be to handle the n number of customers I would get in my first days, weeks, and months. Now I have a pretty good idea of these things and and have adjusted things to the best experience for everybody. Even if no new customers sign up, there’s enough money in the bank right now to run the servers for 3+ years at the current costs.

If you’re an existing customer, thank you. You should see no change in service nor should you be charged again. If you do receive an email saying you’ve been charged for your subscription, please reply to the email and let me know so I can refund you.

Don’t forget to check out the Paperback roadmap to vote on feature requests. As always, if you have any questions or requests send an email or chat with me on Twitter.


Paperback Public Roadmap

I’ve always like Trello. I’ve used it for many projects and enjoyed the flexibility it offered. After reading about how to use Trello as a public product roadmap, I thought that that idea would be a good fit for Paperback. If you look back at the introduction of Paperback last October, I wrote this:

This isn’t a “startup”, it’s a thing that I work on in my free time. I don’t want it to become a full-time job but I do want a respecting relationship between me and you, my customer.

Many startups wouldn’t dare post their roadmap publicly. It’s their secret. But out of respect of you and to help you help me make a better product, I’ve created a public roadmap for Paperback on Trello. I’d love for you to participate by commenting or voting on feature requests or issues you’d like to see addressed. The public can’t add cards or lists to the board but if there’s something you’d like to see on the roadmap, please email me.

Change Log — May 5, 2014

In my last post, The Obvious and The Future, I mentioned reworking the Paperback stack to be less tightly coupled. Well, that’s live now and even though it took a while to get there, I’m happy with what I’ve got. I’ve broken apart the pieces in to their own stronger services. From a high-level, Paperback now (mostly) runs off it’s own API, uses a much better and more customizable parser, and the web interface is a client-side web app which makes it snappy quick.

The Goods - Change Log

Interface updates: Tighter looking, less unnecessary buttons, more buttons where you need them. KISS.

Inline editing: As I was iterating the design of the interface, I thought a lot about the article page feeling a lot like text on paper. On paper, you can cross out, erase, write on, and change what’s in front of you with out going in to a “mode.” I wanted to get as close to that as possible. In this new version, you can edit the title and description/notes in place without having to go in to an edit mode.

I also learned that people using Paperback were taking a lot of notes while reading articles. To make this easier, I changed the Tag and Archive modal in to a sheet that–on desktop at least–sits at the bottom of the page when open, making it easy to type out notes while staying out of the way of the article text.

On desktop, bring up the edit sheet by hitting i (insert mode, like vim), or click the bookmark icon along the left side (at the top and bottom on mobile). Edit mode is still modal on iPhone and iPad because of screen size and annoying bugs in Mobile Safari.

You can add a selection to the notes but selecting text and hitting t (now just lower case t, unlike the previous version).

Making things a bit easier on mobile: We’re in development of the native version using the stable API. A few small new/better things on mobile:

  • Select text will pull up a green button which you can tap to add the selection to notes
  • The Edit modal is slightly less annoying
  • Uses minimul-ui in iOS 7 Mobile Safari to hide the chrome and give you more room to read

Some other cool things/things I’m happy about:

  • This might be one of the only infinite scroll web apps I’ve seen that doesn’t lose your position when you navigate back to the list. That was kind of a pain to pull off but is so worth it.
  • Articles now lazy load in. When you sync new articles in on the list page (hit the sync button in the bottom or hit s), if they haven’t already been fetched and parsed, you’ll see the grey bar load in to indicate that it’s ready and show the relative length of the article
  • The parser is much more customizable. If there are sites that you see that don’t parse correctly, let me know

A thing I’m not happy about: I had to pull tag typeahead out to get this shipped. I tried several times and just couldn’t get an implementation that I was happy with. This release cycle started stretching out really long and I didn’t want to go longer without an update so decided to ship without it. Sorry. I love that feature and will try to get it back in as soon as possible.

A Good Foundation

The way the web app is built now will enable quicker development of features like easier navigation between articles and sorting/filtering/group articles in something that might look kind of like Smart Folders. The API is the foundation that allows us to build the iOS app and other cool utilities.

Thanks again for using Paperback and hope you like the new bits.

The Obvious and The Future

I wanted to give a bit of an update on Paperback, now a couple months old.

What I launched initially was a very simple “blank slate” concept and I’ve been listening to how people use it and understanding more about how I myself have been using it to help decide where I want to go with product development.

The Obvious

The only way to get a great reading experience on iPhone and iPad (the device I like reading on the most) is with a native iOS app. Today I loaded up the first development build in the iOS simulator. There’s still a ways to go with it but work is getting done on it.

The Web

The desktop web is an important part for Paperback. Already there are some slick features for power users and people are using Paperback for real research and work at their desks rather than just reading for pleasure.

How They Come Together

I’m re-architecting the technology stack Paperback uses to prepare for the long term of having both a solid app and web site as well as being able to provide the experience I want in both. The gist is that I see both the app and the web as clients talking to an API1. Having the API run separately means that I can reduce the complexity in having to build logic on each side and in the long run hopefully have a more unit testable and bug-free system. If my API is doing the heavier lifting, like parsing and sync logic then I can rely on lighter clients. I’m building out the existing Paperback features (plus some updates for accessing Tagging and Archiving while on touch screens) with a dynamic Javascript framework2 rather than just having my PHP app rendering the views like they are now. My goals with this move is to have a more reactive and quicker interface on the web while getting on to a framework that will allow for more rich features down the road. A bonus with this is it’ll work as a chrome-less webapp on iOS when you save it to you’re home screen but unlike, you’ll be able to use it in Safari as well. This will be a bit of a stopgap until the native app is shipping.

I think I have a pretty solid feature set in my head for 1.0 of a universal iOS app but if you’d like, send me some thoughts on what you want to see in it.

  1. Private at least until I see a good reason to make it public.↩︎

  2. Angular, if you’re curious.↩︎

Change Log — November 19, 2013

Thank you for using Paperback and all the kind things you’ve had to say since launch. This is the first time I’ve pushed any new features since launch six weeks ago because I wanted to pull back and watch how people were using it and then get my hands back into development with fresh eyes.


  • Added autocomplete of tags in Archive modal, as per requests
  • Added article of title to <title> so you can more easily recognize what you’re reading and find in tabs


  • Improved behavior of Archive modal on iPhone, especially with those pesky toolbars that hide in iOS 7
  • Improved some layout issues in iPhone-sized Article views
  • Fixed text selection bug with Mobile Safari on iOS 7 where selected text wouldn’t be added to the Notes section in the Archive modal until tapping Archive a couple times.

Other Good News

The subscriptions from paying customers so far means that server costs should be covered for the growth and architecture changes that I’m expecting for the first year which means I don’t have to worry about how to pay my bills and can focus on building a service that you can use every day.

As always, email me with any support needs, concerns, or questions.


Introducing Paperback

After about three months since my first prototype, I’m happy to introduce you to Paperback. Paperback is a clean and simple way to read Pinboard articles later. Paperback is a fully responsive web app with a simple experience on both desktop and mobile. If you’re not familiar with Pinboard, it’s a bookmarking service that lets you save URLs, tag them, and if you’ve upgraded, archive them so you have a permanent, offline store of every link you’ve saved.

I started building Paperback because I wanted the reading experience of Instapaper but with the reliable archival system of Pinboard. Paperback gives you a nice clean reading list and article view, free of distraction, keyboard navigation that rocks if you’re on a desktop, and powerful tools for tagging and archiving your articles back into Pinboard’s long term storage.

You can read more about Paperback’s features here.

Since I see Paperback as an extension of the great work that Maciej has been doing with Pinboard, it shares many of the same values:

  • Focus on speed and utility over “social”
  • Reliability
  • Simple, proven technology; Nothing fancy to see here

Paperback costs $15 a year. [Update: As announced on August 3, 2014, Paperback will become a one time fee for the service rather than a yearly subscription.] It’s unapologetically a paid service which allows me to make it a sustainable service. I want it to exist for a long time. This isn’t a “startup”, it’s a thing that I work on in my free time. I don’t want it to become a full-time job but I do want a respecting relationship between me and you, my customer. That means that you pay me for a service because you think it’s valuable and I maintain a service that you can trust. It being a paid service also constrains growth so that I don’t have to “scale” to support freeloaders.

Because it’s not a full-time gig and with that respect thing I mentioned above, I want to make sure I set some expectations:

  • Feature development will be slow and iterative: I am committed to continuously making this service better but it won’t happen at a startup’s pace. I think the current experience is great—I use it everyday—and think you will like what you see. I’m also looking forward to it being better.
  • With a focus on simplicity and reliability: this is a service I use myself. Reading through articles I’ve saved for later is one of my favorite things to do. I grab a coffee, sit down and read something maybe insightful, maybe educational, or maybe something that will make me laugh. I like the simplicity of reading and, like a good book, I want the experience to be simple. I also want it to be reliable so that every morning I can pull up Paperback and it will greet me with a sturdy smile. There’s still room for power-user features (there are already many) but building something that can be simple to use and that is reliable are priorities over any complex features.
  • Support: I’ll provide it in the best, most honest way I can. I can’t promise I’ll respond to every feature request but if you need a hand, I want to be able to respond to you within a reasonable time.

I really hope you love Paperback. Click here to check it out. Please contact me with any questions.