My digital daily planner: a sheet, a script, and a column per day


In grade school, I used a paper “binder reminder” for my daily tasks. After that, I wanted a digital system. I tried Gantt charts, GTD, Asana, Notion, Emacs org mode, Roam. None of it worked better than the binder reminder, so I started with a simple spreadsheet and turned it into a planner that scrolls horizontally through a calendar and vertically through goals. I call it “Projectory”—a projection of the trajectory of my projects.

Spreadsheet with dates along the top and projects down the left. Some cells in the middle have tasks in them. For example, J1 contains 2023.09.30, A5 contains “my website”, and J5 contains “write article about Projectory”. Other tasks are about going to the cardinal tech center, scheduling aquatherapy and eye appointments, organizing gopro footage, investigating espanso, and researching manual chairs and echairs.

A snapshot of my personal project management spreadsheet.

rows represent goals

I previously outlined these goals in my life plan (my Archiridion), and I realized I wanted a more structured way to outline tasks within goals each day. Some of these goals are also categories for sub-goals.

A few fun examples:

columns represent days

I have the columns colored to represent days’ salience in my mind. Today is clearest, and the further a day is from today, the more obscure it is. By my observations, salience is likely logarithmic rather than linear; for example, I can easily distinguish today and yesterday, but events from yesterday seem more proximate to the day before than to today.

For now, I’ve decided I want to train my mind to have a four-day range of salience in either direction of today (including today). So, on any given day, the column for day 0 (today) is white, the ±1 days (yesterday and tomorrow) are gray, the ±2 days (ereyesterday and overmorrow) are a darker gray, and the ±3 days (foreyesterday and aftermorrow, perhaps) are a gray darker than that. Beyond those are the darkest gray.

I achieve this coloration with conditional formatting:

moving along the days

All columns older than three days ago are hidden by a script, which I adapted from this script:

function processProjectorySimplified() {
    var sheet = SpreadsheetApp.getActiveSheet();

    var now = new Date(); // today
    var reach = 3; // span of number of days ago and ahead I want to keep salient; 3 days ago is foreyesterday
    var hideThroughDate = new Date(now);
    hideThroughDate.setDate(now.getDate() - reach - 1); // plan to hide through day before reach date, show from reach date onward

    // Create an array of arrays of the date cells and their dates
    var cellDates = sheet.getSheetValues(1, 2, 1, sheet.getLastColumn()); // All dates in the spreadsheet in row 1

    // Find the index for the day just before the start day.
    // Starting from the left, inspect each item in cellDates and see whether it's the start day.
    var hideThroughCol = 0; // number of columns to hide
    while(hideThroughCol++ <= sheet.getLastColumn()) {
        var then = new Date(cellDates[0][hideThroughCol]); // then is this

        // if equal to hideThroughDate
        if(then >= hideThroughDate) {

    // Bounds check
    if(hideThroughCol > sheet.getLastColumn()) return;

    // Hide all date columns through hideThroughDate
    sheet.hideColumn(sheet.getRange(1, 2, 1, hideThroughCol)); // row 1, column B, for one row, for number of columns defined by hideThroughCol

    // 2021.08.28 set text wrapping to clip for days before today
    var lastFewDays = sheet.getRange(1, hideThroughCol+1, sheet.getLastRow(), reach+1); // add 1 to hideThroughCol to push past project column (column A); add 1 to reach to include last column hidden


Old tasks don’t carry over. This is by design; if I don’t specifically carry a task over, it drifts away rather than cluttering my days.

more notes

On 2021.05.07, I wrote in my Archiridion that I wanted to write a blog post about my project management spreadsheet. More than two years later, I’ve finally written it! Logger.log(“Yay!);

An ambigram formed from an A and an L. It can never be upside down.

like my work?

I appreciate support of any kind, whether that’s sharing this page, telling me what you thought, or treating me to something yummy:

Venmo: @aubrie

PayPal: aubrieality