Stop maintaining your resume and portfolio site in parallel. resume.yaml is the single source of truth — the same file emits a PDF resume and a multi-mode portfolio site (splash → terminal → editorial GUI). Update once; both stay in sync. Use show_on_resume to control which entries appear where.
Live Demo: subhayu99.github.io
This repository uses a dual-branch strategy:
mainbranch (you are here) → Clean template with .example files onlypersonalbranch → Maintainer's actual portfolio (deployed to subhayu99.github.io)
For template users: You're in the right place! Fork this repo and GitHub will copy main only (the "Copy the main branch only" checkbox in the fork dialog is on by default), so you skip all the maintainer's personal data.
For maintainers: See MAINTAINER_GUIDE.md for how to work with both branches.
- 📄 Single Source of Truth -
resume.yamldrives a PDF resume and a portfolio site — no more drift between them - 🖨️ Auto-Rendered PDF Resume - rendercv-powered, downloadable, regenerates on every push
- 🎭 Multi-Mode Portfolio - splash page picks between retro terminal and editorial GUI; both render from the same data
- 🚀 Zero-Code Setup - visual resume builder + AI converter, no programming needed
- 📊
show_on_resumeFlag - mark which projects/entries land in the PDF vs. site-only - 🤖 AI Resume Converter - paste an existing resume, get clean
resume.yaml - 🎨 Themes & Polish - matrix/blue/purple/amber terminal themes; scroll-pinned animations + sparklines + PWA install in GUI mode
- 📱 Fully Responsive - works on desktop, tablet, and mobile
- 🔍 Smart Search - search across all your content instantly
- 📂 Custom Fields & Dynamic Sections - add any field/section; appears in GUI and becomes a terminal command automatically
- 🔒 Secure & Accessible - XSS protection, Content Security Policy, ARIA labels, keyboard nav
- 🔄 Auto-Deploy - push to GitHub, site rebuilds automatically
flowchart LR
yaml["📝 resume.yaml<br/><i>single source of truth</i>"]
yaml -->|rendercv| pdf["📄 resume.pdf<br/><i>downloadable</i>"]
yaml -->|build| json["📦 resume.json<br/><i>website data</i>"]
json --> splash["🎬 splash page"]
splash --> terminal["💻 terminal mode<br/><i>retro CRT</i>"]
splash --> gui["✨ editorial GUI<br/><i>scroll-pinned</i>"]
The build pipeline turns one YAML into both a PDF resume and a multi-mode website. rendercv produces the PDF; the same data flows into resume.json, which the splash page reads. Visitors pick terminal mode (retro CRT with commands, themes, hidden games) or editorial GUI mode (scroll-pinned animations, sparklines, PWA install). Both modes render from the same JSON, so they never drift from the PDF — that's the "always in sync" guarantee.
Perfect for non-technical users! No installation of npm, Python, or any tools required.
Visit app.rendercv.com and create your resume using the visual builder:
- Fill in your information (name, email, experience, education, etc.)
- Add your skills, projects, and achievements
- Customize sections to match your background
- Download the YAML file when done
Time: ~5 minutes
Already have a resume? Skip the manual entry and let AI do the work!
🤖 Method 1: Built-in AI Resume Converter (Recommended)
After deploying your portfolio (Steps 2-4), you can use the built-in converter:
- Visit your live portfolio at
https://yourusername.github.io - Type
replicatein the terminal - Click "Get AI Conversion Prompt" button
- Copy the comprehensive prompt to your clipboard
- Paste it into ChatGPT, Claude, or Gemini along with your resume
- Get perfectly formatted
resume.yamloutput - Upload it to your repository to update your portfolio
Time: ~2 minutes | Benefit: Always uses the latest schema format!
📝 Method 2: Manual AI Conversion (Before Deployment)
If you want to prepare your resume before deploying:
- Open
resume.yaml.examplein the template repository - Copy its contents
- Use this prompt with ChatGPT, Claude, or Gemini:
I have my resume below. Please convert it to this YAML format: [Paste resume.yaml.example contents] Here's my resume: [Paste your resume text, PDF content, or LinkedIn profile] Please maintain all my information but structure it exactly like the example. - Copy the AI-generated YAML and save it as
resume.yaml
Why this works: AI excels at reformatting structured data. You get perfect YAML syntax without learning the format!
- Click the "Fork" button at the top of this page (or visit
github.com/subhayu99/subhayu99.github.io/fork) - Rename it to
yourusername.github.ioin the "Repository name" field- Replace
yourusernamewith your actual GitHub handle — GitHub checks availability inline - This naming is what makes GitHub Pages serve your site at the root URL
- Replace
- Leave "Copy the
mainbranch only" checked (it's the default) — this skips the maintainer'spersonalbranch - Click "Create fork"
Time: ~1 minute
Why fork instead of "Use this template"? Forks have an
upstreamremote linked back to this repo for free, so you can pull future engine improvements withgit fetch upstream main && git merge upstream/main— seedocs/UPGRADING.md. They also count toward public adoption stats (runshowcaseon the demo site to see).
Important: Do this BEFORE uploading your resume to avoid workflow errors!
- Go to Settings → Pages (in left sidebar)
- Under "Source", select "GitHub Actions"
- Go to Settings → Actions → General
- Under "Actions permissions", ensure actions are enabled
Time: ~1 minute
- In your new repository, click "Add file" → "Upload files"
- Drag and drop your
resume.yamlfile from Step 1 - Commit the file (click "Commit changes")
- The deployment will start automatically! Wait 2-5 minutes
Time: ~3 minutes (mostly waiting for deployment)
Your portfolio is now live at: https://yourusername.github.io
To update your information:
-
Option A: Edit on GitHub
- Go to your repository
- Click on
resume.yaml - Click the pencil icon to edit
- Make changes and commit
-
Option B: Use RenderCV again
- Update your resume at app.rendercv.com
- Download new YAML file
- Upload to replace old
resume.yaml
Your site will automatically rebuild and update within 2-5 minutes!
Because you forked (not used "Use this template"), your repo has an
upstream remote pointing back at the template — pulling future engine
improvements is one command:
git fetch upstream main
git merge upstream/main
git push origin mainYour resume.yaml, manifest.json, and other personal files stay
untouched. For the auto-PR workflow, conflict recovery, and orphan
migration (people who used the old "Use this template" button), see
docs/UPGRADING.md.
Visit your portfolio and use these commands in the terminal:
theme matrix # Green Matrix-style (default)
theme blue # Blue terminal
theme purple # Purple hacker theme
theme amber # Vintage amber monitor
theme red # Red alert themeThe theme is saved in your browser, so it persists across visits!
Create a custom ASCII art version of your name:
- Go to patorjk.com/software/taag
- Type your name and choose a font
- Copy the ASCII art
- Create
client/public/data/styled_name.txtin your repo - Paste the ASCII art and commit
Customize the neofetch output (the welcome banner):
- Create
client/public/data/neofetch.txtin your repo - Add your custom ASCII art and info
- See
client/public/data/neofetch.txt.examplefor inspiration
Customize the PWA (installable app) settings:
-
Copy
client/public/manifest.json.exampletoclient/public/manifest.json -
Edit the file:
{ "name": "Your Name - Portfolio", "short_name": "Your Portfolio", "description": "Your description here" } -
Commit the changes
Want to add extra information beyond the standard resume fields? You can add any custom fields AND any custom sections you want!
Examples of custom fields you can add:
social_networks:
- network: "LinkedIn"
username: "yourname"
profile_url: "https://linkedin.com/in/yourname" # ✨ Custom field!
verified: true # ✨ Custom field!
technologies:
- label: "Languages"
details: "JavaScript, TypeScript, Python"
proficiency_level: "Expert" # ✨ Custom field!
years_experience: 5 # ✨ Custom field!
experience:
- company: "Tech Company"
position: "Senior Engineer"
github_team: "tech-company/platform" # ✨ Custom field!
tech_stack: ["React", "Node.js", "AWS"] # ✨ Custom field!
team_size: 8 # ✨ Custom field!
education:
- institution: "University"
degree: "B.S. Computer Science"
gpa: 3.8 # ✨ Custom field!
honors: "Magna Cum Laude" # ✨ Custom field!
projects:
- name: "Cool Project"
date: "2024"
github_repo: "https://github.com/you/project" # ✨ Custom field!
live_url: "https://project.com" # ✨ Custom field!
tech_stack: ["React", "TypeScript"] # ✨ Custom field!
# 🆕 Dynamic Sections! Add ANY section you need:
certifications:
- name: "AWS Certified Solutions Architect"
date: "2024-03"
highlights:
- "Demonstrated expertise in designing distributed systems"
issuer: "Amazon Web Services" # ✨ Custom field!
certification_id: "AWS-PSA-12345" # ✨ Custom field!
awards:
- name: "Engineering Excellence Award"
date: "2024-01"
highlights:
- "Recognized for outstanding technical contribution"
awarded_by: "Tech Corp" # ✨ Custom field!
# Simple text entries also work!
languages:
- "English (Native)"
- "Spanish (Professional)"How it works:
- ✅ Custom Fields: Add any extra fields to standard sections - they appear in your portfolio automatically
- ✅ Dynamic Sections: Create new sections (like certifications, awards, languages) - they become terminal commands!
- ✅ Web Interface: Custom fields and sections appear in both terminal and GUI modes
- ✅ PDF Generation: Custom fields are automatically stripped for RenderCV compatibility
- ✅ Zero Errors: No manual management needed - it just works!
- ✅ Fully Backward Compatible: All existing resumes continue to work
Examples of dynamic sections you can add:
certifications- Professional certificationsawards- Awards and recognitionslanguages- Language proficienciesvolunteer_work- Volunteer experiencespeaking- Speaking engagementscourses- Online courses or training- Any section name you want!
See resume.yaml.example for more examples and inspiration!
Want full control? Clone the repository and customize everything!
- Node.js 18+ (download)
- npm or yarn
- Git
# Clone your repository
git clone https://github.com/yourusername/yourusername.github.io.git
cd yourusername.github.io
# Install dependencies
npm install
# Copy configuration files
cp template.config.yaml.example template.config.yaml
cp .env.example .env
cp client/public/manifest.json.example client/public/manifest.json
# Add your resume
# (Create resume.yaml using RenderCV or copy from examples/)
# Generate resume data
npm run generate-resume
# Start development server
npm run devVisit http://localhost:5173 to see your portfolio!
# Build the application
npm run build
# Preview production build
npm run previewSee the Advanced Guide for:
- Custom themes and colors
- Adding new terminal commands
- Modifying UI components
- API integrations
- Custom features
- Deployment Guide - How GitHub Actions deploys your site
- Advanced Guide - Full customization options
- Troubleshooting - Common issues and solutions
- RenderCV Docs - Resume YAML format reference
Once your portfolio is live, try these commands in the terminal:
| Command | Description |
|---|---|
help |
Show all available commands |
about |
Display introduction and quick links |
skills |
List technical skills and technologies |
experience |
Show work experience and roles |
education |
Display educational background |
projects |
Show professional projects |
personal |
Show personal projects |
publications |
Display publications (if available) |
timeline |
Show chronological timeline of all events |
contact |
Display contact information and social links |
resume |
Download resume PDF |
theme [name] |
Change terminal color theme |
replicate |
AI Resume Converter & portfolio setup guide |
neofetch |
Display system information |
search [query] |
Search across all portfolio content |
whoami |
Display your name and title |
ls |
List available commands (alias for help) |
pwd |
Print working directory |
cat [file] |
Display file contents |
clear |
Clear the terminal screen |
subhayu99.github.io/
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom hooks (terminal logic)
│ │ ├── lib/ # Utilities and themes
│ │ └── config/ # Configuration files
│ └── public/
│ ├── data/ # Generated resume data
│ └── icons/ # PWA icons
├── scripts/ # Build scripts
│ ├── generate-resume.js # Resume generation script
│ ├── generate-ai-prompt.js # AI conversion prompt generator
│ └── build.js # Smart build script
├── docs/ # Documentation
├── examples/ # Example resume files
├── .github/workflows/ # GitHub Actions workflows
├── resume.yaml # Your resume (create this!)
└── resume.config.yaml # Resume generation config
Found a bug? Have a feature idea? Contributions are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
- Built with React and Vite
- Resume generation powered by RenderCV
- Inspired by classic terminal interfaces and retro computing
- ASCII art from patorjk.com
If you found this template helpful, please consider:
- ⭐ Starring this repository
- 🐦 Sharing it on social media
- 🔗 Adding a link back to the template in your portfolio
- 💬 Spreading the word to friends and colleagues
Need help? Have questions?
- 📖 Check the Documentation
- 🐛 Open an Issue
- 💬 Start a Discussion
- 📧 Contact the maintainer
Made with ❤️ by developers, for developers
