diff --git a/app/styles/courses/mock1/course-details.sass b/app/styles/courses/mock1/course-details.sass
index 42cacf48e..813180fc9 100644
--- a/app/styles/courses/mock1/course-details.sass
+++ b/app/styles/courses/mock1/course-details.sass
@@ -1,5 +1,17 @@
 #course-details-view
 
+  .concept-completion-container
+    position: relative
+    .concept-completion-background
+      position: absolute
+      height: 100%
+      left: 0px
+      top: 0px
+      background-color: blue
+      opacity: 0.25
+    .concept-completed-foreground
+      font-size: 12pt
+
   #editDescriptionModal .modal-dialog
     background-color: white
 
diff --git a/app/templates/courses/mock1/course-details.jade b/app/templates/courses/mock1/course-details.jade
index bf2715cf7..06e9d86c5 100644
--- a/app/templates/courses/mock1/course-details.jade
+++ b/app/templates/courses/mock1/course-details.jade
@@ -5,7 +5,6 @@ block content
   //- DO NOT localize / i18n
 
   div TODO: fix ugly tabs
-  div TODO: aggregate student progress
   div TODO: student level progress popups
   div
     span *UNDER CONSTRUCTION, send feedback to
@@ -91,6 +90,18 @@ block content
     if !studentMode
       .tab-pane.active#progress(role='tabpanel')
         if instance.students
+          h3 % Completed by Class
+          table.table.table-condensed
+            each concept in courseConcepts
+              - var conceptCompletion = Math.round(parseFloat(conceptsCompleted[concept]) / instance.students.length * 100)
+              if isNaN(conceptCompletion)
+                - conceptCompletion = 0
+              tr
+                td.concept-completion-container
+                    span.concept-completed-foreground(data-i18n="concepts." + concept)
+                    span.spl - #{conceptCompletion}%
+                    span.concept-completion-background(style="width:#{conceptCompletion}%;")
+          br
           table.table.table-condensed
             thead
               tr
diff --git a/app/views/courses/mock1/CourseDetailsView.coffee b/app/views/courses/mock1/CourseDetailsView.coffee
index fe68443da..3cc3281df 100644
--- a/app/views/courses/mock1/CourseDetailsView.coffee
+++ b/app/views/courses/mock1/CourseDetailsView.coffee
@@ -39,6 +39,14 @@ module.exports = class CourseDetailsView extends RootView
     context.userLevelStateMap = @userLevelStateMap ? {}
     context.showExpandedProgress = @course.levels.length <= 30 or @showExpandedProgress
     context.studentMode = @options.studentMode ? false
+
+    conceptsCompleted = {}
+    for user of context.userConceptsMap
+      for concept of context.userConceptsMap[user]
+        conceptsCompleted[concept] ?= 0
+        conceptsCompleted[concept]++
+    context.conceptsCompleted = conceptsCompleted
+
     context
 
   initData: ->