Website Directory Structure Documentation

Website Directory Structure Documentation

This is a Jekyll-based academic website hosted on GitHub Pages, forked from the Minimal Mistakes Jekyll Theme. This document provides a comprehensive overview of the directory structure and the purpose of each component.

Overview

This website is built using Jekyll, a static site generator that transforms plain text into static websites. The site is configured to work with GitHub Pages and uses the Academic Pages template.

Root Directory Files

Configuration Files

  • _config.yml: Main Jekyll configuration file containing site-wide settings including:
    • Site metadata (title, description, URL)
    • Author information and social media links
    • Collections definitions (teaching, publications)
    • Plugin configurations
    • Markdown processing settings
    • Default layouts for different content types
  • _config.dev.yml: Development-specific configuration overrides

  • Gemfile: Ruby dependencies specification for Jekyll and plugins

  • package.json: Node.js dependencies (if any JavaScript tooling is used)

Documentation Files

  • README.md: Instructions for using and customizing the template
  • CHANGELOG.md: Record of changes and updates to the template
  • CONTRIBUTING.md: Guidelines for contributing to the project
  • LICENSE: MIT License information

Other Root Files

  • .gitignore: Specifies files and directories Git should ignore
  • talkmap.ipynb: Jupyter notebook for generating talk location maps
  • talkmap.py: Python script version of the talkmap generator

Directory Structure

Content Directories

_pages/

Contains standalone pages that make up the main navigation of the website:

  • about.md: About/homepage content covering undergraduate radiotherapy work, early PhD research in magnet design and computational geometry, and future interests in inverse optimization, robust optimization, and Markov decision processes
  • cv.md: Curriculum Vitae page
  • research.md: Working Papers page listing two projects and their coauthors
  • contact.md: Contact information page
  • talks.html: Talks and presentations page
  • talkmap.html: Geographic visualization of talks
  • markdown.md: Markdown syntax examples/guide
  • 404.md: Custom 404 error page
  • terms.md: Terms of service or usage

Archive pages:

  • archive-layout-with-content.md
  • category-archive.html
  • collection-archive.html
  • page-archive.html
  • tag-archive.html
  • year-archive.html
  • non-menu-page.md: Example page not in main navigation

_archive/

Source backups excluded from the published site in _config.yml:

  • research-radiotherapy-2026-10-30.md: Exact copy of the original radiotherapy Research page, saved before replacing it with Working Papers. Its referenced images remain in images/.

_posts/

Contains blog posts in markdown format. Posts follow Jekyll naming convention: YYYY-MM-DD-title.md

Current posts:

  • 2012-08-14-blog-post-1.md
  • 2013-08-14-blog-post-2.md
  • 2014-08-14-blog-post-3.md
  • 2015-08-14-blog-post-4.md
  • 2199-01-01-future-post.md (future-dated post)

_talks/

Contains talks and presentations in markdown format:

  • 2012-03-01-talk-1.md
  • 2013-03-01-tutorial-1.md
  • 2014-02-01-talk-2.md
  • 2014-03-01-talk-3.md

_drafts/

Contains draft posts that are not yet published:

  • post-draft.md

Layout and Design Directories

_layouts/

HTML templates that define the structure of different page types:

  • default.html: Base layout for all pages
  • single.html: Layout for single posts/pages
  • archive.html: Layout for archive pages
  • archive-taxonomy.html: Layout for category/tag archives
  • splash.html: Full-width splash page layout
  • talk.html: Layout specifically for talk pages
  • compress.html: HTML compression wrapper

_includes/

Reusable HTML components that can be included in layouts:

Main Components:

  • head.html: HTML head section with meta tags
  • head/custom.html: Custom head additions
  • masthead.html: Site header/navigation bar, with a Home link pointing to the homepage
  • author-profile.html: Author bio sidebar
  • seo.html: SEO meta tags
  • scripts.html: JavaScript includes
  • breadcrumbs.html: Breadcrumb navigation

Archive Components:

  • archive-single.html: Single item in archive listings
  • archive-single-cv.html: CV-style archive item
  • archive-single-talk.html: Talk archive item
  • archive-single-talk-cv.html: CV-style talk item

Navigation and Lists:

  • nav_list: Navigation list generator
  • post_pagination.html: Post pagination controls
  • tag-list.html: List of tags
  • category-list.html: List of categories

Other Includes:

  • page__hero.html: Hero image/header component
  • gallery: Image gallery component
  • feature_row: Featured content row
  • group-by-array: Array grouping utility
  • base_path: Base path utility
  • analytics-providers/custom.html: Custom analytics code

_sass/

Sass/SCSS stylesheets organized by component:

Main Stylesheets:

  • _base.scss: Base styles and resets
  • _reset.scss: CSS reset
  • _variables.scss: Sass variables (colors, fonts, etc.)
  • _mixins.scss: Reusable Sass mixins

Component Styles:

  • _masthead.scss: Header styling
  • _navigation.scss: Navigation styles
  • _footer.scss: Footer styling
  • _sidebar.scss: Sidebar styles
  • _archive.scss: Archive page styles
  • _page.scss: Page-specific styles
  • _buttons.scss: Button styles
  • _forms.scss: Form styling
  • _tables.scss: Table styles
  • _notices.scss: Notice/alert styles
  • _syntax.scss: Code syntax highlighting
  • _animations.scss: CSS animations
  • _utilities.scss: Utility classes
  • _print.scss: Print styles

Vendor Styles (_sass/vendor/):

  • breakpoint/: Responsive breakpoint management
  • font-awesome/: Icon font styles
  • magnific-popup/: Lightbox/popup styles
  • susy/: Grid system (legacy)

Data and Assets

_data/

YAML data files for site configuration:

  • navigation.yml: Navigation menu structure and links
  • authors.yml: Author information for multi-author sites
  • ui-text.yml: UI text strings for internationalization

_data/comments/: Static comments organized by post:

  • layout-comments/
  • markup-syntax-highlighting/
  • welcome-to-jekyll/

assets/

Compiled assets directory:

  • css/: Compiled CSS files
  • js/: JavaScript files
  • fonts/: Web fonts

images/

Image files for the website:

  • Profile images: Quadrada_original.jpg, bio-photo.jpg, bio-photo-2.jpg, profile.png
  • Content images: various PNG, JPG, and GIF files
  • Favicon and touch icons: browserconfig.xml, manifest.json, various icon sizes

files/

Downloadable files served from the website:

  • CV.pdf: PDF version of CV

Utility and Generator Directories

markdown_generator/

Python scripts and Jupyter notebooks for generating markdown files from TSV data:

Publications:

  • publications.py: Python script to generate publication pages
  • publications.ipynb: Jupyter notebook version
  • publications.tsv: TSV data file with publication information
  • PubsFromBib.ipynb: Generate from BibTeX
  • pubsFromBib.py: Python script version

Talks:

  • talks.py: Python script to generate talk pages
  • talks.ipynb: Jupyter notebook version
  • talks.tsv: TSV data file with talk information

Other:

  • readme.md: Usage instructions

talkmap/

Geographic visualization of talks/presentations:

  • map.html: Interactive map HTML
  • org-locations.js: Location data for map markers
  • leaflet_dist/: Leaflet.js library files for mapping

Special Directories

.git/

Git version control directory (standard Git repository data)

.claude/

Claude Code configuration directory:

  • settings.local.json: Local settings for Claude Code

Jekyll Collections

As defined in _config.yml, this site uses collections for organizing content:

  1. teaching: Teaching-related content (output: true)
  2. publications: Publication entries (output: true)

Note: The actual collection directories (_teaching/, _publications/) may not exist yet or may be generated.

Content Management Workflow

Adding New Content

  1. Blog Posts: Create new markdown files in _posts/ following the naming convention YYYY-MM-DD-title.md
  2. Pages: Add new pages to _pages/ and update _data/navigation.yml if needed
  3. Talks: Add new talks to _talks/ or use the markdown generator scripts
  4. Publications: Add to _publications/ or use the markdown generator scripts
  5. Files: Upload PDFs and other downloads to files/
  6. Images: Add images to images/

Using Markdown Generators

The markdown_generator/ directory contains tools to batch-generate content:

  1. Edit the TSV files with your data
  2. Run the Python scripts or Jupyter notebooks
  3. Generated markdown files will be created in the appropriate collections

The main navigation is defined in _data/navigation.yml and includes:

  • Research (Working Papers)
  • CV
  • Contact

The standalone Publications page has been removed. The radiotherapy Research page is preserved in _archive/.

Building and Deployment

Local Development

bundle install
bundle exec jekyll serve

The site will be available at http://localhost:4000

GitHub Pages Deployment

The site automatically builds and deploys when pushed to the master branch on GitHub.

Key Configuration Points

Site Information

Edit _config.yml to update:

  • Site title and description
  • Author name and bio
  • Social media links
  • Google Analytics ID

Edit _data/navigation.yml to modify the main menu

Author Profile

Update the author section in _config.yml. The profile sidebar displays only LinkedIn, GitHub, and Google Scholar; location, ResearchGate, and ORCID are unset. The profile links show only icons in one horizontal row, ordered LinkedIn, GitHub, then Google Scholar. Each link retains an accessible name and hover title in _includes/author-profile.html. The .author__urls rules in _sass/_sidebar.scss provide approximately 32px desktop icons centered in 44px link targets, with the row centered beneath the centered profile name, including in the mobile Follow menu. The name below the photo uses 1.4rem text (about 25px on desktop). The main stylesheet URL in _includes/head.html includes the build timestamp so new deployments refresh cached styling.

Styling

Customize colors and fonts in _sass/_variables.scss

Important Notes

  • The site uses kramdown for markdown processing
  • Syntax highlighting is provided by Rouge
  • Future-dated posts (like 2199-01-01-future-post.md) won’t appear until their date
  • The future: true setting in _config.yml allows future-dated posts to be shown

Resources

  • Jekyll Documentation: https://jekyllrb.com/docs/
  • Minimal Mistakes Theme: https://mmistakes.github.io/minimal-mistakes/
  • Academic Pages: https://academicpages.github.io/