Jekyll Site Structure and Configuration
Jekyll Site Structure and Configuration
Overview
This is a Jekyll-based blog deployed via GitHub Pages at https://www.jasonkronemeyer.com
URL Structure and Permalinks
Default Permalink Pattern
Jekyll uses the default permalink structure which includes categories in the URL path:
/:categories/:year/:month/:day/:title:output_ext
Examples
- Post with categories
[Public Safety, RF Technology, RoF]:- Filename:
_posts/2025-11-21-Radio-Over-Fiber.md - URL:
/public%20safety/rf%20technology/rof/2025/11/21/Radio-Over-Fiber.html
- Filename:
- Post with categories
[smart buildings, sustainability, certifications]:- Filename:
_posts/2025-11-05-SMART-Building-Certifications.md - URL:
/smart%20buildings/sustainability/certifications/2025/11/05/SMART-Building-Certifications.html
- Filename:
- Post with categories
[Photonics, Networking, Technology]:- Filename:
_posts/2025-11-19-Photonic-Networking.md - URL:
/photonics/networking/technology/2025/11/19/Photonic-Networking.html
- Filename:
⚠️ Critical for Internal Linking
Always verify actual generated URLs by checking the _site directory after building:
bundle exec jekyll build
find _site -name "*Post-Title*"
Categories with spaces are URL-encoded (%20) in the final URL.
Directory Structure
jasonkronemeyer.github.io/
├── _config.yml # Jekyll configuration
├── _posts/ # Published blog posts (YYYY-MM-DD-slug.md)
├── _drafts/ # Draft posts (no date prefix needed)
├── dev/ # Development/working notes and research
├── _layouts/ # Page templates
│ ├── default.html
│ ├── post.html
│ └── research.html
├── _includes/ # Reusable components
├── _site/ # Generated site (gitignored, check for actual URLs)
├── assets/ # CSS, images, etc.
├── images/ # Image assets
├── maps/ # Map-related content
├── notes/ # General notes
├── papers/ # Academic papers/references
├── practice/ # Practice-related content
├── research/ # Research content
└── about/ # About pages
Front Matter Standards
Required Fields
---
layout: post
title: "Post Title"
date: YYYY-MM-DD
categories: [category1, category2, category3]
---
Optional Fields
status: research # draft | research | brief | complete
tags: [tag1, tag2] # Tags for organization (don't affect URL)
excerpt: "Short description"
description: "Meta description for SEO"
Status Field Convention
draft- Initial working draftresearch- Research and development phasebrief- Brief summary or overviewcomplete- Finished, ready for publication
Common Workflows
Creating a New Post
- Create file in
_posts/with format:YYYY-MM-DD-slug-title.md - Add front matter with layout, title, date, and categories
- Write content
- Build and verify URL:
bundle exec jekyll build && find _site -name "*slug-title*"
Working on Drafts
- Option 1: Place in
_drafts/folder (no date prefix needed) - Option 2: Place in
dev/folder for working notes - Option 3: Use
status: draftin front matter and keep in_posts/
Internal Linking Between Posts
Always use full category path:
[Link Text](https://www.jasonkronemeyer.com/category1/category2/YYYY/MM/DD/Post-Title.html)
Verification steps:
- Build site:
bundle exec jekyll build - Find actual path:
find _site -name "*Post-Title*" - Copy the path after
_site/and use in link
Building and Testing Locally
# Serve locally with drafts
bundle exec jekyll serve --drafts
# Build for production
bundle exec jekyll build
# Check generated URLs
find _site -name "*.html" | grep posts
Deployment
- Platform: GitHub Pages
- Branch: main
- Process: Automatic on push to main
- Build time: ~30-60 seconds after push
Categories in Use
Common category structures observed:
- Public safety/tech:
[Public Safety, RF Technology, RoF, DAS, POLAN] - Buildings:
[smart buildings, sustainability, certifications] - Technology:
[Photonics, Networking, Technology] - Research:
[blue tech, digital opportunity, research] - AI/Education:
[AI, education, future-of-work] - Data Science:
[data-science, policy, practice]
Cross-Referencing Posts
When adding references to other posts in your blog:
- Build the site to get the actual URL
- Use the full absolute URL with domain
- Test the link after deployment
Example reference format:
**Related Post:**
- [Post Title](https://www.jasonkronemeyer.com/full/category/path/YYYY/MM/DD/Post-Slug.html)
Tips for AI Agents
- Never assume URL structure - Always check
_siteoutput - Categories matter - They’re part of the URL path, not just metadata
- Spaces in categories - Get URL-encoded as
%20 - Slug from filename - The date and
.mdare stripped to create the slug - Case sensitivity - Preserve case in slugs (e.g.,
SMART-Buildingnotsmart-building)
Theme and Styling
- Theme: Minima (default Jekyll theme)
- Custom CSS:
assets/main.scss - Math support: MathJax/KaTeX enabled via kramdown
- Syntax highlighting: Rouge
Useful Commands
# Check Jekyll configuration
bundle exec jekyll doctor
# View all generated URLs
bundle exec jekyll build --verbose
# Clean build artifacts
bundle exec jekyll clean
# Serve with live reload
bundle exec jekyll serve --livereload
# Check for broken links (after build)
find _site -name "*.html" -exec grep -l "404" {} \;
Configuration Files
_config.yml- Main Jekyll configurationGemfile- Ruby dependencies.gitignore- Excludes_site/, vendor/, etc.
Notes for Contributors/AI Agents
- Always build locally first before committing link changes
- Verify internal links by checking
_sitedirectory structure - Use consistent category naming to avoid URL duplication
- Front matter categories determine URL structure, so changes affect links
- Test cross-references after deployment to catch 404s early
Last updated: November 21, 2025