Deployment Guide
Deployment Guide
Complete guide to deploying your Jekyll portfolio site to GitHub Pages.
Prerequisites
- GitHub account
- Git installed locally
- Ruby and Jekyll installed (for local testing)
Step 1: Prepare Your Content
Update Configuration
- Edit
_config.yml:title: Your Name url: "https://yourusername.github.io" author: name: Your Name email: your.email@example.com github: yourgithub linkedin: yourlinkedin - Update navigation links in
_layouts/default.htmlif needed
Add Your Projects
- Create project files in
_projects/:cp _projects/transcripts.md _projects/your-project.md - Edit with your project details:
--- layout: project title: Your Project description: Brief description date: 2024-01-15 status: production categories: [production, ml] tech: [Python, Rust] github: https://github.com/you/project ---
Update About Page
Edit about.html with your:
- Background and experience
- Technical skills
- Timeline
- Contact information
Step 2: Test Locally
# Install dependencies
bundle install
# Serve locally
bundle exec jekyll serve
# Visit http://localhost:4000
# Test all pages and links
# Check mobile responsiveness (DevTools)
Step 3: Create GitHub Repository
Option A: Via GitHub Website
- Go to https://github.com/new
- Repository name:
yourusername.github.io- IMPORTANT: Must match your GitHub username exactly
- Make it Public
- Don’t initialize with README (you already have one)
- Click “Create repository”
Option B: Via GitHub CLI
gh repo create yourusername.github.io --public --source=. --remote=origin --push
Step 4: Initialize Git Repository
# Initialize git (if not already)
git init
# Add all files
git add .
# Commit
git commit -m "Initial commit: Jekyll portfolio site"
# Add remote (replace yourusername)
git remote add origin https://github.com/yourusername/yourusername.github.io.git
# Push to GitHub
git branch -M main
git push -u origin main
Step 5: Configure GitHub Pages
Method 1: Using GitHub Actions (Recommended)
This is already set up! The .github/workflows/jekyll.yml file will automatically:
- Build your site when you push to main
- Deploy to GitHub Pages
Just enable it:
- Go to repository Settings > Pages
- Source: GitHub Actions
- Save
Method 2: Using Jekyll Native
- Go to repository Settings > Pages
- Source: Deploy from a branch
- Branch:
main/(root) - Save
Step 6: Wait for Deployment
- Go to Actions tab in your repository
- Watch the workflow run (1-2 minutes)
- Once complete, visit:
https://yourusername.github.io
Step 7: Verify Deployment
Check These Items:
- Homepage loads correctly
- All navigation links work
- Projects page displays projects
- Individual project pages load
- About page shows your information
- Blog page exists (even if empty)
- Mobile view works properly
- Fonts load correctly
- Colors match design system
Troubleshooting
Site Not Appearing
Issue: 404 error on yourusername.github.io
Solutions:
- Verify repository name exactly matches:
yourusername.github.io - Check Settings > Pages is enabled
- Wait 2-5 minutes after first push
- Clear browser cache
- Try incognito/private browsing
Build Failing
Issue: GitHub Actions shows red X
Solutions:
- Check Actions tab for error details
- Common issues:
- Invalid YAML in front matter
- Missing Gemfile
- Ruby version mismatch
- Test locally first:
bundle exec jekyll build - Fix errors and push again
Fonts Not Loading
Issue: Site uses system fonts instead of JetBrains Mono/Inter
Solutions:
- Check browser console for errors
- Verify Google Fonts link in
_layouts/default.html - Check internet connection
- Wait for CDN propagation (rare)
CSS Not Applying
Issue: Site looks unstyled
Solutions:
- Check
/assets/css/main.cssexists - Verify path in
_layouts/default.html:<link rel="stylesheet" href="/assets/css/main.css"> - Clear browser cache
- Check browser console for 404 errors
Navigation Links Broken
Issue: Links lead to 404 pages
Solutions:
- Verify files exist at expected paths
- Check
_config.ymlbaseurl setting (should be empty for username.github.io) - Use
relative_urlfilter in links:<a href="/projects/">Projects</a>
Updating Your Site
Making Changes
# Make your changes to files
# Test locally
bundle exec jekyll serve
# Commit and push
git add .
git commit -m "Update: describe your changes"
git push origin main
GitHub Actions will automatically rebuild and deploy!
Adding Blog Posts
# Create new post file
touch _posts/2024-01-15-your-post-title.md
# Add front matter and content
---
layout: post
title: "Your Post Title"
date: 2024-01-15
categories: [tech, tutorial]
---
Your content here...
# Commit and push
git add _posts/
git commit -m "Add new blog post"
git push
Custom Domain (Optional)
Setup Custom Domain
-
Purchase domain (Namecheap, Google Domains, etc.)
- Add DNS records:
Type: A Host: @ Value: 185.199.108.153 Type: A Host: @ Value: 185.199.109.153 Type: A Host: @ Value: 185.199.110.153 Type: A Host: @ Value: 185.199.111.153 Type: CNAME Host: www Value: yourusername.github.io - In repository Settings > Pages:
- Custom domain: yourdomain.com
- Enforce HTTPS: ✓
- Wait for DNS propagation (24-48 hours)
Performance Optimization
Enable Compression
Already configured in GitHub Pages!
Optimize Images
# Install image optimization tools
npm install -g imagemin-cli
# Optimize images
imagemin assets/images/* --out-dir=assets/images
Check Performance
Use these tools:
- Google PageSpeed Insights
- GTmetrix
- Chrome DevTools Lighthouse
Target scores:
- Performance: 90+
- Accessibility: 95+
- Best Practices: 95+
- SEO: 95+
Security
Enable Security Features
In repository Settings > Security:
- Dependabot alerts
- Dependabot security updates
Update Dependencies
# Update gems periodically
bundle update
# Commit and push updates
git add Gemfile.lock
git commit -m "Update dependencies"
git push
Backup Strategy
Automatic Backup
GitHub is your backup! Your code is safe.
Local Backup
# Clone to another location
git clone https://github.com/yourusername/yourusername.github.io.git backup/
# Or create archive
git archive --format=zip --output=backup.zip main
Analytics (Optional)
Google Analytics
- Create GA4 property
- Get tracking ID
- Edit
_layouts/default.html:<!-- Uncomment and add your ID --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXXX'); </script>
Maintenance Schedule
Weekly
- Check for broken links
- Review analytics (if enabled)
- Test site on mobile devices
Monthly
- Update dependencies:
bundle update - Check for security alerts
- Review and update content
Quarterly
- Review design and UX
- Update project portfolio
- Refresh about page
- Check performance scores
Getting Help
Resources
Community
- Jekyll Forum
- GitHub Community
- Stack Overflow: Tag
jekyllorgithub-pages
Next Steps
- ✅ Deploy site
- ✅ Verify everything works
- Share your site:
- Add to LinkedIn profile
- Update resume
- Share on social media
- Start creating content:
- Add more projects
- Write technical blog posts
- Document your work
Congratulations! Your portfolio is live! 🎉
Visit: https://yourusername.github.io