Skip to content

Repository files navigation

epicc

Streamlit webapp for epiworld.

Please install dependencies with a dependency manager capable of reading pyproject.toml files (most modern solutions will work). For example, with uv:

uv sync

Please note that this step is not required if working in a containerized context.

You may then run with:

uv run -m streamlit run app.py

Launch the App online

Click below to open the live Streamlit application, as currently deployed:

https://epiworldpythonapp.streamlit.app/

(If the app is still deploying, it may take a few seconds to load.)

Please follow instructions in your console for loading development versions.

Versioning and release notes

The project follows Semantic Versioning. The current version appears next to the title in the app header, and the What's new button links to the latest release.

Release notes are not kept in the repository. GitHub generates them from the pull requests merged since the previous release, so the only thing that shapes them is how you title your PRs. To cut a release:

make bump BUMP=minor          # or BUMP=patch / BUMP=major, or VERSION=1.2.3

That updates the version in src/epicc/__init__.py and pyproject.toml, then prints the commands to finish:

git commit -am "Release v0.2.0"
git tag -a v0.2.0 -m "v0.2.0"
git push --follow-tags

Pushing the tag triggers release.yml, which publishes the GitHub release with generated notes. The app's What's new link then points at it with no further action. make test fails if pyproject.toml and epicc.__version__ ever disagree, and the release workflow refuses a tag that does not match the source.

Branding and themes

The app's identity is configured in src/epicc/config/default.yaml. This keeps the application title, logos, font stack, and light/dark color palettes together in one YAML file.

app:
  title: Epidemiological Cost Calculator (EPICC)

brand:
  name: ForeSITE
  font_family: '"Proxima Nova", "Avenir Next", Avenir, "Helvetica Neue", Arial, sans-serif'
  logo:
    path: web/assets/foresite-primary-rgb.png
    dark_path: web/assets/foresite-white-rgb.png
    alt_text: ForeSITE logo
    mime_type: image/png
    width_px: 220
  colors: # Light mode
    primary: "#A60F2D"
    on_primary: "#FFFFFF"
    accent: "#FDB921"
    text: "#4E4E4E"
    muted_text: "#6B6E72"
    canvas: "#F7F7F5"
    surface: "#FFFFFF"
    border: "#D9D9D6"
    chart_palette: ["#A60F2D", "#FDB921", "#4E4E4E", "#6B6E72"]
  dark_colors: # Dark mode
    primary: "#FDB921"
    on_primary: "#231F20"
    accent: "#A60F2D"
    text: "#F3F1ED"
    muted_text: "#B8B3AD"
    canvas: "#171717"
    surface: "#242424"
    border: "#4E4E4E"
    chart_palette: ["#FDB921", "#A60F2D", "#F3F1ED", "#B8B3AD"]

colors controls the light palette and dark_colors controls the dark palette. Each needs the same semantic fields; on_primary is the text/icon color used on primary buttons. dark_colors and logo.dark_path are optional, so existing brand configurations continue to work and fall back to the light values.

Visitors choose System, Light, or Dark from Streamlit's menu in the top-right corner. The app mirrors that choice automatically, including switching to logo.dark_path when dark mode is active.

After changing branding, rebuild the static app before deployment:

make build

Releases

Packages

Used by

Contributors

Languages