jekyll-theme-modootoday
A Jekyll theme that keeps page bodies in plain GitHub Markdown and styles them with layouts, includes and CSS.
Why
- Only standard Markdown in your pages. GFM plus GitHub alerts; the same file reads well on github.com.
-
Works on GitHub Pages. Layouts and includes are Liquid only, so
remote_themeworks on the classic build; Jekyll 4 works too. - Components without markup. Alerts, status badges, card grids, tabs, buttons, accordion, steps, timeline and more come from plain Markdown patterns.
-
Readable by agents. Every page can have a byte-identical Markdown twin, plus
llms.txtandllms-full.txt. - Accessible. Keyboard shortcuts, visible focus, safe areas on phones, 44 px touch targets, high contrast and reduced motion are built in.
-
Checked.
modootoday-checkvalidates the sources and the built site.
Install
As a gem (theme:):
# Gemfile
gem "jekyll-theme-modootoday", "~> 1.2"# _config.yml
theme: jekyll-theme-modootodayOn GitHub Pages without a Gemfile (remote_theme:):
# _config.yml
remote_theme: modootoday/jekyll-theme-modootoday@v1.2.0
plugins:
- jekyll-remote-themePin a tag or a commit. More options: Install guide.
Quick start
mkdir my-docs && cd my-docs
printf 'source "https://rubygems.org"\ngem "jekyll", "~> 4.4"\ngem "jekyll-theme-modootoday", "~> 1.2"\n' > Gemfile
printf 'theme: jekyll-theme-modootoday\nmarkdown: kramdown\nkramdown: {input: GFM}\nsass: {style: compressed, silence_deprecations: [import, global-builtin]}\n' > _config.yml
printf -- '---\nlayout: doc\ntitle: Home\n---\n# Hello\n\n> [!TIP]\n> Plain Markdown, styled.\n' > index.md
bundle install && bundle exec jekyll build
bundle exec modootoday-check . _siteWalkthrough: Write your first page.
Concepts
-
Plain body, rich layout. The body is GFM;
sections:front matter maps each##to a component. See Components and the kitchen sink. -
Rules. What may appear in a body, and what each pattern becomes, is defined in RULES.md (
md-components v1). -
Settings and tokens. One
modootoday:block in_config.yml, CSS custom properties--mt-*, one Sass partial per component. See Configuration and Customize. -
Blog and news.
blog,news,news-article,authorandfeedlayouts: paginated card lists (list, grid, magazine), bylines from_data/authors.yml, series, related posts, share, JSON-LD, per-language Atom feeds; Liquid only, styles and script in an optional bundle. See Blog and news. -
Twins: three ways — stub files (default, classic Pages), the
jekyll-theme-modootodayplugin (Jekyll 4 / Actions), ormodootoday.twins: sourcewith front-matter-less pages (classic Pages, no stubs). See RULES.md §5a.
Commands
modootoday-check SRC SITE [options] (run after jekyll build):
| Option | Checks |
|---|---|
SRC SITE |
always: front matter, forbidden syntax, alerts, fence info strings, status:/tag:/kbd: values (since: is rejected), sections: count, _data/i18n/<lang>.yml keys against the default language and translated pages against default-language pages, _data/components.yml (keys, slot contract counts per section, parts against api.md and the built HTML), Sass/CSS rules, unconverted markers in the build, schema.org JSON-LD in the build (valid JSON, vocabulary, required properties per type, absolute URLs, ISO 8601 dates, one graph per page, agreement with Open Graph) |
--twins |
every page has a byte-identical Markdown twin, per-language llms.txt and llms-full.txt
|
--github-pages[=VERSION] |
Gemfile.lock pins github-pages VERSION (default 232) |
--schema-recommended |
also warn about schema.org properties Google Search recommends (author, image, dates, ...) that a JSON-LD node lacks |
--strict |
warnings fail the run |
--i18n |
_data/i18n/<lang>.yml against the theme registry (i18n/en.yml in the gem): unknown keys, %{name} placeholder mismatches, and pages marked translation: pending
|
--i18n-pages |
warn about default-language pages with no translation in a modootoday.full_languages language (the page with the same ref:, else the same path under <lang>/); with --strict they fail |
--i18n-init=LANG,... |
copy the theme's catalogs (i18n/<lang>.yml, 23 languages) into SRC/_data/i18n/ as a starting point for overrides (optional; the theme already uses them), and list keys an existing catalog lacks |
--gh |
also render each page with gh api markdown (network, gh login) |
--help, -h |
print usage and options (--help=markdown prints the README table) |
--version |
print the rules version |
AI agents
- Each page
guide.mdhas a twin at/guide/index.mdwith the same bytes as its body, linked withrel="alternate" type="text/markdown". -
llms.txtandllms-full.txtexist at/and under each/<lang>/. - Jekyll 4:
plugins: [jekyll-theme-modootoday]creates them; the classic GitHub Pages build uses one-file stubs. - Details: Agents guide and this repository's own llms.txt.
Guides
-
Documentation site (built with this theme from
docs/) - Install · First page · Components · Configuration · Customize · Blog and news · Public API · Migrate and upgrade · CSP · Accessibility · Roadmap · Changelog
- Supported stacks: GitHub Pages (
github-pages232, Jekyll 3.10, Ruby 3.3.4) and Jekyll 4.4 on Ruby 3.2 to 3.4, all tested in CI; Jekyll 3.9 is the tested floor. - Security policy · Code of conduct
Exit codes
| Code | Meaning |
|---|---|
| 0 | no problems |
| 1 | problems found (listed on stderr) or bad usage |
Contributing
Issues and pull requests are welcome. English is the canonical language; translations follow it. See CONTRIBUTING.md.
License
MIT © modootoday (모두의오늘)