diff --git a/bin/qcode.bash b/bin/qcode.bash
index b7b1a4f..07095dc 100755
--- a/bin/qcode.bash
+++ b/bin/qcode.bash
@@ -1,6 +1,47 @@
 #!/usr/bin/env bash
-jq "keys[]" q-codes.json \
-  | sort -R \
-  | head -n 1 \
-  | xargs -I "%" jq '"%" as $qcode | [.[$qcode],$qcode][]' q-codes.json \
-  | more -4
+
+UPCURSOR_CLEAR_ANSI="\033[1A\033[K"
+
+select_random_drill() {
+  local drill
+  drill=$(jq 'keys[]' q-codes.json \
+    | sort -R \
+    | head -n 1 \
+    | xargs -I "%" jq "\
+        \"%\" as \$qcode \
+        | .[\$qcode] as \$qobj \
+        | {qcode: \$qcode, question: \$qobj.question, answer: \$qobj.answer}" \
+      q-codes.json
+  )
+  echo "$drill"
+}
+
+run_drill() {
+  echo -e "What is the question called by $(echo "$1" | jq --color-output "\"\(.qcode)?\"")?"
+  read -r -p "Press Enter to Reveal Answer"
+  echo -e "$(echo "$UPCURSOR_CLEAR_ANSI")It is: $(echo "$1" | jq --color-output '.question')"
+
+  echo ""
+
+  echo -e "What is the answer called by $(echo "$1" | jq --color-output ".qcode")?"
+  read -r -p "Press Enter to Reveal Answer"
+  echo -e "$(echo "$UPCURSOR_CLEAR_ANSI")It is: $(echo "$1" | jq --color-output '.answer')"
+
+  echo ""
+}
+
+main() {
+  local random_drill
+  random_drill="$(select_random_drill)"
+  run_drill "$random_drill"
+}
+
+figlet -f nancyj-fancy "Q-CoDe Training" -c -t -os
+
+echo ""
+echo -e "To exit drills, use \e[33mctrl-c\e[0m."
+echo ""
+
+while true; do
+  main
+done;