CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

This is a personal academic website built with Jekyll (a static site generator). It showcases research publications, academic background, and research interests. The site is hosted at https://rajveerbachkaniwala.com.

Common Development Commands

Local Development

Using Docker (recommended):

./quick_run.sh

This script automatically detects your OS and runs Jekyll in a Docker container on http://localhost:9000.

Without Docker:

  • Linux: bundle exec jekyll serve -H 0.0.0.0 -P 9000
  • Windows: bundle exec jekyll serve -H 0.0.0.0 -P 9000 --force_polling

Building

bundle exec jekyll build

Output is generated in the _site directory.

Code Formatting

Pre-commit hooks use Prettier for HTML, CSS, and SCSS files:

pre-commit run --all-files

Project Architecture

Core Structure

  • index.html: Main homepage with research interests, advisor info, and contact details
  • _config.yml: Jekyll configuration defining site metadata, plugins, and custom collections
  • _layouts/: HTML templates for rendering pages
    • default.html: Base layout wrapping all pages with header/footer
    • compress.html: Layout template that compresses HTML output
    • project_page.html: Publication-specific layout with metadata rendering
  • _includes/: Reusable HTML components
    • head.html: Page header with theme toggle and styling
    • nav.html: Navigation menu
    • footer.html, foot.html: Footer content

Collections

Jekyll is configured to use two custom collections instead of standard posts:

  1. Publications (_publications/)
    • Files follow the pattern: [name].md
    • Front matter includes: layout: project_page, venue_tag, paper_title, conference_title, authors, date
    • Optional fields: pdf_url, repo_url, slides_url, deep_wiki_url, award_info, artifact_info
    • The project_page.html layout automatically renders these fields
    • Output permalink: /publications/:title/
  2. Blogs (_blogs/)
    • Folder exists but currently empty; blog page is commented out in navigation
    • Could be enabled by uncommenting navigation.yml
    • Output permalink: /blog/:title/

Data Files

  • _data/navigation.yml: Navigation menu structure (currently shows “Publications” only)

Styling

  • assets/scss/: SCSS stylesheets compiled to CSS
  • assets/css/: Generated CSS output
  • assets/images/: Website images
  • assets/icons/: Icon assets
  • Static PDFs: assets/Ivan-Sutherland-Technology-and-Courage.pdf, assets/Richard-Hamming-You-and-Your-research.pdf

Special Pages

  • pages/publications.md: Publications listing page
  • pages/blog.md: Blog listing page (currently disabled)
  • 404.md: 404 error page

Theme Customization

The site uses a dark/light theme toggle:

  • Default theme is set in _layouts/default.html with data-theme="dark"
  • Theme toggle logic is in _includes/head.html
  • The no-invert CSS class prevents emoji inversion in dark mode (used in award/publication sections)

Important Quirks and Patterns

  1. Author Highlighting: In project_page.html, “Rajveer Bachkaniwala” is automatically wrapped with <u><strong> tags in the authors list.

  2. Emoji Handling: Award emojis use a span.no-invert wrapper to maintain appearance across theme changes. This involves CSS counter-inversion styling.

  3. Jekyll Collections: The site uses Jekyll’s custom collections feature (configured in _config.yml under collections:). This allows organizing publications and blogs separately from the default _posts/ directory.

  4. Kramdown Markdown: The site uses Kramdown markdown processor with Rouge for syntax highlighting.

  5. Pre-commit Hooks: Prettier formatting is enforced on HTML, CSS, and SCSS files, excluding the _site/ build output.

Adding Content

To add a new publication:

  1. Create a new file in _publications/ (e.g., paper-name-conference.md)
  2. Use this front matter template:
    ---
    layout: project_page
    venue_tag: "Conference Code"
    paper_title: "Your Paper Title"
    conference_title: "Full Conference Name (Year)"
    authors: "Author1, Author2, Rajveer Bachkaniwala"
    date: YYYY-MM-DD
    pdf_url: "https://link-to-pdf"
    repo_url: "https://link-to-repo"
    slides_url: "https://link-to-slides"
    award_info: "🏆 Award Name"
    ---
    
  3. Optional markdown content below front matter will render in the publication detail page.

Build Pipeline

The site uses Jekyll plugins (defined in Gemfile):

  • jekyll-sitemap: Generates sitemap.xml
  • bourbon: CSS framework
  • jekyll-paginate: Pagination support
  • html-proofer: Link validation (development)

Deployment

The site is deployed as a GitHub Pages site (indicated by CNAME file pointing to rajveerbachkaniwala.com).