Unit 01 · lesson

What Jekyll Actually Does

Jekyll's README calls it a static site generator and describes a file-based workflow: content goes in, Markdown and Liquid can be rendered, and a complete static site comes out.

That sounds simple.

It is simple.

But simple does not mean magical.

A build has inputs and outputs

Think about a Jekyll project as a transformation:

INPUTS
HTML / Markdown
front matter
Liquid templates
layouts
includes
data
configuration
assets

JEKYLL BUILD

OUTPUT
HTML
CSS
JS
images
other static files

Jekyll reads the source tree, determines which files it should process, applies configuration and templates, and writes the resulting site to a destination directory, normally _site.

Some files are transformed heavily.

Some are copied almost unchanged.

Some special source folders such as _layouts, _includes, _data, and _posts help Jekyll build the output but are not simply copied as public folders with those names.

You will prove each of those statements later. For now, build the model.

Why not just write HTML?

You can.

A one-page site might not need Jekyll at all.

Jekyll becomes useful when repeated work appears:

  • ten pages need the same navigation;
  • project pages share the same structure;
  • content needs metadata;
  • a list should be generated from data;
  • posts need consistent layouts;
  • the same source must build predictably on another machine.

Jekyll gives you conventions and a rendering pipeline so you can move repetition out of individual pages.

Guided example: one title, two layers

Suppose a source page eventually contains:

---
title: Robotics Project
---

and a layout later contains:

<title>{{ page.title }}</title>

The browser never interprets {{ page.title }}.

Jekyll does.

The generated HTML might contain:

<title>Robotics Project</title>

By the time the browser receives the page, the Liquid expression is gone.

That is a huge mental boundary for this course:

Jekyll syntax belongs to the build layer. HTML output belongs to the browser layer.

Inspect before you build

Create this table in your notes:

ItemSource layerBuild layerBrowser/output layer
index.html sourcereadgenerated/copied result
Liquid expressionwritten hereevaluated hereshould not remain as Liquid
_site/index.htmlnot normally editedwritten hereserved from here
CSSauthoredcopied/processedapplied here

Add two more rows of your own.

Failure reasoning

If you see this literal text in the browser:

{{ page.title }}

what might that tell you?

One possibility is that the file was not processed by Jekyll as expected.

Another is that you are looking at the wrong file or serving raw source instead of generated output.

Do not immediately rewrite the Liquid expression.

First determine which layer handled the file.

Checkpoint

Write a four-sentence explanation using these exact concepts:

  • source;
  • render/build;
  • generated output;
  • browser.

Then answer:

What problem does Jekyll solve that plain copied HTML begins to make painful as a site grows?

Strong answers mention repetition, structured content, reusable templates, build consistency, or generated navigation/content. They do not merely say "Jekyll makes websites easier."

Vocabulary lab

Flip the idea, not just the card

Explain the term before you reveal the back. Then compare your explanation with the definition, example, and warning.

1 / 4
Read all terms without animation
Build
The process that reads Jekyll source and writes generated site output. Example: bundle exec jekyll build writes the destination site. Do not confuse it with: Opening an HTML file directly in a browser.
Render
Turning source content or templates into output content. Example: Liquid variables are rendered into HTML values. Do not confuse it with: Simply storing a source file.
Template
Reusable source that combines fixed structure with changing content or data. Example: A layout can provide the shared HTML shell for many pages. Do not confuse it with: A screenshot of the finished page.
Destination
The directory where Jekyll writes the built site, normally _site. Example: _site/index.html is generated output. Do not confuse it with: The source directory you intentionally edit.