Digital Gardens

When I started this project, I wanted to have a place to write about my thoughts. Thoughts including items from my development experience, the books that I've read, the places that I've been, and anything else that pops into my brain.

I wanted a place where I can share these thoughts, practice my writing, and connect with other people. I knew I wanted a simple, static blogging platform to post these articles. I quickly ran into the 'Perfection, Procrastination, Paralysis' problem - a blog post needs to be perfectly crafted, well written, and visually stimulatiing.

Rather than sitting around poring over a single document and fretting over little details before I publish, I'm publishing drafts, random thoughts, and simple lists. As these thoughts formulate in my head, I can easily go back, make the edits, care for each of these thoughts, let them grow, prune them back. The goal is to get the thoughts out in public, let the see the light of day, and focus

I've designed a system where these articles can live. They can be quickly edited and reworked

Design

This site is a simple Django application. There's a blog app with a basic Article model.

All articles are markdown files, composed locally, then pushed to a GitHub repo.

There's a cron job on the server that runs every hour that performs the following steps:

  • git pull from my articles repository to pull down latest changes Need to find a better way to do this, but this works for now
  • run a django manangement command that:
    • Gets all the markdown files in the local repository
    • Looks at the last_modified time of the file
    • If the file had been modified since the post last changed in the db, update the db with the latest changes

Using git pull from cron is generally considered a bad idea. If they're is a merge conflict it's not going to be able to get resolved through cron. However, since we are working with markdown files, and the flow is very basic, we can get away with it

Future Plans

  • Do something with labels added in the metadata. Search or group by label
  • Group by date, show month headers