Snippets Dashboard

Bootstrap 5 Task Management Dashboard UI

A three-pane task manager with a sidebar, filterable task lists with status badges and checkboxes, and a schedule of events with attendee avatars.

Bootstrap 5 No jQuery Feb 2020 3.2K views

<section class="wdw-stage">
  <div class="container" style="max-width:1240px">
    <div class="tk wdw-card overflow-hidden" id="taskApp">
      <div class="tk-top d-lg-none d-flex align-items-center gap-2 px-3 py-2 border-bottom">
        <button class="btn btn-outline-secondary btn-sm px-2 border-0" type="button" data-bs-toggle="offcanvas" data-bs-target="#tkSide" aria-controls="tkSide" aria-label="Open navigation"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 7h16M4 12h16M4 17h16"/></svg></button>
        <span class="wdw-icon" style="width:2rem;height:2rem;border-radius:.6rem"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 12 5 5 9-10"/></svg></span><span class="fw-bold text-body-emphasis">Taskly</span>
      </div>

      <aside class="tk-side offcanvas-lg offcanvas-start" tabindex="-1" id="tkSide" aria-labelledby="tkSideLabel">
        <div class="offcanvas-header d-lg-none"><h2 class="offcanvas-title h5" id="tkSideLabel">Taskly</h2><button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tkSide" aria-label="Close"></button></div>
        <div class="offcanvas-body d-flex flex-column p-3 gap-3">
          <div class="d-none d-lg-flex align-items-center gap-2 px-2 pt-1"><span class="wdw-icon" style="width:2.25rem;height:2.25rem;border-radius:.7rem"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 12 5 5 9-10"/></svg></span><span class="fw-bold text-body-emphasis">Taskly</span></div>
          <nav aria-label="Main"><ul class="list-unstyled m-0 d-grid gap-1"><li><button type="button" class="tk-nav"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 12h-6l-2 3h-4l-2-3H2"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.5-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1z"/></svg><span>Inbox</span><span class="badge rounded-pill tk-count ms-auto">6</span></button></li><li><button type="button" class="tk-nav active" aria-current="page"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1L3.2 9.5l6.1-.9z"/></svg><span>Today</span><span class="badge rounded-pill tk-count ms-auto">5</span></button></li><li><button type="button" class="tk-nav"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="17" rx="3"/><path d="M8 2v4M16 2v4M3 10h18"/></svg><span>Upcoming</span><span class="badge rounded-pill tk-count ms-auto">2</span></button></li><li><button type="button" class="tk-nav"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span>Important</span><span class="badge rounded-pill tk-count ms-auto">5</span></button></li></ul></nav>
          <div class="px-2 small fw-bold wdw-muted text-uppercase mt-2" style="letter-spacing:.08em">Labels</div>
          <nav aria-label="Labels"><ul class="list-unstyled m-0 d-grid gap-1"><li><button type="button" class="tk-nav"><span class="tk-dot bg-danger"></span><span>Urgent</span><span class="tk-count small ms-auto">2</span></button></li><li><button type="button" class="tk-nav"><span class="tk-dot bg-warning"></span><span>In review</span><span class="tk-count small ms-auto">1</span></button></li><li><button type="button" class="tk-nav"><span class="tk-dot bg-success"></span><span>Shipped</span><span class="tk-count small ms-auto">3</span></button></li></ul></nav>
        </div>
      </aside>

      <main class="tk-main p-3 p-md-4">
        <div class="d-flex align-items-center justify-content-between mb-3">
          <div><span class="wdw-eyebrow">Thursday, 29 Oct</span><h1 class="h3 wdw-heading mb-0">Today tasks</h1></div>
          <div class="d-flex align-items-center gap-2"><span class="small wdw-muted d-none d-sm-inline" id="tkCount" aria-live="polite"></span><span class="badge rounded-pill bg-primary-subtle text-primary-emphasis px-3 py-2">6 members</span></div>
        </div>
        <div class="tk-tabs d-flex gap-1 mb-3 p-1 rounded-pill bg-body-tertiary" role="group" aria-label="Task filter">
          <button class="btn rounded-pill active" type="button" aria-pressed="true" data-filter="all">All</button>
          <button class="btn rounded-pill" type="button" aria-pressed="false" data-filter="important">Important</button>
          <button class="btn rounded-pill" type="button" aria-pressed="false" data-filter="notes">Notes</button>
          <button class="btn rounded-pill" type="button" aria-pressed="false" data-filter="links">Links</button>
        </div>
        <section data-view="tasks" aria-label="Tasks">
          <h2 class="h6 fw-bold text-body-emphasis mb-2">Today</h2>
          <ul class="list-unstyled tk-list mb-3" id="tkToday"><li class="tk-task" data-imp="1">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t1" checked><div class="min-w-0"><label class="form-check-label" for="t1">Dashboard design implementation</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span class="text-danger d-inline-flex" title="High priority"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span class="visually-hidden">High priority</span></span><span>Done 9:10 AM</span><span class="badge rounded-pill bg-success-subtle border border-success-subtle text-success-emphasis">Approved</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=32" alt="Assigned to Ana" title="Ana" width="32" height="32" class="tk-av tk-as">
            </li><li class="tk-task" data-imp="1">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t2" checked><div class="min-w-0"><label class="form-check-label" for="t2">Create a user flow</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span class="text-danger d-inline-flex" title="High priority"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span class="visually-hidden">High priority</span></span><span>Done 10:30 AM</span><span class="badge rounded-pill bg-success-subtle border border-success-subtle text-success-emphasis">Approved</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=12" alt="Assigned to Marcus" title="Marcus" width="32" height="32" class="tk-av tk-as">
            </li><li class="tk-task" data-imp="1">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t3"><div class="min-w-0"><label class="form-check-label" for="t3">Application implementation</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span class="text-danger d-inline-flex" title="High priority"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span class="visually-hidden">High priority</span></span><span>Due today, 5:00 PM</span><span class="badge rounded-pill bg-primary-subtle border border-primary-subtle text-primary-emphasis">In Progress</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=47" alt="Assigned to Priya" title="Priya" width="32" height="32" class="tk-av tk-as">
            </li><li class="tk-task" data-imp="0">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t4"><div class="min-w-0"><label class="form-check-label" for="t4">Create a dashboard design</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span>Due today, 6:30 PM</span><span class="badge rounded-pill bg-primary-subtle border border-primary-subtle text-primary-emphasis">In Progress</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=15" alt="Assigned to Leo" title="Leo" width="32" height="32" class="tk-av tk-as">
            </li><li class="tk-task" data-imp="1">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t5"><div class="min-w-0"><label class="form-check-label" for="t5">Interactive design</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span class="text-danger d-inline-flex" title="High priority"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span class="visually-hidden">High priority</span></span><span>Due tomorrow, 11:00 AM</span><span class="badge rounded-pill bg-warning-subtle border border-warning-subtle text-warning-emphasis">In Review</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=32" alt="Assigned to Ana" title="Ana" width="32" height="32" class="tk-av tk-as">
            </li></ul>
          <h2 class="h6 fw-bold text-body-emphasis mb-2">Upcoming</h2>
          <ul class="list-unstyled tk-list mb-0" id="tkUp"><li class="tk-task" data-imp="0">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t6"><div class="min-w-0"><label class="form-check-label" for="t6">Prepare sprint demo</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span>Fri 31 Oct</span><span class="badge rounded-pill bg-secondary-subtle border border-secondary-subtle text-secondary-emphasis">Waiting</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=12" alt="Assigned to Marcus" title="Marcus" width="32" height="32" class="tk-av tk-as">
            </li><li class="tk-task" data-imp="1">
              <div class="form-check m-0 flex-grow-1"><input class="form-check-input" type="checkbox" id="t7"><div class="min-w-0"><label class="form-check-label" for="t7">Write release notes</label><div class="small text-body-secondary d-flex align-items-center gap-2"><span class="text-danger d-inline-flex" title="High priority"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 21V4M5 4h11l-2 4 2 4H5"/></svg><span class="visually-hidden">High priority</span></span><span>Mon 3 Nov</span><span class="badge rounded-pill bg-secondary-subtle border border-secondary-subtle text-secondary-emphasis">Waiting</span></div></div></div>
              <img src="https://i.pravatar.cc/64?img=47" alt="Assigned to Priya" title="Priya" width="32" height="32" class="tk-av tk-as">
            </li></ul>
        </section>
        <section data-view="notes" aria-label="Notes" hidden>
          <h2 class="h6 fw-bold text-body-emphasis mb-2">Notes</h2>
          <ul class="list-unstyled m-0 d-grid gap-2"><li class="tk-note"><div class="d-flex justify-content-between gap-2"><span class="fw-semibold text-body-emphasis">Sprint retro</span><span class="small text-body-secondary">Today</span></div><p class="small text-body-secondary mb-0 mt-1">Keep standups under 10 minutes. Move design reviews to Tuesdays so engineering has a full day to react.</p></li><li class="tk-note"><div class="d-flex justify-content-between gap-2"><span class="fw-semibold text-body-emphasis">Onboarding copy</span><span class="small text-body-secondary">Yesterday</span></div><p class="small text-body-secondary mb-0 mt-1">Shorten the welcome step to one sentence and move the tour behind an optional link.</p></li><li class="tk-note"><div class="d-flex justify-content-between gap-2"><span class="fw-semibold text-body-emphasis">Release checklist</span><span class="small text-body-secondary">Mon</span></div><p class="small text-body-secondary mb-0 mt-1">Smoke-test the checkout, confirm analytics events fire, and post the changelog in the team channel.</p></li></ul>
        </section>
        <section data-view="links" aria-label="Links" hidden>
          <h2 class="h6 fw-bold text-body-emphasis mb-2">Links</h2>
          <ul class="list-unstyled m-0 d-grid gap-2"><li class="tk-note d-flex align-items-center gap-3"><span class="wdw-icon" style="width:2.5rem;height:2.5rem;border-radius:.75rem"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3A4 4 0 0 0 11 18.700l1-1"/></svg></span><div class="flex-grow-1 min-w-0"><a class="fw-semibold link-underline-opacity-0 text-body-emphasis" href="https://example.com/design-system">Design system</a><div class="small text-body-secondary text-truncate">example.com/design-system</div></div><span class="badge rounded-pill bg-secondary-subtle text-secondary-emphasis">Shared</span></li><li class="tk-note d-flex align-items-center gap-3"><span class="wdw-icon" style="width:2.5rem;height:2.5rem;border-radius:.75rem"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3A4 4 0 0 0 11 18.700l1-1"/></svg></span><div class="flex-grow-1 min-w-0"><a class="fw-semibold link-underline-opacity-0 text-body-emphasis" href="https://example.com/boards/sprint-42">Sprint board</a><div class="small text-body-secondary text-truncate">example.com/boards/sprint-42</div></div><span class="badge rounded-pill bg-secondary-subtle text-secondary-emphasis">Team</span></li><li class="tk-note d-flex align-items-center gap-3"><span class="wdw-icon" style="width:2.5rem;height:2.5rem;border-radius:.75rem"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3A4 4 0 0 0 11 18.700l1-1"/></svg></span><div class="flex-grow-1 min-w-0"><a class="fw-semibold link-underline-opacity-0 text-body-emphasis" href="https://example.com/docs/release-notes">Release notes draft</a><div class="small text-body-secondary text-truncate">example.com/docs/release-notes</div></div><span class="badge rounded-pill bg-secondary-subtle text-secondary-emphasis">Draft</span></li></ul>
        </section>
        <p class="wdw-muted text-center py-4 mb-0" id="tkEmpty" hidden>No important tasks right now.</p>
      </main>

      <aside class="tk-right p-3 p-md-4" aria-label="Schedule">
        <div class="d-flex align-items-center justify-content-between mb-3"><h2 class="h5 wdw-heading mb-0">Schedule</h2><span class="small wdw-muted">4 events</span></div>
        <ul class="list-unstyled m-0 d-grid gap-3"><li class="tk-ev tk-ev-now"><div class="d-flex justify-content-between align-items-start"><div><div class="small wdw-muted">08:00 – 09:00 AM</div><div class="fw-semibold text-body-emphasis">Product review</div></div><span class="badge rounded-pill bg-primary">Now</span></div><div class="d-flex mt-3"><img src="https://i.pravatar.cc/64?img=1" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=2" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=3" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=4" alt="" width="32" height="32" class="tk-av"></div></li>
          <li class="tk-ev"><div class="d-flex justify-content-between align-items-start"><div><div class="small wdw-muted">10:00 – 11:00 AM</div><div class="fw-semibold text-body-emphasis">Design meeting</div></div></div><div class="d-flex mt-3"><img src="https://i.pravatar.cc/64?img=5" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=6" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=7" alt="" width="32" height="32" class="tk-av"></div></li>
          <li class="tk-ev"><div class="d-flex justify-content-between align-items-start"><div><div class="small wdw-muted">01:00 – 02:00 PM</div><div class="fw-semibold text-body-emphasis">Team meeting</div></div></div><div class="d-flex mt-3"><img src="https://i.pravatar.cc/64?img=8" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=9" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=10" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=11" alt="" width="32" height="32" class="tk-av"></div></li>
          <li class="tk-ev"><div class="d-flex justify-content-between align-items-start"><div><div class="small wdw-muted">03:00 – 04:00 PM</div><div class="fw-semibold text-body-emphasis">Release event</div></div></div><div class="d-flex mt-3"><img src="https://i.pravatar.cc/64?img=12" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=13" alt="" width="32" height="32" class="tk-av"><img src="https://i.pravatar.cc/64?img=14" alt="" width="32" height="32" class="tk-av"></div></li>
          </ul>
      </aside>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.