Web dashboard app that presents COVID-19 infection and death counts by U.S. county, search interface via ZipCode. Written in Python using Flask, javascript, bootstrap CSS.
Uses the Mulesoft COVID-19 APIs. Note there are some known problems with this API at time of writing. For instance, it returns no data for zipcodes in NYC (e.g. 10001, 10005).
Population data gathered from the U.S. Census Bureau Population Estimate API.
This is a straightfoward Python Flask application which can be run in several ways including locally via python, as a Docker container, or in Google Cloud Run.
From the root dir of the app:
$ python app.py
The app will be available on localhost port 8080 (e.g., http://0.0.0.0:8080
)
From the root dir of the app:
$ docker build -t uscovidstats . && docker run --rm -p 8080:8080 -e PORT=8080 uscovidstats
The app will be available on localhost port 8080 (e.g., http://0.0.0.0:8080
)
- OR -
From the root dir of the app:
$ gcloud builds submit . --config=cloudbuild.yaml
The build results will provide a unique URL for the app.
Prerequisites:
- The Cloud Build, Cloud Run, and Secret Manager APIs must be enabled, and Cloud Build must be granted permission to administrate Cloud Run (visit Cloud Build Service account permissions to grant this permission).
- A Cloud Storage bucket for Terraform state must exist, named "$PROJECT_ID-tf-state".
- The Terraform builder image must be available in your project:
- Clone the builder
- Run
gcloud builds submit --substitutions=_TERRAFORM_VERSION="0.15.5",_TERRAFORM_VERSION_SHA256SUM="3b144499e08c245a8039027eb2b84c0495e119f57d79e8fb605864bb48897a7d"
- The GitHub CLI builder image
- Clone and build/push
- Configure token secret as describedin
github
builder README
Geolocation is done by IP address (using ip-api.com). When testing locally, your external IP may not be reported to the app, so set the DEV_EXT_IP
to your external IP address in your dev environment or in the Dockerfile.
This is my first github project so feel free to submit recommendations via PR, or shoot me a message. This project is not affiliated or sponsored by Alphabet or Google.