This repository contains the source code for Kyle Mathewson's academic homepage, a minimalist and efficient personal website inspired by classic 90s academic pages. The site is live at kylemathewson.com.
This project implements a clean, responsive academic homepage that automatically updates to showcase the latest GitHub projects. It features:
- Automatically updated project listings from GitHub repositories
- Sortable project thumbnails with descriptions
- Social media links and professional information
- Daily automated updates via GitHub Actions
- Clean, responsive design optimized for all devices
The website is deployed at kylemathewson.com using GitHub Pages.
.
├── index.html # Main webpage
├── update_projects.py # Script to fetch and update GitHub projects
├── requirements.txt # Python dependencies
├── CNAME # Domain configuration for GitHub Pages
└── .github/workflows/ # GitHub Actions workflow configurations
└── update-projects.yml # Automated update and deployment workflow
The project uses GitHub Actions to automatically update the project list and deploy changes. The automation:
- Runs daily at midnight
- Triggers on pushes to the main branch
- Can be manually triggered through GitHub Actions
- Updates project information from GitHub repositories
- Commits changes and deploys to GitHub Pages
The automated workflow (update-projects.yml):
- Sets up Python environment
- Installs required dependencies
- Runs the update script to fetch latest projects
- Commits and pushes any changes
- Deploys to GitHub Pages with custom domain configuration
To set up the project locally:
-
Clone the repository:
git clone https://github.com/[username]/homePage.git cd homePage -
Create and activate a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
To test the update script locally:
python update_projects.py
The site supports displaying projects from private GitHub repositories that have public deployments (e.g., Netlify, Vercel).
-
Set up GitHub Token (required for private repo access):
./setup_github_token.sh
Follow the instructions to create a token at https://github.com/settings/tokens with
reposcope. -
Check your private repos configuration:
python check_private_repos.py
This diagnostic tool will show you which repos need setup.
-
For each private repo:
- Set the homepage URL in GitHub repo settings
- Add
catalogue.jsonto repo root - Add
screenshot.pngto repo root - Deploy the files to your public site
-
Update homepage:
python update_projects.py
- Full Guide: See docs/PRIVATE_REPO_AUTOMATION.md
- Quick Reference: See docs/PRIVATE_REPO_INSTRUCTIONS.md
setup_github_token.sh- Check and configure GitHub tokencheck_private_repos.py- Diagnose private repo configuration issues
The site automatically deploys through GitHub Actions. For manual deployment:
-
Push changes to the main branch:
git add . git commit -m "Your commit message" git push origin main
-
The GitHub Action will automatically:
- Update the projects list
- Deploy to GitHub Pages
- Update the live site at kylemathewson.com
The site uses a custom domain (kylemathewson.com) configured through:
- CNAME file in the repository
- GitHub Pages settings
- Domain DNS configuration pointing to GitHub Pages
- Python 3.x
- Required Python packages (specified in requirements.txt):
- requests==2.31.0
- beautifulsoup4==4.12.2
While this is a personal website, suggestions and improvements are welcome:
- Fork the repository
- Create a feature branch
- Submit a pull request
This project is available for reference and learning purposes. Please contact the repository owner for any usage permissions.
For issues or questions:
- Open an issue in the GitHub repository
- Contact through the website's provided contact information