All Projects â†’ artagnon â†’ Clayoven

artagnon / Clayoven

Licence: mit
💎 beautiful website generator for math, code, and articles

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Clayoven

Pygreen
A micro web framework/static web site generator.
Stars: ✭ 171 (-14.5%)
Mutual labels:  static-site-generator
Nanogen
Minimalist static site generator in Node.js
Stars: ✭ 180 (-10%)
Mutual labels:  static-site-generator
Staticsitegenerators List
A comprehensive, partially automatically generated comparison of static site generators
Stars: ✭ 190 (-5%)
Mutual labels:  static-site-generator
Bedrock
Bedrock is a static site generator to create large-scale HTML prototypes and document design systems
Stars: ✭ 175 (-12.5%)
Mutual labels:  static-site-generator
Vanilla Back To Top
Simple and smooth Back To Top button
Stars: ✭ 179 (-10.5%)
Mutual labels:  static-site-generator
Gulp Site Generator
A static site generator using Gulp
Stars: ✭ 183 (-8.5%)
Mutual labels:  static-site-generator
Elmstatic
Elm-to-HTML static site generator
Stars: ✭ 170 (-15%)
Mutual labels:  static-site-generator
Jamstack Web Starter
Static website workflow utilising Eleventy, Tailwind CSS, Webpack and PostCSS.
Stars: ✭ 198 (-1%)
Mutual labels:  static-site-generator
Monobase
React static site generator
Stars: ✭ 180 (-10%)
Mutual labels:  static-site-generator
Bael Template
Brutalist Blog theme for Netlify CMS
Stars: ✭ 187 (-6.5%)
Mutual labels:  static-site-generator
Lego
A fast static site generator that generates optimised, performant websites.
Stars: ✭ 176 (-12%)
Mutual labels:  static-site-generator
Notablog
Generate a minimalistic blog from a Notion table. [WIP]
Stars: ✭ 177 (-11.5%)
Mutual labels:  static-site-generator
Gatsby Docker
Develop & Build GatsbyJS static sites within Docker.
Stars: ✭ 184 (-8%)
Mutual labels:  static-site-generator
Fornax
Scriptable static site generator using type safe F# DSL to define page templates.
Stars: ✭ 175 (-12.5%)
Mutual labels:  static-site-generator
Quokka
LOOKING FOR NEW MAINTAINER - Quokka is a Content Management System - `docker run --rm -it -p 5000:5000 quokka/quokka`
Stars: ✭ 2,198 (+999%)
Mutual labels:  static-site-generator
Baumeister
👷 The aim of this project is to help you to build your things. From Bootstrap themes over static websites to single page applications.
Stars: ✭ 171 (-14.5%)
Mutual labels:  static-site-generator
Nikola
A static website and blog generator
Stars: ✭ 2,221 (+1010.5%)
Mutual labels:  static-site-generator
Gulp Webpack Starter
Gulp Webpack Starter - fast static website builder. The starter uses gulp toolkit and webpack bundler. Download to get an awesome development experience!
Stars: ✭ 199 (-0.5%)
Mutual labels:  static-site-generator
Firn
Org Mode Static Site Generator
Stars: ✭ 198 (-1%)
Mutual labels:  static-site-generator
Post Scheduler
Schedule posts & content updates for static websites (Jekyll, Hugo, Gatsby, Phenomic etc)
Stars: ✭ 184 (-8%)
Mutual labels:  static-site-generator

clayoven logo

Maintainability Test Coverage

clayoven is a beautiful static site generator with a carefully curated set of features. It has been built at a glacial pace, over a period of eight years, as my website expanded in content. I have a spread of mathematical notes, both typeset and handwritten, software-related posts, and some wider-audience articles; it suffices to say that clayoven is good on all three fronts. The source files are written in "claytext", a custom format built for elegance and speed.

rdoc documentation is available at clayoven.artagnon.com.

Unique features

  • Small! ~500 lines of well-written Ruby.
  • Beautiful and easily extensible markup, with a dedicated vscode plugin for it.
  • Automatically picks timestamps from git history, respecting moves.
  • Server-side rendering of math, including commutative diagrams, via MathJaX and XyJaX.

Getting started

There is no published gem. To get started, clone, run bundle to install the required gems, and put bin/clayoven in $PATH. Then, run clayoven init in a fresh directory. To start writing, install vsclay for vscode, which will provide the necessary syntax highlighting, and trigger-[incremental build]-on-save functionality.

The claytext format

Here's an excerpt of claytext, illustrating the main features:

vsclay demo

The site-generation engine

All site content is split up into "topics", to put in the sidebar, each of which can either serve as an index to a collection of ContentPages (as a bunch of .clay files in a subdirectory with the name #{topic}), or a single IndexPage (named #{topic}.index.clay). index.clay is special-cased to serve as the root of the site.

So, if you have these files,

.vscode/...             # provided by `init`
.htaccess               # provided by `init`
lib/...                 # provided by `init`
design/template.slim    # provided by `init`
index.clay              # provided by `init`
scratch.index.clay      # provided by `init`
404.index.clay          # provided by `init`
blog.index.clay
blog/personal/1.clay
blog/math/1.clay
colophon.index.clay

clayoven automatically builds a sidebar with index, blog and colophon (each of which are instances of IndexPage). /blog will have links to the posts /blog/personal/1 and /blog/math/1 (each of which are instances of ContentPage), under the titles personal and math (the "subtopics"). If there multiple ContentPage entries under an IndexPage, the latter simply serves to give a introduction, with links to articles automatically appearing after the introduction. IndexPage and ContentPage are run through the same design/template.slim, and the template file has access to the accessors.

The engine works closely with the git object store, and builds are incremental by default; it mostly Just Works, and when it doesn't, there's an option to force a full rebuild. The engine also pulls out the created-timestamp (Page#crdate) and last-modified-timestamp (Page#lastmod) from git, respecting moves. ContentPages are sorted by crdate, reverse-chronologically, and IndexPages are sorted alphabetically.

Usage

  • clayoven init to generate the necessary template website.
  • clayoven to generate html files incrementally based on the current git index.
  • clayoven aggressive to regenerate the entire site along with a sitemap.xml; run occassionally.
  • clayoven httpd to preview your website locally.

Configuration

  1. .clayoven/sitename is URL of the site, excluding the https:// prefix.
  2. .clayoven/hidden is a list of IndexFiles that should be built, but not displayed in the sidebar. You would want to use it for your 404 page and drafts.
  3. .clayoven/tz is a timezone-to-location mapper, with lines of the form +0000 London. clayoven digs through the git history for locations, and exposes a Page#locations.
  4. .clayoven/subtopic is a [subtopic directory]-to-subtitle mapper, with lines of the form inf ∞-categories.

The claytext processor

The claytext processor is, at its core, a paragraph-processor; all content must be split up into either plain paragraphs, or "fences" (multiple paragraphs delimited by start and end tokens). The function of most markers should be evident from the scratch.html produced by a clayoven init. The format is strict, and the processor doesn't like files with paragraphs wrapped using hard line breaks.

Transforms::LINE matches paragraphs where all lines begin with some regex, and Transforms::Fenced match fences (could be multiple paragraphs) that start and end with the specified tokens. In addition to this, there are inline markdown markers `...` and [...](...), for content that is to be put in <mark> and <a>, respectively.

Tips

  • Check in the generated html to the site's repository, so that eyeballing git diff can serve as a testing mechanism.
  • If you accidentally commit .clay files before running clayoven, running it afterward will do nothing, since it will see a clean git index; you'll need to run the aggressive variant.
  • Importing historical content is easy; a git commit --date="#{historical_date}" would give the post an appropriate creation date that will be respected in the sorting-order.

Planned features, and anti-features

  • Intellisense support for MathJaX in vsclay.
  • Anti: extending claytext in ways that would necessitate an ugly implementation.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].