A personal resume website that simulates a command-line terminal interface — an interactive, hacker-flavored way to explore professional information.
🔗 Live site: alfdav.github.io
A static, frontend-only portfolio built to look and feel like a real terminal. Powered by xterm.js with the FitAddon for dynamic, responsive sizing. All resume data is stored in resume.js and rendered on-demand through typed commands — no backend, no build step, no dependencies to install.
- Realistic terminal appearance with blinking cursor and command prompt (
visitor@portfolio:~$) - Built on xterm.js with FitAddon for full-window, responsive layout
- Handles window resize and mobile orientation change
- Clickjacking / iframe protection — breaks out of or destroys content when embedded in a frame
| Command | Alias(es) | Description |
|---|---|---|
help |
ls, dir |
List all available commands |
about |
Display personal bio | |
skills |
List technical skills | |
experience |
Show work experience | |
education |
Display educational background | |
projects |
Browse projects | |
certifications |
certs |
View professional certifications |
verify <name> |
Show detailed info & verification link for a certification | |
contact |
Get contact information | |
clear |
Clear the terminal |
Tip: Type
certsas a shortcut forcertifications.
-
Command History
↑to navigate to previous commands↓to navigate to newer commands- Preserves current input when starting history navigation
- Returns to current input when reaching the end of history
-
Tab Completion
- Press
Tabto auto-complete commands - Shows all possible completions for partial matches
- Case-insensitive completion
- Press
-
Paste Sanitization
Ctrl+V/Cmd+Vpaste is intercepted and sanitized- Strips C0/C1 control characters to prevent ANSI injection
- Collapses multi-line pastes into a single-line command
-
Easter Egg
- The Konami code is supported 🎮
alfdav.github.io/
├── index.html # Main HTML file — loads xterm.js and all scripts
├── styles.css # Terminal styling
├── script.js # Terminal logic, command handlers, key input
├── resume.js # Resume data (JSON on window.resumeData)
├── resume-utils.js # Data access helpers, sanitization, cert lookup
├── terminal-input-utils.js # Input parsing, history, aliases, hyperlinks
└── tests/ # Unit tests
- HTML5 — structure
- CSS3 — styling
- JavaScript (ES6+) — all interactivity, no frameworks
- xterm.js — terminal emulation
- xterm-addon-fit — responsive terminal sizing
- Dark theme, white text (clean modern terminal look)
- Full-viewport terminal via FitAddon — no fixed dimensions
- Resume data is isolated in
resume.jsfor easy updates - Utility logic is split into
resume-utils.jsandterminal-input-utils.jsfor testability - Easter egg education entry in
resume.jsis filtered out at render time byresume-utils.js
- Static content only — no backend, no server-side execution
- Clickjacking protection — detects iframe embedding and either breaks out or destroys page content
- Paste sanitization — strips control characters on clipboard paste to prevent ANSI escape injection
- No data persistence — nothing is written to localStorage or cookies
- No sensitive data — email is not exposed; contact is via LinkedIn
- Keep functions small and focused
- Use clear, descriptive variable names
- Comment complex logic
- Follow SOLID principles
- Frontend-only implementation
- Mobile-first responsive design
- All resume data lives in
resume.js— update that file to update the site
- Hosted on GitHub Pages — pushes to
masterdeploy automatically - No build process required
- Simple static file serving
- Visit alfdav.github.io
- Type
helpto see available commands - Use
Tabfor command completion - Use
↑/↓arrows for command history - Try
verify <cert name>to view certification details and verification links - Type
clearto reset the terminal
- Clone the repository
- No build tools required
- Open
index.htmldirectly in a browser, or serve with any static file server:npx serve . # or python3 -m http.server
- Edit
resume.jsto update resume content; editscript.jsfor terminal behavior
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License — feel free to use and modify.
- LinkedIn: David Diaz (preferred — email available on profile)
- GitHub: alfdav