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 pagesdefault.html: Base layout wrapping all pages with header/footercompress.html: Layout template that compresses HTML outputproject_page.html: Publication-specific layout with metadata rendering
_includes/: Reusable HTML componentshead.html: Page header with theme toggle and stylingnav.html: Navigation menufooter.html,foot.html: Footer content
Collections
Jekyll is configured to use two custom collections instead of standard posts:
- 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.htmllayout automatically renders these fields - Output permalink:
/publications/:title/
- Files follow the pattern:
- 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 CSSassets/css/: Generated CSS outputassets/images/: Website imagesassets/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 pagepages/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.htmlwithdata-theme="dark" - Theme toggle logic is in
_includes/head.html - The
no-invertCSS class prevents emoji inversion in dark mode (used in award/publication sections)
Important Quirks and Patterns
-
Author Highlighting: In
project_page.html, “Rajveer Bachkaniwala” is automatically wrapped with<u><strong>tags in the authors list. -
Emoji Handling: Award emojis use a
span.no-invertwrapper to maintain appearance across theme changes. This involves CSS counter-inversion styling. -
Jekyll Collections: The site uses Jekyll’s custom collections feature (configured in
_config.ymlundercollections:). This allows organizing publications and blogs separately from the default_posts/directory. -
Kramdown Markdown: The site uses Kramdown markdown processor with Rouge for syntax highlighting.
-
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:
- Create a new file in
_publications/(e.g.,paper-name-conference.md) - 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" --- - 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: Generatessitemap.xmlbourbon: CSS frameworkjekyll-paginate: Pagination supporthtml-proofer: Link validation (development)
Deployment
The site is deployed as a GitHub Pages site (indicated by CNAME file pointing to rajveerbachkaniwala.com).