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
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:
- Blog posts (
_posts/)- Standard Jekyll
_posts/collection — drives everything under/blog/ - Per
_config.ymldefaults, posts uselayout: blog_postand permalink/blog/:year/:month/:day/:title/ - Drafts live in
_drafts/and only show with--drafts - The legacy empty
_blogs/collection has been retired
- Standard Jekyll
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)
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):
_includes/blog_head.html,blog_nav.html,blog_footer.html,related-posts.html_layouts/blog_default.html,blog_home.html,blog_post.htmlblog/index.html(paginated post list),blog/categories.html,blog/404.htmlblog/assets/css/style.css— the blog’s own stylesheet, separate from the mainassets/css/style.css_posts/,_drafts/— post markdownassets/images/<post-slug>/— post images (referenced from markdown as/assets/images/...;site.baseurlis""so paths resolve directly)jekyll-seo-tag+jekyll-feedplugins (Gemfile) — required byblog_head.html’s `
` / <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
- Create
_posts/YYYY-MM-DD-slug.mdwith 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_postis applied automatically via_config.ymldefaults.) - Drop any images in
assets/images/<slug>/and reference them as/assets/images/<slug>/<file>.png. - 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).