9 min to read
Github Pages and Jekyll Notes
This is the site operating manual for this repo.
What This Site Is
- Static site built with Jekyll.
- Gulp pipeline handles:
- merging YAML config files,
- compiling theme values into SCSS,
- bundling JS,
- optimizing images,
- launching local dev server.
Folder Structure (Practical View)
.
|- _posts/ # All posts (markdown)
|- pages/ # Standalone pages (about, plan)
|- _layouts/ # Page/post/list layout templates
|- _includes/ # Reusable partials (header, footer, cards, etc.)
|- _sass/ # SCSS partials
|- assets/ # Built/static assets served by Jekyll
|- src/
| |- yml/ # Source config split into multiple yml files
| |- js/main/ # Source JS bundled into assets/js/scripts.min.js
| |- js/preview/ # Preview/admin widget JS copied as-is
| `- img/ # Source images for optimization task
|- index.html # Home page front matter entrypoint
|- contact.html # Contact page front matter entrypoint
|- tags.html # Tags page front matter entrypoint
|- search.json # Search index generated from posts
|- sitemap.xml # Sitemap template
|- _config.yml # Generated final Jekyll config (do not hand-edit)
`- gulpfile.js # Build orchestration
Which Layouts Exist and When to Use Them
Current layouts in _layouts/:
home.html- Main home feed with card grid.
- Supports include/exclude tag filtering.
list_view.html- Text list style feed (used for plan page).
- Supports include/exclude tag filtering.
post.html- Standard post page layout.
- Uses
post_uiconfig + optional per-post overrides.
page.html- Generic content page wrapper.
contact.html- Contact page layout (obfuscated email rendering).
tags.html- Tag index/listing page.
main.html,default.html,minimal.html,compress.html- Base wrappers that higher layouts inherit from.
404.html- Not-found page layout.
Where Config Lives
Authoritative source config files are in src/yml/:
src/yml/site.yml- Site identity and menu.
- Home/list-view UI defaults.
src/yml/posts.yml- Post layout and typography defaults.
src/yml/social.yml- Social usernames for footer/schema links.
src/yml/theme.yml- Core theme colors used by SCSS.
src/yml/advanced.yml- Base URL, site URL, analytics, language.
src/yml/_config.yml- Includes all files above + Jekyll build/plugin settings.
Generated config:
_config.ymlat repo root is generated by Gulp fromsrc/yml/_config.yml.- Edit files in
src/yml/, not root_config.yml.
Key Settings You Will Actually Use
From src/yml/site.yml:
menu: nav items.email: contact address source.home_listing.include_tags/home_listing.exclude_tags:- Default filtering for home feed.
home_grid.*:- Grid behavior for home cards.
min_card_widthcontrols auto-fit columns as viewport changes.
list_view_ui.*:- Styling defaults for list pages.
From src/yml/posts.yml:
two_columns_layout: enables/disables post sidebar.post_ui.*: post typography/spacing/colors.
From src/yml/advanced.yml:
baseurl: subpath deployment (usually""for root domain).url: full production URL.google_analytics: tracking id.language: site language code.
From src/yml/theme.yml:
themeColor,primaryDark,accentDark,lightGray,texts,contentBg.
Front Matter Cheatsheet
Typical post front matter:
---
layout: post
title: "Post title"
subtitle: "Optional subtitle"
description: "Optional short summary for cards/search/SEO"
date: 2026-03-07
category: Tech
tags:
- Tag1
- Tag2
image: /files/path/to/image.jpg
optimized_image: /assets/img/optimized.jpg
math: true
---
Common page front matter:
---
layout: page
title: About
permalink: /about/
menu: false
---
List page front matter (layout: list_view):
---
layout: list_view
title: Project Planning
permalink: /plan/
include_tags:
- Plan
exclude_tags: []
---
Per-page list styling overrides:
list_mobile_paddinglist_desktop_paddinglist_item_spacinglist_divider_colorlist_title_sizelist_title_colorlist_title_hover_colorlist_meta_colorlist_description_color
Per-page home grid overrides (layout: home):
home_grid_min_card_widthhome_grid_column_gaphome_grid_row_gaphome_grid_mobile_paddinghome_grid_desktop_padding
Per-post UI overrides (layout: post):
post_content_max_widthpost_content_padding_mobilepost_content_padding_desktoppost_font_size_mobilepost_font_size_desktoppost_line_height_mobilepost_line_height_desktoppost_title_size_mobilepost_title_size_desktoppost_subtitle_colorpost_meta_colorpost_meta_icon_colorpost_tag_colorpost_tag_hover_bgpost_tag_hover_color
ToC in posts:
toc: true
toc_title: Contents # optional
- Do not add manual ToC markdown (
* toc,{:toc}) or HTML headings. - The post layout now renders ToC via
_includes/toc.htmlwhentocis notfalse.
CSV table support in posts:
- Single CSV:
csv_url: /files/MYPROJECT/data.csv
csv_title: Data
- Multiple CSV tables:
csv_tables:
- title: Trades
csv_url: /files/MYPROJECT/trades.csv
- title: Daily Stats
csv_url: /files/MYPROJECT/daily_stats.csv
-
Optional table behavior overrides:
csv_table_page_sizecsv_table_max_heightcsv_table_background_colorcsv_table_text_colorcsv_table_border_colorcsv_table_header_bgcsv_table_header_colorcsv_table_row_hover_bgcsv_table_status_colorcsv_table_target(CSS selector anchor for table block position)csv_chart_target(CSS selector anchor for chart position)csv_show_table(false= chart-only mode)
Chart config (optional):
csv_chart:
type: line # line, bar, or scatter
title: Progress
show_title: true
show_axis_titles: true
show_y_ticks: true
x_tick: month # optional month-only x tick labels
x: Date # column name or index
y:
- ForceL
- ForceR
Expression-based chart series:
csv_chart:
type: scatter
x: Date
y_label: Peak Force
y_unit: lbs
y_expr:
- label: MeanForce
expr: mean(ForceL, ForceR)
- label: Balance
expr: ForceL - ForceR
Chart display options:
csv_chart_show_gridlines(page level) orcsv.chart.show_gridlines(per table)- Default is controlled site-wide in
post_ui.csv_table.chart_show_gridlines - Row filter support:
csv_chart:
filter:
field: tag
equals: Max
Weekly rollup + aggregate example:
csv_chart:
type: line
title: Weekly Max Peak Force
x: Date
group_by: week
y_agg:
- label: Right
op: max
field: peak_right
- label: Left
op: max
field: peak_left
Dual-axis derived series example:
csv_chart:
type: scatter
y_label: Peak Force
y_unit: lbs
y2_label: SW
x: Date
group_by: week
y_agg:
- label: Right
op: max
field: peak_right
- label: Left
op: max
field: peak_left
- label: SW
from_agg_expr: (Right + Left) / 135
axis: right
type: line
color: "#f5c518"
border_width: 4
fill: false
Tag Strategy Reminder
- Home currently excludes
Planby default viahome_listing.exclude_tags. - Plan page includes only
Planviapages/plan.md. - Tags are case-insensitive in filtering logic, but keep naming consistent anyway.
- Avoid empty tag values.
Markdown Refresher
Headings:
# H1
## H2
### H3
Emphasis:
**bold**
*italic*
`inline code`
Lists:
- item
- item
1. first
2. second
Links/images:
[Link text](https://example.com)

Code blocks:
```js
console.log("hello");
```
Blockquote:
> Note to self
Liquid + URL Helpers (Important)
Use these for safe URLs:
/assets/css/styles.css
/assets/css/styles.css
In templates, use:
- `` for root-relative links.
- `` for absolute links.
Build / Dev Commands
Install deps:
bundle install
npm install
Run local dev:
npm run dev
One-off build:
npm run build
If Jekyll fails on Windows with _site file permission errors, close apps/processes locking files under _site/files/ and run build again.
Content Workflow (Quick)
- Create a markdown file in
_posts/namedYYYY-MM-DD-title.md. - Fill front matter (
layout,title,category,tags, optionaldescription/image). - Write content in Markdown.
- Use
Plantag if it should appear on/plan/instead of home. - Run
npm run devand verify home, post page, search, and tags page.