# Getting Started
You'll need access to our Airtable workspace in order to access the bases. Please request access from a member of the Healthy Corners team.
Additionally, you must have been added to the Heroku project as well as the Google project as a collaborator.
# Setup
Requirements
Install
yarn
andNode
using your favorite package manager (we recommend Homebrew (opens new window) for macOS users). We useyarn
instead ofnpm
because that's what the other two apps use, and we want to be consistent.Clone the repo and install dependencies
- Clone this repo using
git clone
- Run
yarn install
in the downloaded repo. This will install all dependencies that are listed inpackage.json
.
- Clone this repo using
Add
.env
We use
.env
as our config file for secrets and API keys. Duplicate.env.example
, name it.env
, and fill in all missing fields.- All Twilio credentials can be found in the Project Info section of the Twilio Console (opens new window).
APPIAN_API_KEY
comes directly from Appian -- ask the Healthy Corners administrators for the key, or ask for someone to contact from the Appian team.- Airtable: if you are the primary developer and have access, use the healthycornersdev account's API key and other relevant information. See Airtable's guide on how to find your API key (opens new window).
TIP
Some of these are specifically for using the
airtable-schema-generator
package.VS Code Setup (
ESLint
andPrettier
)We develop with Visual Studio Code (opens new window) as our editor. It has a packed marketplace of extensions that you can install; the useful ones in our case are a code linter and formatter -
eslint
(searchExtensions
fordbaeumer.vscode-eslint
) andprettier
(searchExtensions
foresbenp.prettier-vscode
), respectively. These are dependent on certaindevDependencies
found inpackage.json
:eslint-plugin-react
,eslint-config-prettier
, etc but should all be installed already viayarn
. The rules for the linter and formatter are in.eslintrc.js
andprettier.config.js
. The configuration for VS Code is shared and enforced across developers for this project; it's found in.vscode/settings.json
.NOTE
We noticed that because VS Code and Prettier (the extension) sometimes conflict with their formatters, formatting can be slightly inconsistent even with the
formatOnSave
option in VS Code'ssettings.json
. See this for more: https://github.com/prettier/prettier-vscode/issues/716 (opens new window). Thus, we runprettier
in a pre-commit hook usinghusky
andlint-staged
.
# Contributing
More details on how the application works in Application Overview.
NOTE
This application is set up with babel-node
to allow import/export
syntax instead of require
syntax. Thus, running .js
files requires yarn babel-node
as a prefix - e.g yarn babel-node index.js
instead of node index.js
.
# Development Lifecycle
Most of the information in the customer/clerk documentation still holds true, with some exceptions:
- There was initially only one developer for this repo, so no PRs were really made, though that can and should change (^:
- This repo does not use
yarnhook
- This repo uses
pretty-quick
instead ofprettier
for the pre-commit hook - This repo doesn't have any fun scripts - just
start
andgenerate-schema
# Working with Airtable
You'll need to fill in REACT_APP_AIRTABLE_API_KEY
with your personal API key once you have access to the workspace. This can be found in your Airtable account overview page (opens new window). You should never commit this key! In the unfortunate event that you do, click "Regenerate API key" on the same page.
First, read through the general "Working With Airtable" page for an introduction to working with Airtable and the airtable-schema-generator
package, which generates custom helper functions based on a specific Airtable base's configuration, or "schema".
In our code, we only ever call functions in request.js
; see utils/storeProducts.js
for example usage of the helper functions.
# Working with Dates
It's a well-known fact that the naive Javascript Date
objects are difficult and can be unreliable. The easiest thing to do is use moment.js (opens new window). Don't waste time (^:
# Interacting with the application
You can reach the API through an HTTP request (we recommend using Postman (opens new window)). All API calls are locked via a HC_SECRET
. This secret key can be found in Heroku's config vars (which should match the local .env
).
Example
Note that you must add the Content-Type: application/json
header. Then, the Body
(select raw
for format) of the request in its expected format:
{
"key": "<HC_SECRET>"
}
# Deploying with Heroku
Follow the instructions here (opens new window) to get set up as a collaborator. NOTE: The Healthy Corners developer Gmail already has an account with access.
# Config vars
Heroku config vars are exposed to the application's code as environment variables. Thus, all necessary variables in the local .env
have been set directly in heroku config
.
WARNING
Please do not add your Airtable email and password to the config vars, as they are only ever used for local development with the airtable-schema-generator
.
You can access or update config vars via the Heroku dashboard.
Notably, the REACT_APP_AIRTABLE_API_KEY
is personal to individual developers; the HC_SECRET
securing POST
routes is also a member of the config variables.
# Deploying
To push new changes and deploy, run
git push heroku main
WARNING
Be sure to push your changes to the canonical repository (typically with git push origin main
) as well as to the Heroku remote.
Once the application is up and running, you will see this on the application homepage:
# Heroku Scheduler
Scheduler is a free add-on for running jobs on your app at scheduled time intervals, much like cron in a traditional server environment.
It's perfect for our particular use case, and is why we deployed with Heroku (recall that this documentation site is hosted on and auto-deploys with Netlify).
This is what the scheduler dashboard (opens new window) looks like:
With the job editor, you can configure how often you want the scheduled job to run. It's currently set to run daily at 5pm eastern time.
# Logentries
Logentries (opens new window) is a free add-on for monitoring your application and viewing logs.
We've installed it because we might want to inspect the console.log
output of the scheduled job. Logentries will also send email notifications when the server crashes.
# References
Deploying
- https://devcenter.heroku.com/articles/deploying-nodejs (opens new window)
- https://devcenter.heroku.com/articles/config-vars (opens new window)
- https://erickar.be/blog/running-a-cron-job-with-node-js-and-heroku (opens new window)
- http://www.modeo.co/blog/2015/1/8/heroku-scheduler-with-nodejs-tutorial (opens new window)