CodeBlanks Logo Icon CodeBlanks

Challenge - Advanced capstone

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.

Practice 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>.

Starter code

index.html
<!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>
  <!-- add the dashboard skeleton -->
</body>
</html>

Sample solution

index.html
<!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>

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

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

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

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

2 Write the noscript fallback

Question
<main>
  <section>...</section>
</main>
<____>Your browser has JavaScript off; some sections may not appear.</noscript>
Answer
<main>
  <section>...</section>
</main>
<noscript>Your browser has JavaScript off; some sections may not appear.</noscript>

Explanation: <noscript> carries the fallback content shown when scripting is off.

3 Match each semantic tag to its role

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

All lessons in Advanced