diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000..156040a822
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+// Place your settings in this file to overwrite default and user settings.
+{
+ "workbench.editor.showTabs": true
+}
\ No newline at end of file
diff --git a/01 - JavaScript Drum Kit/drumkit.js b/01 - JavaScript Drum Kit/drumkit.js
new file mode 100644
index 0000000000..5dd22c9c59
--- /dev/null
+++ b/01 - JavaScript Drum Kit/drumkit.js
@@ -0,0 +1,39 @@
+// Add playSounn to every keydown event.
+window.addEventListener('keydown', playSound);
+
+// For each key, add an event listener to remove playing
+// CSS class.
+const keys = document.querySelectorAll('.key');
+keys.forEach(key => key.addEventListener('transitionend', removePlayingCss));
+
+function playSound(e) {
+ // Get key code from the event.
+ const keyCode = e.keyCode;
+
+ // Select elements that corresponds to the key code.
+ const audio = document.querySelector(`audio[data-key="${keyCode}"]`);
+ const key = document.querySelector(`.key[data-key="${keyCode}"]`);
+
+ // Stop execution if there's no matching element.
+ if (!audio) {
+ return;
+ }
+
+ // Rewind to start and play (such that you can hit it repeatedly).
+ audio.currentTime = 0;
+ audio.play();
+
+ // Add playing CSS class to key element.
+ key.classList.add('playing');
+}
+
+function removePlayingCss(e) {
+ // Target a single transition event (transform) and
+ // remove class when we get it.
+ if (e.propertyName !== 'transform') {
+ return;
+ } else {
+ // this is equal to the element the event is on (i.e. the key).
+ this.classList.remove('playing');
+ }
+}
\ No newline at end of file
diff --git a/01 - JavaScript Drum Kit/index-START.html b/01 - JavaScript Drum Kit/index-START.html
index 4070d32767..10251b12b5 100644
--- a/01 - JavaScript Drum Kit/index-START.html
+++ b/01 - JavaScript Drum Kit/index-START.html
@@ -57,10 +57,7 @@
-
-
+