Personal Academic Profile Implementation Plan
Personal Academic Profile 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: Transform the Academic Pages template into a lightweight, warm academic profile for Yipeng (Harry) Wang with a non-blocking expandable sidebar, complete publications and preprints, semester-grouped teaching, and a clear CV link.
Architecture: Keep the existing Jekyll/GitHub Pages pipeline and collection-based content model. Replace template identity/content and add a small profile layout layer that wraps the existing single/archive layouts, renders a sidebar using native disclosure semantics, and uses CSS grid to push content aside when the menu expands. Publication and teaching archive items will use focused includes rather than the template’s generic archive cards.
Tech Stack: Jekyll, Liquid, Markdown, Sass/CSS, existing Academic Pages theme, GitHub Pages build, native HTML <details>/<summary> interaction; no new framework or client-side dependency.
Global Constraints
- Use the existing Jekyll and GitHub Pages build pipeline.
- Use a warm ivory background, dark brown-black text, and muted brick-red accents.
- Use first-person homepage copy for Yipeng (Harry) Wang, Instructor at Princeton University.
- Do not include a portrait in the initial version.
- Keep the sidebar lightweight, accessible, and non-blocking; it must push content instead of covering it.
- On small screens, expand the sidebar in normal document flow so content remains visible.
- Do not introduce React, Vue, a new application framework, or unnecessary JavaScript.
- Replace template sample identity, publications, talks, teaching, posts, portfolio items, and default template links with real information or remove them from the public site.
- Use the custom repository metadata invocation in this workspace:
git --git-dir=.site-git --work-tree=.. - Keep visual-companion files under
.superpowers/out of commits.
Task 1: Collect the authoritative academic content inputs
Files:
- Read:
docs/superpowers/specs/2026-08-09-personal-academic-profile-design.md - Inputs from user: contact URLs, publications/preprints, teaching history, current CV PDF location
Interfaces:
Produces the exact values used by Tasks 2, 3, 6, and 7.
Step 1: Request the contact values
Collect the exact email address, Princeton profile URL, Google Scholar URL, and ORCID URL. Use the provided values verbatim in
_config.yml; do not infer URLs from a username.Step 2: Request the publication and preprint inventory
For each entry, collect title, author list, publication/preprint category, date or year, venue or arXiv identifier, and available PDF/DOI/arXiv links. Keep the user’s author ordering and publication wording.
Step 3: Request the teaching inventory
For each course, collect academic year, semester, course title, role, institution/department, and any public course link or short note.
Step 4: Confirm the current CV artifact
Confirm the PDF file to link from
/cv/and whether it should be copied tofiles/cv.pdf. Do not copycv_style.clsorCV_template.texuntil the user explicitly supplies them for the separate CV workflow.
Task 2: Replace global identity and navigation configuration
Files:
- Modify:
_config.yml - Modify:
_data/navigation.yml - Modify:
_pages/about.md
Interfaces:
- Consumes: Task 1’s identity and contact values.
Produces: The site-wide author object, homepage copy, and four-link primary navigation used by the sidebar. Task 7 owns the CV page and generated PDF so that the page is never committed with a broken link.
Step 1: Add a pre-change validation command
Run:
rg -n "Your Name|academicpages|Red Brick University|none@example.org|GitHub University|Skill 1" _config.yml _data/navigation.yml _pages/about.md _pages/cv.mdExpected: matches are present before the replacement, proving the validation detects template content.
Step 2: Configure the site identity
In
_config.yml, set the title/name toYipeng (Harry) Wang, set the description to a concise first-person differential-geometry profile, set the site URL/repository forypharry.github.io, remove the avatar dependency, and populate only the confirmed email, Princeton profile, Google Scholar, and ORCID values. Remove default sample employer/location/bio values.Step 3: Reduce navigation to the approved destinations
Replace
_data/navigation.ymlwith four entries in this order: Home (/), Publications (/publications/), Teaching (/teaching/), and CV (/cv/). Do not include Talks, Portfolio, Blog Posts, Guide, or the JSON CV page.Step 4: Replace the homepage source
Rewrite
_pages/about.mdwith root permalink/,layout: single,author_profile: true, no rendered page title, and first-person copy that introduces Harry’s Princeton role, Columbia advising history, and differential-geometry research. Link to publications, teaching, and CV using normal site links.Step 5: Validate configuration content
Run:
! rg -n "Your Name|academicpages|Red Brick University|none@example.org|GitHub University|Skill 1" _config.yml _data/navigation.yml _pages/about.mdExpected: exit code 0 with no output.
Step 6: Commit the identity and navigation change
git --git-dir=.site-git --work-tree=. add _config.yml _data/navigation.yml _pages/about.md git --git-dir=.site-git --work-tree=. commit -m "Replace template identity and navigation"
Task 3: Replace template collections and remove demo pages
Files:
- Delete: all sample files in
_publications/,_teaching/,_talks/,_posts/, and_portfolio/ - Delete:
_data/comments/,_data/cv.json, and template-only pages_pages/archive-layout-with-content.md,_pages/category-archive.html,_pages/collection-archive.html,_pages/cv-json.md,_pages/markdown.md,_pages/non-menu-page.md,_pages/page-archive.html,_pages/portfolio.html,_pages/tag-archive.html,_pages/talkmap.html,_pages/talks.html,_pages/terms.md, and_pages/year-archive.html - Preserve:
_pages/404.mdand_pages/sitemap.md - Create: real publication files under
_publications/ - Create: real teaching files under
_teaching/
Interfaces:
- Consumes: Task 1’s publication/preprint and teaching inventories.
Produces: Only real academic collection documents for the public site.
Step 1: Identify all template content before removal
Run:
rg -n "Paper Title|Teaching experience|Your Name|GitHub University|Blog post|Portfolio" _publications _teaching _talks _posts _portfolio _pages _dataExpected: the command identifies the sample content that will be removed; no user-authored content should match these template phrases.
Step 2: Remove sample collection entries and template-only pages
Delete only the files listed above. Do not delete theme partials, build configuration, the 404 page, or the sitemap page.
Step 3: Add publication and preprint documents
Create one Markdown file per real entry with this front matter contract:
title: "Exact publication title" collection: publications category: publications # or preprints sort_order: 1 # preserve the authoritative CV order when no date is confirmed date: YYYY-MM-DD # include only when confirmed in the source authors: "Exact author list" venue: "Journal, conference, or Preprint" status: "preprint or publication status" paperurl: "https://..." # omit when unavailable doi: "https://doi.org/..." # omit when unavailable arxiv: "https://arxiv.org/..." # omit when unavailable permalink: /publication/slugUse only links confirmed in Task 1. Do not add invented abstracts, citations, or venues.
Step 4: Add teaching documents
Create one Markdown file per course with this front matter contract:
title: "Course title" collection: teaching academic_year: "2025–26" semester: "Fall" role: "Instructor" venue: "Princeton University" date: YYYY-MM-DD permalink: /teaching/YYYY-YY-semester-course-slugPut only confirmed course details and notes in the Markdown body.
Step 5: Validate that template content is gone
Run:
! rg -n "Paper Title|Teaching experience|Your Name|GitHub University|Blog post|Portfolio|Academic Pages is a ready-to-fork" _publications _teaching _talks _posts _portfolio _pages/about.md _pages/publications.html _pages/teaching.html _data 2>/dev/nullExpected: exit code 0 with no output.
Step 6: Commit the content replacement
git --git-dir=.site-git --work-tree=. add -A _publications _teaching _talks _posts _portfolio _pages _data git --git-dir=.site-git --work-tree=. commit -m "Replace template content with academic profile data"
Task 4: Implement the non-blocking expandable sidebar
Files:
- Modify:
_includes/sidebar.html - Modify:
_layouts/single.html - Modify:
_layouts/archive.html - Modify:
_includes/masthead.html - Create:
_sass/layout/_profile.scss - Modify:
assets/css/main.scss
Interfaces:
- Consumes:
site.authorandsite.data.navigation.mainfrom Task 2. Produces: A reusable
.profile-sidebarand.profile-layoutstructure used by homepage, archive pages, and CV content.Step 1: Add a structural smoke check for the sidebar contract
After the first markup draft, verify it contains a native disclosure trigger and the expected links:
rg -n "profile-sidebar|profile-rail|profile-panel|details|summary|site.data.navigation.main|googlescholar|orcid" _includes/sidebar.htmlExpected: all selectors/data sources appear in the sidebar include.
Step 2: Replace the sidebar markup
Build
_includes/sidebar.htmlaround:<details class="profile-sidebar"> <summary class="profile-rail">MENU · HW</summary> <div class="profile-panel"> <!-- name, role, affiliation, navigation links, and confirmed academic links --> </div> </details>Render the identity from
site.author, render navigation fromsite.data.navigation.main, and render only the confirmed Email, Princeton profile, Google Scholar, and ORCID links. Do not render an avatar or Follow button.Step 3: Add the push-open layout rules
In
_sass/layout/_profile.scss, make.profile-layouta grid with a narrow first column for the rail and a flexible content column. Expand the first column when.profile-sidebaris hovered, focused, or open; the content column must shrink/reflow rather than be covered. Keep the transition limited to grid columns and panel opacity/transform.Step 4: Add mobile flow behavior
At the mobile breakpoint, switch
.profile-layoutto one column. Keep the panel in normal document flow whendetails[open]is active. Do not position the panel over the article or archive content.Step 5: Remove duplicate global navigation
Replace
_includes/masthead.htmlwith a minimal non-duplicating header, or remove its rendered navigation while preserving the default layout shell. The only primary navigation should be the profile sidebar. Do not add a replacement large menu script.Step 6: Apply the layout wrapper consistently
Add
class="profile-layout"to the#mainwrappers in_layouts/single.htmland_layouts/archive.html. Keep article/archive semantics and existing collection rendering intact.Step 7: Import the profile stylesheet
Add
"layout/profile"toassets/css/main.scssafter the existing layout imports so the focused profile rules load after the theme’s base sidebar rules.Step 8: Validate the no-overlap invariant
Build the site and inspect the generated markup/styles:
bundle exec jekyll build --trace rg -n "profile-layout|profile-sidebar|profile-panel|profile-rail" _siteExpected: the build succeeds and the generated pages contain the profile layout; the panel is not positioned with
position: fixedorposition: absoluteover the main content.Step 9: Commit the sidebar layout
git --git-dir=.site-git --work-tree=. add _includes/sidebar.html _layouts/single.html _layouts/archive.html _includes/masthead.html _sass/layout/_profile.scss assets/css/main.scss git --git-dir=.site-git --work-tree=. commit -m "Add non-blocking profile navigation"
Task 5: Apply the warm ivory visual system
Files:
- Modify:
_sass/theme/_default_light.scss - Modify:
_sass/layout/_profile.scss - Modify:
_sass/layout/_page.scssonly where needed to remove template-specific spacing/title treatment - Modify:
_sass/layout/_archive.scssonly where needed to make lists quiet and readable
Interfaces:
- Consumes: The profile classes produced by Task 4.
Produces: The approved warm ivory, restrained academic visual system shared by home, publications, teaching, and CV pages.
Step 1: Set the approved palette
Update the light theme variables to use warm ivory for
--global-bg-color, dark brown-black for text, a soft warm border, and muted brick red for links. Keep contrast readable and do not add gradients or decorative image backgrounds.Step 2: Define focused profile typography and spacing
Use the existing system font variables, moderate heading sizes, generous section spacing, and thin separators. Remove the default oversized homepage title treatment; the homepage’s visible heading must be the user’s name with a compact research label.
Step 3: Style publication and teaching rows
Add styles for
.publication-list,.publication-item,.teaching-list, and.teaching-itemusing text rows, subtle borders, and inline links. Do not introduce card grids, badges, filter controls, or decorative icons.Step 4: Validate palette and responsive CSS
Run:
bundle exec jekyll build --trace git diff --checkExpected: successful build and no whitespace errors.
Step 5: Commit the visual system
git --git-dir=.site-git --work-tree=. add _sass/theme/_default_light.scss _sass/layout/_profile.scss _sass/layout/_page.scss _sass/layout/_archive.scss git --git-dir=.site-git --work-tree=. commit -m "Apply warm academic visual system"
Task 6: Build complete publications and semester-grouped teaching pages
Files:
- Modify:
_pages/publications.html - Create:
_includes/publication-list-item.html - Modify:
_pages/teaching.html - Create:
_includes/teaching-list-item.html
Interfaces:
- Consumes: publication and teaching front matter from Task 3.
Produces: Complete list pages with stable, simple markup and no filters.
Step 1: Define authoritative collection order
For publications, preserve the authoritative CV order with an explicit
sort_orderfield. Do not invent dates for entries that do not have confirmed dates:For teaching, sort by
dateand reverse it. Do not rely on filesystem order.Step 2: Render publication sections
Group entries by
category, with headingsPublicationsandPreprints. For each entry, render title, authors, venue/year when confirmed, status, and only the confirmed available links. Usepublication-list-item.htmlto keep the row markup in one place.Step 3: Render teaching groups
Iterate over sorted teaching entries and emit an academic-year heading when
academic_yearchanges. Under each year, render semester, course title, role, institution, and optional confirmed link/note usingteaching-list-item.html.Step 4: Validate generated list content
Run:
bundle exec jekyll build --trace rg -n "Publications|Preprints|Teaching|academic_year|Paper Title|Teaching experience" _site/publications _site/teachingExpected: real section headings and entries appear; template phrases do not.
Step 5: Commit the archive pages
git --git-dir=.site-git --work-tree=. add _pages/publications.html _includes/publication-list-item.html _pages/teaching.html _includes/teaching-list-item.html git --git-dir=.site-git --work-tree=. commit -m "Render publications and teaching archives"
Task 7: Establish the separate CV workspace and link
Files:
- Create:
cv/README.md - Modify:
_pages/cv.md - Create or copy only after confirmation:
files/cv.pdf
Interfaces:
- Consumes: Task 1’s confirmed current CV PDF decision.
Produces: A clean CV page and a reserved source area for future
.tex/.clsmaintenance.Step 1: Create the CV workspace guide
Add
cv/README.mddocumenting that the future source set iscv/CV_template.texandcv/cv_style.cls, with generated output atfiles/cv.pdf. State that generated auxiliary files should not be committed.Step 2: Add the confirmed PDF
If Task 1 confirms the PDF, copy it to
files/cv.pdfand link it from_pages/cv.md. If the PDF is not yet ready, stop before adding a broken link and report the single missing input to the user.Step 3: Validate the CV link
Run:
bundle exec jekyll build --trace test -f _site/files/cv.pdf rg -n "files/cv.pdf" _site/cv/index.htmlExpected: the PDF exists in the generated site and the CV page links to it.
Step 4: Commit the CV structure
git --git-dir=.site-git --work-tree=. add cv _pages/cv.md files/cv.pdf git --git-dir=.site-git --work-tree=. commit -m "Add CV page and source workspace"
Task 8: Run full build and visual/accessibility QA
Files:
- Read: all modified layouts, includes, Sass, content pages, and collection entries
- Generated:
_site/(ignored; do not commit)
Interfaces:
- Consumes: Tasks 2–7.
Produces: Verified static site ready for user review.
Step 1: Run the full build
bundle exec jekyll build --traceExpected: exit code 0 and generated pages for
/,/publications/,/teaching/, and/cv/.Step 2: Check generated routes and content
test -f _site/index.html test -f _site/publications/index.html test -f _site/teaching/index.html test -f _site/cv/index.html ! rg -n "Your Name|Academic Pages is a ready-to-fork|GitHub University|Paper Title Number|Teaching experience" _siteExpected: all route checks pass and no template identity/content remains in generated output.
Step 3: Check source hygiene
git diff --check git --git-dir=.site-git --work-tree=. status --shortExpected: no whitespace errors; only intentionally untracked
.superpowers/preview files remain outside the committed implementation.Step 4: Perform browser QA at desktop and mobile widths
Start the local Jekyll server and inspect the four routes at approximately 1024px, 736px, and 360px widths. Verify the warm ivory background, readable text, compact heading, sidebar rail, push-open behavior, and no content overlap.
Step 5: Perform keyboard interaction QA
Tab to the sidebar summary, open it with the keyboard, tab through Home/Publications/Teaching/CV and all confirmed academic links, and confirm visible focus styling. Confirm that the sidebar remains in normal flow on mobile.
Step 6: Review the final diff against the design spec
Confirm every acceptance criterion in
docs/superpowers/specs/2026-08-09-personal-academic-profile-design.mdis covered. If a missing user input prevents a criterion, stop and request that exact input rather than inventing content.
Execution order and checkpoints
Run Tasks 1–3 first to establish real content, then Tasks 4–5 for the shared layout and visual system, then Tasks 6–7 for the content pages and CV area. Task 8 is the final verification gate. Each task ends with its own focused commit so a later issue can be isolated without rewriting unrelated content.