When I was younger the fastidious note-taking of U.S. Senator Bob Graham piqued my interest, and some time in college I picked up the habit of writing things down in my own little notebooks in order to help me remember things or give me the ability to refer to them later. Over time I grew dissatisfied with this pen-and-paper solution, because it didn’t give me enough power to analyze my data. What beer did I enjoy the most in October? What was my personal music album of the year? How much sleep did I get on average? Did I actually enjoy my life? In order to find out, I started keeping track in a very large spreadsheet:

A section of my spreadsheet

It is possible I have taken things too far.

I took advantage of Google Sheets for this purpose for a long time, because being able to enter data on-the-fly on my phone while out and about as well as at my PC at night before bed was extremely helpful to me. Unfortunately, this is a highly unorthodox and unholy way to use a spreadsheet, and Sheets tried to tell me so by struggling whenever I would update a couple of fields (due to how many formulas and such I used).

Therefore, I resorted to building something of my own. I named it Pillow-Book, after The Pillow Book of Sei Shōnagon, which feels like a close enough approximation of my app and has a fun name. It is built with Vue.js and Sass on the frontend and python / django / the django rest framework on the backend. I utilized SparkPost for the signup/verification email, a small flask server working with a github webhook for deploys, and a Let’s Encrypt certification handled by certbot.

Pillow-Book

A screenshot of Pillow-Book's home page

Pillow-Book can record data in several categories, the display of which is largely data-driven: you can select which ones appear on your home page, what color the buttons will be and what color they will change to when filled out, how they will be categorized (they will have no category by default), and what icon will appear in their button (you can select between a unicode character of your choice or select a font-awesome icon by name, which is the default). The categories were dictated entirely by my whims and what I was already recording on my own spreadsheet, but I may add more in the future if I get any ideas; they are as follows:

  • Diary: An overview of your day
  • Sleep: How much sleep you get and when
  • Weight: Weight-lifting recordkeeping
    • Weight Exercises: The weightlifting exercises you will select from on the Weight page. Can be created by using the Related option in the site’s navbar from the Weight page. Starts with a few pre-populated defaults which can be deleted.
  • Cardio: Keep track of your cardio exercise
    • Cardio Exercises: The cardio exercises you will select from on the Cardio page. Can be created by using the Related option in the site’s navbar from the Cardio page. Starts with a few pre-populated defaults which can be deleted.
  • Toilet: Records about your bathroom usage, using the Bristol stool scale
  • Sex: Information about your sex life
  • Period: If you are menstruating or not
  • Learning: Things you’ve learned, with an option to include the source url
  • Money: Your expenditures and profits
  • Study: Results of quizzes you take
    • Quizzes: The quizzes you wish to take and track your progress in. Can be created by using the Related option in the site’s navbar from the Study page, after which point they can be selected from the Study page. Starts with a few pre-populated defaults.
  • ToDo: A checklist of tasks you would like to complete, draggable for prioritizing, sortable by rank or pursuit and filterable by pursuit and project.
    • Pursuits: Longer-term pursuits that interest you in life. Pre-populated samples include “Work”, “Fitness”, and “Home Improvement” but could reasonably range from things like “Juggling” and “Flute” to “Investing” and “Relationships”. Can be entered by using the Related option in the site’s navbar from the ToDo page, after which point they can be selected on the ToDo, Pursuit Progress, and Projects pages.
    • Projects: Shorter-term projects that you are working on and expect to complete. Pre-populated with “That Big Work Project” and “Build Porch” to give you an idea. Can be entered by using the Related option in the site’s navbar from the ToDo page, after which point they can be associated with ToDo tasks and Pursuits.
  • Literature: Books you’ve read
  • Film: Movies you’ve watched
  • Television: Television you’ve watched
  • Board Games: Board games you’ve played
  • Video Games: Video games you’ve played
  • Music: Music you’ve listened to
  • Podcasts: Podcasts you’ve listened to
  • Beer: Beer you’ve drank
  • Wine: Wine you’ve drank
  • Cheese: Cheese you’ve eaten
  • Pursuit Progress: Progress towards your goals.
    • Pursuits: Longer-term pursuits that interest you in life. Pre-populated samples include “Work”, “Fitness”, and “Home Improvement” but could reasonably range from things like “Juggling” and “Flute” to “Investing” and “Relationships”. Can be entered by using the Related option in the site’s navbar from the ToDo page, after which point they can be selected on the ToDo, Pursuit Progress, and Projects pages.
  • Cooking: Meals you cook
    • Foods: Enter food items here which you will want to utilize on the Meals, Recipes, and Groceries pages. You can enter nutritional details and include barcodes as well, for easier lookup and macro information when it is implemented at a later time. This page is technically for basic grocery components, but can also include whole meals if you want to forgego using the Recipes page.
    • Recipes: Enter recipes here which you will want to utilize on the Meals and Cooking pages. Once you create a recipe you can add ingredients (and their quantities) from what you’ve entered on the Foods page (total recipe nutrient value calculation will be added at a later date).
  • Groceries: Food you buy, selected from entries on the Foods page.
    • Foods: Enter food items here which you will want to utilize on the Meals, Recipes, and Groceries pages. You can enter nutritional details and include barcodes as well, for easier lookup and macro information when it is implemented at a later time. This page is technically for basic grocery components, but can also include whole meals if you want to forgego using the Recipes page.
  • Meals: What you eat. You can include multiple Recipes and Foods for a meal. For example, a Chicken Parmesan Recipe comprised of the Food items Chicken Breast, Parmesan Cheese, Mozzarella Cheese, Basil, and Tomato Sauce can also be paired with the Food items Broccoli and Capellini in order to include everything in a single meal. Further down the line I will add nutrient calculation to this, as well as interoperability with the Cheese, Wine, and Beer modules.
  • Travel: Places you’ve visited. The Google Maps integration does not currently work due to API changes and will be replaced when I get around to it.

Entering data is currently the only thing that the web interface allows, because I had been running queries on the database myself to look at and play with the data. However, as my brother has now started using it, I have a couple of major improvements that I hope to have added by the end of 2019:

  • An overview page with a filterable, sortable table to view all of your data à la the spreadsheet I mentioned above
  • Some fun graphs to track a few categories:
    • Nutrients consumed, pulled from Meals
    • Tasks completed on the ToDo list
    • Results from Quiz results stored in the Study module
    • Profits/expenditures entered in the Money section
    • How much Sleep you get each night