diff --git a/_config.yml b/_config.yml
index e9d5e5862dcd13a5e332ce8295cc5f3f80859f39..feca746d30cbb95323a9c22531d929e14a984165 100644
--- a/_config.yml
+++ b/_config.yml
@@ -35,6 +35,7 @@ footer_content: 'Kevin Lin &copy; 2021 <a rel="license" href="http://creativecom
 # Collections for website data
 collections:
   staffers:
+  modules:
 # Default layouts for each collection type
 defaults:
   - scope:
@@ -45,6 +46,11 @@ defaults:
       height: 300
       subpath: '/assets/images/'
       width: 300
+  - scope:
+      path: ''
+      type: modules
+    values:
+      layout: module
 
 compress_html:
   clippings: all
diff --git a/_layouts/module.html b/_layouts/module.html
index fba9c4c70698ffe03722c09718821ca2b5045210..a4293c060c2389e16abadf8cd0f0f71b4409bc90 100644
--- a/_layouts/module.html
+++ b/_layouts/module.html
@@ -1,4 +1,4 @@
-<h2 class="fs-4" id="{{ page.title | slugify }}" >{{ page.title }}</h2>
+<h3 id="{{ page.title | slugify }}" >{{ page.title }}</h3>
 <div class="module">
   {{ content }}
 </div>
diff --git a/_modules/0-abstractions.md b/_modules/0-abstractions.md
new file mode 100644
index 0000000000000000000000000000000000000000..2eccb51d3b546fca35164989792a1fd81968996a
--- /dev/null
+++ b/_modules/0-abstractions.md
@@ -0,0 +1,17 @@
+---
+title: Abstractions
+---
+
+#### Data Structures
+
+6/21
+: **Introduction**
+
+6/23
+: **Search Trees**
+
+6/24
+: **Sec**{: .label .label-purple }**Data Structures**
+
+6/25
+: **Asymptotic Analysis**
diff --git a/_modules/1-autocomplete.md b/_modules/1-autocomplete.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ca8ebc1175efc844424867ae40825ecaab962ab
--- /dev/null
+++ b/_modules/1-autocomplete.md
@@ -0,0 +1,32 @@
+---
+title: Autocomplete
+---
+
+#### Algorithm Analysis
+
+6/28
+: **Recurrence Relations**
+: **Prj**{: .label .label-red }**Autocomplete**
+
+6/30
+: **2-3 Trees**
+
+7/1
+: **Sec**{: .label .label-purple }**Algorithm Analysis**
+
+7/2
+: **Left-Leaning Red-Black Trees**
+
+#### Balanced Search Trees
+
+7/5
+: *Holiday*
+
+7/7
+: **Binary Heaps**
+
+7/8
+: **Sec**{: .label .label-purple }**Balanced Search Trees**
+
+7/9
+: **Design Justice**
diff --git a/_modules/2-priority-queues.md b/_modules/2-priority-queues.md
new file mode 100644
index 0000000000000000000000000000000000000000..496ea7b0d23a329524033a74fb5b31a9005c0e0e
--- /dev/null
+++ b/_modules/2-priority-queues.md
@@ -0,0 +1,32 @@
+---
+title: Priority Queues
+---
+
+#### Heaps and Hashing
+
+7/12
+: **Affordance Analysis**
+: **Prj**{: .label .label-red }**Priority Queues**
+
+7/14
+: **Hash Tables**
+
+7/15
+: **Sec**{: .label .label-purple }**Heaps and Hashing**
+
+7/16
+: **Memory and Caching**
+
+#### Graph Data Type
+
+7/19
+: **Graphs**
+
+7/21
+: **Graph Traversals**
+
+7/22
+: **Sec**{: .label .label-purple }**Graph Data Type**
+
+7/23
+: **Shortest paths**
diff --git a/_modules/3-shortest-paths.md b/_modules/3-shortest-paths.md
new file mode 100644
index 0000000000000000000000000000000000000000..aeccdd43669528330708a33b3a0dd600a5fa384f
--- /dev/null
+++ b/_modules/3-shortest-paths.md
@@ -0,0 +1,32 @@
+---
+title: Shortest Paths
+---
+
+#### Graph Algorithms
+
+7/26
+: **Reduction Algorithms**
+: **Prj**{: .label .label-red }**Shortest Paths**
+
+7/28
+: **Minimum Spanning Trees**
+
+7/29
+: **Sec**{: .label .label-purple }**Graph Algorithms**
+
+7/30
+: **Dynamic Programming**
+
+#### Sorting Algorithms
+
+8/2
+: **Comparison Sorts**
+
+8/4
+: **Recursive Sorts**
+
+8/5
+: **Sec**{: .label .label-purple }**Sorting Algorithms**
+
+8/6
+: **Algorithm Bounds**
diff --git a/_sass/custom/module.scss b/_sass/custom/module.scss
index 6c1ab68d0983b6cdc115bfa4bb80386b3eaa6d1a..97a1839588a089490d407d1f7bab057137a89e3e 100644
--- a/_sass/custom/module.scss
+++ b/_sass/custom/module.scss
@@ -13,11 +13,15 @@
     }
   }
 
+  h4 {
+    @extend .fs-3;
+  }
+
   >dl {
     border-bottom: $border $border-color;
     border-top: $border $border-color;
     display: grid;
-    grid-template-columns: max-content 1fr;
+    grid-template-columns: 1fr 6fr;
     margin: $sp-2 (-$sp-4);
 
     &:first-child {
@@ -28,10 +32,6 @@
       margin-bottom: 0;
     }
 
-    @include mq(lg) {
-      grid-template-columns: 1fr 7fr;
-    }
-
     %module-item {
       margin: 0;
       padding: $sp-2;
diff --git a/index.md b/index.md
index 97480ab976b2efb057bc6cb5fa50c7e14bb93a3b..80e50ababf0343cf44572015646b366663204838 100644
--- a/index.md
+++ b/index.md
@@ -43,6 +43,12 @@ In the first 7 weeks, we'll study 3 interfaces and 6 applications of data struct
 
 In the final 2 weeks, we'll wrap up the course by reflecting on our journey through computing.
 
+## Schedule
+
+{% for module in site.modules %}
+{{ module }}
+{% endfor %}
+
 ## Values and Policies
 
 The education you receive in this course can help prepare you for programming jobs, but this isn't the only purpose for learning computer science.[^1] Education is not only about yourself and your personal gain, but also about all of us and our capacity to live together as a community.