Skip to content
Switch branches/tags
This branch is up to date with master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

@risd/wh Overview

This repository is for the Webhook command line tools. There are several other repositories in Webhook's core.

These @risd forks of the project are currently maintained for the purposes of the Rhose Island School of Design. These forks have been developed with the intention of extending the orignal webhook platform to accomodate the team's needs. The work has been done in an open-source friendly way, keeping the details of any specific platform to the job of configuration, making it possible for others to piggy back on the work, given that they publish their own self-hosted instance.

If you are interested in self-hosting, check the instructions here, per the original Webhook project.

Webhook Server

This repository contains the code needed to run a Webhook server.

The Webhook Server runs several workers and web servers that are used in conjuction with the webhook-cms and webhook tools to generate static sites.

The workers handle things such as: Generating static sites on demand, uploading static sites to cloud storage, inviting users to work on sites, backing up data periodically, etc.

The web server handles things such as: Uploading images, searching using elastic search, and uploading sites to the workers.


Install node & npm, beanstalkd & memcached.

When all are available on your path, npm install.

A .env file that includes the values outlined in .env.example is expected in order to run in development and production.


These entries will configure Google Cloud usage. The GOOGLE_KEY_FILE location can be defined by the path to the file produced by running grunt extractKey=gcloud.json, where gcloud.json is the Google Service Account JSON file associated with the project.


DEVELOPMENT_DOMAIN is used to configure tests. It represents the domain where sites are published to when they are created. @risd/wh deploys can be used to add more deploy targets to a site once it has been created.


These entries will configure an Elastic Search server, used to power search within individual webhook CMS instances across that site's content.


These entries will configure Mailgun, used to send emails that invite users to collaborate on a site. FROM_EMAIL is the email that will be used for sending the emails.


These entries will configure Firebase Admin SDK usage. FIREBASE is the name of the Firebase instance. FIREBASE_SERVICE_ACCOUNT_KEY is a file path to the JSON admin credentials.


These entries will configure the Google Cloud Storage buckets used to manage the site. SITES_BUCKETS stores site templates. BACKUPS_BUCKET stores daily backups for the entire Firebase database. UPLOADS_BUCKET stores media that is uploaded to any of site's CMS. In addition to these buckets, each site that is published gets its own bucket, with the name of the site.


These entries will configure ClouldFlare, used to create CNAMEs for any domain that matches on CLOUDFLARE_DOMAINS. CLOUDFLARE_DOMAINS is expected to be an array of objects that contain a domain & cname key ([{ domain, cname }]). The domain key will be passed into minimatch along with the domain of the site that is currently being built, if the result is true, a CNAME is made within CloudFlare, with the value set in the cname key of the object. If you can use CloudFlare for DNS management, the build and deploy process will support it. Otherwise, leave CLOUDFLARE_DOMAINS as an empty array to not use it.


These entries will configure Fastly, used as the CDN for any domain that matches on FASTLY_DOMAINS. FASTLY_DOMAINS is expected to be an array of objects that contain a domain, address & forceSSL key ( [{ domain, address, forceSSL }] ). The domain key will be passed into minimatch along with the domain of the site that is currently being built, if the result is true, the domain will be added to the Fastly service. The address value will be used when purging the cache for the service, this should be the IP of the Fastly service. The forceSSL key is a boolean that will determine if the domain should be configured to use SSL.


These entries will configure libs/builder.js, BUILDER_MAX_PARALLEL will determine how many grunt build-{page,template} commands will be run concurrently.

With everything in place, npm run dev will start all the processes as defined in


Open Source Repo of Webhook-Server



No packages published