GithubPages
SKILL.md
GitHub Pages Skill
Complete guide for deploying, configuring, and managing GitHub Pages sites.
Quick Reference
| Site Type | Repository Name | URL Pattern |
|---|---|---|
| User/Org Site | <username>.github.io |
https://<username>.github.io |
| Project Site | Any repository name | https://<username>.github.io/<repo> |
Availability:
- Public repos: GitHub Free (all plans)
- Private repos: GitHub Pro, Team, Enterprise
Workflow Routing
When executing a workflow, output this notification directly:
Running the **WorkflowName** workflow from the **GithubPages** skill...
| Workflow | Trigger | File |
|---|---|---|
| QuickStart | "setup github pages", "create pages site" | workflows/QuickStart.md |
| CustomDomain | "add custom domain", "configure domain" | workflows/CustomDomain.md |
| JekyllSetup | "setup jekyll", "add jekyll theme" | workflows/JekyllSetup.md |
| ActionsWorkflow | "custom build", "github actions for pages" | workflows/ActionsWorkflow.md |
| Troubleshoot | "pages not working", "fix github pages" | workflows/Troubleshoot.md |
| Deploy | "deploy to github pages", "publish site" | workflows/Deploy.md |
Examples
Example 1: Create a new GitHub Pages site
User: "Setup GitHub Pages for my project"
→ Invokes QuickStart workflow
→ Checks if user/org or project site
→ Configures publishing source (branch or Actions)
→ Creates initial content structure
→ Verifies deployment
Example 2: Add custom domain
User: "Add my domain example.com to GitHub Pages"
→ Invokes CustomDomain workflow
→ Determines domain type (apex vs subdomain)
→ Provides DNS configuration instructions
→ Adds CNAME file or configures via Settings
→ Enables HTTPS enforcement
Example 3: Setup Jekyll theme
User: "Add a theme to my GitHub Pages site"
→ Invokes JekyllSetup workflow
→ Lists available supported themes
→ Configures _config.yml
→ Sets up custom CSS/layouts if needed
Example 4: Deploy with custom build
User: "Deploy my Next.js site to GitHub Pages"
→ Invokes ActionsWorkflow workflow
→ Creates custom GitHub Actions workflow
→ Configures build process
→ Sets up artifact deployment
Site Types
User/Organization Site
Requirements:
- Repository name MUST be
<username>.github.io - Only ONE per account
- Publishes from default branch
Setup:
# Create repository named exactly: username.github.io
# Enable Pages in Settings > Pages
# Select source branch
Project Site
Requirements:
- Can use any repository
- Multiple project sites allowed
- URL includes repository name
Setup:
# Any repository works
# Enable Pages in Settings > Pages
# Choose: branch (root or /docs) OR GitHub Actions
Publishing Sources
Option 1: Deploy from Branch
Best for: Jekyll sites, simple static sites
Configuration:
- Go to Settings > Pages
- Select "Deploy from a branch"
- Choose branch (main, gh-pages, etc.)
- Choose folder:
/(root) or/docs
Behavior:
- Pushes to branch trigger automatic builds
- Jekyll processes Markdown by default
- CNAME file auto-created for custom domains
Option 2: GitHub Actions Workflow
Best for: Custom builds, non-Jekyll generators
Configuration:
- Go to Settings > Pages
- Select "GitHub Actions"
- Create workflow file in
.github/workflows/
Behavior:
- Full control over build process
- Works with Hugo, Gatsby, Next.js, etc.
- Artifacts uploaded and deployed
Jekyll Integration
Auto-Enabled Plugins
These plugins work automatically on GitHub Pages:
| Plugin | Purpose |
|---|---|
| jekyll-coffeescript | CoffeeScript support |
| jekyll-default-layout | Automatic layouts |
| jekyll-gist | GitHub Gist embedding |
| jekyll-github-metadata | Repository metadata |
| jekyll-optional-front-matter | Optional YAML front matter |
| jekyll-paginate | Pagination |
| jekyll-readme-index | README as index |
| jekyll-titles-from-headings | Auto-generate titles |
| jekyll-relative-links | Convert relative links |
Supported Themes
Available without additional configuration:
- Architect
- Cayman
- Dinky
- Hacker
- Leap day
- Merlot
- Midnight
- Minima
- Minimal
- Modernist
- Slate
- Tactile
- Time machine
Usage in _config.yml:
theme: jekyll-theme-minimal
title: My Site
description: Site description
Remote Themes
Use any Jekyll theme from GitHub:
remote_theme: owner/repo-name
Custom Domains
Domain Types
| Type | Example | DNS Record |
|---|---|---|
| Apex | example.com |
A or ALIAS |
| WWW Subdomain | www.example.com |
CNAME |
| Custom Subdomain | blog.example.com |
CNAME |
DNS Configuration
For Apex Domains (A Records):
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
For Apex Domains (AAAA Records - IPv6):
2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153
For Subdomains (CNAME Record):
www.example.com → username.github.io
blog.example.com → username.github.io
Verification Commands
# Check A records
dig example.com +noall +answer -t A
# Check AAAA records
dig example.com +noall +answer -t AAAA
# Check CNAME records
dig www.example.com +nostats +nocomments +nocmd
Usage Limits
| Resource | Limit |
|---|---|
| Repository size | 1 GB (recommended) |
| Published site size | 1 GB (maximum) |
| Bandwidth | 100 GB/month (soft) |
| Builds | 10/hour (soft, branch only) |
| Deployment timeout | 10 minutes |
Restrictions:
- No server-side languages (PHP, Python, Ruby)
- No commercial transactions or e-commerce
- Must comply with GitHub Terms of Service
Security Best Practices
- Verify custom domains - Prevents domain takeover attacks
- Avoid wildcard DNS -
*.example.comcreates security risks - Enable HTTPS - Always enforce HTTPS after certificate provisioning
- Don't expose secrets - Public sites accessible even from private repos
- Update DNS promptly - If disabling site, update/remove DNS records
Common Issues & Solutions
| Issue | Solution |
|---|---|
| Site not publishing | Check branch/folder settings, verify entry file exists |
| 404 errors | Ensure index.html, index.md, or README.md at root |
| Custom domain not working | Wait 24h for DNS propagation, verify records with dig |
| HTTPS not available | Wait up to 1 hour after DNS verification |
| Mixed content warnings | Change http:// to https:// in all assets |
| Build failures | Check Actions tab for error logs |
File References
| Topic | Reference File |
|---|---|
| DNS Configuration | references/DnsConfiguration.md |
| Jekyll Configuration | references/JekyllConfiguration.md |
| Actions Workflows | references/ActionsWorkflows.md |
| Troubleshooting Guide | references/Troubleshooting.md |
| Best Practices | references/BestPractices.md |
Scripts
| Script | Purpose |
|---|---|
scripts/verify-dns.sh |
Verify DNS configuration for custom domains |
scripts/check-site-status.sh |
Check if GitHub Pages site is live |
External Documentation
Weekly Installs
46
Repository
julianobarbosa/…e-skillsGitHub Stars
33
First Seen
Jan 24, 2026
Security Audits
Installed on
gemini-cli40
opencode40
cursor38
codex37
github-copilot36
amp31