diff --git a/layouts/about-release-schedule.hbs b/layouts/about-release-schedule.hbs
new file mode 100644
index 0000000000000..f4a1e657aaf77
--- /dev/null
+++ b/layouts/about-release-schedule.hbs
@@ -0,0 +1,35 @@
+
+
+{{> html-head }}
+
+
+ {{> header }}
+
+
+
+
+ {{> navigation key='about'}}
+
+
+ {{ title }}
+
+
+
+
+
+ {{{ release-schedule }}}
+
+
+ {{ schedule-footer }}
+
+
+
+ {{{ contents }}}
+
+
+
+
+
+ {{> footer }}
+
+
diff --git a/layouts/css/page-modules/_release-schedule.styl b/layouts/css/page-modules/_release-schedule.styl
new file mode 100644
index 0000000000000..07f4239cd6892
--- /dev/null
+++ b/layouts/css/page-modules/_release-schedule.styl
@@ -0,0 +1,20 @@
+table.release-schedule
+ width 100%
+ font-size 1rem
+ border 1px solid $light-gray2
+
+ td
+ padding 5px
+
+ > thead
+ font-weight 600
+ text-align left
+
+ > tbody
+ border-top 1px solid $light-gray2
+
+ tr:nth-child(odd)
+ background-color $light-gray3
+
+ tr:nth-child(even)
+ background-color $white
diff --git a/layouts/css/styles.styl b/layouts/css/styles.styl
index 4152bf149b577..022e989f411f7 100644
--- a/layouts/css/styles.styl
+++ b/layouts/css/styles.styl
@@ -17,6 +17,7 @@
@import 'page-modules/_scrollToTop'
@import 'page-modules/_anchorLinks'
@import 'page-modules/_prev-next-navigation'
+@import 'page-modules/_release-schedule'
.intro
margin-top 140px
diff --git a/locale/en/about/release-schedule.md b/locale/en/about/release-schedule.md
new file mode 100644
index 0000000000000..c08383879bc13
--- /dev/null
+++ b/locale/en/about/release-schedule.md
@@ -0,0 +1,18 @@
+---
+layout: about-release-schedule.hbs
+title: Release Schedule
+statuses:
+ maintenance: 'Maintenance LTS'
+ active: 'Active LTS'
+ current: 'Current'
+ pending: 'Pending'
+columns:
+ - 'Release'
+ - 'Status'
+ - 'Codename'
+ - 'Initial Release'
+ - 'Active LTS Start'
+ - 'Maintenance LTS Start'
+ - 'End-of-life'
+schedule-footer: Dates are subject to change.
+---
diff --git a/locale/en/site.json b/locale/en/site.json
index c46ee8a75b196..1eb905a26db10 100644
--- a/locale/en/site.json
+++ b/locale/en/site.json
@@ -49,6 +49,10 @@
"link": "about/releases",
"text": "Releases"
},
+ "release-schedule": {
+ "link": "about/release-schedule",
+ "text": "Release Schedule"
+ },
"resources": {
"link": "about/resources",
"text": "Resources"
diff --git a/package.json b/package.json
index 501fc3f67101b..d18f3049c3f34 100644
--- a/package.json
+++ b/package.json
@@ -8,8 +8,9 @@
"serve": "node server.js",
"external:survey": "rsync -avz --exclude 'node_modules*' --exclude 'package*' external/survey-2018/ build/en/user-survey-report",
"gzip": "find build -type f \\( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.xml' -o -name '*.json' \\) -exec gzip -kf9 {} \\;",
- "deploy": "npm run build && npm run external:survey && npm run gzip",
+ "deploy": "npm run load-schedule && npm run build && npm run external:survey && npm run gzip",
"load-versions": "node scripts/load-versions.js",
+ "load-schedule": "curl -sS https://raw.githubusercontent.com/nodejs/Release/master/schedule.json -o source/schedule.json",
"start": "npm run serve",
"test": "npm run test:lint && npm run test:unit && npm run test:smoke",
"test:lint": "standard && htmllint **/*.hbs && stylint layouts/css",
diff --git a/scripts/helpers/release-schedule.js b/scripts/helpers/release-schedule.js
new file mode 100644
index 0000000000000..6e1f021bca2a9
--- /dev/null
+++ b/scripts/helpers/release-schedule.js
@@ -0,0 +1,62 @@
+'use strict'
+
+const schedule = require('../../source/schedule.json')
+
+const today = new Date()
+const datify = (release, key) => new Date(schedule[release][key])
+
+module.exports = context => {
+ const statuses = context.data.root.statuses
+
+ const header = context.data.root.columns
+ .map(column => `