· 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:
- Hero/Header - Your name, title, and a compelling tagline
- About - Who you are and what you do
- Portfolio/Projects - Your best work with descriptions
- Skills - What you’re good at
- 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>© 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
Adding a Professional Footer
Don’t overlook the footer—it’s your last chance to make an impression.
<footer>
<div class="footer-content">
<p>© 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:
- HTML Forms Tutorial - Build better contact forms
- Semantic HTML Guide - Use the right HTML elements
- Learn HTML Fundamentals - Master the basics
- Explore Templates - Get inspired by examples
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.