Want to create your own portfolio using this template? Great! This guide will walk you through the process.
-
Fork this repository
- Click "Fork" at the top right of this page
- Choose your GitHub account as the destination
-
Update your information
- Edit
data/site-config.ymlwith your details (name, email, GitHub username, etc.) - Update
data/manual-tiles.ymlwith your custom tiles (resume link, etc.)
- Edit
-
Add your images
- Replace
assets/images/profile/face.jpgwith your photo - Add project screenshots to
assets/images/projects/(named{repo-name}.jpg)
- Replace
-
Enable GitHub Actions
- Go to Settings → Actions → General
- Enable "Read and write permissions" for workflows
-
Enable GitHub Pages
- Go to Settings → Pages
- Source: Deploy from a branch
- Branch:
main(root) - Click Save
-
Done!
- Your site will be live at
https://{your-username}.github.io/ - GitHub Actions will auto-update your projects weekly
- Your site will be live at
# Via GitHub UI (recommended)
# Click "Fork" button at top right
# Or via GitHub CLI
gh repo fork Avery2/Avery2.github.io --clone=trueEdit data/site-config.yml:
site:
title: "YourName"
description: "Your tagline here!"
domain: "your-username.github.io"
repository: "your-username/your-username.github.io"
author:
name: "Your Full Name"
email: "your.email@example.com"
profile_image: "./assets/images/profile/face.jpg"
resume_url: "https://your-site.com/resume.pdf"
github: "your-username"
linkedin: "your-linkedin"
# List only the repos you want to showcase
curated_repos:
- your-username.github.io
- awesome-project-1
- awesome-project-2
# Add more repos here
# Manually mark repos as featured (orange border)
featured_repos:
- your-username.github.io
- awesome-project-1
# Optional: Auto-extract experience/education from resume HTML
# Set to 'DISABLED' or remove to disable this feature
resume_source_url: "https://github.com/your-username/your-resume-repo/blob/main/resume.html"Resume Integration (Optional):
The resume_source_url field enables automatic extraction of experience and education from a public resume HTML file:
- Script fetches the HTML and parses
<section class="experience">and<section class="education"> - Generates tiles for each job and degree that appear on your main page
- Creates individual detail pages at
/writing/experience/{company}.htmland/writing/education/{school}.html - To disable: set
resume_source_url: 'DISABLED'or remove the field entirely - See
.github/scripts/fetch-resume-data.pyfor parsing details
Profile Photo:
# Replace this file with your photo
assets/images/profile/face.jpgProject Screenshots:
# Add images named after your repos
assets/images/projects/awesome-project-1.jpg
assets/images/projects/awesome-project-2.png
assets/images/projects/another-project.gifSupported formats: .jpg, .jpeg, .png, .gif
Image naming:
- Filename must match repo name exactly (case-insensitive)
- Example: Repo
Steam-Hours→steam-hours.jpgorSteam-Hours.png
Edit data/manual-tiles.yml:
tiles:
# Resume link
- id: "resume-tile"
type: "link"
title: "View My Resume"
description: "Full resume with experience and education"
url: "https://your-site.com/resume.pdf"
open_new_tab: true
priority: 1000
tags: ["resume", "professional"]
style:
background_color: "#007bff"
text_color: "#ffffff"
# Add more custom tiles here
# See docs/TILE_GUIDE.md for examplesOption A: Via GitHub UI
- Go to Settings → Actions → General
- Workflow permissions: Select "Read and write permissions"
- Check "Allow GitHub Actions to create and approve pull requests"
- Click Save
Option B: First Push Will Prompt
- Push your changes
- GitHub will ask to enable Actions
- Click "I understand, enable Actions"
- Go to Settings → Pages
- Source: "Deploy from a branch"
- Branch:
main/(root) - Click "Save"
- Your site will be live in ~1 minute
If you want to use a custom domain like yourname.com:
-
Update CNAME file:
echo "yourname.com" > CNAME git add CNAME git commit -m "Add custom domain" git push
-
Configure DNS (with your domain provider):
Type Name Value A @ 185.199.108.153 A @ 185.199.109.153 A @ 185.199.110.153 A @ 185.199.111.153 CNAME www your-username.github.io -
Enable HTTPS:
- Go to Settings → Pages
- Check "Enforce HTTPS"
-
Update site config:
site: domain: "yourname.com"
Edit css/themes.css:
:root {
--accent-primary: #007bff; /* Change to your brand color */
}Edit data/filter-groups.yml:
filters:
- id: "tags"
options:
- value: "python"
label: "Python"
color: "#3776ab"
- value: "your-tag"
label: "Your Tag"
color: "#ff0000"Edit css/grid.css:
/* Change number of columns */
.grid-container {
column-count: 4; /* Desktop: 4 columns */
}
@media (max-width: 900px) {
.grid-container {
column-count: 2; /* Tablet: 2 columns */
}
}The site auto-updates weekly (Sundays at 00:00 UTC). To manually trigger:
- Go to Actions tab
- Select "Generate Project Metadata"
- Click "Run workflow"
- Select branch:
main - Click "Run workflow"
Automatic (recommended):
- GitHub Actions runs weekly
- Fetches latest repo data from API
- Updates
data/github-projects.yml - Rebuilds site automatically
Manual:
# Set up environment
cp .env.example .env
# Edit .env with your GitHub token
# Run script locally
cd .github/scripts/
pip install -r requirements.txt
python fetch-github-data.py
# Commit changes
git add ../../data/github-projects.yml
git commit -m "Update project metadata"
git push- Create the repo on GitHub
- Add repo name to
curated_reposindata/site-config.yml - Add project screenshot to
assets/images/projects/{repo-name}.jpg - Wait for weekly update OR manually trigger Actions workflow
Check GitHub Pages settings:
- Settings → Pages → Source should be "main" branch
- Wait 1-2 minutes after enabling
Check Actions:
- Go to Actions tab
- Look for failed workflows (red X)
- Click to see error details
Check curated_repos list:
- Repo names must match exactly
- Case-sensitive
- Include your username if needed:
username/repo-name
Check GitHub Actions:
- Workflow should run weekly
- Check Actions tab for errors
- Manually trigger workflow to force update
Check file paths:
- Profile:
assets/images/profile/face.jpg - Projects:
assets/images/projects/{repo-name}.jpg
Check file names:
- Filename must match repo name exactly
- Supported:
.jpg,.jpeg,.png,.gif
Check browser console:
- Open DevTools (F12)
- Look for JavaScript errors
Check YAML syntax:
- Validate files at https://www.yamllint.com/
- Common issues: incorrect indentation, missing quotes
Yes! This is a static site. You can host on:
- Netlify
- Vercel
- Cloudflare Pages
- Any static host
Just copy the files and deploy. You'll need to manually run the Python script or set up your own automation.
Absolutely! All CSS is in css/ folder. No build system - just edit and refresh.
Not yet, but it's planned! Check the roadmap in docs/ARCHITECTURE.md.
Remove it from curated_repos in data/site-config.yml. It will disappear on the next metadata update.
The theme is controlled by CSS custom properties in css/themes.css. You can:
- Edit the existing light/dark themes
- Add new themes (e.g.,
[data-theme="blue"]) - Change the default theme in
index.html(data-theme="light")
By default, weekly (Sundays at 00:00 UTC). You can change this in .github/workflows/generate-metadata.yml:
schedule:
- cron: '0 0 * * 0' # Change to your preferenceCron syntax: https://crontab.guru/
- Issues with the template? Open an issue on the original repo
- Questions? Check
docs/DEVELOPMENT.mdanddocs/ARCHITECTURE.md - Found a bug? Please report it!
This template is open source. Fork it, customize it, make it yours!
Happy forking! 🚀