HTML · 3 min read
Project: Build Your Personal Page
Put everything together into a complete, accessible personal profile page, plus a checklist of HTML best practices.
Time to combine everything you have learned into a real page: a personal profile with a bio, skills list, project table, and contact form.
The plan
- A
<header>with your name and navigation - An About section with a photo and bio
- A Skills list
- A Projects table
- A Contact form
- A
<footer>
The full page
Edit anything you like. Make it yours!
<header>
<h1>Alex Rivera</h1>
<p>Aspiring web developer</p>
<nav>
<a href="#about">About</a> |
<a href="#skills">Skills</a> |
<a href="#projects">Projects</a> |
<a href="#contact">Contact</a>
</nav>
</header>
<main>
<section id="about">
<h2>About me</h2>
<figure>
<img src="https://picsum.photos/seed/alex/160/160" alt="Portrait of Alex Rivera" width="160" height="160">
<figcaption>That's me!</figcaption>
</figure>
<p>I'm learning to build websites with <strong>HTML</strong>, <strong>CSS</strong>, and <strong>JavaScript</strong>. I love making things that are <em>useful</em> and <em>accessible</em>.</p>
</section>
<section id="skills">
<h2>Skills</h2>
<ul>
<li>Semantic HTML</li>
<li>Accessible forms</li>
<li>Learning CSS next</li>
</ul>
</section>
<section id="projects">
<h2>Projects</h2>
<table>
<thead>
<tr><th scope="col">Project</th><th scope="col">Year</th><th scope="col">Link</th></tr>
</thead>
<tbody>
<tr><td>Recipe page</td><td>2026</td><td><a href="#">View</a></td></tr>
<tr><td>Photo gallery</td><td>2026</td><td><a href="#">View</a></td></tr>
</tbody>
</table>
</section>
<section id="contact">
<h2>Contact</h2>
<form>
<label for="c-name">Your name</label><br>
<input id="c-name" name="name" required><br><br>
<label for="c-msg">Message</label><br>
<textarea id="c-msg" name="message" rows="4" required></textarea><br><br>
<button type="submit">Send message</button>
</form>
</section>
</main>
<footer>
<p>© 2026 Alex Rivera. Built with plain HTML.</p>
</footer>Edit this example in the Playground.
HTML entities
Some characters have special meaning in HTML, so you write them as entities:
| Character | Entity |
|---|---|
< | < |
> | > |
& | & |
" | " |
| © | © |
| non-breaking space | |
Accessibility checklist
Accessibility (often written a11y) means everyone can use your page, including people using screen readers, keyboards, or zoom.
- Every image has a meaningful
alt(oralt=""if decorative). - Headings follow a logical order, with one
<h1>. - Every form control has a
<label>. - Link text describes where it goes.
- You can reach and use everything with only the Tab and Enter keys.
- The page has
langon the<html>element. - Use real
<button>elements for actions and<a>for navigation.
Validate your HTML
Paste your code into the free W3C Markup Validator (validator.w3.org) to catch missing tags, typos, and invalid nesting.
Challenge
- Add a "Hobbies" section using a description list.
- Embed a favorite video with
<iframe>(remember thetitle). - Add a
<details>FAQ to the bottom. - Run the page through the validator and fix any errors.
Saved in this browser.