· Projects

Building a Portfolio Website with HTML

Step-by-step guide to creating a professional portfolio site.

Your portfolio website is often the first impression you make on potential employers, clients, or collaborators. A well-crafted portfolio showcases your skills, highlights your best work, and tells your professional story. The good news? You don’t need fancy frameworks or complex tools to build an impressive portfolio—just solid HTML, some CSS, and attention to detail.

In this guide, you’ll learn how to build a professional portfolio website from scratch. We’ll cover structure, content, and best practices that will help you create a site that stands out.

Why Build Your Portfolio with HTML

Full Control

When you build your portfolio with HTML, you have complete control over every aspect of the design and functionality. You’re not limited by template constraints or platform limitations.

Performance

A well-built HTML site loads fast. No heavy JavaScript frameworks, no bloated plugins—just clean, efficient code that works everywhere.

Learning Opportunity

Building your portfolio is itself a portfolio piece. You can showcase your HTML and CSS skills while creating something practical and useful.

Cost-Effective

With just HTML and CSS, you can host your portfolio for free on platforms like GitHub Pages, Netlify, or Vercel. No monthly subscription fees.

Planning Your Portfolio

Essential Sections

Most successful portfolios include these key sections:

  1. Hero/Header - Your name, title, and a compelling tagline
  2. About - Who you are and what you do
  3. Portfolio/Projects - Your best work with descriptions
  4. Skills - What you’re good at
  5. Contact - How people can reach you

Optional but valuable sections:

  • Experience - Work history and education
  • Testimonials - What clients or colleagues say about you
  • Blog - Your thoughts and insights
  • Resume - Downloadable PDF

Content First

Before you write any code, prepare your content:

  • Write your bio (2-3 paragraphs)
  • Select 3-6 of your best projects
  • Write project descriptions (what, why, how, results)
  • Gather high-quality images or screenshots
  • List your key skills
  • Prepare your contact information

Building the HTML Structure

Starting with the Basics

Every portfolio needs a solid HTML foundation. Here’s a complete starting template:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="description" content="Portfolio of Jane Smith - Web Developer specializing in front-end development" />
    <title>Jane Smith - Web Developer Portfolio</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <!-- Navigation -->
    <nav>
      <a href="#home">Home</a>
      <a href="#about">About</a>
      <a href="#projects">Projects</a>
      <a href="#skills">Skills</a>
      <a href="#contact">Contact</a>
    </nav>

    <!-- Main Content -->
    <main>
      <!-- Hero Section -->
      <section id="home">
        <h1>Jane Smith</h1>
        <p>Web Developer | Front-End Specialist</p>
      </section>

      <!-- About Section -->
      <section id="about">
        <h2>About Me</h2>
        <!-- Content goes here -->
      </section>

      <!-- Projects Section -->
      <section id="projects">
        <h2>My Projects</h2>
        <!-- Projects go here -->
      </section>

      <!-- Skills Section -->
      <section id="skills">
        <h2>Skills</h2>
        <!-- Skills go here -->
      </section>

      <!-- Contact Section -->
      <section id="contact">
        <h2>Get In Touch</h2>
        <!-- Contact form goes here -->
      </section>
    </main>

    <!-- Footer -->
    <footer>
      <p>&copy; 2024 Jane Smith. All rights reserved.</p>
    </footer>
  </body>
</html>

Creating the Hero Section

Your hero section is the first thing visitors see. Make it count with a clear, compelling introduction.

<section id="home" class="hero">
  <div class="hero-content">
    <h1>Hi, I'm Jane Smith</h1>
    <p class="tagline">
      I build beautiful, accessible websites that help businesses grow
    </p>
    <p class="description">
      Front-end developer with 5 years of experience creating responsive, 
      user-friendly web applications using HTML, CSS, and JavaScript.
    </p>
    <a href="#contact" class="cta-button">Let's Work Together</a>
    <a href="#projects" class="cta-button-secondary">View My Work</a>
  </div>
</section>

Tips for your hero section:

  • Keep your tagline under 15 words
  • Focus on the value you provide, not just your job title
  • Include a clear call-to-action button
  • Consider adding a professional photo (but it’s not required)

Writing Your About Section

The about section tells your story and helps visitors connect with you personally.

<section id="about">
  <h2>About Me</h2>
  
  <div class="about-content">
    <img 
      src="profile-photo.jpg" 
      alt="Jane Smith, web developer, smiling at camera"
      class="profile-photo"
    />
    
    <div class="about-text">
      <p>
        I'm a front-end developer based in Portland, Oregon, with a passion 
        for creating websites that are both beautiful and functional. I believe 
        good design should be accessible to everyone, and I specialize in building 
        responsive, user-friendly interfaces.
      </p>
      
      <p>
        After earning my degree in Computer Science from Portland State University, 
        I've worked with startups and established companies to bring their digital 
        visions to life. When I'm not coding, you'll find me hiking in the Gorge, 
        experimenting with film photography, or contributing to open-source projects.
      </p>
      
      <p>
        I'm currently available for freelance projects and full-time opportunities. 
        Let's build something great together!
      </p>
    </div>
  </div>
</section>

What to include:

  • Your background and how you got into web development
  • What makes you unique or different
  • Your values and approach to work
  • Personal interests (shows you’re human)
  • Your current availability or what you’re looking for

Showcasing Your Projects

Your projects are the heart of your portfolio. Show them off with detailed descriptions and visual appeal.

<section id="projects">
  <h2>Featured Projects</h2>
  
  <div class="projects-grid">
    <!-- Project 1 -->
    <article class="project">
      <img 
        src="project-ecommerce.jpg" 
        alt="Screenshot of e-commerce website homepage"
        class="project-image"
      />
      <h3>E-Commerce Platform</h3>
      <p class="project-description">
        A fully responsive online store built for a local artisan marketplace. 
        Features include product filtering, shopping cart, and secure checkout.
      </p>
      
      <div class="project-tech">
        <span class="tech-tag">HTML5</span>
        <span class="tech-tag">CSS3</span>
        <span class="tech-tag">JavaScript</span>
        <span class="tech-tag">Stripe API</span>
      </div>
      
      <div class="project-links">
        <a href="https://example-project.com" target="_blank" rel="noopener">
          View Live Site
        </a>
        <a href="https://github.com/janesmith/ecommerce" target="_blank" rel="noopener">
          View Code
        </a>
      </div>
    </article>

    <!-- Project 2 -->
    <article class="project">
      <img 
        src="project-blog.jpg" 
        alt="Screenshot of minimalist blog layout"
        class="project-image"
      />
      <h3>Personal Blog Platform</h3>
      <p class="project-description">
        A clean, distraction-free blogging platform with focus on readability 
        and typography. Built with semantic HTML and modern CSS Grid layout.
      </p>
      
      <div class="project-tech">
        <span class="tech-tag">HTML5</span>
        <span class="tech-tag">CSS Grid</span>
        <span class="tech-tag">Markdown</span>
      </div>
      
      <div class="project-links">
        <a href="https://example-blog.com" target="_blank" rel="noopener">
          View Live Site
        </a>
        <a href="https://github.com/janesmith/blog" target="_blank" rel="noopener">
          View Code
        </a>
      </div>
    </article>

    <!-- Project 3 -->
    <article class="project">
      <img 
        src="project-portfolio.jpg" 
        alt="Screenshot of photographer portfolio website"
        class="project-image"
      />
      <h3>Photography Portfolio</h3>
      <p class="project-description">
        An image-focused portfolio for a professional photographer. Features 
        a responsive masonry gallery and smooth page transitions.
      </p>
      
      <div class="project-tech">
        <span class="tech-tag">HTML5</span>
        <span class="tech-tag">CSS Flexbox</span>
        <span class="tech-tag">Vanilla JavaScript</span>
      </div>
      
      <div class="project-links">
        <a href="https://example-photos.com" target="_blank" rel="noopener">
          View Live Site
        </a>
        <a href="https://github.com/janesmith/photo-portfolio" target="_blank" rel="noopener">
          View Code
        </a>
      </div>
    </article>
  </div>
</section>

For each project, include:

  • A high-quality screenshot or mockup
  • Clear, descriptive title
  • 2-3 sentences explaining what it does and why it matters
  • Technologies used
  • Links to live site and source code (if available)

Pro tip: If you don’t have many projects yet, include:

  • School projects
  • Redesigns of existing sites
  • Open-source contributions
  • Personal experiments or side projects

Displaying Your Skills

Present your skills in an organized, scannable format.

<section id="skills">
  <h2>Skills & Technologies</h2>
  
  <div class="skills-container">
    <div class="skill-category">
      <h3>Front-End</h3>
      <ul>
        <li>HTML5 & Semantic Markup</li>
        <li>CSS3 & Sass</li>
        <li>JavaScript (ES6+)</li>
        <li>Responsive Design</li>
        <li>CSS Frameworks (Tailwind, Bootstrap)</li>
      </ul>
    </div>
    
    <div class="skill-category">
      <h3>Tools & Workflow</h3>
      <ul>
        <li>Git & GitHub</li>
        <li>VS Code</li>
        <li>npm & package management</li>
        <li>Browser DevTools</li>
        <li>Figma & Adobe XD</li>
      </ul>
    </div>
    
    <div class="skill-category">
      <h3>Best Practices</h3>
      <ul>
        <li>Web Accessibility (WCAG 2.1)</li>
        <li>SEO Optimization</li>
        <li>Performance Optimization</li>
        <li>Cross-browser Compatibility</li>
        <li>Mobile-First Development</li>
      </ul>
    </div>
  </div>
</section>

Tips for skills section:

  • Group related skills together
  • Be honest about your proficiency level
  • Focus on relevant skills for your target roles
  • Update regularly as you learn new things

Building the Contact Section

Make it easy for people to reach you with a simple, functional contact form.

<section id="contact">
  <h2>Let's Work Together</h2>
  
  <p>
    I'm currently available for freelance projects and full-time opportunities. 
    Whether you have a question or just want to say hi, I'd love to hear from you!
  </p>
  
  <form action="https://formspree.io/f/your-form-id" method="POST" class="contact-form">
    <div class="form-group">
      <label for="name">Your Name</label>
      <input 
        id="name" 
        type="text" 
        name="name" 
        required 
        placeholder="John Doe"
      />
    </div>
    
    <div class="form-group">
      <label for="email">Your Email</label>
      <input 
        id="email" 
        type="email" 
        name="email" 
        required 
        placeholder="[email protected]"
      />
    </div>
    
    <div class="form-group">
      <label for="message">Your Message</label>
      <textarea 
        id="message" 
        name="message" 
        rows="6" 
        required
        placeholder="Tell me about your project..."
      ></textarea>
    </div>
    
    <button type="submit">Send Message</button>
  </form>
  
  <div class="contact-info">
    <h3>Other Ways to Reach Me</h3>
    <ul class="social-links">
      <li>
        <a href="mailto:[email protected]">[email protected]</a>
      </li>
      <li>
        <a href="https://github.com/janesmith" target="_blank" rel="noopener">
          GitHub: @janesmith
        </a>
      </li>
      <li>
        <a href="https://linkedin.com/in/janesmith" target="_blank" rel="noopener">
          LinkedIn: Jane Smith
        </a>
      </li>
      <li>
        <a href="https://twitter.com/janesmith" target="_blank" rel="noopener">
          Twitter: @janesmith
        </a>
      </li>
    </ul>
  </div>
</section>

Contact form options:

  • Formspree - Free service that handles form submissions
  • Netlify Forms - Built-in if you deploy on Netlify
  • EmailJS - Send emails directly from JavaScript
  • Google Forms - Embed a Google Form

Don’t overlook the footer—it’s your last chance to make an impression.

<footer>
  <div class="footer-content">
    <p>&copy; 2024 Jane Smith. All rights reserved.</p>
    
    <nav class="footer-nav">
      <a href="#home">Home</a>
      <a href="#about">About</a>
      <a href="#projects">Projects</a>
      <a href="#contact">Contact</a>
    </nav>
    
    <div class="footer-social">
      <a href="https://github.com/janesmith" target="_blank" rel="noopener" aria-label="GitHub">
        <!-- GitHub icon -->
      </a>
      <a href="https://linkedin.com/in/janesmith" target="_blank" rel="noopener" aria-label="LinkedIn">
        <!-- LinkedIn icon -->
      </a>
      <a href="https://twitter.com/janesmith" target="_blank" rel="noopener" aria-label="Twitter">
        <!-- Twitter icon -->
      </a>
    </div>
  </div>
</footer>

Making It Responsive

Your portfolio must work perfectly on all devices. Use responsive design principles from the start.

Mobile-First CSS Approach

/* Mobile styles (default) */
.projects-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
}

/* Tablet */
@media (min-width: 768px) {
  .projects-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .projects-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

Responsive Navigation

<!-- Simple responsive nav -->
<nav class="main-nav">
  <a href="#home" class="logo">Jane Smith</a>
  
  <button class="nav-toggle" aria-label="Toggle navigation">
    <span></span>
    <span></span>
    <span></span>
  </button>
  
  <ul class="nav-links">
    <li><a href="#about">About</a></li>
    <li><a href="#projects">Projects</a></li>
    <li><a href="#skills">Skills</a></li>
    <li><a href="#contact">Contact</a></li>
  </ul>
</nav>

Portfolio Best Practices

Do’s

  • Keep it simple - Clean design beats flashy animations
  • Show, don’t tell - Let your work speak for itself
  • Use high-quality images - Blurry screenshots look unprofessional
  • Write clear descriptions - Explain what you built and why
  • Make it fast - Optimize images and minimize code
  • Test everywhere - Check on different devices and browsers
  • Update regularly - Add new projects and remove old ones
  • Proofread - Typos undermine your professionalism

Don’ts

  • Avoid auto-playing videos or music—let visitors control media playback.
  • Use legible font sizes so your content stays readable.
  • Curate the work you feature; quality matters more than quantity.
  • Make contact information easy to find so people can reach you quickly.
  • Choose authentic visuals instead of generic stock photos.
  • Surface important information; visitors should not have to hunt for it.
  • Keep zoom enabled because many visitors rely on it.
  • Draw inspiration from others but create your own design rather than copying.

SEO for Your Portfolio

Help people find your portfolio with these SEO basics:

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  
  <!-- Title: Include your name and what you do -->
  <title>Jane Smith - Front-End Web Developer Portfolio</title>
  
  <!-- Description: 150-160 characters -->
  <meta 
    name="description" 
    content="Portfolio of Jane Smith, a front-end web developer specializing in responsive, accessible websites. View my projects and get in touch." 
  />
  
  <!-- Keywords (less important now, but doesn't hurt) -->
  <meta 
    name="keywords" 
    content="web developer, front-end developer, HTML, CSS, JavaScript, portfolio" 
  />
  
  <!-- Author -->
  <meta name="author" content="Jane Smith" />
  
  <!-- Open Graph for social sharing -->
  <meta property="og:title" content="Jane Smith - Web Developer Portfolio" />
  <meta 
    property="og:description" 
    content="Check out my portfolio of web development projects" 
  />
  <meta property="og:image" content="https://yoursite.com/preview-image.jpg" />
  <meta property="og:url" content="https://yoursite.com" />
</head>

Where to Host Your Portfolio

Free Hosting Options

GitHub Pages (Recommended for beginners)

  • Free for public repositories
  • Custom domain support
  • Simple deployment via Git

Netlify

  • Free tier is generous
  • Continuous deployment from Git
  • Form handling included
  • Custom domains

Vercel

  • Great for modern frameworks
  • Fast global CDN
  • Easy deployment

Cloudflare Pages

  • Unlimited bandwidth
  • Fast global network
  • Git integration

Before You Launch

Use this checklist before making your portfolio public:

  • All links work (no 404 errors)
  • Images are optimized and load quickly
  • Contact form actually sends messages
  • Text is proofread (no typos or grammar errors)
  • Works on mobile phones and tablets
  • Works in different browsers (Chrome, Firefox, Safari, Edge)
  • All images have alt text
  • Site is accessible (test with keyboard navigation)
  • Meta tags are properly filled out
  • Favicon is added
  • Professional email address (not [email protected])
  • Social media links point to active profiles
  • Resume is up-to-date and downloadable

Keep Learning and Improving

Your portfolio is never truly “done.” Keep it fresh and up-to-date:

  • Add new projects as you complete them
  • Remove or update old projects
  • Refine your descriptions based on feedback
  • Update your skills as you learn new ones
  • Test and optimize performance regularly
  • Refresh the design every 1-2 years

Here are some resources to continue your journey:

Ready to start building? Head to the htmlEditor.net playground and start creating your portfolio today!

Your portfolio is more than just a website—it’s your digital handshake, your professional story, and your ticket to new opportunities. Take the time to build it well, and it will serve you for years to come.

← Back to all blog posts

    Share: