Build a Personal Portfolio Using HTML

HTML Project: Personal Portfolio

Building a personal portfolio is a rite of passage for every aspiring web developer. It showcases your skills, your voice, and your attention to detail. In this project, we’ll build a clean, semantic, and SEO-friendly portfolio using HTML — no frameworks, no distractions. Just pure markup with purpose.

1. Structuring Your Portfolio Page

We’ll begin by defining the main layout using semantic HTML5 elements.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My Portfolio - Jane Doe</title>
  <meta name="description" content="Welcome to Jane Doe's portfolio. Web developer, designer, and banana enthusiast.">
</head>
<body>
  <header>...</header>
  <main>...</main>
  <footer>...</footer>
</body>
</html>

2. Header: Your Personal Introduction

<header>
  <h1>Jane Doe</h1>
  <p>Front-End Developer | Lover of Clean Code | Banana Smoothie Maker</p>
  <nav>
    <a href="#about">About</a>
    <a href="#projects">Projects</a>
    <a href="#contact">Contact</a>
  </nav>
</header>
[ Screen reader recognizes this as the top of the page and announces your identity ]

3. About Section Using Semantic <section>

<section id="about">
  <h2>About Me</h2>
  <p>Hi! I'm Jane, a front-end web developer with a love for design, accessibility, and cherry-picked code standards. I’ve built projects in HTML, CSS, and JavaScript.</p>
</section>

4. Projects Section: Showcase Your Work

<section id="projects">
  <h2>My Projects</h2>

  <article>
    <h3>Fruit Catalog</h3>
    <p>A searchable fruit database built using HTML and CSS. Try filtering for banana, cherry, or apple!</p>
    <a href="https://example.com/fruit-catalog" target="_blank">View Project</a>
  </article>

  <article>
    <h3>Hello World Blog</h3>
    <p>My first blog project using semantic HTML and proper heading hierarchy.</p>
    <a href="https://example.com/hello-world" target="_blank">Read Blog</a>
  </article>
</section>

5. Embedding Media: Image and Video

<section>
  <h2>Media Work</h2>
  <figure>
    <img src="jane-profile.jpg" alt="Jane Doe smiling" width="300">
    <figcaption>My profile image, with a hint of banana yellow.</figcaption>
  </figure>

  <video width="400" controls>
    <source src="portfolio-intro.mp4" type="video/mp4">
    Your browser does not support the video tag.
  </video>
</section>

6. Contact Form Section

<section id="contact">
  <h2>Contact Me</h2>
  <form action="/submit-form" method="POST">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>

    <label for="message">Message:</label>
    <textarea id="message" name="message"></textarea>

    <button type="submit">Send Message</button>
  </form>
</section>
[ Users can now fill in and submit their contact details directly from the page ]

8. Summary

You've now built a personal portfolio page that is:

  • Structured with semantic HTML
  • SEO-friendly with clear titles and descriptions
  • Rich in content with images, video, and projects
  • Interactive with a working contact form

Check your understanding 1

Which semantic element is best suited to structure the main content of a personal portfolio webpage?
Choose one answer. You can try again.

Answer and explanation

<main>

The <main> tag is designed to hold the main content of a webpage, distinguishing it from sidebars or complementary content.

Check your understanding 2

Using <nav> tags to group navigation links improves both accessibility and SEO.
Choose one answer. You can try again.

Answer and explanation

True

<nav> explicitly identifies navigation sections, helping screen readers and search engines understand the page structure.

Check your understanding 3

Choose the option that lists all and only the correct statements.

  1. Using anchor tags with href referencing section IDs
  2. Embedding all content in a single long scroll without links
  3. Using a sticky header with navigation links
  4. Linking to external social media profiles only
Which of the following are effective ways to link different sections within a personal portfolio page?
Choose one answer. You can try again.

Answer and explanation

Statements 1 and 3

Anchor links to section IDs and sticky navigation headers help users easily jump between sections and improve usability.

Check your understanding 4

Which HTML element is most appropriate for embedding a profile photo or project image?
Choose one answer. You can try again.

Answer and explanation

<img>

The <img> tag is used for embedding images like photos and project thumbnails in HTML.

Check your understanding 5

Including a contact form on a portfolio page enhances user engagement and provides a direct way for visitors to communicate.
Choose one answer. You can try again.

Answer and explanation

True

Contact forms enable visitors to easily reach out without leaving the site, improving interaction opportunities.

Check your understanding 6

Choose the option that lists all and only the correct statements.

  1. name
  2. type
  3. aria-label or label tag
  4. autoplay
What are important attributes to include in a contact form's input fields for accessibility and functionality?
Choose one answer. You can try again.

Answer and explanation

Statements 1 and 2 and 3

The 'name' attribute links input to form data, 'type' defines input type (e.g., email, text), and 'aria-label' or <label> improves accessibility. 'autoplay' is unrelated to forms.

Next Steps

From here, you can:

  • Add CSS to style your portfolio
  • Host it using GitHub Pages
  • Include your résumé, testimonials, or blog

This is just the beginning. Keep it personal, keep it clean, and keep building!

Reaching the recap and completing the quizzes are separate milestones.

    Next lesson: HTML Blog Page Project →