From 977701937b8cf8bbd2b6d8963ca04b2ddc85eb63 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Tue, 25 Feb 2020 22:53:07 -0600
Subject: [PATCH] Feat: add d3 dashboard project to next curriculum (#38028)
* feat: add d3 dashboard project to next curriculum
---
.../data-visualization/d3-dashboard/index.md | 8 +
client/utils/challengeTypes.js | 3 +-
.../challenges/_meta/d3-dashboard/meta.json | 602 ++++++++++++++++++
.../d3-dashboard/part-1.english.md | 50 ++
.../d3-dashboard/part-10.english.md | 95 +++
.../d3-dashboard/part-100.english.md | 392 ++++++++++++
.../d3-dashboard/part-101.english.md | 397 ++++++++++++
.../d3-dashboard/part-102.english.md | 381 +++++++++++
.../d3-dashboard/part-103.english.md | 386 +++++++++++
.../d3-dashboard/part-104.english.md | 403 ++++++++++++
.../d3-dashboard/part-105.english.md | 400 ++++++++++++
.../d3-dashboard/part-106.english.md | 393 ++++++++++++
.../d3-dashboard/part-107.english.md | 395 ++++++++++++
.../d3-dashboard/part-108.english.md | 405 ++++++++++++
.../d3-dashboard/part-109.english.md | 404 ++++++++++++
.../d3-dashboard/part-11.english.md | 98 +++
.../d3-dashboard/part-110.english.md | 406 ++++++++++++
.../d3-dashboard/part-111.english.md | 408 ++++++++++++
.../d3-dashboard/part-112.english.md | 412 ++++++++++++
.../d3-dashboard/part-113.english.md | 415 ++++++++++++
.../d3-dashboard/part-114.english.md | 418 ++++++++++++
.../d3-dashboard/part-115.english.md | 422 ++++++++++++
.../d3-dashboard/part-116.english.md | 425 +++++++++++++
.../d3-dashboard/part-117.english.md | 427 +++++++++++++
.../d3-dashboard/part-118.english.md | 429 +++++++++++++
.../d3-dashboard/part-119.english.md | 434 +++++++++++++
.../d3-dashboard/part-12.english.md | 99 +++
.../d3-dashboard/part-120.english.md | 434 +++++++++++++
.../d3-dashboard/part-121.english.md | 439 +++++++++++++
.../d3-dashboard/part-122.english.md | 443 +++++++++++++
.../d3-dashboard/part-123.english.md | 445 +++++++++++++
.../d3-dashboard/part-124.english.md | 448 +++++++++++++
.../d3-dashboard/part-125.english.md | 451 +++++++++++++
.../d3-dashboard/part-126.english.md | 454 +++++++++++++
.../d3-dashboard/part-127.english.md | 456 +++++++++++++
.../d3-dashboard/part-128.english.md | 458 +++++++++++++
.../d3-dashboard/part-129.english.md | 461 ++++++++++++++
.../d3-dashboard/part-13.english.md | 116 ++++
.../d3-dashboard/part-130.english.md | 464 ++++++++++++++
.../d3-dashboard/part-131.english.md | 467 ++++++++++++++
.../d3-dashboard/part-132.english.md | 467 ++++++++++++++
.../d3-dashboard/part-133.english.md | 468 ++++++++++++++
.../d3-dashboard/part-134.english.md | 473 ++++++++++++++
.../d3-dashboard/part-135.english.md | 482 ++++++++++++++
.../d3-dashboard/part-136.english.md | 491 ++++++++++++++
.../d3-dashboard/part-137.english.md | 500 +++++++++++++++
.../d3-dashboard/part-138.english.md | 499 +++++++++++++++
.../d3-dashboard/part-139.english.md | 501 +++++++++++++++
.../d3-dashboard/part-14.english.md | 115 ++++
.../d3-dashboard/part-140.english.md | 498 +++++++++++++++
.../d3-dashboard/part-141.english.md | 507 +++++++++++++++
.../d3-dashboard/part-142.english.md | 497 +++++++++++++++
.../d3-dashboard/part-143.english.md | 500 +++++++++++++++
.../d3-dashboard/part-144.english.md | 506 +++++++++++++++
.../d3-dashboard/part-145.english.md | 506 +++++++++++++++
.../d3-dashboard/part-146.english.md | 504 +++++++++++++++
.../d3-dashboard/part-15.english.md | 124 ++++
.../d3-dashboard/part-16.english.md | 125 ++++
.../d3-dashboard/part-17.english.md | 135 ++++
.../d3-dashboard/part-18.english.md | 140 ++++
.../d3-dashboard/part-19.english.md | 145 +++++
.../d3-dashboard/part-2.english.md | 56 ++
.../d3-dashboard/part-20.english.md | 137 ++++
.../d3-dashboard/part-21.english.md | 142 +++++
.../d3-dashboard/part-22.english.md | 143 +++++
.../d3-dashboard/part-23.english.md | 148 +++++
.../d3-dashboard/part-24.english.md | 148 +++++
.../d3-dashboard/part-25.english.md | 151 +++++
.../d3-dashboard/part-26.english.md | 153 +++++
.../d3-dashboard/part-27.english.md | 156 +++++
.../d3-dashboard/part-28.english.md | 160 +++++
.../d3-dashboard/part-29.english.md | 164 +++++
.../d3-dashboard/part-3.english.md | 66 ++
.../d3-dashboard/part-30.english.md | 168 +++++
.../d3-dashboard/part-31.english.md | 172 +++++
.../d3-dashboard/part-32.english.md | 171 +++++
.../d3-dashboard/part-33.english.md | 174 +++++
.../d3-dashboard/part-34.english.md | 177 +++++
.../d3-dashboard/part-35.english.md | 179 ++++++
.../d3-dashboard/part-36.english.md | 186 ++++++
.../d3-dashboard/part-37.english.md | 183 ++++++
.../d3-dashboard/part-38.english.md | 185 ++++++
.../d3-dashboard/part-39.english.md | 189 ++++++
.../d3-dashboard/part-4.english.md | 68 ++
.../d3-dashboard/part-40.english.md | 191 ++++++
.../d3-dashboard/part-41.english.md | 191 ++++++
.../d3-dashboard/part-42.english.md | 195 ++++++
.../d3-dashboard/part-43.english.md | 199 ++++++
.../d3-dashboard/part-44.english.md | 209 ++++++
.../d3-dashboard/part-45.english.md | 204 ++++++
.../d3-dashboard/part-46.english.md | 208 ++++++
.../d3-dashboard/part-47.english.md | 207 ++++++
.../d3-dashboard/part-48.english.md | 214 +++++++
.../d3-dashboard/part-49.english.md | 215 +++++++
.../d3-dashboard/part-5.english.md | 72 +++
.../d3-dashboard/part-50.english.md | 219 +++++++
.../d3-dashboard/part-51.english.md | 221 +++++++
.../d3-dashboard/part-52.english.md | 226 +++++++
.../d3-dashboard/part-53.english.md | 227 +++++++
.../d3-dashboard/part-54.english.md | 230 +++++++
.../d3-dashboard/part-55.english.md | 234 +++++++
.../d3-dashboard/part-56.english.md | 239 +++++++
.../d3-dashboard/part-57.english.md | 243 +++++++
.../d3-dashboard/part-58.english.md | 246 +++++++
.../d3-dashboard/part-59.english.md | 249 ++++++++
.../d3-dashboard/part-6.english.md | 75 +++
.../d3-dashboard/part-60.english.md | 251 ++++++++
.../d3-dashboard/part-61.english.md | 255 ++++++++
.../d3-dashboard/part-62.english.md | 267 ++++++++
.../d3-dashboard/part-63.english.md | 268 ++++++++
.../d3-dashboard/part-64.english.md | 269 ++++++++
.../d3-dashboard/part-65.english.md | 267 ++++++++
.../d3-dashboard/part-66.english.md | 271 ++++++++
.../d3-dashboard/part-67.english.md | 273 ++++++++
.../d3-dashboard/part-68.english.md | 273 ++++++++
.../d3-dashboard/part-69.english.md | 276 ++++++++
.../d3-dashboard/part-7.english.md | 84 +++
.../d3-dashboard/part-70.english.md | 279 ++++++++
.../d3-dashboard/part-71.english.md | 282 ++++++++
.../d3-dashboard/part-72.english.md | 289 +++++++++
.../d3-dashboard/part-73.english.md | 292 +++++++++
.../d3-dashboard/part-74.english.md | 297 +++++++++
.../d3-dashboard/part-75.english.md | 301 +++++++++
.../d3-dashboard/part-76.english.md | 304 +++++++++
.../d3-dashboard/part-77.english.md | 309 +++++++++
.../d3-dashboard/part-78.english.md | 314 +++++++++
.../d3-dashboard/part-79.english.md | 319 ++++++++++
.../d3-dashboard/part-8.english.md | 90 +++
.../d3-dashboard/part-80.english.md | 323 ++++++++++
.../d3-dashboard/part-81.english.md | 326 ++++++++++
.../d3-dashboard/part-82.english.md | 329 ++++++++++
.../d3-dashboard/part-83.english.md | 332 ++++++++++
.../d3-dashboard/part-84.english.md | 336 ++++++++++
.../d3-dashboard/part-85.english.md | 340 ++++++++++
.../d3-dashboard/part-86.english.md | 343 ++++++++++
.../d3-dashboard/part-87.english.md | 345 ++++++++++
.../d3-dashboard/part-88.english.md | 350 ++++++++++
.../d3-dashboard/part-89.english.md | 351 ++++++++++
.../d3-dashboard/part-9.english.md | 93 +++
.../d3-dashboard/part-90.english.md | 353 ++++++++++
.../d3-dashboard/part-91.english.md | 356 +++++++++++
.../d3-dashboard/part-92.english.md | 361 +++++++++++
.../d3-dashboard/part-93.english.md | 362 +++++++++++
.../d3-dashboard/part-94.english.md | 365 +++++++++++
.../d3-dashboard/part-95.english.md | 384 +++++++++++
.../d3-dashboard/part-96.english.md | 366 +++++++++++
.../d3-dashboard/part-97.english.md | 369 +++++++++++
.../d3-dashboard/part-98.english.md | 372 +++++++++++
.../d3-dashboard/part-99.english.md | 373 +++++++++++
utils/block-nameify.js | 3 +-
150 files changed, 43776 insertions(+), 2 deletions(-)
create mode 100644 client/src/pages/learn/data-visualization/d3-dashboard/index.md
create mode 100644 curriculum/challenges/_meta/d3-dashboard/meta.json
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-1.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-10.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-100.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-101.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-102.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-103.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-104.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-105.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-106.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-107.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-108.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-109.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-11.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-110.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-111.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-112.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-113.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-114.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-115.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-116.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-117.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-118.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-119.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-12.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-120.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-121.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-122.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-123.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-124.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-125.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-126.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-127.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-128.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-129.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-13.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-130.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-131.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-132.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-133.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-134.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-135.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-136.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-137.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-138.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-139.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-14.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-140.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-141.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-142.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-143.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-144.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-145.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-146.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-15.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-16.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-17.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-18.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-19.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-2.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-20.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-21.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-22.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-23.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-24.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-25.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-26.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-27.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-28.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-29.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-3.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-30.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-31.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-32.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-33.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-34.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-35.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-36.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-37.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-38.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-39.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-4.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-40.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-41.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-42.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-43.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-44.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-45.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-46.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-47.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-48.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-49.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-5.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-50.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-51.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-52.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-53.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-54.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-55.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-56.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-57.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-58.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-59.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-6.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-60.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-61.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-62.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-63.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-64.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-65.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-66.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-67.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-68.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-69.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-7.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-70.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-71.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-72.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-73.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-74.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-75.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-76.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-77.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-78.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-79.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-8.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-80.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-81.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-82.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-83.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-84.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-85.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-86.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-87.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-88.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-89.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-9.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-90.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-91.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-92.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-93.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-94.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-95.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-96.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-97.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-98.english.md
create mode 100644 curriculum/challenges/english/04-data-visualization/d3-dashboard/part-99.english.md
diff --git a/client/src/pages/learn/data-visualization/d3-dashboard/index.md b/client/src/pages/learn/data-visualization/d3-dashboard/index.md
new file mode 100644
index 0000000000..0ceb538921
--- /dev/null
+++ b/client/src/pages/learn/data-visualization/d3-dashboard/index.md
@@ -0,0 +1,8 @@
+---
+title: Introduction to the D3 Dashboard Project Challenges
+block: D3 Dashboard Project
+superBlock: Data Visualization
+---
+## Introduction to the D3 Dashboard Project Challenges
+
+D3 Dashboard Project Placeholder Introduction.
diff --git a/client/utils/challengeTypes.js b/client/utils/challengeTypes.js
index ad915c4069..47dc953ac0 100644
--- a/client/utils/challengeTypes.js
+++ b/client/utils/challengeTypes.js
@@ -136,5 +136,6 @@ exports.helpCategory = {
'basic-javascript-rpg-game': 'JavaScript',
'functional-programming-spreadsheet': 'JavaScript',
'intermediate-javascript-calorie-counter':
- 'Intermediate JavaScript Calorie Counter'
+ 'Intermediate JavaScript Calorie Counter',
+ 'd3-dashboard-project': 'JavaScript'
};
diff --git a/curriculum/challenges/_meta/d3-dashboard/meta.json b/curriculum/challenges/_meta/d3-dashboard/meta.json
new file mode 100644
index 0000000000..f92c8e9ca2
--- /dev/null
+++ b/curriculum/challenges/_meta/d3-dashboard/meta.json
@@ -0,0 +1,602 @@
+{
+ "name": "D3 Dashboard Project",
+ "dashedName": "d3-dashboard",
+ "order": 4,
+ "time": "5 hours",
+ "template": "",
+ "required": [
+ {
+ "src": "https://cdnjs.cloudflare.com/ajax/libs/d3/5.9.2/d3.min.js"
+ }
+ ],
+ "superBlock": "data-visualization",
+ "superOrder": 4,
+ "challengeOrder": [
+ [
+ "5d8a4cfbe6b6180ed9a1c9de",
+ "Part 1"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9df",
+ "Part 2"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e0",
+ "Part 3"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e1",
+ "Part 4"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e2",
+ "Part 5"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e3",
+ "Part 6"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e4",
+ "Part 7"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e5",
+ "Part 8"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e6",
+ "Part 9"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e7",
+ "Part 10"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e8",
+ "Part 11"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9e9",
+ "Part 12"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ea",
+ "Part 13"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9eb",
+ "Part 14"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ec",
+ "Part 15"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ed",
+ "Part 16"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ee",
+ "Part 17"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ef",
+ "Part 18"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f0",
+ "Part 19"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f1",
+ "Part 20"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f2",
+ "Part 21"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f3",
+ "Part 22"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f4",
+ "Part 23"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f5",
+ "Part 24"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f6",
+ "Part 25"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f7",
+ "Part 26"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f8",
+ "Part 27"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9f9",
+ "Part 28"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9fa",
+ "Part 29"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9fb",
+ "Part 30"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9fc",
+ "Part 31"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9fd",
+ "Part 32"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9fe",
+ "Part 33"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1c9ff",
+ "Part 34"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca00",
+ "Part 35"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca01",
+ "Part 36"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca02",
+ "Part 37"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca03",
+ "Part 38"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca04",
+ "Part 39"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca05",
+ "Part 40"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca06",
+ "Part 41"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca07",
+ "Part 42"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca08",
+ "Part 43"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca09",
+ "Part 44"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0a",
+ "Part 45"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0b",
+ "Part 46"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0c",
+ "Part 47"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0d",
+ "Part 48"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0e",
+ "Part 49"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca0f",
+ "Part 50"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca10",
+ "Part 51"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca11",
+ "Part 52"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca12",
+ "Part 53"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca13",
+ "Part 54"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca14",
+ "Part 55"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca15",
+ "Part 56"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca16",
+ "Part 57"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca17",
+ "Part 58"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca18",
+ "Part 59"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca19",
+ "Part 60"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1a",
+ "Part 61"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1b",
+ "Part 62"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1c",
+ "Part 63"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1d",
+ "Part 64"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1e",
+ "Part 65"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca1f",
+ "Part 66"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca20",
+ "Part 67"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca21",
+ "Part 68"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca22",
+ "Part 69"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca23",
+ "Part 70"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca24",
+ "Part 71"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca25",
+ "Part 72"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca26",
+ "Part 73"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca27",
+ "Part 74"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca28",
+ "Part 75"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca29",
+ "Part 76"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2a",
+ "Part 77"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2b",
+ "Part 78"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2c",
+ "Part 79"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2d",
+ "Part 80"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2e",
+ "Part 81"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca2f",
+ "Part 82"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca30",
+ "Part 83"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca31",
+ "Part 84"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca32",
+ "Part 85"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca33",
+ "Part 86"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca34",
+ "Part 87"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca35",
+ "Part 88"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca36",
+ "Part 89"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca37",
+ "Part 90"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca38",
+ "Part 91"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca39",
+ "Part 92"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3a",
+ "Part 93"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3b",
+ "Part 94"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3c",
+ "Part 95"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3d",
+ "Part 96"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3e",
+ "Part 97"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca3f",
+ "Part 98"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca40",
+ "Part 99"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca41",
+ "Part 100"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca42",
+ "Part 101"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca43",
+ "Part 102"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca44",
+ "Part 103"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca47",
+ "Part 104"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca48",
+ "Part 105"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca49",
+ "Part 106"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4a",
+ "Part 107"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4b",
+ "Part 108"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4c",
+ "Part 109"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4d",
+ "Part 110"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4e",
+ "Part 111"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca4f",
+ "Part 112"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca50",
+ "Part 113"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca51",
+ "Part 114"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca52",
+ "Part 115"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca53",
+ "Part 116"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca54",
+ "Part 117"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca55",
+ "Part 118"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca56",
+ "Part 119"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca57",
+ "Part 120"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca58",
+ "Part 121"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca59",
+ "Part 122"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5a",
+ "Part 123"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5b",
+ "Part 124"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5c",
+ "Part 125"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5d",
+ "Part 126"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5e",
+ "Part 127"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca5f",
+ "Part 128"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca60",
+ "Part 129"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca61",
+ "Part 130"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca62",
+ "Part 131"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca63",
+ "Part 132"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca64",
+ "Part 133"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca65",
+ "Part 134"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca66",
+ "Part 135"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca67",
+ "Part 136"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca68",
+ "Part 137"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6a",
+ "Part 138"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6b",
+ "Part 139"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6c",
+ "Part 140"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6d",
+ "Part 141"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6e",
+ "Part 142"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca6f",
+ "Part 143"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca70",
+ "Part 144"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca71",
+ "Part 145"
+ ],
+ [
+ "5d8a4cfbe6b6180ed9a1ca72",
+ "Part 146"
+ ]
+ ],
+ "helpRoom": "Help",
+ "fileName": "04-data-visualization/d3-dashboard.json"
+}
\ No newline at end of file
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-1.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-1.english.md
new file mode 100644
index 0000000000..ea9ea73448
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-1.english.md
@@ -0,0 +1,50 @@
+---
+id: 5d8a4cfbe6b6180ed9a1c9de
+title: Part 1
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Welcome to the dashboard project! You will be using the JavaScript data visualization library, D3, to build a visualization of your social media followers. It will consist of a line graph, a pie chart, and a legend.
+
+First, you need to create the HTML file. Start by adding the `` declaration at the top of the file to tell the browser what type of document it's reading.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(//gi.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-10.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-10.english.md
new file mode 100644
index 0000000000..51dbc8c8e3
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-10.english.md
@@ -0,0 +1,95 @@
+---
+id: 5d8a4cfbe6b6180ed9a1c9e7
+title: Part 10
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Give the container some space by adding a `padding` of `100px 10px` to the `body` element.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const body = code.match(/body\s*{[\s\S]+?[^}]}/g)[0]; assert(/padding\s*:\s*100px\s*10px\s*(;|})/g.test(body));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-100.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-100.english.md
new file mode 100644
index 0000000000..52ccff216d
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-100.english.md
@@ -0,0 +1,392 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca41
+title: Part 100
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+The pie graph is being drawn at the `0, 0` coordinates of the SVG. Back on your `pieGraphData` variable, add an attribute that changes the `transform` to `translate(100, 100)`.
+
+Since the pie chart has a radius of 100, and the SVG is 200 by 200, this will move it so it is centered.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const transform = $('.dashboard div svg g')[0].getAttribute('transform'); assert(/translate\s*\(\s*100\s*,\s*100\s*\)/g.test(transform));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-101.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-101.english.md
new file mode 100644
index 0000000000..0bdbcb3390
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-101.english.md
@@ -0,0 +1,397 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca42
+title: Part 101
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+
+Back at the bottom, where you draw the chart. Use the `attr` function to set the `fill` to a "d function". In the "d function", use your `pieColors` scale to get the color value for the platform(`d.data.key`). So when each platform is passed to your scale, is will get the appropriate color to use as the fill from the scales range.
+
+
+## Instructions
+
+
+
+## Tests
+
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const pathsArr = $('.dashboard div svg g path'); assert(pathsArr[0].getAttribute('fill') === '#7cd9d1' && pathsArr[1].getAttribute('fill') === '#f6dd71' && pathsArr[2].getAttribute('fill') === '#fd9b98');
+
+```
+
+
+
+## Challenge Seed
+
+
+
+
+```html
+
+
+```
+
+
+
+### Before Test
+
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+## Solution
+
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-102.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-102.english.md
new file mode 100644
index 0000000000..f6f1f5fa99
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-102.english.md
@@ -0,0 +1,381 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca43
+title: Part 102
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Next, set the `stroke` to `white` and the `stroke-width` to `2`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const pathsArr = $('.dashboard div svg g path'); assert(pathsArr[0].getAttribute('stroke') === 'white' && pathsArr[0].getAttribute('stroke-width') == 2);
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-103.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-103.english.md
new file mode 100644
index 0000000000..ea52ee66a6
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-103.english.md
@@ -0,0 +1,386 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca44
+title: Part 103
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Your chart needs some labels in each slice. On a new line, append `text` elements to your `pieGraphData` variable.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/pieGraphData\s*\.\s*append\s*\((`|'|")text\1\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-104.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-104.english.md
new file mode 100644
index 0000000000..96185c6b15
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-104.english.md
@@ -0,0 +1,403 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca47
+title: Part 104
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Chain a `text` function to set the text of each pie slice to a percentage. Set the value to a "d function" with curly brackets and leave the function empty for now. It should look like this:
+
+```js
+.text(d => {
+
+})
+```
+
+The method for getting the percent of each slice will take a few steps:
+
+1. Find the total number of followers for the displayed year
+2. Divide the followers of a single platform by that total
+3. Turn it into a string to display
+
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/\.append\('text'\)\s*\.text\s*\(\s*d\s*=>\s*\{\s*\}\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-105.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-105.english.md
new file mode 100644
index 0000000000..c38504f669
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-105.english.md
@@ -0,0 +1,400 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca48
+title: Part 105
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+In the function you just created, create a `const` named `values`. Use the `d3.values` function to get the values of the 2020 followers and set the result to your `values` variable. Here's how to get the values:
+
+```js
+d3.values(data[8].followers)
+```
+
+It will be an array with the values of the followers for the three platforms in 2020.
+
+Note that this "d function" has curly brackets. So you could `console.log(values)` in there to see it's value.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*values\s*=\s*d3\s*\.\s*values\s*\(\s*data\s*\[\s*8\s*\]\s*\.\s*followers\s*\);?/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-106.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-106.english.md
new file mode 100644
index 0000000000..f4894aee01
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-106.english.md
@@ -0,0 +1,393 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca49
+title: Part 106
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Since you want to find what percent each of those `values` is, you first need to add them all up. `d3.sum` will do that for you. Create a new `const` named `sum` and set it equal to `d3.sum(values)`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*sum\s*=\s*d3\s*\.\s*sum\s*\(\s*values\s*\)\s*;?/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-107.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-107.english.md
new file mode 100644
index 0000000000..a8219f25ba
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-107.english.md
@@ -0,0 +1,395 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4a
+title: Part 107
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Create another variable named `percent` and set it equal to `d.data.value` divided by your `sum` variable.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*percent\s*=\s*d\s*\.\s*data\s*\.\s*value\s*\/\s*sum;?/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-108.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-108.english.md
new file mode 100644
index 0000000000..b2218674f2
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-108.english.md
@@ -0,0 +1,405 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4b
+title: Part 108
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Your percent values are numbers less than one. You will need to multiply it by 100, round of the decimals, and add a `%` sign. Use a template literal to return this to the `text` function:
+
+```js
+${Math.round(percent * 100)}%
+```
+
+Don't forget that you need a `return` statement here since you aren't using an implicit return.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/return\s*`\$\{\s*Math\s*\.\s*round\s*\(\s*percent\s*\*\s*100\s*\)\s*\}%`;?\s*\}\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-109.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-109.english.md
new file mode 100644
index 0000000000..3e742957ba
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-109.english.md
@@ -0,0 +1,404 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4c
+title: Part 109
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+The text elements are at the center of the pie graph, you need to use the `centroid` from the D3 arc API to tell them where to go. Add an `attr` function to set the `transform` to a `d` function that returns this template literal: `translate(${ pieArc.centroid(d) })`
+
+The `centroid` function will find the midpoint of each slice for each text element.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const transform = $('.dashboard div svg g text')[0].getAttribute('transform').replace('translate(','').replace(')','').split(','); assert(transform[0] < 39 && transform[1] > 31);
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-11.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-11.english.md
new file mode 100644
index 0000000000..e848b11cb2
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-11.english.md
@@ -0,0 +1,98 @@
+---
+id: 5d8a4cfbe6b6180ed9a1c9e8
+title: Part 11
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Later on, you will be adding more elements to the dashboard container. Set the `display` to `flex` and the `align-items` to `center` so those items will be vertically centered.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const dashboard = $(".dashboard"); assert(dashboard.css("display") === "flex" && dashboard.css("align-items") === "center");
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-110.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-110.english.md
new file mode 100644
index 0000000000..2a0c0e5c3c
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-110.english.md
@@ -0,0 +1,406 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4d
+title: Part 110
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+The function you just added, placed the start of the text at the midpoint of each slice. Change the `style` of the text to give it a `text-anchor` of `middle` so the middle of the text is in the middle of the slice.
+
+After that, set the `font` to `10px verdana`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const text = $('.dashboard div svg g text')[0]; assert(text.style.textAnchor === 'middle' && text.style.font.toLowerCase() === '10px verdana');
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-111.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-111.english.md
new file mode 100644
index 0000000000..32408e80e7
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-111.english.md
@@ -0,0 +1,408 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4e
+title: Part 111
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+The last component you are going to add is a legend to display the name of each platform and the number of followers for the year. Create a new `const` named `legend` and use it to `append` a `table` to your `rightDashboard` variable. This looks similar to the code where you created your `pieGraph` variable.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*legend\s*=\s*rightDashboard\s*\.\s*append\s*\(\s*('|"|`)\s*table\s*\1\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-112.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-112.english.md
new file mode 100644
index 0000000000..0ee8c3f032
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-112.english.md
@@ -0,0 +1,412 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca4f
+title: Part 112
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Give the table a `width` of `200` and a `height` of `120` using `attr`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const table = $('.dashboard div table')[0]; assert(table.getAttribute('width') == 200 && table.getAttribute('height') == 120);
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-113.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-113.english.md
new file mode 100644
index 0000000000..f399e98efb
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-113.english.md
@@ -0,0 +1,415 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca50
+title: Part 113
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Set the `font` to `12px verdana` using the `style` function.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert($('.dashboard div table')[0].style.font.toLowerCase() === '12px verdana');
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-114.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-114.english.md
new file mode 100644
index 0000000000..fb8d204726
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-114.english.md
@@ -0,0 +1,418 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca51
+title: Part 114
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Create a new `const` named `legendTitle` and use it to `append` a `thead` to your `legend` variable. `thead` is used with the HTML table element and is for the top row of the table.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*legendTitle\s*=\s*legend\s*\.\s*append\s*\(\s*('|"|`)\s*thead\s*\1\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-115.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-115.english.md
new file mode 100644
index 0000000000..4311f55c36
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-115.english.md
@@ -0,0 +1,422 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca52
+title: Part 115
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+`append` a `tr` element to the selection and then append a `th` element right after it. `tr` is for defining a row of the table, and `th` is for defining the header cells of the table.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert($('.dashboard div table thead tr th').length === 1);
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-116.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-116.english.md
new file mode 100644
index 0000000000..f3b7a70202
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-116.english.md
@@ -0,0 +1,425 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca53
+title: Part 116
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Use the `text` function to set the text of the selection to `2020 followers`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert($('.dashboard div table thead tr th').text() === '2020 followers');
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-117.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-117.english.md
new file mode 100644
index 0000000000..bf708b8874
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-117.english.md
@@ -0,0 +1,427 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca54
+title: Part 117
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Your table is going to have three columns, one for the platform name, one for the color it is using on your dashboard, and a third to display the number of followers. So you want the title to take up all three columns. Set the `colspan` attribute of the `th` to `3` so it spans all three of these columns.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert($('.dashboard div table thead tr th')[0].getAttribute('colspan') == 3);
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-118.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-118.english.md
new file mode 100644
index 0000000000..d02cc61a37
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-118.english.md
@@ -0,0 +1,429 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca55
+title: Part 118
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Create a new `const` named `legendRows` and use it to `append` a `tbody` element to your `legend` variable similar to how you added the `thead`. `tbody` is for the main content of an HTML table.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const\s*legendRows\s*=\s*legend\s*\.\s*append\s*\(\s*('|"|`)\s*tbody\s*\1\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-119.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-119.english.md
new file mode 100644
index 0000000000..fdc74b8c47
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-119.english.md
@@ -0,0 +1,434 @@
+---
+id: 5d8a4cfbe6b6180ed9a1ca56
+title: Part 119
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Add a `selectAll` function to the selection and pass it the string `tr`.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: assert(/const legendRows = legend\.append\('tbody\s*'\)\s*\.\s*selectAll\s*\(\s*('|"|`)\s*tr\s*\1\s*\)/g.test(code));
+
+```
+
+
+
+## Challenge Seed
+
+
+
+```html
+
+
+```
+
+
+
+
+### Before Test
+
+
+```html
+
+
+
+
D3 Dashboard
+
+
+
+
+
+
+
+```
+
+
+
+
+
+## Solution
+
diff --git a/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-12.english.md b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-12.english.md
new file mode 100644
index 0000000000..f981d95595
--- /dev/null
+++ b/curriculum/challenges/english/04-data-visualization/d3-dashboard/part-12.english.md
@@ -0,0 +1,99 @@
+---
+id: 5d8a4cfbe6b6180ed9a1c9e9
+title: Part 12
+challengeType: 0
+isBeta: true
+---
+
+## Description
+
+
+Back in the HTML file, add a `script` tag at the bottom of the head element and give it a `src` attribute of `./d3-5.9.2.min.js`. Don't forget the closing tag. This will add the D3 library to your project from a downloaded copy.
+
+
+## Instructions
+
+
+## Tests
+
+
+```yml
+tests:
+ - text: test-text
+ testString: const script = code.match(/
+
+
+
+
+
+
+
+