A simple, config-driven academic website template that generates HTML from content and site config (no HTML editing needed).
π’ Latest (v1.5.0): Template/personal branch separation β
masteris now a clean, one-click GitHub Template with fictitious demo data; personal content lives in a separate branch. Scholar sync workflow updated to target the personal branch. See CHANGELOG.md for details.
Academic-focused features:
- TL;DR popovers β hover (desktop) / tap-to-expand (mobile) for quick skimming
- Publication-first layout β auto-generated publication list from config
- Mobile-friendly β responsive reading, back-to-top
- Config-driven content β no HTML editing; update
content.json/site.yaml - Optional AI agent skills β Cursor / Windsurf skills for adding papers and deploying
π Want more details? Detailed guide Β· examples and tips.
If you use an AI-enabled editor such as Cursor, Antigravity, or Codex, you can let an agent do most of the initial setup for you:
- Open this repo in your editor and enable its AI agent.
- Ask the agent to use the
init-template-setupskill for this project. - Answer its questions about your name, affiliation, SEO, deployment choice, and favicon/logo.
- The agent will read
README.md,config/README.md,docs/FAVICON_SETUP.md, and the intro blog post, then editconfig/site.yamlandconfig/content.jsonfor you following the docs.
You can still follow the manual steps below, but the AI-assisted flow is often faster for first-time users.
Recommended: Click the green "Use this template" button at the top of this repository β "Create a new repository".
This gives you a clean copy of the template (only the master branch, no history) β the fastest way to start.
Alternatively, you can Fork the repository if you want to receive upstream template updates via pull requests.
- In your forked repository, go to Settings
- Scroll down to "Repository name"
- Change it to
yourusername.github.io(replace with your actual GitHub username) - Click "Rename"
This template supports two common deployment options. You can pick the one that fits your setup, or switch later if needed.
- In your repository, go to Settings β Pages
- Under Source, select "Deploy from a branch"
- Choose your default branch (e.g.
masterormain) and the "/ (root)" folder - Click Save
GitHub Actions workflows (such as build-website.yml and sync-scholar.yml) will run automatically, generate static files, and your site will be served via GitHub Pages, for example:
https://yourusername.github.io
-
In Cloudflare Pages, create a new project and connect it to your GitHub repository
-
Select the branch you want to deploy (usually
mainormaster) -
Set the Build command:
npm ci && npm run build -
Set the Build output directory to the folder where your static files are generated (for this template, if the output is at the repository root, you can leave it empty or
/) -
(Optional) Bind your own custom domain in Cloudflare
-
(Optional) If you donβt need GitHub Pages anymore, you can disable it in Settings β Pages to avoid having two public sites from the same repository
For both options:
- The GitHub Actions workflows in this repo (
build-website.yml,sync-scholar.yml,deploy-waline.yml, etc.) will continue to work for generating pages, syncing Google Scholar, and deploying the comment system. - Template users only need to choose either GitHub Pages or Cloudflare Pages as their final public site.
You need to clone the repository to your local computer so you can edit config/site.yaml (one-time setup) and config/content.json (your content). You can also edit files directly on GitHub.
git clone https://github.com/yourusername/yourusername.github.io.git
cd yourusername.github.ioAll configuration files live in the config/ directory. This keeps the repo root clean.
| File | Purpose | When to edit |
|---|---|---|
| config/meta.json | Template internals, Scholar sync status | Do not edit (used by scripts) |
| config/site.yaml | One-time setup: SEO, visitor map, short URL redirects | Set once when forking |
| config/content.json | Your content: bio, news, publications, experience, education | Edit whenever you update the site |
| config/config.json | Legacy merge of meta + site (written by Scholar sync) | Do not edit by hand |
SEO & identity β Edit the seo section with your website URL, name, description, keywords, and author / organization (used in meta tags and JSON-LD).
Visitor map β Paste your ClustrMaps domain_id only (get it from clustrmaps.com after creating a map). Other fields use defaults:
visitor_map:
domain_id: "YOUR_CLUSTRMAPS_ID" # β paste your ID hereRedirects (optional) β Add short URLs, e.g. /mmtok β /projects/mmtok.html:
redirects:
- alias: mmtok
target: /projects/mmtok.htmlUpdate the personal section:
"personal": {
"name": "Your Name", // β Change
"email": "your.email@university.edu", // β Change
"cv_link": "files/your-cv.pdf", // β Change to your CV file
"profile_image": "images/your-photo.jpg", // β Change to your photo
"links": [
// β Update all your social links
]
}You need to replace the favicon files with your own logo. Here are the methods:
If you have a logo image at images/pagelogo_round.png:
python scripts/generate_favicons.pyThis will automatically generate all required favicon files:
favicon.icofavicon-16x16.pngfavicon-32x32.pngapple-touch-icon.png
-
Favicon.io (https://favicon.io/)
- Upload your logo image
- Download the generated favicon package
- Extract and place files in the root directory
-
RealFaviconGenerator (https://realfavicongenerator.net/)
- More comprehensive favicon generation
- Handles all device types and sizes
If you have image editing software:
- favicon-32x32.png: Resize your logo to 32x32 pixels, save as PNG
- favicon-16x16.png: Resize your logo to 16x16 pixels, save as PNG
- apple-touch-icon.png: Resize your logo to 180x180 pixels, save as PNG
- favicon.ico: Convert your 32x32 PNG to ICO format using an online converter
Required Files:
favicon.ico(32x32px, ICO format)favicon-16x16.png(16x16px, PNG)favicon-32x32.png(32x32px, PNG)apple-touch-icon.png(180x180px, PNG)
All files should be placed in the root directory of your website.
Add your papers in the publications section:
"publications": {
"2024": [
{
"title": "Your Paper Title",
"authors": ["Your Name", "Collaborator 1", "Collaborator 2"],
"venue": "CVPR 2024",
"venue_type": "conference",
"image": "teaser/your-paper.jpg",
"featured": true,
"tldr": "One sentence summary that appears on hover/tap.",
"links": [
{"name": "Paper", "url": "https://arxiv.org/abs/...", "icon": "ai ai-arxiv"},
{"name": "Code", "url": "https://github.com/...", "icon": "fab fa-github"}
]
}
]
}π‘ TL;DR Popovers: Adding a
tldrfield to any publication automatically enables an interactive summary tooltip β displayed as a glassmorphism popover on desktop (hover), and a tap-to-expand accordion on mobile.
Add recent news:
"news": [
{
"date": "Dec 2024",
"content": "Paper accepted to <strong>CVPR 2024</strong>!",
"category": "papers"
}
]Update your background:
"experience": [
{
"position": "Research Intern",
"company": "Company Name",
"period": "Summer 2024",
"description": "Brief description...",
"logo": "images/company-logo.jpg"
}
],
"education": [
{
"degree": "PhD in Computer Science",
"institution": "Your University",
"period": "2024 - Present",
"details": "Focus: Computer Vision and AI"
}
]- Profile photo: Add your photo as
images/your-photo.jpg - Paper teasers: Add teaser images to
teaser/directory - Company logos: Add logos to
images/directory - CV: Add your CV to
files/directory
git add config/content.json config/site.yaml
git add images/ # if you added new images
git add favicon* apple-touch-icon.png # if you added favicons
git commit -m "Update personal information and configuration"
git pushThat's it! GitHub Actions will automatically build and deploy your site in 1-2 minutes.
Create .md files in blog/ directory:
---
title: "Your Blog Post Title"
date: "2024-01-01"
description: "Brief description"
tags: ["Research", "AI"]
image: "teaser/preprint.jpg"
---
# Your Blog Post
Write your content here in Markdown...Push the file to GitHub - the blog will update automatically.
To preview changes locally before pushing:
# Install dependencies and build (Node)
npm ci
npm run build
# Or build with Python
python scripts/build_local.py
# Start local server
python scripts/local_server.py
# Visit http://localhost:8000"papers": For publication news"career": For job/position updates"projects": For project announcements
"conference": Blue badge (published papers)"under-review": Gray badge (under review)"preprint": Orange badge (preprints)
For Publications:
| Usage | Icon Code | Color Code |
|---|---|---|
| Paper (arXiv) | "ai ai-arxiv" |
#b91c1c |
| Code | "fab fa-github" |
#333 |
| Dataset | "fas fa-database" |
#28a745 |
| Video (YouTube) | "fab fa-youtube" |
#ff0000 |
| Video (Bilibili) | "fas fa-tv" |
#fb7299 |
| Homepage | "fas fa-home" |
#2563eb |
| Blog | "fas fa-blog" |
#2563eb |
| Zhihu (Documentation) | "fas fa-book-open" |
#007bff |
For Social Links:
| Usage | Icon Code | Color Code |
|---|---|---|
"fas fa-envelope" |
#dc3545 |
|
| Google Scholar | "fas fa-graduation-cap" |
#4285f4 |
| GitHub | "fab fa-github" |
#333 |
"fab fa-twitter" |
#1da1f2 |
|
"fab fa-linkedin" |
#1666C5 |
|
| Zhihu | "fas fa-book" |
#0084ff |
Example:
"links": [
{
"name": "Paper",
"url": "https://arxiv.org/abs/2204.01018",
"icon": "ai ai-arxiv"
},
{
"name": "Scholar",
"url": "https://scholar.google.com/citations?user=YOUR_ID",
"icon": "fas fa-graduation-cap",
"color": "#4285f4"
},
]- Make sure you pushed changes to
config/content.json(andconfig/site.yamlif you use it) - Check GitHub Actions tab for build errors
- Wait 1-2 minutes for deployment
- Ensure image files are committed and pushed
- Check file paths in
config/content.json - Use relative paths from website root
- Validate JSON syntax in
config/content.jsonand YAML inconfig/site.yaml - Check GitHub Actions logs for specific errors
- Ensure all required fields are present
- Check that
visitor_map.enabledis set totrue - Verify your ClustrMaps
domain_idis correct - Make sure you've signed up at clustrmaps.com and created a map
- Colors / Dark Mode: Edit CSS variables in
assets/css/styles.cssβ light theme under:root, dark theme under[data-theme="dark"] - Fonts: Change Google Fonts link in build scripts
- Layout: Modify scripts in
.github/scripts/
- π Read the detailed guide: How to Use This Template - comprehensive documentation with examples and troubleshooting tips (continuously updated)
- π¬ Have questions? Open an Issue - we're happy to help!
- π Review example
config/content.jsonandconfig/site.yamlfor reference - π Check GitHub Actions logs for build errors
MIT License - free to use and modify!
Created by Sixun Dong - Independent Researcher
This template is designed to be simple and practical. Start with the basics and customize as needed.