CLAUDE.md

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

bundle install
bundle exec jekyll serve -H 0.0.0.0 -P 9000

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

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. Blog posts (_posts/)
    • Standard Jekyll _posts/ collection — drives everything under /blog/
    • Per _config.yml defaults, posts use layout: blog_post and permalink /blog/:year/:month/:day/:title/
    • Drafts live in _drafts/ and only show with --drafts
    • The legacy empty _blogs/ collection has been retired

Data Files

Styling

Special Pages

Theme Customization

The site uses a dark/light theme toggle:

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):

Blog (consolidated from a standalone repo)

/blog/* is served from this same repo. Historically there was a separate rajveerb/blog repo (local clone: ~/devspace/blog_style/) that GitHub Pages auto-routed under the user-site’s custom domain at rajveerbachkaniwala.com/blog/. That project repo has since been deleted / its GitHub Pages disabled, so traffic falls through to the user-site (this repo).

If a rajveerb/blog (or any rajveerb/<repo> with Pages enabled) ever exists again, GitHub Pages will intercept /<repo>/* requests at the custom domain and shadow whatever lives at _site/<repo>/* here — so the in-repo /blog/ pages would silently stop being served on the live domain. Check for this first if /blog/ looks stale.

Blog-specific files in this repo (all namespaced with a blog_ prefix to avoid colliding with the main site’s templates):

CLAUDE.md | Rajveer Bachkaniwala

` / <link type="application/atom+xml" rel="alternate" href="https://rajveerbachkaniwala.com/feed.xml" title="Rajveer Bachkaniwala" />

The blog has its own nav, footer, and theme-toggle script defined in _layouts/blog_default.html. The main site uses _layouts/default.html and its own includes; they share design tokens via CSS variables but the CSS files themselves are separate.

Adding a new blog post

  1. Create _posts/YYYY-MM-DD-slug.md with front matter:
    ---
    title: "Post Title"
    author: "Rajveer Bachkaniwala"
    date: YYYY-MM-DD
    categories: [topic1, topic2]
    tldr: "One-line summary shown as a blockquote at the top."
    ---
    

    (layout: blog_post is applied automatically via _config.yml defaults.)

  2. Drop any images in assets/images/<slug>/ and reference them as /assets/images/<slug>/<file>.png.
  3. The post will land at /blog/YYYY/MM/DD/slug/, appear on /blog/, and be indexed under its categories at /blog/categories/.

Deployment

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