GitHub Pages Hosting
The site is hosted on GitHub Pages using a username.github.io repository pattern, which provides automatic deployment and free hosting.Repository Configuration
Repository Name:rdotsvg.github.io
Why this naming pattern?
Why this naming pattern?
GitHub Pages recognizes
[username].github.io repositories as special user sites:- Automatically deployed from the
mainbranch - No manual workflow configuration needed
- Served from repository root (not
/docsfolder) - Custom domain support built-in
Deployment Workflow
GitHub Pages Build
GitHub automatically:
- Detects changes in the repository
- Serves static files from root directory
- Updates live site within 1-2 minutes
- No build process or compilation needed
Custom Domain Setup
The site uses a custom domain (r.foo.ng) instead of the default rdotsvg.github.io URL.
CNAME Configuration
CNAME file in repository root:DNS Configuration
Configure DNS records at your domain registrar (foo.ng):- CNAME Record (Subdomain)
- A Records (Apex Domain)
For subdomain
r.foo.ng:| Type | Name | Value | TTL |
|---|---|---|---|
| CNAME | r | rdotsvg.github.io. | 3600 |
HTTPS/SSL
GitHub Pages automatically provisions SSL certificates:- Add CNAME file to repository
- Configure DNS records
- Go to repository Settings → Pages
- Check “Enforce HTTPS” (after DNS propagates)
SEO Configuration
The site uses robots.txt to control bot access and prevent AI training scrapers.robots.txt Implementation
Bot Blocking Strategy
Bot Blocking Strategy
Blocked User-Agents:
- AI training crawlers (GPTBot, ClaudeBot, cohere-ai)
- AI assistant tools (ChatGPT-User, PerplexityBot)
- Data aggregators (Diffbot, Omgilibot, FacebookBot)
- Extended search bots (Google-Extended, Applebot-Extended)
- Standard search engines (Googlebot, Bingbot)
- Social media preview crawlers (Twitter, Discord)
- Analytics and monitoring tools
Accessing robots.txt
The file is served at the root URL:Git Workflow
Branch Strategy
Single Branch Deployment:- Main branch:
main(production) - All changes committed directly to main
- No separate development or staging branches
- Simple Workflow
- Feature Branch Workflow
Ideal for personal sites with single maintainer:
Deployment Checklist
Validate Files
Check critical files exist:
index.htmlin rootstyles.cssreferenced correctlyCNAMEcontains correct domainrobots.txthas proper formatting
Verify Deployment
Check the live site:
- Visit https://r.foo.ng
- Test in multiple browsers
- Verify mobile responsiveness
- Check Status.cafe widget loads
CDN Usage
The site leverages CDNs for external resources to improve performance and reduce repository size.jsdelivr CDN
ServerMono Font Loading:Why jsdelivr?
Why jsdelivr?
Benefits:
- Free CDN with global edge locations
- GitHub repository direct linking
- Automatic version management with
@latesttag - HTTP/2 support for faster loading
- No account or API keys required
- WOFF2 (best compression, modern browsers)
- WOFF (good compression, wide support)
- OTF (universal compatibility)
External Scripts
Status.cafe Widget:Performance Optimization
File Size Strategy
- HTML: Minified inline styles removed in favor of external CSS
- CSS: Single 2KB stylesheet for entire site
- Fonts: WOFF2 format reduces font size by ~30% vs TTF
- SVG: Optimized logo with minimal path data
Caching Headers
GitHub Pages automatically sets cache headers:Cache Duration by File Type
Cache Duration by File Type
| File Type | Cache Time | Rationale |
|---|---|---|
| HTML | 10 minutes | Frequent updates |
| CSS | 10 minutes | Style iterations |
| Fonts | 1 year | Rarely change |
| Images | 1 year | Static assets |
Troubleshooting
Site not updating after push
Site not updating after push
Possible causes:
- Browser cache - Hard refresh with Ctrl+Shift+R (Cmd+Shift+R on Mac)
- CDN cache - Wait 5-10 minutes for propagation
- GitHub Pages build failed - Check repository Actions tab
- Wrong branch - Ensure pushing to
mainbranch
Custom domain not working
Custom domain not working
Checklist:
- CNAME file exists in repository root
- CNAME contains only domain (no https:// or /)
- DNS records configured at registrar
- DNS propagation complete (check with
dig r.foo.ng) - HTTPS enforcement disabled temporarily
Status.cafe widget not loading
Status.cafe widget not loading
Common issues:
- Username mismatch in script URL
- Status.cafe service down
- Ad blocker blocking external scripts
- CORS policy on some networks