/cl-ownpress

Publish all the things (mostly as static websites)

Primary LanguageCommon Lisp

Cl-ownpress

⚠️ Published documentation might be lying. I am in middle of re-doing the architecture (including the public API) of cl-ownpress, and am doing docs-first test-driven development. Once I am happy with it, I will create a 1.0 release and do future releases in release branches.

⚠️ Under active development. API/architecture might change without warning.

Practically, cl-ownpress is a static site generator.

Theoretically, its primary objective is to

Give hackers the ability to publish their content while maintaining its ownership.

Goals

  1. Paramount Hack-ability

    Tweaking isn’t sufficient. Hackers should have the freedom of extend, replace and bend the system to their will.

  2. Friction-free development experience

    Ability to hack isn’t sufficient. Hacking experience should be pleasant.

  3. Content ownership

    As users of the internet, we publish a lot of content on the web. It almost always end up in a walled platform, at the mercy of someone-not-you’s whims. Cl-ownpress should bring ownership of user’s published content back to user.

Current state

I am using cl-ownpress as a library to create my personal website (git repo). It allows me achieve my desired publishing workflow.

  • Publish with full power of Emacs

    Most of my writing happens in org-mode. I often tinker it to a great extent, to keep capturing my thoughts/experiments fluent in my computing workflow. I want to turn this liability into an asset.

    Status: Done

    emacs-provider allow interacting with my running Emacs instance, and run emacs-lisp. E.g I use it to:

    1. Publish a directory full of org files to HTML
    2. Publish a subset of my notes as blog-posts

    while delegating the responsibility of actual org->HTML conversion to Emacs itself.

  • Publish a subset of my notes on my blog

    I have a fluent zettlekasten-like note-taking system for capturing my thoughts. Almost all my blog posts are edited versions of these. I want to publish notes which mature enough.

    I also want to publish any linked notes, but in a “certain” way. e.g they should be published, but not listed anywhere on the blog/rss-feeds etc.

    Status: In-Progress

    denote-provider allow publishing notes with specific tags as blog posts. Publishing notes linked inside these notes however is pending.

  • Publish my personal projects

    In addition to taking ownership of where my projects’ source-code is hosted (I might switch away from Github), I want a place where I can express more about my projects. A place to document inception of an idea, its evolution, fantasies about a glorious future; things which aren’t exactly documentation.

    Status: In-Progress

    Right now I am publishing just one of my projects using cl-ownpress (spookfox). cl-ownpress allow me to turn live-code into documentation thanks to Emacs provider and the power of org-mode. It is a starting point, I intend to make publishing projects more powerful. A lot of love and effort goes into every project. I want the presentation of each project to be unique yet integral to my personal website.

  • Publish my toots

    Tooting is convenient, I want my tweets published as micro-posts on my blog until I can turn it around and start publishing my micro-blog posts on mastodon instead.

    Status: TODO

  • Publish discussions from other platforms

    Often, a lot of value can be found in the discussions that a piece of content births on platforms like Hacker News and Reddit. I want these tracked and presented with the published content itself.

    I am still debating whether the discussions themselves should also be retrieved and published along with the content.

    Status: TODO

  • Publish my personal growth

    This is one of the trickiest, and most unclear things I want to achieve on my personal site. I am letting it stay in the back of my head and brew for now.

    Status: TODO

Software Architecture

Cl-ownpress enables building ETL pipeline meant for publishing content. It enable a very simple use-case:

  1. Extract data from multiple sources. e.g. from a Denote direcotry
  2. Transform, enhance and collect it e.g collect e.g enhance collected notes with more information to create instances of blog-post
  3. Use it to publish artifacts e.g convert blog-post’s to HTML+CSS+JS+Image files