A GitHub Pages site that displays your GitHub profile styled as an XFCE desktop environment.
-
Create a repository — either
<username>.github.io(for a user Pages site) or any other name (for a project Pages site). GitHub Pages must be enabled in Settings → Pages. -
Copy all files to the root of that repository.
-
Handle the CNAME file — this repo includes a
CNAMEfile pointing topshickey.dev. If you're using a custom domain, editCNAMEwith your domain. If you're not using a custom domain, delete theCNAMEfile — otherwise Pages will reject the build or try to serve from the wrong domain. -
Set your GitHub username in
js/github.js(line 12):const GITHUB_USERNAME = window.GH_USERNAME || 'pshickeydev';
Change
'pshickeydev'to your GitHub username, or setwindow.GH_USERNAMEbefore the script loads. -
Push to GitHub and enable Pages (Settings → Pages → Source:
mainbranch,/(root) folder). -
Wait a minute for Pages to build, then visit your URL.
- CNAME file is included — this repo ships with a
CNAMEfile forpshickey.dev. If you fork or copy the repo, you must either updateCNAMEto your own custom domain, or delete it entirely. Leaving the wrongCNAMEin place will cause Pages to fail or serve the wrong site. _config.ymlexcludesREADME.md— this prevents Jekyll from processing the README as a Pages page. If you delete_config.yml, Jekyll will serveREADME.mdas a page instead of showing the desktop.- Repo name matters — for user Pages (
<username>.github.io), the repo must be named exactly<username>.github.io. For project Pages, the site lives at<username>.github.io/<repo-name>/. window.GH_USERNAMEoverride — if you setwindow.GH_USERNAMEin a<script>tag beforejs/github.jsloads, you can avoid editing thejs/github.jsfile (useful for forks).- localStorage caching — the GitHub API uses
localStoragewith a 10-minute cache. If you see stale profile data, open DevTools → Application → Local Storage and delete keys starting withgh_cache_. - No build step — this is pure HTML/CSS/JS. No bundler, no framework, no npm install. Just push the files and Pages serves them directly.
- Rate limits — unauthenticated GitHub API calls are limited to 60/hour per IP. The 10-minute cache should keep things reasonable for personal use.
- Iframe apps point to pshickeydev's sites — the Terminal Scroller and D3 Graph Viz windows load from
pshickeydev.github.io. If you fork this repo, you'll need to update those URLs injs/apps.js(getAppConfig()→scrollerandgraphvizentries) or remove those app entries fromjs/desktop.jsif you don't have equivalents. - Page title is hardcoded —
index.htmlhas<title>pshickeydev - XFCE Desktop</title>. Change this to your own name. .gitignoreignores.playwright-mcp/— this is a debug artifact directory from the Playwright MCP tool used during development. It's not needed for the site to work.
- XFCE Greybird theme — authentic XFCE look with grey panels, blue active windows, and desktop icons
- Bottom panel — Applications menu, taskbar, and clock
- Desktop icons — double-click to launch apps
- Applications menu — Whisker-style dropdown with avatar
- Window manager — drag to move, resize, minimize, maximize, close, focus stacking
- Profile window — avatar, bio, stats (repos, followers, following, gists)
- Repositories window — Thunar-style file manager grid with repo details
- Activity window — recent GitHub events with icons, supplemented with synthesized repo-creation and push events (the Events API misses these for low-activity repos)
- Terminal window — interactive terminal with commands:
help,whoami,ls,cat <repo>,stats,activity,clear - Terminal Scroller window — loads pshickeydev.github.io/terminal-scroller in an iframe
- D3 Graph Viz window — loads pshickeydev.github.io/d3-graph-viz in an iframe
The site uses unauthenticated GitHub API calls (60 requests/hour per IP). Data is cached in localStorage for 10 minutes to minimize API usage. For high traffic, consider setting up a GitHub OAuth app for a client ID (5000 requests/hour).
- Username: Edit
js/github.js→GITHUB_USERNAME - Theme colors: Edit
css/xfce.cssandcss/windows.css - Desktop icons: Edit
js/desktop.js→desktopIconsarray - Menu items: Edit
js/desktop.js→menuItemsarray - Wallpaper: Edit
#desktopbackground incss/xfce.css - Terminal commands: Edit
js/apps.js→processCommand()
├── index.html # Entry point
├── _config.yml # GitHub Pages / Jekyll config
├── PRODUCT.md # Product context (for the Impeccable design skill)
├── DESIGN.md # Design system: colors, typography, components, rules
├── .impeccable/ # Impeccable design skill config and sidecar
├── css/
│ ├── xfce.css # Desktop, panel, menu, icons
│ └── windows.css # Window manager and app content styles
└── js/
├── github.js # GitHub API module with caching
├── windowmanager.js # Window manager (drag, resize, focus)
├── desktop.js # Desktop environment (icons, panel, menu, clock)
├── apps.js # App definitions (Profile, Repos, Activity, Terminal, Terminal Scroller, D3 Graph Viz)
└── main.js # Entry point