Human vaccine tracker.
Production vaccine and disease data are serialised and committed to the
repository, file name is vaccine-disease-data.json.
To load all vaccine and disease data, run:
python manage.py loaddata --app main vaccine-disease-data.jsonNote: The above command needs to run after the migration command.
To dump/serialise all vaccine and disease data, run:
python manage.py dumpdata main.Vaccine main.Disease > vaccine-disease-data.jsonFor each branded vaccine product, first_authorized_year records the earliest
documented regulatory authorization found anywhere in the world.
first_authorized_region identifies the authorizing country or region, and
first_authorization_source_url links directly to the evidence for that year.
- Record the authorization of the exact branded product, not its underlying vaccine technology or an earlier related formulation.
- Treat renamed aliases as one product and use the earliest authorization for that product.
- Do not substitute a WHO prequalification date for an authorization date.
- Count emergency, conditional, temporary, special-access, and restricted-use authorizations when they legally allowed the named product to be used.
- Do not count a WHO EUL/prequalification decision or an EMA scientific opinion as a national or regional authorization by itself.
- Prefer regulator records and approval letters, followed by official product documents, manufacturer announcements, and peer-reviewed historical sources.
- Leave all three fields empty when the year cannot yet be supported by a reliable source.
The read-only API exposes the complete database as JSON and CSV:
GET /api/docs/— human-readable API documentationGET /api/— API index and endpoint discoveryGET /api/vaccines/— vaccine JSON collectionGET /api/vaccines.csv— vaccine CSV downloadGET /api/diseases/— disease JSON collectionGET /api/diseases.csv— disease CSV download
Append ?download=1 to either JSON collection to receive it as a named file
attachment. JSON responses contain schema_version, count, and results.
Related vaccines and diseases are nested as compact objects. Multi-value CSV
fields use | as their delimiter. All API responses allow cross-origin GET
requests and are cached publicly for five minutes.
This is a standard Django application with uv.
- Create database tables with:
uv run manage.py migrate- Run development server with:
uv run manage.py runserverRun Python formatting with:
uv run ruff formatRun Python linting with:
uv run ruff check --fixEvery commit on branch main auto-deploys using GitHub Actions. To deploy manually:
cd ansible/
cp .envrc.example .envrc
uv run ansible-playbook playbook.yaml -vThis software is licensed under the MIT license. For more information, read the LICENSE file.