historical WWW logo (Robert Cailliau, 1990)
29 Jun '26, maschinenraum
index.html
<!doctype html>
<head>
<title>home</title>
<link rel='stylesheet' ... />
</head>
<body>
<h1>home on my site</h1>
...
</body>
links.html
<!doctype html>
<head>
<title>links</title>
<link rel='stylesheet' ... />
</head>
<body>
<h1>links on my site</h1>
...
</body>
cat.html
<!doctype html>
<head>
<title>cat pics</title>
<link rel='stylesheet' ... />
</head>
<body>
<h1>cat pics on my site</h1>
...
</body>
someone elses pc
web server
ur pc
html+css
html+css
html+css
templates
markdown
this is ur whole site
upload via (s)ftp(s)
winget install RubyInstallerTeam.RubyWithDevKit.3.4
...
jekyll new my-cool-site --blank
cd my-cool-site
jekyll serve --livereload
index.md!
index, it is served
as the root site--- is some meta data
_layouts/ directory
<link rel="stylesheet"
href="{{ "/assets/css/main.css" | relative_url }}">
disregard your content and replace it with {{ content }}
index.md instead_layouts/post.html
---
layout: default
---
{{ content }}
_posts/2026-06-29-hello.md---
title: Hello, World!
layout: post
---
this is my cool post. hello!
_config.yml,
e.g.:
permalink: "/post/:slug"
will put your post at http://127.0.0.1:4000/post/hello
note: if u change anything in _config.yml, you have to restart the
jekyll server!
let’s add some templating to our index.md:
## posts
<ul>
{% for post in site.posts %}
<li><a href="{{ post.url | relative_url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{{ post | inspect }} to see all
properties_includes/_includes/post_teaser.html:<li>
<a href="{{ include.post.url | relative_url }}">
<b>{{ include.post.title }}</b>
</a>
posted on {{ include.post.date | date: "%Y-%m-%d" }}
{{ post.content | split: "<!--teaser-->" | first }}
</li>
we can then add our special HTML comment to our post below the first line:
this is my cool post. hello!
<!--teaser-->
this is the coolest thing evuuurrrrr x3
any only the stuff above the comment will be shown for the
post_teaser.html include
then, in out index.md we can just do our list of posts like this:
<ul>
{% for post in site.posts %}
{% include post_teaser.html post=post %}
{% endfor %}
</ul>
the cool thing: we can pass data (e.g., the post) on to the Include!
yourusernamehere.bau-ha.usGemfile with the following contents:
source "https://rubygems.org"
gem "jekyll"
last step: put this in a file called .gitlab-ci.yml:
pages:
stage: deploy
image: ubuntu:latest
script:
- apt update && apt -y install ruby-full build-essential
- gem install bundler
- bundle install
- bundle exec jekyll build
- mv _site public
artifacts:
paths:
- public
commit your changes and be amazed at the technology:

slides online at: http://jakob.ruckel.de/slides/www-ii/
