diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..dd84ea7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+ - Version [e.g. 22]
+
+**Smartphone (please complete the following information):**
+ - Device: [e.g. iPhone6]
+ - OS: [e.g. iOS8.1]
+ - Browser [e.g. stock browser, safari]
+ - Version [e.g. 22]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..f14c555
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Ask a question
+ url: https://github.com/kevinlin1/just-the-class/discussions
+ about: Ask questions and discuss with other community members
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..bbcbbe7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..75b2f59
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.gem
+.bundle/
+.jekyll-cache/
+.jekyll-metadata
+.sass-cache/
+Gemfile.lock
+_site/
+node_modules/
+vendor/
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..37f5eaa
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'github-pages', group: :jekyll_plugins
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8892f7f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Kevin Lin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..780ac7e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,46 @@
+# Just the Class
+
+Just the Class is a GitHub Pages template developed for the purpose of quickly deploying course websites. In addition to serving plain web pages and files, it provides a boilerplate for:
+
+- a [course calendar](calendar.md),
+- a [staff](staff.md) page,
+- and a weekly [schedule](schedule.md).
+
+Just the Class is built on top of [Just the Docs](https://github.com/pmarsceill/just-the-docs), making it easy to extend for your own special use cases while providing sane defaults for most everything else. This means that you also get:
+
+- automatic [navigation structure](https://pmarsceill.github.io/just-the-docs/docs/navigation-structure/),
+- instant, full-text [search](https://pmarsceill.github.io/just-the-docs/docs/search/) and page indexing,
+- and a small but powerful set of [UI components](https://pmarsceill.github.io/just-the-docs/docs/ui-components) and authoring [utilities](https://pmarsceill.github.io/just-the-docs/docs/utilities).
+
+## Getting Started
+
+Getting started with Just the Class is simple.
+
+1. Create a [new repository based on Just the Class](https://github.com/kevinlin1/just-the-class/generate).
+1. Update `_config.yml` and `index.md` with your course information.
+1. Configure a [publishing source for GitHub Pages](https://help.github.com/en/articles/configuring-a-publishing-source-for-github-pages). Your course website is now live!
+1. Edit and create `.md` [Markdown files](https://guides.github.com/features/mastering-markdown/) to add your content.
+
+For a few open-source examples, see the following course websites and their source code.
+
+- [CSE 390HA](https://courses.cs.washington.edu/courses/cse390ha/20au/) ([source code](https://gitlab.cs.washington.edu/cse390ha/20au/website)) is an example of a single-page website that centers modules.
+- [CSE 143](https://courses.cs.washington.edu/courses/cse143/20au/) ([source code](https://gitlab.cs.washington.edu/cse143/20au/website)) hosts an entire online textbook with full-text search.
+- [CSE 373](https://courses.cs.washington.edu/courses/cse373/21su/) ([source code](https://gitlab.cs.washington.edu/cse373-root/21su/website) is an example of a simple website combining Markdown pages with generated HTML files.
+
+Share your website with us in the [show and tell discussion](https://github.com/kevinlin1/just-the-class/discussions/categories/show-and-tell)!
+
+Continue reading to learn how to setup a development environment on your local computer. This allows you to make incremental changes without directly modifying the live website.
+
+### Local development environment
+
+Just the Class is built for [Jekyll](https://jekyllrb.com), a static site generator. View the [quick start guide](https://jekyllrb.com/docs/) for more information. Just the Docs requires no special Jekyll plugins and can run on GitHub Pages' standard Jekyll compiler.
+
+1. Follow the GitHub documentation for [Setting up your GitHub Pages site locally with Jekyll](https://help.github.com/en/articles/setting-up-your-github-pages-site-locally-with-jekyll).
+1. Start your local Jekyll server.
+```bash
+$ bundle exec jekyll serve
+```
+1. Point your web browser to [http://localhost:4000](http://localhost:4000)
+1. Reload your web browser after making a change to preview its effect.
+
+For more information, refer to [Just the Docs](https://pmarsceill.github.io/just-the-docs/).
diff --git a/_announcements/week-0.md b/_announcements/week-0.md
new file mode 100644
index 0000000..c90062a
--- /dev/null
+++ b/_announcements/week-0.md
@@ -0,0 +1,8 @@
+---
+title: Week 0 Announcement
+week: 0
+date: 2019-04-01
+---
+
+Hello world!
+{: .fs-5 }
diff --git a/_announcements/week-1.md b/_announcements/week-1.md
new file mode 100644
index 0000000..56dcc8d
--- /dev/null
+++ b/_announcements/week-1.md
@@ -0,0 +1,10 @@
+---
+title: Week 1 Announcement
+week: 1
+date: 2019-04-08
+---
+
+1. Create a [new repository based on Just the Class](https://github.com/kevinlin1/just-the-class/generate).
+1. Configure a [publishing source for GitHub Pages](https://help.github.com/en/articles/configuring-a-publishing-source-for-github-pages). Your course website is now live!
+1. Update `_config.yml` with your course information.
+1. Edit and create `.md` [Markdown files](https://guides.github.com/features/mastering-markdown/) to add your content.
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..89663cb
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,76 @@
+# Welcome to Jekyll!
+#
+# This config file is meant for settings that affect your whole site, values
+# which you are expected to set up once and rarely edit after that. If you find
+# yourself editing these this file very often, consider using Jekyll's data files
+# feature for the data you need to update frequently.
+#
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# 'jekyll serve'. If you change this file, please restart the server process.
+
+# Site settings
+# These are used to personalize your new site. If you look in the HTML files,
+# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on.
+# You can create any custom variable you would like, and they will be accessible
+# in the templates via {{ site.myvariable }}.
+title: Just the Class
+tagline: A Jekyll template for course websites
+description: A modern, highly customizable, responsive Jekyll template for course websites
+author: Kevin Lin
+baseurl: '/just-the-class' # the subpath of your site, e.g. /blog
+url: 'https://kevinl.info' # the base hostname & protocol for your site, e.g. http://example.com
+exclude: ["Gemfile", "Gemfile.lock", "LICENSE", "README.md"]
+
+# Theme settings
+remote_theme: pmarsceill/just-the-docs@v0.3.3
+color_scheme: light
+search_enabled: true
+heading_anchors: true
+permalink: pretty
+aux_links:
+ Kevin Lin:
+ - 'https://kevinl.info'
+ Just the Class on GitHub:
+ - 'https://github.com/kevinlin1/just-the-class'
+footer_content:
+
+# Collections for website data
+collections:
+ staffers:
+ modules:
+ schedules:
+ announcements:
+# Default layouts for each collection type
+defaults:
+ - scope:
+ path: ''
+ type: staffers
+ values:
+ layout: staffer
+ subpath: '/assets/images/'
+ - scope:
+ path: ''
+ type: modules
+ values:
+ layout: module
+ - scope:
+ path: ''
+ type: schedules
+ values:
+ layout: schedule
+ - scope:
+ path: ''
+ type: announcements
+ values:
+ layout: announcement
+
+compress_html:
+ clippings: all
+ comments: all
+ endings: all
+ startings: []
+ blanklines: false
+ profile: false
+
+plugins:
+ - jekyll-seo-tag
diff --git a/_includes/minutes.liquid b/_includes/minutes.liquid
new file mode 100644
index 0000000..c3207ae
--- /dev/null
+++ b/_includes/minutes.liquid
@@ -0,0 +1,20 @@
+{% capture _minutes_workspace %}
+ {% comment %}
+ Return the number of minutes between midnight and the given time string (e.g. '9:30 AM').
+
+ Parameters:
+ `time` (string): the time to convert.
+ {% endcomment %}
+
+ {% assign _time = include.time %}
+ {% assign _hhmm = _time | split: ' ' | first | split: ':' %}
+ {% assign _hours = _hhmm | first | to_integer %}
+ {% assign _minutes = _hhmm | last | to_integer %}
+ {% assign _ampm = _time | split: ' ' | last | upcase %}
+
+ {% if _ampm == 'AM' and _hours == 12 %}
+ {% assign _hours = _hours | minus: 12 %}
+ {% elsif _ampm == 'PM' and _hours != 12 %}
+ {% assign _hours = _hours | plus: 12 %}
+ {% endif %}
+{% endcapture %}{% assign _minutes_workspace = '' %}{{ _hours | times: 60 | plus: _minutes }}
diff --git a/_layouts/announcement.html b/_layouts/announcement.html
new file mode 100644
index 0000000..3451611
--- /dev/null
+++ b/_layouts/announcement.html
@@ -0,0 +1,14 @@
+