Homepage Redesign Implementation Plan
Homepage Redesign Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Implement the approved homepage redesign on / without changing the layout or behavior of other pages.
Architecture: Add a homepage-specific layout path so / can suppress the masthead, sidebar, and page title without rewriting the rest of the theme. Rewrite _pages/about.md into structured homepage sections, then layer homepage-scoped SCSS on top of the existing Jekyll pipeline so the design changes stay isolated to /.
Tech Stack: Jekyll, Liquid layouts, SCSS, GitHub Pages gem bundle, shell smoke checks, Playwright CLI for local visual verification
Preflight
- Execute this plan in a dedicated git worktree before touching homepage files.
- Run
bundle installonce before Task 1 ifbundle exec jekyll buildfails withbundler: command not found: jekyll. - No JavaScript changes are expected for this redesign.
File Map
Create:
scripts/check-homepage-shell.shPurpose: Build the site and assert homepage chrome is removed on/while a non-home page still keeps the theme masthead.Create:
scripts/check-homepage-content.shPurpose: Build the site and assert the new homepage sections and labels are present in generated HTML.Create:
_layouts/homepage.htmlPurpose: Homepage-only layout that renders the approved single-column shell without the default page header or sidebar.Create:
_sass/_homepage.scssPurpose: Homepage-only visual rules for spacing, typography, hero layout, research bullets, and compact publications.Modify:
_layouts/default.htmlPurpose: Allow homepage rendering to suppress the masthead when the page opts out.Modify:
_pages/about.mdPurpose: Switch the homepage to the new layout and replace the current prose with the approved section structure.Modify:
assets/css/main.scssPurpose: Import the homepage partial into the compiled stylesheet.
Task 1: Isolate Homepage Chrome
Files:
- Create:
scripts/check-homepage-shell.sh - Create:
_layouts/homepage.html - Modify:
_layouts/default.html - Modify:
_pages/about.md Test:
scripts/check-homepage-shell.sh- Step 1: Write the failing homepage shell smoke check
#!/usr/bin/env bash
set -euo pipefail
bundle exec jekyll build >/tmp/homepage-shell-check.log
HOME_HTML="_site/index.html"
PUBS_HTML="_site/publications/index.html"
if rg -q '<div class="masthead">' "$HOME_HTML"; then
echo "FAIL: homepage still renders masthead"
exit 1
fi
if rg -q 'class="sidebar sticky"' "$HOME_HTML"; then
echo "FAIL: homepage still renders sidebar author card"
exit 1
fi
if rg -q 'class="page__title"' "$HOME_HTML"; then
echo "FAIL: homepage still renders page title"
exit 1
fi
if ! rg -q '<div class="masthead">' "$PUBS_HTML"; then
echo "FAIL: publications page lost shared masthead"
exit 1
fi
echo "PASS: homepage chrome isolated"
- Step 2: Run the smoke check to verify it fails on the current homepage
Run: bash scripts/check-homepage-shell.sh Expected: FAIL because the current homepage still includes the masthead, sidebar, and page title.
- Step 3: Implement the minimal homepage-only layout isolation
Create _layouts/homepage.html as a simple page shell:
---
layout: default
---
<div id="main" class="home-page" role="main">
<article class="page page--home">
<div class="page__inner-wrap">
<section class="page__content home-content" itemprop="text">
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<!-- begin SEO -->
<title>CLAUDE.md - Xu Chen</title>
<meta property="og:locale" content="en-US">
<meta property="og:site_name" content="Xu Chen">
<meta property="og:title" content="CLAUDE.md">
<link rel="canonical" href="https://Thisislegit.github.io/CLAUDE/">
<meta property="og:url" content="https://Thisislegit.github.io/CLAUDE/">
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Person",
"name" : "Xu Chen",
"url" : "https://Thisislegit.github.io",
"sameAs" : null
}
</script>
<!-- end SEO -->
<link href="https://Thisislegit.github.io/feed.xml" type="application/atom+xml" rel="alternate" title="Xu Chen Feed">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>
<!-- For all browsers -->
<link rel="stylesheet" href="https://Thisislegit.github.io/assets/css/main.css">
<meta http-equiv="cleartype" content="on">
<!-- start custom head snippets -->
<link rel="apple-touch-icon" sizes="57x57" href="https://Thisislegit.github.io/images/apple-touch-icon-57x57.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="60x60" href="https://Thisislegit.github.io/images/apple-touch-icon-60x60.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="72x72" href="https://Thisislegit.github.io/images/apple-touch-icon-72x72.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="76x76" href="https://Thisislegit.github.io/images/apple-touch-icon-76x76.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="114x114" href="https://Thisislegit.github.io/images/apple-touch-icon-114x114.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="120x120" href="https://Thisislegit.github.io/images/apple-touch-icon-120x120.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="144x144" href="https://Thisislegit.github.io/images/apple-touch-icon-144x144.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="152x152" href="https://Thisislegit.github.io/images/apple-touch-icon-152x152.png?v=M44lzPylqQ">
<link rel="apple-touch-icon" sizes="180x180" href="https://Thisislegit.github.io/images/apple-touch-icon-180x180.png?v=M44lzPylqQ">
<link rel="icon" type="image/png" href="https://Thisislegit.github.io/images/favicon-32x32.png?v=M44lzPylqQ" sizes="32x32">
<link rel="icon" type="image/png" href="https://Thisislegit.github.io/images/android-chrome-192x192.png?v=M44lzPylqQ" sizes="192x192">
<link rel="icon" type="image/png" href="https://Thisislegit.github.io/images/favicon-96x96.png?v=M44lzPylqQ" sizes="96x96">
<link rel="icon" type="image/png" href="https://Thisislegit.github.io/images/favicon-16x16.png?v=M44lzPylqQ" sizes="16x16">
<link rel="manifest" href="https://Thisislegit.github.io/images/manifest.json?v=M44lzPylqQ">
<link rel="mask-icon" href="https://Thisislegit.github.io/images/safari-pinned-tab.svg?v=M44lzPylqQ" color="#000000">
<link rel="shortcut icon" href="/images/favicon.ico?v=M44lzPylqQ">
<meta name="msapplication-TileColor" content="#000000">
<meta name="msapplication-TileImage" content="https://Thisislegit.github.io/images/mstile-144x144.png?v=M44lzPylqQ">
<meta name="msapplication-config" content="https://Thisislegit.github.io/images/browserconfig.xml?v=M44lzPylqQ">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="https://Thisislegit.github.io/assets/css/academicons.css"/>
<script type="text/x-mathjax-config"> MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: "all" } } }); </script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true
}
});
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-MML-AM_CHTML' async></script>
<!-- end custom head snippets -->
</head>
<body>
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<div class="masthead">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<button><div class="navicon"></div></button>
<ul class="visible-links">
<li class="masthead__menu-item masthead__menu-item--lg"><a href="https://Thisislegit.github.io/">Xu Chen</a></li>
</ul>
<ul class="hidden-links hidden"></ul>
</nav>
</div>
</div>
</div>
<div id="main" role="main">
<div class="sidebar sticky">
<div itemscope itemtype="http://schema.org/Person">
<div class="author__avatar">
<img src="https://Thisislegit.github.io/images/xuchen_profile.jpg" class="author__avatar" alt="Xu Chen">
</div>
<div class="author__content">
<h3 class="author__name">Xu Chen</h3>
<p class="author__bio">Ph.D. student at University of Electronic Science and Technology of China</p>
</div>
<div class="author__urls-wrapper">
<button class="btn btn--inverse">Follow</button>
<ul class="author__urls social-icons">
<li><i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> Chengdu, China</li>
<li><a href="mailto:XUCHEN.2019@outlook.com"><i class="fas fa-fw fa-envelope" aria-hidden="true"></i> Email</a></li>
<li><a href="https://dblp.org/pid/83/6331-23.html"><i class="ai ai-dblp-square ai-fw"></i> DBLP</a></li>
<li><a href="https://github.com/Thisislegit"><i class="fab fa-fw fa-github" aria-hidden="true"></i> Github</a></li>
<li><a href="https://scholar.google.com/citations?user=i6heNjgAAAAJ&hl"><i class="fas fa-fw fa-graduation-cap"></i> Google Scholar</a></li>
</ul>
</div>
</div>
</div>
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="headline" content="CLAUDE.md">
<div class="page__inner-wrap">
<header>
<h1 class="page__title" itemprop="headline">CLAUDE.md
</h1>
</header>
<section class="page__content" itemprop="text">
<h1 id="claudemd">CLAUDE.md</h1>
<p>This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.</p>
<h2 id="overview">Overview</h2>
<p>This is a Jekyll-based academic website built on GitHub Pages using the academicpages template (forked from Minimal Mistakes Jekyll Theme). It serves as a personal academic portfolio for Xu Chen, a Ph.D. student at University of Electronic Science and Technology of China.</p>
<h2 id="development-commands">Development Commands</h2>
<h3 id="local-development">Local Development</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install Ruby dependencies</span>
bundle <span class="nb">install</span>
<span class="c"># Clean up directory (if needed)</span>
bundle clean
<span class="c"># Serve locally with live reload</span>
bundle <span class="nb">exec </span>jekyll serve
</code></pre></div></div>
<p>The local server will automatically rebuild and refresh pages on change at <code class="language-plaintext highlighter-rouge">localhost:4000</code>.</p>
<h3 id="build-assets">Build Assets</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Build minified JavaScript</span>
npm run build:js
<span class="c"># Watch for JS changes and rebuild</span>
npm run watch:js
</code></pre></div></div>
<h2 id="site-architecture">Site Architecture</h2>
<h3 id="jekyll-structure">Jekyll Structure</h3>
<ul>
<li><code class="language-plaintext highlighter-rouge">_config.yml</code> - Main site configuration</li>
<li><code class="language-plaintext highlighter-rouge">_config.dev.yml</code> - Development-specific overrides</li>
<li><code class="language-plaintext highlighter-rouge">_layouts/</code> - Page templates (default, single, archive, talk, etc.)</li>
<li><code class="language-plaintext highlighter-rouge">_includes/</code> - Reusable components and partials</li>
<li><code class="language-plaintext highlighter-rouge">_sass/</code> - SCSS stylesheets</li>
<li><code class="language-plaintext highlighter-rouge">_data/</code> - Site data files (navigation, UI text, comments)</li>
</ul>
<h3 id="content-collections">Content Collections</h3>
<p>The site uses Jekyll collections for organized content:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">_pages/</code> - Static pages (about, CV, publications, etc.)</li>
<li><code class="language-plaintext highlighter-rouge">_posts/</code> - Blog posts</li>
<li><code class="language-plaintext highlighter-rouge">_publications/</code> - Academic publications</li>
<li><code class="language-plaintext highlighter-rouge">_talks/</code> - Conference talks and presentations</li>
<li><code class="language-plaintext highlighter-rouge">_teaching/</code> - Teaching experience</li>
<li><code class="language-plaintext highlighter-rouge">_portfolio/</code> - Portfolio items</li>
</ul>
<h3 id="content-generation">Content Generation</h3>
<p>The <code class="language-plaintext highlighter-rouge">markdown_generator/</code> folder contains Jupyter notebooks and Python scripts to generate markdown files from TSV data for publications and talks. This allows bulk import of structured academic content.</p>
<h3 id="key-configuration">Key Configuration</h3>
<ul>
<li>Site owner: Xu Chen (Thisislegit.github.io)</li>
<li>Theme: Modified Minimal Mistakes</li>
<li>Analytics: Google Universal Analytics</li>
<li>Collections have specific permalinks and layouts defined in <code class="language-plaintext highlighter-rouge">_config.yml</code></li>
<li>Author profile data configured in <code class="language-plaintext highlighter-rouge">_config.yml</code> under <code class="language-plaintext highlighter-rouge">author:</code></li>
</ul>
<h3 id="dependencies">Dependencies</h3>
<ul>
<li>Ruby gems managed via Gemfile (github-pages, jekyll-feed, jekyll-sitemap, hawkins)</li>
<li>JavaScript dependencies managed via package.json for build tools</li>
<li>Uses GitHub Pages compatible plugins only</li>
</ul>
</section>
<footer class="page__meta">
</footer>
</div>
</article>
</div>
<div class="page__footer">
<footer>
<!-- start custom footer snippets -->
<a href="/sitemap/">Sitemap</a>
<!-- end custom footer snippets -->
<div class="page__footer-follow">
<ul class="social-icons">
<li><strong>Follow:</strong></li>
<li><a href="http://github.com/Thisislegit"><i class="fab fa-github" aria-hidden="true"></i> GitHub</a></li>
<li><a href="https://Thisislegit.github.io/feed.xml"><i class="fa fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
</ul>
</div>
<div class="page__footer-copyright">© 2026 Xu Chen. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://github.com/academicpages/academicpages.github.io">AcademicPages</a>, a fork of <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
</footer>
</div>
<script src="https://Thisislegit.github.io/assets/js/main.min.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>
</section>
</div>
</article>
</div>
Update _layouts/default.html to conditionally skip the masthead:
<div class="masthead">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<button><div class="navicon"></div></button>
<ul class="visible-links">
<li class="masthead__menu-item masthead__menu-item--lg"><a href="https://Thisislegit.github.io/">Xu Chen</a></li>
</ul>
<ul class="hidden-links hidden"></ul>
</nav>
</div>
</div>
</div>
Update the homepage front matter in _pages/about.md:
layout: homepage
author_profile: false
hide_masthead: true
- Step 4: Re-run the build and smoke check
Run: bundle exec jekyll build && bash scripts/check-homepage-shell.sh Expected: PASS with the homepage missing chrome and /publications/ still keeping the masthead.
- Step 5: Commit
git add scripts/check-homepage-shell.sh _layouts/homepage.html _layouts/default.html _pages/about.md
git commit -m "feat: isolate homepage layout from theme chrome"
Task 2: Rewrite Homepage Content Into Approved Sections
Files:
- Create:
scripts/check-homepage-content.sh - Modify:
_pages/about.md Test:
scripts/check-homepage-content.sh- Step 1: Write the failing homepage content smoke check
#!/usr/bin/env bash
set -euo pipefail
bundle exec jekyll build >/tmp/homepage-content-check.log
HOME_HTML="_site/index.html"
rg -q 'class="home-hero"' "$HOME_HTML" || { echo "FAIL: missing hero section"; exit 1; }
rg -q 'class="home-bio"' "$HOME_HTML" || { echo "FAIL: missing bio section"; exit 1; }
rg -q 'class="home-research"' "$HOME_HTML" || { echo "FAIL: missing research section"; exit 1; }
rg -q 'class="home-publications"' "$HOME_HTML" || { echo "FAIL: missing publications section"; exit 1; }
rg -q '>Publications<' "$HOME_HTML" || { echo "FAIL: missing Publications heading"; exit 1; }
rg -q '>Recent Work<' "$HOME_HTML" || { echo "FAIL: missing Recent Work group"; exit 1; }
rg -q '>Earlier Work<' "$HOME_HTML" || { echo "FAIL: missing Earlier Work group"; exit 1; }
if rg -q '>Selected Papers<' "$HOME_HTML"; then
echo "FAIL: old Selected Papers heading still present"
exit 1
fi
PUB_COUNT="$(rg -o 'class=\"publication\"' "$HOME_HTML" | wc -l | tr -d ' ')"
if [ "$PUB_COUNT" -ne 12 ]; then
echo "FAIL: expected 12 publication entries, found $PUB_COUNT"
exit 1
fi
echo "PASS: homepage content sections rendered"
- Step 2: Run the content smoke check to verify it fails
Run: bash scripts/check-homepage-content.sh Expected: FAIL because the current homepage content has not yet been rewritten into the new section structure.
- Step 3: Rewrite
_pages/about.mdusing semantic homepage sections
Use HTML blocks inside the markdown file so the homepage structure is explicit and styleable:
<section class="home-hero">
<img class="home-hero__avatar" src="/images/xuchen_profile.jpg" alt="Xu Chen">
<div class="home-hero__body">
<h1 class="home-hero__name">Xu Chen</h1>
<p class="home-hero__tagline">Ph.D. student at UESTC working on machine learning for data systems.</p>
<p class="home-hero__links">
<a href="mailto:XUCHEN.2019@outlook.com">Email</a>
<a href="https://scholar.google.com/citations?user=i6heNjgAAAAJ&hl">Google Scholar</a>
<a href="https://github.com/Thisislegit">GitHub</a>
</p>
</div>
</section>
<section class="home-bio">
<h2>About</h2>
<p>...</p>
</section>
<section class="home-research">
<h2>Research Interests</h2>
<p>...</p>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</section>
<section class="home-publications">
<h2>Publications</h2>
<div class="publication-group">
<h3>Recent Work</h3>
<article class="publication">
<p class="publication__title"><a href="...">Paper title</a></p>
<p class="publication__meta"><strong>Xu Chen</strong>, Coauthor, <em>Venue</em>, 2025.</p>
</article>
</div>
<div class="publication-group">
<h3>Earlier Work</h3>
<article class="publication">
<p class="publication__title">Paper title</p>
<p class="publication__meta">Author list, <em>Venue</em>, 2022.</p>
</article>
</div>
</section>
Content rules while rewriting:
- keep the biography to one tighter paragraph
- make the hero tagline newly written from existing facts
- keep
Recent Workfor 2023 and newer,Earlier Workfor 2022 and older - keep every publication on the homepage
- wrap every publication in
<article class="publication"> format each publication as title line + metadata line using
.publication__titleand.publication__meta- Step 4: Re-run the build and content smoke check
Run: bundle exec jekyll build && bash scripts/check-homepage-content.sh Expected: PASS with all homepage section markers present and the old Selected Papers label gone.
- Step 5: Commit
git add scripts/check-homepage-content.sh _pages/about.md
git commit -m "feat: rewrite homepage content into structured sections"
Task 3: Add Homepage-Scoped Styles And Verify Visually
Files:
- Create:
_sass/_homepage.scss - Modify:
assets/css/main.scss Test:
bundle exec jekyll build,bash scripts/check-homepage-shell.sh,bash scripts/check-homepage-content.sh- Step 1: Capture a baseline local preview before the style pass
Run:
bundle exec jekyll serve --host 127.0.0.1 --port 4000
Then open / in Playwright at desktop and mobile widths. Expected: the structure is correct after Tasks 1 and 2, but the page still looks too close to the default theme.
- Step 2: Implement homepage-only SCSS
Create _sass/_homepage.scss with rules for:
.home-page {
margin-top: 0;
max-width: 100%;
background: #fff;
}
.home-content {
max-width: 42rem;
margin: 0 auto;
padding: 3rem 1.5rem 4rem;
}
.home-hero {
display: grid;
grid-template-columns: auto 1fr;
gap: 1rem;
}
.home-publications .publication {
padding: 0.9rem 0;
border-top: 1px solid #ececec;
}
.publication__title,
.publication__meta {
margin: 0;
}
Style goals:
- pure white background
- restrained serif/sans hierarchy
- no card treatment
- thin gray dividers only
- tighter publication rhythm
responsive single column on mobile
- Step 3: Import the new partial into
assets/css/main.scss
Add:
@import "homepage";
after the existing page/archive/sidebar imports so the homepage rules compile into assets/css/main.css.
- Step 4: Rebuild and run the smoke checks
Run: bundle exec jekyll build && bash scripts/check-homepage-shell.sh && bash scripts/check-homepage-content.sh Expected: PASS for both smoke scripts and no SCSS compilation errors.
- Step 5: Run desktop and mobile visual verification
Check these states in the local preview:
- homepage shows a pure white background
- homepage is a narrow single column
- avatar, name, and inline links stay balanced at desktop width
- mobile layout collapses cleanly without horizontal overflow
- publication entries remain readable when titles wrap
/publications/still keeps the original shared theme chrome- Step 6: Commit
git add _sass/_homepage.scss assets/css/main.scss
git commit -m "feat: style homepage redesign"
Task 4: Final Regression Sweep
Files:
- Modify:
_pages/about.mdor_sass/_homepage.scssonly if the final preview reveals minor spacing issues Test:
bundle exec jekyll build, smoke scripts, local preview- Step 1: Run the final build and both smoke scripts
Run:
bundle exec jekyll build
bash scripts/check-homepage-shell.sh
bash scripts/check-homepage-content.sh
Expected: All commands pass.
- Step 2: Verify one homepage view and one non-homepage view in the browser
Review:
http://127.0.0.1:4000/http://127.0.0.1:4000/publications/
Expected: homepage matches the approved design direction and non-homepage layout remains unchanged.
- Step 3: If needed, apply only minor spacing or typography polish
Allowed polish:
- adjust hero spacing
- tune publication row spacing
- refine heading margins
Do not expand scope beyond homepage visual polish.
- Step 4: Re-run the build and smoke scripts if any polish changed files
Run: bundle exec jekyll build && bash scripts/check-homepage-shell.sh && bash scripts/check-homepage-content.sh Expected: PASS.
- Step 5: Commit
git add _pages/about.md _sass/_homepage.scss
git commit -m "chore: finalize homepage redesign polish"
