CodeBlanks Logo Icon CodeBlanks

Challenge - Advanced capstone

HTML course · Advanced · Lesson 56/56

Write a dashboard page that combines all advanced topics.

Advanced capstone challenge

This final challenge asks you to write a dashboard page that combines the entire advanced level: semantic skeleton, responsive image, accessible video, complex form and a data table.

The page must include: <header>, <nav>, <main>, <aside>, <footer>; at least two <section>s inside main; one with a <picture> hero, another with a <video> and <track>; an <aside> holding a <table> (<thead>, <tbody>); a <form> at the end of main with a <fieldset> and an <output>. Add a <noscript> fallback too.

Exercise Write the advanced dashboard page

Fill the <body> of the skeleton below. Inside <header> put an <h1>; inside <nav> put three <a href="#..."> links; inside <main> put two <section>s — one with a <picture> (at least one <source> and one <img>); the other with a <video controls> containing a <source> and a <track kind="captions">. At the end of main add a <form> with a <fieldset>, a <label> + <input type="range"> and an <output>Pending</output>. Inside <aside> put a <table> with <thead>, <tbody> and at least one <tr>. End the page with a <footer> and a <noscript>.

Show example solution
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Dashboard</title>
</head>
<body>
  <header>
    <h1>Travel Dashboard</h1>
  </header>
  <nav>
    <a href="#gallery">Gallery</a>
    <a href="#video">Video</a>
    <a href="#signup">Sign up</a>
  </nav>
  <main>
    <section id="gallery">
      <h2>Gallery</h2>
      <picture>
        <source media="(min-width: 800px)" srcset="/img/dashboard-wide.jpg">
        <img src="/img/dashboard-narrow.jpg" alt="Panorama" width="1200" height="600" loading="lazy">
      </picture>
    </section>
    <section id="video">
      <h2>Promo</h2>
      <video controls poster="/media/poster.jpg">
        <source src="/media/promo.mp4" type="video/mp4">
        <track kind="captions" srclang="en" label="English" src="/media/captions-en.vtt">
      </video>
    </section>
    <form action="/signup" method="post">
      <fieldset>
        <legend>Preference</legend>
        <label for="previous">Previous</label>
        <input id="previous" name="previous" type="range" min="0" max="100">
        <label for="status">Status</label>
        <output id="status" name="status">Pending</output>
      </fieldset>
    </form>
  </main>
  <aside>
    <h2>History</h2>
    <table>
      <thead>
        <tr>
          <th scope="col">Date</th>
          <th scope="col">City</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>May</td>
          <td>Lisbon</td>
        </tr>
      </tbody>
    </table>
  </aside>
  <footer>
    <p>© 2026 Travel Dashboard</p>
  </footer>
  <noscript>Your browser has JavaScript off; some sections may not appear.</noscript>
</body>
</html>

Test yourself

  1. Which semantic tag suits a side panel (recent activity, quick links) on a dashboard?

    • <section>
    • <aside>
    • <article>
    • <main>
    Show answer

    <aside> — Correct. <aside> holds content related to but tangential to the main content; a side panel fits.

  2. Write the noscript fallback

    <main>
      <section>...</section>
    </main>
    <____>Your browser has JavaScript off; some sections may not appear.</noscript>
    Show answer
    <main>
      <section>...</section>
    </main>
    <noscript>Your browser has JavaScript off; some sections may not appear.</noscript>
  3. Match each semantic tag to its role

    <main>
    Main content
    <aside>
    Side panel
    <section>
    Section
    <article>
    Standalone card
    <noscript>
    Script fallback

All lessons in Advanced