A modern, professional portfolio website showcasing my projects, experience, and skills as a Computer Science and Mathematics student at Amherst College.
β¨ NEW: This portfolio has been refactored for maximum maintainability!
All content is now indata.js- update your portfolio without touching HTML!
- π§ Ultra-Maintainable: All content in one file (
data.js) - π¨ Modern Design: Clean, minimal aesthetic with professional typography
- π Dark Mode: Toggle between light and dark themes
- π± Fully Responsive: Optimized for desktop, tablet, and mobile
- β‘ Fast Loading: Vanilla JS with no heavy frameworks
- Open
index.htmlin your web browser - That's it! No build process required.
See DEPLOYMENT.md for step-by-step instructions.
To add/edit/remove content, just edit data.js!
// In data.js, add to the projects array:
{
title: "My Awesome Project",
icon: "fa-rocket",
description: "Built an amazing thing that does X, Y, and Z...",
tech: ["Python", "React", "Docker"],
learning: "Learned about system design and scalability...",
github: "https://github.com/yourusername/project",
featured: true,
impact: "50% improvement"
}// In data.js, add to the experience array:
{
role: "Software Engineer Intern",
company: "Company Name",
location: "City, State",
period: "Summer 2026",
type: "Engineering", // Research, Teaching, Engineering, or Leadership
highlights: [
"Built feature that improved X by Y%",
"Collaborated with team of Z engineers",
"Learned about A, B, and C"
]
}// In data.js, find the skills array and edit:
{
category: "Programming Languages",
icon: "fa-code",
items: ["Python", "Java", "JavaScript", "Go"] // Just add/remove!
}- β Personal information (name, email, links)
- β About me paragraphs
- β All projects
- β All experience
- β All skills
- β Everything!
- HTML5: Semantic markup
- CSS3: Custom properties, Grid, Flexbox, animations
- JavaScript (Vanilla): Component-based rendering, no frameworks
- Font Awesome: Icons (CDN)
- Google Fonts: Inter typeface
portfolio/
βββ index.html
βββ styles.css # Enhanced styling with modern patterns
βββ script.js # Component rendering + interactions
βββ data.js # β ALL CONTENT HERE - your single source of truth
βββ resumes/ # PDF resume files
βββ assets/ # Images (add profile.jpg here)
β βββ README.md # Guide for adding images
βββ README.md # This file
- Place your profile photo in the
assets/folder asprofile.jpg - Recommended size: 400x400px (square)
- Formats: JPG, PNG, or WebP
Edit data.js:
personal: {
name: "Your Name",
email: "your.email@example.com",
phone: "(123) 456-7890",
github: "https://github.com/yourusername",
linkedin: "https://linkedin.com/in/yourusername",
resume: "resumes/your-resume.pdf"
}Edit CSS variables in styles.css (lines 14-43):
:root {
--accent-primary: #6366f1; /* Main brand color */
--accent-secondary: #8b5cf6; /* Secondary color */
}- Create
assets/projects/folder - Add screenshots
- Reference in project descriptions
All content updates happen in one file: data.js
data.js contains:
- Personal info
- About me text
- All projects with details
- All experience with highlights
- All skills organized by category
Benefits:
- β Single source of truth
- β No HTML editing needed
- β Easy to keep consistent
- β Can version control content separately
- β Could connect to a CMS later
const portfolioData = {
personal: { /* Contact info */ },
about: [ /* Paragraphs */ ],
projects: [ /* Project objects */ ],
experience: [ /* Experience objects */ ],
skills: [ /* Skill categories */ ]
};- Open
data.js - Find the
projectsarray - Copy an existing project object
- Edit the details:
{ title: "Project Name", icon: "fa-icon-name", // Font Awesome icon description: "What it does...", tech: ["Tech1", "Tech2", "Tech3"], learning: "What you learned...", github: "URL", featured: true, // Show on main page? impact: "Measurable result" // Optional metric }
- Save and refresh!
- Open
data.js - Find the
experiencearray - Add your entry:
{ role: "Position Title", company: "Company Name", location: "City, State", period: "Start - End", type: "Research|Teaching|Engineering|Leadership", highlights: [ "Achievement 1", "Achievement 2", "Achievement 3" ] }
Just edit the arrays in data.js:
skills: [
{
category: "Category Name",
icon: "fa-icon-name",
items: ["Skill 1", "Skill 2", "Skill 3"]
}
]- Desktop: 1200px+
- Tablet: 768px - 1199px
- Mobile: 320px - 767px
- No Build Process: Pure vanilla JavaScript
- Fast Load Times: Minimal dependencies
- Optimized Images: Lazy loading ready
- Efficient Rendering: Component-based approach
- GPU Acceleration: CSS transforms for smooth animations
- Semantic HTML5 elements
- ARIA labels on interactive elements
- Keyboard navigation support
- Focus-visible styles
- Color contrast meets WCAG standards
- Screen reader friendly
- Check browser console for errors
- Verify
data.jsis loaded beforescript.js - Check for JavaScript syntax errors in
data.js
- Clear browser localStorage
- Check browser console for errors
- Ensure JavaScript is enabled
- Verify
script.jsis loaded - Check browser console for errors