Skip to content

epicollect/epi-collect

Repository files navigation

Epi-Collect uses location data from Google Takeout to build an open source contact tracing dataset.

Website β€’ Slack β€’ Roadmap β€’ FAQ β€’ Privacy

Current Engineering Milestone Current Researchers
Pre-launch (2 active contributors) Become our first researcher
  • Establish privacy-respecting best practices for data donation
  • Create a community-driven dataset standard for contact tracing
  • Enable researchers and city health departments to investigate the spread of COVID-19 and other diseases using donated data
Is my data kept safe and private?
Yes, and we empathize with your concern. The biggest problem with recent contact tracing solutions is that they may be a gateway to surveillance capitalism in the name of public safety. There is a shrinking window of opportunity available today to set a precedent for privacy-respecting contact tracing. As an open source project with all documentation in the open, Epi-Collect is in a unique position to do that. No one has scaled open source data donation before, and we're excited to test its potential.

Check out our Privacy living document to see how we think about this and how we hope others will too.
Is my data anonymized?
Yes.

  • We’ve designed our database such that there is no possible way to associate location data with your identity. If you’re an engineer, you can see our very simple database schema here.
  • During data ingestion, we ask users to review every data point and delete those that they believe are personally identifiable. We also give hints about what data points may be personally identifiable.
  • We do not make the dataset available to a researcher unless they pass certain verification requirements.
Please see our Privacy living document for more details.
How do I get access to the data?
Please see our guidance for researchers.

Full FAQ

Setup

Make sure you have yarn and virtualenv installed.

git clone git@github.com:epicollect/epi-collect.git
cd epi-collect
yarn install
virtualenv --python=python3.6 venv
./venv/bin/activate
source ./venv/bin/activate
pip install -r requirements.txt

Run for development

To start:

make run-dev
export PYTHONPATH="$PWD"
make run-db-local

To stop:

make stop-dev
make stop-db-local

If you want to test using the docker containers (which is closer to deployment):

make build-docker
make run-docker-local

Local and deployment structure

The frontend is built in React with TypeScript. We use React Bootstrap for the UI.

The backend is built using Flask and uses GeoAlchemy (GIS extension on top of SQLalchemy) to communicate with a PostGIS database for persistent storage.

Local

Locally you can run in two ways:

  1. Using yarn and flask (make start-dev), in which case all traffic on /api is routed to flask. In this setup, make run-db-local will spin up a local PostGIS instance with the correct schema.

  2. Using docker-compose in which case the same docker containers as in the actual deployment are created, but they are span up locally using docker-compose. The database doesn't work in this setup.

Testing

Manual

A Google Takeout zip file with location data is located unter tests/data/sample_location_history.zip.

Automatic

See tests/test_api.py.

Deployment

We deploy using make deploy (you need AWS access for this) which builds the following docker containers:

  1. nginx container to serve the frontend React app.
  2. gunicorn container to serve the Python backend.

These are pushed to Docker Hub. We then deploy this to AWS Elastic Beanstalk, where we have a nginx reverse proxy behind AWS' load balancer, which routes all traffic on /api to the gunicorn container and all other traffic to the frontend nginx container.

There is also a PostGIS database running in AWS RDS (Postgres with PostGIS extensions enabled).

About

🌏🌎🌍 Liberate Google Takeout location data for epidemiological research and local contact tracing https://epi-collect.org

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published