Need help with constable?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

514 Stars 56 Forks GNU Affero General Public License v3.0 983 Commits 27 Opened issues


Better company announcements

Services available


Need anything else?

Contributors list


Constable is part of the thoughtbot Elixir family of projects.

Constable is a Phoenix app for posting announcements and having discussions. To learn more about Phoenix, check out Programming Phoenix

Starting the Console


to start the console. Use
bin/console staging|production
to start the console in staging or production.

Reactivating Users

Users are deactivated if they leave thoughtbot. Sometimes someone with the same first name joins thoughtbot later and inherits the deactivated email so we need to reactivate the email. There are two ways to reactivate a user:

  1. From the browser:

    • Visit
    • Click on Activate the user
  2. From the console:

Developing the Application

To set up your development environment, there are a few steps you'll need to follow.

Install Required Dependencies

You need to have Erlang, Elixir, Node and ChromeDriver installed. This section describes the easiest way to do that.

If you're on OS X and using Homebrew, run

brew install node
to get nodejs.

Once node is installed, run

npm -g install chromedriver

Finally, install the asdf package manager, which will read the

file from the repo to install the correct versions of Erlang and Elixir. Downloading and installing Erlang might take a while, so be patient on first run. You should be able to run
asdf install
from the project directly to install the required packages.

Configure Your Local Environment


  # Will grab all Elixir and NPM dependencies and then setup the database
  $ bin/setup

Set up local data and env vars for Google OAuth

You'll want to have certain environment variables and user data set up so you can log into the app locally with your thoughtbot email.


, there are three values that say "get-from-staging" - CLIENTID, CLIENTSECRET, and HUBAPITOKEN. Replace these values with the ones from staging. Find them by running
heroku config -r staging

You'll also want to grab the STAGINGDBENVVAR from staging. Run: `heroku pg:pull STAGINGDBENVVAR constableapidevelopment -r staging`, where the value of STAGINGDBENV_VAR is what you got from the heroku config. This will copy the data over so you have example data to work with, including your already existing user account.

Starting the Phoenix Server

Once all the dependencies have been installed, you can start the Phoenix server with:

  $ mix phx.server

Email Templates

You can edit the email contents from


You can preview templates by going to

. You can find a list of templates in the

Viewing Sent Emails

You can view sent emails in development by going to




mix test

Static Analysis


mix dialyzer
to run the analysis. The lookup table will be created by this process. If your dependencies or your elixir version change, delete
and run
mix dialyzer.plt
to rebuild it.

There are still a lot of warnings that are not fixable, but occasionally some real errors are found by dialyzer


  1. If you have not run
    yet, run it to add the correct git remotes.
  2. Run
    bin/deploy (staging|production)

Review Apps

Constable is setup with support for Heroku Review Apps.

Google enforces a white list of OAuth redirect URLs, so for review apps we redirect the OAuth flow through the Constable oauth redirector which then redirects back to the correct review app. This is configured with the

environment variable.


Constable is Copyright (c) 2015-2016 Blake Williams, Paul Smith, and thoughtbot, inc. It is free software, and may be redistributed under the AGPL license detailed in the LICENSE file.

About thoughtbot


Constable is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We love open source software, Elixir, and Phoenix. Work with thoughtbot's Elixir development team to design, develop, and grow your product.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.