The Road To Dev currently has AI-generated placeholder content. This is temporary - content is being actively developed.

Portfolio Website Instructions

Follow these step-by-step instructions to build Build a Portfolio Website from scratch.

Difficulty: beginnerDuration: 3 daysSkills: 4

Get Started with GitHub Classroom

Accept the GitHub Classroom assignment to get your personal repository with starter code and automated testing setup.

What you'll get: Personal repository, starter files, automated tests, and issue tracking.

Project Assets

Download starter files, design assets, and reference materials for this project.

Starter Files.zip

Complete starter code with project structure and initial files

2.1 MB

Design File.fig

Figma design file with layouts, components, and style guide

890 KB

Preview Images.zip

High-quality preview images for reference

5.2 MB

Project Brief.pdf

Detailed project requirements and specifications

1.4 MB

i

Getting Started Tip

Download the starter files first, then use the design file as reference while working through the instructions. The preview images show what your final project should look like.

Finished building?

Check out the complete solution with detailed explanations and best practices.

View Solution

Your Progress

Started project
Setup complete
Core features built
Styling complete
Project deployed
Progress20%

Portfolio Website - Instructions

Follow this step-by-step guide to build your professional portfolio website. Take your time with each step and don't hesitate to experiment!

📋 Before You Start

Required Tools

  • Code Editor: VS Code (recommended) or your preferred editor
  • Web Browser: Chrome or Firefox for development
  • Terminal: Built-in terminal or VS Code integrated terminal
  • Git: For version control and deployment

Development Setup

  1. Install VS Code extensions:
    • Live Server (for live reload)
    • HTML CSS Support
    • Auto Rename Tag
    • Prettier (for code formatting)

🚀 Getting Started

Step 1: Get Your Starter Code

  1. Accept the GitHub Classroom assignment
    • Click the GitHub Classroom link provided
    • This creates a personal repository with starter files
    • Clone the repository to your local machine
Terminal window
git clone https://github.com/YOUR-GITHUB-USERNAME/portfolio-starter.git
cd portfolio-starter

Step 2: Project Structure

Your starter repository includes:

portfolio-starter/
├── index.html # Home page
├── about.html # About page
├── projects.html # Projects showcase
├── contact.html # Contact form
├── css/
│ ├── styles.css # Main stylesheet
│ └── reset.css # CSS reset
├── images/ # Your photos and project images
├── assets/ # Icons, fonts, etc.
└── README.md

📝 Development Guide

Phase 1: Home Page (index.html)

1.1 HTML Structure

Start by creating the basic structure in index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Your Name - Web Developer</title>
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<header>
<nav>
<!-- Navigation will go here -->
</nav>
</header>
<main>
<section class="hero">
<!-- Hero content -->
</section>
<section class="intro">
<!-- Introduction section -->
</section>
<section class="featured-projects">
<!-- Featured projects preview -->
</section>
</main>
<footer>
<!-- Footer content -->
</footer>
</body>
</html>

1.2 Create the Navigation

Add a responsive navigation menu:

<header>
<nav class="navbar">
<div class="nav-brand">
<a href="index.html">Your Name</a>
</div>
<ul class="nav-menu">
<li><a href="index.html" class="nav-link active">Home</a></li>
<li><a href="about.html" class="nav-link">About</a></li>
<li><a href="projects.html" class="nav-link">Projects</a></li>
<li><a href="contact.html" class="nav-link">Contact</a></li>
</ul>
<div class="hamburger">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>
</nav>
</header>

1.3 Hero Section

Create an impactful hero section:

<section class="hero">
<div class="hero-content">
<h1>Hi, I'm <span class="highlight">Your Name</span></h1>
<p class="hero-subtitle">Aspiring Web Developer</p>
<p class="hero-description">
I'm passionate about creating beautiful, functional websites
and learning new technologies.
</p>
<div class="hero-buttons">
<a href="projects.html" class="btn btn-primary">View My Work</a>
<a href="contact.html" class="btn btn-secondary">Get In Touch</a>
</div>
</div>
</section>

Phase 2: Styling with CSS

2.1 CSS Custom Properties

Set up your design system in css/styles.css:

:root {
/* Colors */
--primary-color: #3b82f6;
--secondary-color: #1e40af;
--accent-color: #f59e0b;
--text-color: #1f2937;
--text-light: #6b7280;
--bg-color: #ffffff;
--bg-light: #f9fafb;
--border-color: #e5e7eb;
/* Typography */
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.125rem;
--font-size-xl: 1.25rem;
--font-size-2xl: 1.5rem;
--font-size-3xl: 1.875rem;
--font-size-4xl: 2.25rem;
/* Spacing */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 1.5rem;
--space-lg: 2rem;
--space-xl: 3rem;
--space-2xl: 4rem;
/* Layout */
--max-width: 1200px;
--border-radius: 0.5rem;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

2.2 Base Styles

body {
font-family: var(--font-family);
color: var(--text-color);
line-height: 1.6;
}
.container {
max-width: var(--max-width);
margin: 0 auto;
padding: 0 var(--space-sm);
}
/* Button styles */
.btn {
display: inline-block;
padding: var(--space-xs) var(--space-md);
border-radius: var(--border-radius);
text-decoration: none;
font-weight: 500;
transition: all 0.3s ease;
}
.btn-primary {
background-color: var(--primary-color);
color: white;
}
.btn-primary:hover {
background-color: var(--secondary-color);
}

2.3 Navigation Styles

.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-sm) var(--space-md);
background-color: var(--bg-color);
box-shadow: var(--shadow);
}
.nav-brand a {
font-size: var(--font-size-xl);
font-weight: bold;
text-decoration: none;
color: var(--primary-color);
}
.nav-menu {
display: flex;
list-style: none;
margin: 0;
padding: 0;
gap: var(--space-md);
}
.nav-link {
text-decoration: none;
color: var(--text-color);
transition: color 0.3s ease;
}
.nav-link:hover,
.nav-link.active {
color: var(--primary-color);
}
/* Mobile hamburger menu (we'll add JavaScript later) */
.hamburger {
display: none;
flex-direction: column;
cursor: pointer;
}
.bar {
width: 25px;
height: 3px;
background-color: var(--text-color);
margin: 3px 0;
transition: 0.3s;
}

Phase 3: Responsive Design

3.1 Mobile-First Approach

Add responsive breakpoints:

/* Mobile styles (default) */
.hero {
padding: var(--space-2xl) var(--space-sm);
text-align: center;
}
.hero h1 {
font-size: var(--font-size-3xl);
margin-bottom: var(--space-sm);
}
/* Tablet styles */
@media (min-width: 768px) {
.hero h1 {
font-size: var(--font-size-4xl);
}
.hero-buttons {
display: flex;
gap: var(--space-sm);
justify-content: center;
}
}
/* Desktop styles */
@media (min-width: 1024px) {
.hamburger {
display: none;
}
.nav-menu {
display: flex;
}
}
/* Mobile menu toggle */
@media (max-width: 1023px) {
.nav-menu {
position: fixed;
left: -100%;
top: 70px;
flex-direction: column;
background-color: var(--bg-color);
width: 100%;
text-align: center;
transition: 0.3s;
box-shadow: var(--shadow);
}
.nav-menu.active {
left: 0;
}
.hamburger {
display: flex;
}
}

🔧 Implementation Checkpoints

Complete each phase before moving to the next:

✅ Phase 1 Checklist

  • [ ] HTML structure is semantic and valid
  • [ ] Navigation menu is implemented
  • [ ] Hero section displays correctly
  • [ ] All internal links work properly

✅ Phase 2 Checklist

  • [ ] CSS custom properties are defined
  • [ ] Typography is consistent and readable
  • [ ] Color scheme is applied throughout
  • [ ] Hover effects work smoothly

✅ Phase 3 Checklist

  • [ ] Website is responsive on mobile devices
  • [ ] Tablet layout looks good (768px+)
  • [ ] Desktop layout utilizes space well (1024px+)
  • [ ] Navigation works on all screen sizes

🚨 Common Issues & Solutions

Problem: Styles not loading

Solution: Check file paths in your HTML <link> tags and ensure CSS files exist.

Problem: Images not displaying

Solution: Verify image paths and file extensions match exactly (case-sensitive).

Problem: Mobile menu not working

Solution: We'll add JavaScript functionality in a later step.

Problem: Layout breaking on different screen sizes

Solution: Test with browser dev tools and adjust media query breakpoints.

📱 Testing Your Website

  1. Responsive Design: Use browser dev tools to test different screen sizes
  2. Cross-browser: Test in Chrome, Firefox, and Safari
  3. Validation: Use W3C HTML and CSS validators
  4. Performance: Check loading speed with browser dev tools

🚀 Deployment

When you're ready to deploy:

  1. Push to GitHub:
Terminal window
git add .
git commit -m "Complete portfolio website"
git push origin main
  1. Enable GitHub Pages:
    • Go to repository settings
    • Scroll to "Pages" section
    • Select "Deploy from a branch" → "main"
    • Your site will be live at: https://username.github.io/repository-name

🎯 Next Steps

Once you complete the basic portfolio:

  1. Add JavaScript interactivity (hamburger menu, smooth scrolling)
  2. Implement the About page with your story and skills
  3. Create the Projects page to showcase your work
  4. Build the Contact page with a functional form
  5. Add animations and micro-interactions
  6. Optimize for performance and SEO

📚 Additional Resources

💡 Pro Tips

  1. Start simple: Get the basic structure working before adding complexity
  2. Test frequently: Check your work in the browser after each major change
  3. Use semantic HTML: Screen readers and search engines will thank you
  4. Mobile first: Design for mobile, then enhance for larger screens
  5. Commit often: Save your progress with meaningful Git commit messages

Ready to build something amazing? Let's code! 🚀


Need help? Check the solution page for complete code examples and explanations, or reach out in the community Discord for support from fellow learners.