Build logJul 2024/5 min read

Making my physical journal ctrl-f able

My bookshelf is full of precious lectures, ideas and adventures. It fills me with pride of a life well lived and thoughts well thought, then dread, because I regularly need one specific entry buried in that mess. I want to ctrl-K my bookshelf.

I’m going through my funemployment right now, so I’ve been using no-code and AI tools to automate away the trivial things that marginally annoy me every day. This is project one.

Context

Since I moved to Europe I’ve been journaling a lot. Lectures I’ve sat through, things I’ve learnt, memories from travelling, all my innermost thoughts. Loads of cool stuff, to me anyway.

The problem is they’re an unorganised mess, so I can never find anything. I went looking for one page from a conference three years ago and it took me half an hour of messing around.

Hunting through the pile, I realised how fragile it all is. My dad has a history of accidentally setting kitchens on fire, and I’m a more accident-prone version of him. Those who know me know I’ll probably destroy these notebooks soon.

So the goal was a tool where I write my notebook out by hand and push it into the cloud, searchable and easy to read. I still get to write things down physically, and until Notion paywalls me, my thoughts are secure and searchable.

How it’s built

Nine steps in Zapier, two of them little JavaScript blocks. I photograph a page and it comes out as a Notion entry I can search.

  1. Google Drive

    1. New File in Folder

    The photo of the page I’ve just written.

  2. Nanonets

    2. Extract text from photo

    Finds the labelled sections and writes them straight into Sheets.

  3. Zapier

    3. Delay For 1 min

    Gives Nanonets time to finish writing its rows.

  4. Google Sheets

    4. Get number of pages in journal entry

    An entry usually runs over more than one page.

  5. Zapier

    5. Get number of pages

    Makes it a number the next step can use.

  6. Google Sheets

    6. Lookup Spreadsheet Rows (output as Line Items)

    Pulls every page of the entry back as one list.

  7. Zapier

    7. Format raw text to markdown

    The markdown I wrote on the page becomes real markdown.

  8. Notion

    8. Create Database Item

    One item in my Physical journal database.

  9. WhatsApp

    9. Send Message

    Tells me the entry has landed.

The stack

  • Google Drive · One folder. Every photo of a page lands here.
  • Nanonets · Reads the photo and finds the labelled sections.
  • Google Sheets · One row per page.
  • Zapier · Runs the nine steps, counts the pages, and formats the text to markdown.
  • Notion · The Physical journal database. One item per entry.
  • WhatsApp · The ping when an entry is done.

The paper page does some of the work

The page is marked up before I photograph it: a label for the heading, a label for the entry, and markdown by hand. Nanonets looks for those labels on the way through.

A handwritten journal page on grid paper. The top line reads HEADING: Demo to push journal to Notion. Below it a section marked ## Why this is awesome says it works, I can finally handwrite my shitty scrappy notes and it goes to Notion, listing that it is searchable, that I am not scared of losing my notes when my Soviet era apartment floods, and that it makes me feel like a coder. A second section marked ## Future features lists adding labels to categorise, specific text templates, training the OCR on my handwriting, code blocks via markdown, and getting ChatGPT to tidy up the raw text.
The HEADING label and the ## marks are there for the OCR to find.

Two hashes in biro come out as a real heading in Notion. That’s step 7.

Nanonets writes one row per page and pushes straight to Google Sheets. Zapier then cleans and combines those rows into one tidy Notion entry: the heading as the title, the scanned file name, a link to the original photo, and the content.

Learnings

That page came out the other end like this.

The Notion Physical journal database with eleven entries, and the demo entry open beside it. The entry is titled Demo to push journal to Notion, created July 1 2024, tagged Physical Journal, with the scanned file name and a Google Drive link above the content.
One item per entry, tagged Physical Journal, with the file name and a link back to the original photo.

The headings and the numbered list survived the trip. The words inside them did not.

1. Its searchable
    mood 2. I’m when not scored 261bSoviet of lusing era apartmet my notes in a storm my floods
2. It makes me feel like a coder
Three list items became two, and my Soviet era apartment became a 261bSoviet era apartmet.
  • The structure survives better than the words do. Headings and numbered lists come through clean, and the sentences inside them are a mess.
  • My handwriting is the bottleneck. The OCR doesn’t always catch the right words and some of the spelling comes out weird.
  • The link back to the original photo does the work the text can’t. OCR won’t read my drawings, so for those pages the photo is the record.
  • The tool is very generalised and my entries aren’t. A daily journal entry, a travel entry, and me trying to think through a specific thought are all different shapes.

Next steps

What’s still broken

  • The OCR guesses at my handwriting, so entries arrive with the wrong words, odd spelling, and occasionally one fewer list item than I wrote.
  • Nothing fixes the text after the OCR. Step 7 turns it into markdown, it doesn’t correct it.
  • Google Sheets is in the middle purely as a bridge, because Nanonets doesn’t connect to Notion directly.

What I want to build

The demo page had its own list of future features on the back half, so here it is.

  • Add labels to categorise, so I can run specific entries through different flows.
  • Make specific text templates for better formatting, so daily entries, travel entries and thinking-out-loud entries each get their own shape.
  • Train the OCR to recognise my handwriting.
  • Learn to initiate code blocks via markdown. Notion’s pretty overpowered and this is the hardest one.
  • Get ChatGPT to tidy up the raw text so it’s more coherent.

This feels like my first dive into using AI to automate my own world. There is so much potential and I actually feel overwhelmed by the number of ideas I’m jotting down. Thankfully now it’ll be easier to keep track of them all.

Dillan Patel
Written by DillanHead of Technology at Nalsun Imports. Automating my dad off the warehouse floor, one Saturday at a time.