This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
PLX Lab website at DGIST, led by Professor Minseok Jeon. Jekyll site using Minimal Mistakes theme — academic homepage, research publications (PL4SE and PL4ML), member profiles, course materials, and blog (“연구 이야기”).
Live site: https://dgistpl.github.io
docker build -t dgistpl-jekyll .
docker run -p 4000:4000 -p 35729:35729 -v $(pwd):/site dgistpl-jekyll
Requires Ruby 3.x, Node.js 18+, Bundler.
bundle install && npm install
bundle exec jekyll serve # Dev server at http://localhost:4000
bundle exec jekyll build # Production build (outputs to _site/)
npm run build:js # Minify + add banner (must run before committing JS changes)
npm run watch:js # Watch mode for development
cd cv/ && pdflatex main.tex
No automated test suite. Test manually via local server. Validate JS with npm run build:js.
<style> blocks in Markdown files.master_config.yml changes require server restart (standard Jekyll behavior)/:categories/:title/ (set in _config.yml)Content pages live in root-level directories (not _pages/). This is non-standard for Jekyll but works because each directory has its own index.md:
index.md — Homepage (archive layout, pulls from site.data.authors.minseok_jeon for contact info)research/index.md — Research areaspublications/index.md — Loops over _data/publications.yml by yearmembers/index.md — Loops over _data/authors.yml, filters by position fieldtalks/index.md — Loops over _data/talks.yml by yeartrips/index.md, courses/index.mdThe only file in _pages/ is tag-archive.md. Navigation links are defined in _data/navigation.yml.
Most dynamic pages use Liquid loops over _data/*.yml files:
_data/publications.yml — Grouped by year, each paper has:
- year: 2025
papers:
- title: "Paper Title"
authors: "<u>Name</u>, Name" # HTML markup for underlines
venue: "Conference 2025"
links:
- type: "PDF"
url: "/papers/filename.pdf"
- type: "Slides"
url: "/papers/slides.pdf"
_data/authors.yml — Keyed by ID (e.g., minseok_jeon), each entry has name, ko-name, avatar, position, email, scholar, etc. The members/index.md page filters by position to display members in sections (Professor, PhD, MS, Undergraduate Intern).
_data/talks.yml — List of {title, venue, date, year, slides} entries.
Custom page view tracking using Firebase Realtime Database (SDK v12.0.0 via ES modules).
Critical: dual-config issue — Firebase config is duplicated in both _config.yml (under firebase:) and hardcoded in _includes/firebase-config.html because Jekyll variables don’t process correctly in the module script. When updating Firebase config, both files must be changed.
How it works:
_includes/firebase-config.html: Initializes Firebase, exposes globals (window.firebaseDatabase, window.firebaseRef, etc.). Included in _layouts/default.html._includes/view-counter.html: Polls for Firebase availability (up to 50 attempts), increments view count, falls back to localStorage if unavailable.sessionStorage (key: firebase_viewed_{cleanUrl}).#$[] charactersSource: assets/js/vendor/jquery/, assets/js/plugins/, assets/js/_main.js
→ uglifyjs bundles and minifies → banner.js adds MIT license header
→ Output: assets/js/main.min.js
Create in _posts/ as YYYY-MM-DD-title.md with layout: single.
Organize as courses/{course_code}/{year}/ with slides in slides/ subdirectory. Course pages use layout: splash for full-width display. Course index at courses/index.md.
Add entries to _data/publications.yml under the appropriate year. Store PDFs/slides in papers/. Use HTML in the authors field for formatting (e.g., <u>Name</u> to underline).
Add an entry to _data/authors.yml with a unique key. The position field determines which section the member appears in on the members page. Store avatar images in images/members/.
_data/navigation.ymlcv/main.tex