Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
88 lines (59 sloc) 2.57 KB


Get ready to 📖.


Basically grab a version of node with your favorite node version manager that lines up with what's in .node-version and then:

npm install
npm run dev
open http://localhost:8080


Variable Description
PORT Port on which to bind the FE server or dev server.
NODE_ENV Set to production to disable development features and enable code minification in the build. Otherwise leave undefined for development.

Basic styles can be controlled by tinkering with theme.js.


Basic setup. Runs eslint against eslint-config-metalab for basic sanity checking and then verifies the page is valid amp using a small script and amphtml-validator.

npm test

You can also run the checks individually:

npm run test:lint
npm run test:amplint

Code is formatted using prettier because that's what you should be doing.

Folder/App Structure

A basic overview:

 - src [source files]
   - component [react components]
   - server [server-side / api code]
   - util [utility functions]
   - theme.js [app theme]
 - static [assets served under /static]

A more complete breakdown of this structure and a variety of the choices made herein can be found in the following articles:


This app is meant to be deployed to heroku, though it would probably happily exist in other environments. The node buildpack will run the following:

npm install

And then start the app with:

npm start

The generated code lives in /dist and this information should be enough to self-host in just about any other environment (Docker, bare metal, etc.).


There's a fairly glaring WebKit issue right now with the sticky-based animations. Currently anything with overflow: hidden blows up sticky elements, so there are areas where the page simply overflows on mobile and it's been difficult make it work otherwise. Related:

You can’t perform that action at this time.