Personal website of Lance P.K. Wang — a minimal, modern static site generated with Python + Jinja2 + Markdown. No Node, no framework lock-in; content is plain Markdown and YAML.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python build.py # build into docs/
python build.py --serve # build, then preview at http://localhost:8000build.py # the generator (standalone, no framework)
requirements.txt # Jinja2, Markdown, PyYAML
content/
config.yaml # ← edit name, role, bio, links here
projects/*.md # one Markdown file per project
publications/*.md # one Markdown file per publication
templates/
base.html # page shell (head, header, footer)
_header.html # nav + theme toggle (partial)
_footer.html # footer (partial)
_macros.html # reusable components: social links, cards
index.html # the homepage, assembling all sections
static/ # copied verbatim into the build
styles.css # design system (light + dark themes)
main.js # theme toggle, mobile menu, scroll reveal
favicon.svg
resume.pdf # ← replace with your latest CV
.github/workflows/ # CI: build + deploy to GitHub Pages
Change your name / role / bio / links → edit content/config.yaml.
Add a project → create content/projects/my-project.md:
---
title: 'My New Project'
description: 'One or two sentences describing it.'
period: 'Jan – Mar 2026'
category: 'Data Mining' # shown as a colored tag
collaborators: 'Jane Doe' # optional
tags: ['Python', 'ML'] # optional chips
order: 0 # lower numbers appear first
link: # optional "View" link
url: 'https://example.com'
label: 'Project page'
---Add a publication → create content/publications/my-paper.md:
---
title: 'Paper Title'
authors: 'Lance P.K. Wang, Co-Author'
venue: 'Conference / Journal name'
year: 2026
order: 0
links:
- { url: 'https://doi.org/...', label: 'DOI' }
---Then rebuild (python build.py). No code changes needed.
Hide a project without deleting it → add featured: false to its front matter.
Replace the resume → drop your PDF in at static/resume.pdf.
A GitHub Actions workflow (.github/workflows/deploy.yml) builds the site and
publishes it to GitHub Pages on every push.
One-time setup: in the repo, go to Settings → Pages → Build and deployment and set Source to GitHub Actions.
A few TODO markers remain in content/ for details I couldn't confirm
(current role, location, and one publication's metadata). Search the content/
folder for TODO.