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:
| Item | Source layer | Build layer | Browser/output layer |
|---|---|---|---|
index.html source | ✓ | read | generated/copied result |
| Liquid expression | written here | evaluated here | should not remain as Liquid |
_site/index.html | not normally edited | written here | served from here |
| CSS | authored | copied/processed | applied 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.
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.