The Featured Projects section from the DocOps Lab landing page, showing cards for several projects.

Much of this website consists of representations of DocOps Lab projects, in different orders and forms.

Project metadata is stored in the _data/docops-lab-projects.yml file, which is the canonical source of truth about the numerous codebases DocOps Lab maintains. At least, it represents the sole source of most of the data it contains, though at any given point some part of that file is likely out of sync with reality.

Nevertheless, some aspects of this sourcing and output strategy are pretty extreme and therefore worth blogging about.

Source Files

Effectively all of the information about DocOps Lab projects on this site is single-sourced, though some of it is sourced (once) in different places.

Most of it is sourced in the docops-lab-projects.yml file, which we will dive into shortly.

The content of the code snippets used in this post is subject to change. When the blog next builds, the live data will be transcluded into the code blocks on this page, and the text around them should remain accurate.

The above note is single sourced at _snippets-may-change-note.adoc so it can be embedded in multiple posts.

A small amount is sourced in the README.adoc file, as data attributes. This includes the text for each of the Featured Projects cards on the landing page, which are also expressed in the README file itself.

Snippet from README.adoc
:docops-box-desc: A Docker-containerized environment and shell script for reducing the complexity of setting up “developer tools”. Non-developers can run a single command (`docksh run`) and instantly access whole runtimes and specialized documentation tools in a pre-configured shell environment.
:docs-as-code-school-desc: Structured education in modern technical documentation and document processing. Starting with “Deep Semantics” (Fall 2025?) and expanding to courses on version management, code-like workflow adoption, and legal document operations, this project uses docs-as-code to teach docs-as-code principles.
:ayl-docstack-desc: AsciiDoc. YAML. Liquid. A three-language approach to managing complex, multi-variant documentation. This “tech stack” maximizes power while minimizing syntax overhead, making advanced documentation techniques accessible to beginners while remaining powerful enough for enterprise needs.
:schemagraphy-desc: Extends YAML through SGYML and accompanying libraries, providing advanced data typing and document transclusion capabilities. Provides a full-featured schema language that allows users to define complex data structures, document structures, and whole interfaces in a single, unified format.
:jekyll-asciidoc-ui-desc: A set of Jekyll plugins and themes that enrich AsciiDoc web output. Includes themes like AsciiDocsy and Just The AsciiDocs, plus plugins for Jekyll-OpenAPI integration, adocBook document converter, and 25 UI extensions for AsciiDoc.

Data Structure

The docops-lab-projects.yml file is basically a large array of tabular data. Each project’s record has a number of parameters.

  - name: DocOps Box
    slug: docops-box
    type: environment
    desc: |
      Everything needed for managing customized Ruby, Node.js, Python, and Pandoc environments via Docker containers, ready for interactive work.
      Including the popular ZShell with handy configurations.
      Alternatively builds a production-ready ("live") image for automation/deployment.
    line: Up and running with Ruby, Node, Zsh, Pandoc, and Git for document operations with interactive and production-ready Docker images.
    star: true
    page: true
    done: 90%
    vrsn: 0.1.0
    wave: 0
    card: readme
    icon: container
    tech: [Docker,Bash,Zsh,Ruby,Git,Pandoc,Node.js,Python]
    tags: [development,automation,containers,virtualization,Dockerized]
    sort: 1

I think most of the above data record is mostly self-explanatory, but a few fields merit highlighting.

I also added a concept of custom cards, which are defined in another file: _data/cards.yml. As of now, it contains only one card record.

- name: Issuer and ReleaseHx
  type: utility
  card: |
    Issue-ticket creation and release-history management tools that integrate with Jira, GitHub, and GitLab. Bulk-create work items from a single YAML file, then generate release notes and changelogs in AsciiDoc, Markdown, YAML, JSON, HTML, or PDF formats at release time.
  icon: logs
  sort: 6
  href: /blog/issuer-releasehx-news/

This is all pulled together using simple Liquid assignments and filters.

{% assign starred_projects = site.data.docops-lab-projects.projects | where: 'star', true %}
{% assign featured_projects = starred_projects | concat: site.data.cards | sort: 'sort' %}

Project Profiles

Project profiles come in micro, mini, and page sizes.

The micros are for card-based representations, such as the Featured Projects section on the landing page, or pages that group projects in ways that might involve repeated instances of the same project in the output, such as the Projects by Technology and Projects by Category pages.

The minis are for the project detail sections that appear on the Projects Overview page, which includes a lot more information about each project, but still in a compact format.

Finally, some projects have their own dedicated pages, such as Docs-as-Code School. This is the most comprehensive representation of a project.

I can even re-create one here in this page using Liquid templates.

Up and running with Ruby, Node, Zsh, Pandoc, and Git for document operations with interactive and production-ready Docker images.

A Docker-containerized environment and shell script for reducing the complexity of setting up “developer tools”. Non-developers can run a single command (docksh run) and instantly access whole runtimes and specialized documentation tools in a pre-configured shell environment.

The above “mini-profile” expression was called with this Liquid code:

{% include project-profile.html slug='docops-box' %}

Note how the style for this page remains largely intact in affecting the profile rendering.