How I Organise (most of) my Files
I first thought about the concept of a personal knowledgebase when I looked at Notion a few years ago. I quickly fell off this idea because Notion was online only at the time (this alone was a dealbreaker, and I think their offline functionality is still not quite there, from what I've heard), and I need support for arbitrary files of any kind. Plus, Notion seems pretty proprietary and that doesn't work for me.
Fast forward to six months ago and someone linked to Johnny Decimal which appealed to me because it uses your computer's filesystem. However, it was still too strict for me. I read about it then, as is customary, set about designing my own file-based structure to suit my own needs.
The thing I like about Johnny Decimal is there's an inherent chronology in the naming convention. Each folder gets its own 3-digit code, which means you always know which folder is newest. This is cool but a bit limiting. I broadened my capacity to allow for any prefix code, depending on the type of content in a folder, then in leaf folders, completely foregoing the code. So for normal directories, I use a 3-digit numeric code, but for my monthly newsletter, the code is YYYY-MM
, and for the root folder, the code is a 3-letter representation of the subject, so Buffalo stuff is in a folder called BUF Buffalo
, and freelancing stuff is in FRL Freelancing
. This allows me to cd
to the appropriate folder, or narrow down most fzf
s using only 3 letters. It's pretty useful.
This inherently forces me to keep my structure to a rule, but gives me the freedom to create new structures for different areas of my life. The way Johnny Decimal achieves this is by having different instances, but that is incompatible with my attention span. I need one directory to cater to all my chaos stuff.
I have allowed each folder to have a sub-folder with this 3-letter naming convention, but no more than that. In general, I prefer flat structures. This allows me to have things like my BUF folder, with client-namespaced stuff inside, which looks something like BUF Buffalo/CLN Client Name
, but we don't go any further than that or things start to get a bit difficult to traverse.
My default is to use Markdown for everything, and I wish everyone else's was too. We'll get there.
Software
I have two main pieces of software I use to co-ordinate this: iA Writer and neovim.
iA Writer is an excellent piece of software for editing Markdown, and it works on all my main GUI platforms (iOS, iPad OS, Mac OS). It has good support for folder structures and Shortcuts (more about that later).
neovim is a modern implementation of Vim which I like very much, mainly for its LSP, and Lua support.
iA Writer is my default, but in cases where I'm doing anything codey within this structure, I'll drop into a tmuxinator project so that I can easily run code from neovim in Vimux. This is especially useful for mini-projects I do for clients, like condensing a huge CSV to usable data, or writing an importer or something like that. Stuff I don't want in their git repo, but I also want to have some persistence.
I use Shortcuts for quick writes. The main ones are bookmarks - if I find a cool URL or YouTube video, I run a Shortcut which creates a new Markdown file containing the URL and title of that URL in the current newsletter month. I then have a Ruby script that concatenates all the files for that month into a single Markdown file that eventually becomes my monthly newsletter. The reason for doing it this way is iCloud sync. I was having trouble where I flip between devices to edit a single file - it kept getting out of sync, so creating a new file for each link stops this from happening.
I also have a quick note shortcut - this opens up a new file in my SYS/INBOX
directory that just quickly lets me get something out of my head. SYS is a special directory that contains things that handle the general running of this system. It contains useful scripts in SYS/BIN
, documentation and a scratchpad file in SYS/DOC
, a README, and the aforementioned INBOX
. It's a place to keep all hacks/disorganisation before I can organise it.
Principles
This system (and, I daresay, all systems like it) runs on 3 principles: read, write, organise. I want all of these things to be quick, but independent of each other. I want to be able to read things that aren't organised and write things without having to figure out where they go in my structure first.
For me, this is absolutely critical to running a system like this. I struggle terribly with the Doorway Effect, and having an "I have an idea" process that is just for capturing a thought helps me a lot. Not completely, but a lot.
Organise
This was the main blocker in being able to implement a system like this. Before, I basically worked out of my Downloads folder. Clients would ask me to extract information from a file for them so I'd download it, work on it there, and then after 3 years my downloads folder was pure chaos. I don't like to delete code because clients rarely have the same problem once, but finding the right scripts was a pain if I hadn't run them in a year. One of the main motivations for all of this is being able to have an easily searchable archive that I don't have to delete anything from. Obviously, anything with customer data gets anonymised once I have extracted what I need from it, just in case you were wondering.
Write
I almost never write directly to the correct place. At first I thought that this was a symptom of my structure being too complex, and maybe it is but my brain just doesn't work in this way. My primary requirement is fast writes. Reads can be relatively slow, in most cases. this is solved by my Shortcut. By default, iA Writer will open a new file when you ask it to open a directory, so I just start writing, or pasting, or I forget why I'm there in the first place and go back to doing something else. iA Writer doesn't seem to save files until you have a line-break in there, or switch focus on a non-empty file.
Then, whenever I feel like it, I'll go through my notes inbox and move everything to where it needs to be, or delete it if it's no longer needed.
I essentially plagiarised re-invented Drafts, but without the monthly subscription. I love Drafts, but I won't pay a subscription for a text field. They do a pretty good job of leaving you alone if you're using it for free, but I hit the paywall too often for my liking. For a very long time, I just used a scratchpad markdown file but that would occasionally get very long and I'd end up removing things because of how long it was. That was definitely indicative of poor design.
I have a couple of other Shortcuts for writes: a Shazam one which runs Shazam then logs the result to a file, a Quote one that pops up a text box I can paste or type a quote into, and the Bookmark one I mentioned before.
Read
All of the above makes reads very easy. Not necessarily super quick, but I almost always inherently know where something is just by virtue of what I'm looking for. There's no ambiguity because my folder structure gets more and more specific as you get deeper, so I'll tend to do an fzf
(or equivalent) for the file I'm looking for, then if I don't find it, I'll start at the project I know it's in, and work my way down. Then I'll make a decision about whether I need to change some filenames to reflect what failed in fzf
so I can find it easier next time.
Project Templates
Most of our clients have the same types of requirements when they need things. Meeting notes, code snippets, mini projects, estimates (I can't tell you how often I give an estimate then forget what it was and where I gave it), guides, documentation. So I created a folder structure, which lives in BUF Buffalo/001. TPL Project Template
- a bit of a mouthful but the 001. ensures that it always lives at the top of the folder and never looks like an actual project. I duplicate, rename, and then I have my new project. Not everything gets used but it doesn't need to right away.
Todos
I still run this out of Things. I think I probably always will. I do not use Things to its full potential. I pretty much have the same sort of structure in Things as I do in my knowledgebase - all my clients have a project, then todos go in there. When I create a todo, I add the project, a title, the date I think I'll do it (so it shows in Today on that date), a link to where it originated (either Basecamp or email - Mimestream has a cool offline "copy link to email" thing that I think probably just uses schema URLs), any additional information, maybe a checklist and a deadline if it's needed by a certain date.
I haven't thought of a good way to replicate this functionality into my knowledgebase yet. I'm leaning towards the fact that it should be disconnected. I need to be able to link to my knowledgebase files from Things, which is something I'm working on at the moment, but Things has pretty decent Markdown support so it's not super high priority right now. It does seem to get quite sluggish when you write a lot in there, though.
And that's it
That's how I organise my stuff. It's gone through a lot of iteration in the last 12 months, but I'm very happy with where it is now. I don't necessarily recommend anyone else do it this way, but maybe there's something above that gives you an idea for how to make yourself a bit more organised. Or maybe it just makes you angry that I'm not using Obsidian like I should be, or whatever the new hotness is for YouTube personal organisation influencers (A Thing) but, considering my temperament (magpie) and my job, I am extremely slow to change things like this, and to adopt new things. I tried Obsidian again recently and it's still not for me, but whatever helps you get organised! Feeling like you're being organised just isn't enough, sorry.

View from iA Writer

View from neovim

My super simple Quick Note shortcut

My extremely complicated Bookmark Shortcut