levelTeam communication optimized for deep work
Level
Project Status
Level began with the ambitious idea of solving the problems caused by real-time communication tools. After pouring thousands of hours effort into the cause, I made the tough decision to move on from the project.
This codebase is a full-scale Elixir/Phoenix SaaS application with a single-page app Elm front-end. I hope it will live on as a helpful resource for the community.
— Derrick Reimer, Founder
Developer Setup
You'll need to install the following dependencies first:
Run the bootstrap script to install the remaining dependencies and create your development database:
cd level
script/bootstrap
If your local PostgreSQL install does not have a default postgres user, open the config/dev.secret.exs file and update the credentials. Then, run the bootstrap script again.
Use the script/server command to start up your local server and visit localhost:4000 from your browser.
Installing Node.js
This repository includes a .nvmrc file targeting a specific version of Node that is known to be compatible with all current node dependencies. Things might work with a newer version of Node, but the most guaranteed route is to install Node Version Manager and run nvm install from the project root.
Then, be sure to run script/bootstrap to install node dependencies with the correct version of node.
Running tests and analyses
We have a handful of helper scripts available:
-  
script/elixir-test: runs the Elixir test suite with coveralls -  
script/elm-test: runs the Elm test suite -  
script/test: runs the Elixir and Elm test suites -  
script/static-analysis: runs Credo (Elixir linting), Dialyzer, and Elixir formatter verification -  
script/build: runs all the test suites and static analysis 
Dependencies
The following environment variables must be set in production:
| Variable | Description | 
|---|---|
| AWS | |
AWS_ACCESS_KEY_ID |  
   The AWS access key id for your account (with access to S3). | 
AWS_SECRET_ACCESS_KEY |  
   The AWS secret access key corresponding to the access key id. | 
LEVEL_ASSET_STORE_BUCKET |  
   The name of the S3 bucket in which to store uploaded assets. | 
| Host | |
PORT |  
   The port on which to host the application (typically 80). | 
LEVEL_HOST |  
   The domain on which you are serving the app (used for generating URLs). | 
LEVEL_CDN_HOST |  
   The host for the CDN for serving static assets (like Level's CSS and application JS). | 
LEVEL_MAILER_HOST |  
   The domain via which to send transaction emails (usually same as LEVEL_HOST). |  
  
LEVEL_SECRET_KEY_BASE |  
   A secret key for verifying the integrity of signed cookies. | 
| Database | |
LEVEL_DATABASE_URL |  
   The URL for the PostgreSQL database. | 
LEVEL_POOL_SIZE |  
   The maximum number of database connections each process may consume. | 
| Transactional Email | |
POSTMARK_API_KEY |  
   The API key for Postmark. | 
|  Web Push Notifications See instructions here: https://github.com/web-push-libs/web-push#command-line  |  
  |
LEVEL_WEB_PUSH_PUBLIC_KEY |  
   A VAPID public key. | 
LEVEL_WEB_PUSH_PRIVATE_KEY |  
   A VAPID private key. | 
The following variables are for non-essential external services.
| Variable | Description | 
|---|---|
| Exception Monitoring | |
HONEYBADGER_API_KEY |  
   The API key for Honeybadger.io exception monitoring (Elixir). | 
HONEYBADGER_JS_API_KEY |  
   The API key for Honeybadger.io exception monitoring (JavaScript). | 
| Analytics | |
FATHOM_SITE_ID |  
   The site ID for Fathom Analytics. | 
FULLSTORY_ORG |  
   The organization ID for FullStory. | 
HEAP_ANALYTICS_APP_ID |  
   The app ID for Heap Analytics. | 
| Email Marketing | |
DRIP_ACCOUNT_ID |  
   The account ID for Drip. | 
DRIP_API_KEY |  
   The personal api key for Drip. | 
| Support | |
HELPSCOUT_BEACON_ID |  
   The Beacon ID for Help Scout. | 
Documentation
Run the script/docs to generate and view the project ExDocs locally.
Heroku Deployment (Experimental)
One of our goals is to make self-installation as painless as possible for those who are interested in hosting their own instance.
The relevant configuration files for Heroku live here:
We are aiming to keep seamless Heroku deployment up-to-date, with a few important "alpha software" notes:
- It's possible you may find it broken on master. If you do, please file an issue.
 - As deployment needs grow more complex, it may become no longer feasible to support Heroku deploys. Caveat emptor.
 
Required additional services
In addition to a Heroku account, you'll need the following services to get your Heroku install up and running:
- An AWS account and an S3 bucket for storing file uploads. You'll be asked for AWS API keys and bucket name environment variables during setup.
 - A transactional email provider (we recommend Postmark). You'll be asked for SMTP host, port, username, and password environment variables during setup.
 
Copyright
© 2019 Level Technologies, LLC
Level is source-available software. (license | readme)
