A while back, I started experimenting with a way of storing my bookmarks (read: my random text document full of untitled links) as a Markdown document, which I affectionately dubbed "MarkMark" — a standard format for links, descriptive text, tags, and dates. Here's a sample from my bookmarks:

# Cycling

- Spencer McCullough's bike trip to 48 national parks (+ an excellent bike camping map)
    - https://onelongtrip.bike/
    - https://gobikecamping.com/map
- Helmet Wind Straps
    - https://youtube.com/shorts/8-Ph6CjKopY?si=QGVb7HrKT7FejGZI
- A love letter to bicycle maintenance and repair
    - https://tegowerk.eu/posts/bicycle-repair/

I published MarkMark v1.0 back in November 2023 (!!), but I never fully started using it for two reasons:

  1. I wanted to be able to organize and syndicate links by date, and
  2. more importantly, adding a link meant committing a change to my website code and fully re-deploying it every time.

Since I've been feeling the urge to tinker, I've made some changes to help with both.

v1.1: It's all about that date

I love RSS and the indie-web (see here) and one of the main ways I discover new parts of it is thanks to fantastic link blogs like Jason Kottke and LinkMachineGo.

While I'm not running a link blog, and I have no delusions of readership, I like the idea of being able to syndicate my bookmarks via RSS.

This would work if my MarkMark document was organized by date, but, since it's not, an update to the spec was required. MarkMark v1.1 introduces a date notation for links:

- A fantastic link title goes here  (2025-01-09)
    - https://example.com/home

The dates are optional, but give me a way to track when links were added to my bookmarks, which means I can now generate an RSS feed.

My current implementation publishes feed entries for each link in my bookmarks that has a date, along with the title of its section, description, and URL(s).

You can find these feeds in RSS, Atom, and JSON format on the links page.

The deployment process for my website isn't difficult, but it does require a Docker build, which turns out to be too much work every time I just want to save a link.

As I mentioned in my Default Apps 2024 post, my knowledge base of choice is the self-hosted version of Outline, which I have found to be quite good. One of the things I like about Outline is that it stores document contents as Markdown internally and has a well-documented REST API (you can probably see where this is going).

The /links page now, with some caching, reads my MarkMark document directly from my Outline instance rather than a hard-coded file. Since MarkMark is just a subset of the CommonMark syntax, I can make use of Outline's markdown formatting for headers, lists, links, and code:

I did have to add some special logic to undo the escaping Outline adds to the MarkMark preamble (the lines starting with [//]:).

This is way easier to add to/organize day-to-day, and the updates get pulled into my website and RSS feeds automatically.

Future Work

I want to build a Firefox extension for saving links to my MarkMark document in Outline — something where I can click the button on a webpage and pre-fill the title, description, and today's date. It'll have to use the Outline API to load the list of categories and tags, then my MarkMark parser collection to add the link and update the Outline document automatically.

More generally, I like this idea of building semi-dynamic integrations using Outline. I already use it to draft all my blog posts before publishing. It reminds me a lot of the halcyon days of the old web. I wonder if there are any other uses.

One of my themes for 2025 is to work smaller — build smaller projects, write smaller (more frequent) posts, read smaller sources, &c. The MarkMark spec and its small collection of tools feels like a good way to start.