diff --git a/project_status.md b/project_status.md
index 12f5c7f..98cea0d 100644
--- a/project_status.md
+++ b/project_status.md
@@ -1,31 +1,31 @@
# Project Status Dashboard
-Last updated: 2025-08-12 06:24:00.832725 (UTC)
+Last updated: 2025-08-12 18:08:28.398259 (UTC)
This dashboard tracks 20 EpiForeSITE projects with GitHub repositories.
-| Project | Contributors | Issues | PRs | Last Commit | Commits | Repository |
-|---------|-------------|--------|-----|-------------|---------|------------|
-| [Attention-Based Models for Snow-Water Equivalent Prediction](https://github.com/Krishuthapa/SWE-Attention) |
(20) | [](https://github.com/Krishuthapa/SWE-Attention/issues) | [](https://github.com/Krishuthapa/SWE-Attention/pulls) | 2024-12-12 ([`e95fe16`](https://github.com/Krishuthapa/SWE-Attention/commits)) | 2 | [Krishuthapa/SWE-Attention](https://github.com/Krishuthapa/SWE-Attention) | |
-| [Bayesian Transmission Model](https://github.com/EpiForeSITE/bayesian-transmission) | 

(20) | [](https://github.com/EpiForeSITE/bayesian-transmission/issues) | [](https://github.com/EpiForeSITE/bayesian-transmission/pulls) | 2025-03-11 ([`f78a06a`](https://github.com/EpiForeSITE/bayesian-transmission/commits)) | 46 | [EpiForeSITE/bayesian-transmission](https://github.com/EpiForeSITE/bayesian-transmission) | |
-| [Branching process outbreak simulator](https://github.com/EpiForeSITE/branching_process/) | 


(20) | [](https://github.com/EpiForeSITE/branching_process//issues) | [](https://github.com/EpiForeSITE/branching_process//pulls) | 2025-05-09 ([`8e9bac5`](https://github.com/EpiForeSITE/branching_process//commits)) | 114 | [EpiForeSITE/branching_process](https://github.com/EpiForeSITE/branching_process/) | |
-| [COVID-19 Jail Model](https://github.com/epimodels/COVID19-Jails) |
(20) | [](https://github.com/epimodels/COVID19-Jails/issues) | [](https://github.com/epimodels/COVID19-Jails/pulls) | 2020-04-30 ([`561491b`](https://github.com/epimodels/COVID19-Jails/commits)) | N/A | [epimodels/COVID19-Jails](https://github.com/epimodels/COVID19-Jails) | |
-| [COVID-19 NCAA Football](https://github.com/epimodels/inperson_sports) |
(20) | [](https://github.com/epimodels/inperson_sports/issues) | [](https://github.com/epimodels/inperson_sports/pulls) | 2020-09-28 ([`9681971`](https://github.com/epimodels/inperson_sports/commits)) | N/A | [epimodels/inperson_sports](https://github.com/epimodels/inperson_sports) | |
-| [Covid Scenario model](https://github.com/HopkinsIDD/COVIDScenarioPipeline) | 



+5 more (20) | [](https://github.com/HopkinsIDD/COVIDScenarioPipeline/issues) | [](https://github.com/HopkinsIDD/COVIDScenarioPipeline/pulls) | 2023-02-21 ([`0c6084b`](https://github.com/HopkinsIDD/COVIDScenarioPipeline/commits)) | N/A | [HopkinsIDD/COVIDScenarioPipeline](https://github.com/HopkinsIDD/COVIDScenarioPipeline) | |
-| [CU Metapopulation](https://github.com/epimodels/Metapopulation_MRSA) | 
(20) | [](https://github.com/epimodels/Metapopulation_MRSA/issues) | [](https://github.com/epimodels/Metapopulation_MRSA/pulls) | 2022-07-14 ([`35bf356`](https://github.com/epimodels/Metapopulation_MRSA/commits)) | N/A | [epimodels/Metapopulation_MRSA](https://github.com/epimodels/Metapopulation_MRSA) | |
-| [epiworld: Fast Agent-Based Epi Models](https://github.com/UofUEpiBio/epiworld) | 



(20) | [](https://github.com/UofUEpiBio/epiworld/issues) | [](https://github.com/UofUEpiBio/epiworld/pulls) | 2025-07-18 ([`f4ecac2`](https://github.com/UofUEpiBio/epiworld/commits)) | 30 | [UofUEpiBio/epiworld](https://github.com/UofUEpiBio/epiworld) | |
-| [epiworld-forecasts: Automatic Disease Forecasting with epiworldR](https://github.com/EpiForeSITE/epiworld-forecasts) | 

(20) | [](https://github.com/EpiForeSITE/epiworld-forecasts/issues) | [](https://github.com/EpiForeSITE/epiworld-forecasts/pulls) | 2025-07-22 ([`e69d887`](https://github.com/EpiForeSITE/epiworld-forecasts/commits)) | 49 | [EpiForeSITE/epiworld-forecasts](https://github.com/EpiForeSITE/epiworld-forecasts) | |
-| [epiworldpy: A python wrapper for epiworld](https://github.com/UofUEpiBio/epiworldpy) |
(20) | [](https://github.com/UofUEpiBio/epiworldpy/issues) | [](https://github.com/UofUEpiBio/epiworldpy/pulls) | 2025-07-23 ([`c829a07`](https://github.com/UofUEpiBio/epiworldpy/commits)) | 5 | [UofUEpiBio/epiworldpy](https://github.com/UofUEpiBio/epiworldpy) | |
-| [GeoCovid](https://github.com/Fernandez-Lab-WSU/geocovid_app) | No data | [](https://github.com/Fernandez-Lab-WSU/geocovid_app/issues) | [](https://github.com/Fernandez-Lab-WSU/geocovid_app/pulls) | No recent commits | N/A | [Fernandez-Lab-WSU/geocovid_app](https://github.com/Fernandez-Lab-WSU/geocovid_app) | |
-| [linkeR: Effortless Linked Views for Shiny Applications](https://github.com/EpiForeSITE/linkeR/) |
(20) | [](https://github.com/EpiForeSITE/linkeR//issues) | [](https://github.com/EpiForeSITE/linkeR//pulls) | 2025-07-28 ([`154105b`](https://github.com/EpiForeSITE/linkeR//commits)) | 40 | [EpiForeSITE/linkeR](https://github.com/EpiForeSITE/linkeR/) | |
-| [Multigroup Vaccine Model](https://github.com/EpiForeSITE/multigroup-vaccine) | 


(20) | [](https://github.com/EpiForeSITE/multigroup-vaccine/issues) | [](https://github.com/EpiForeSITE/multigroup-vaccine/pulls) | 2025-07-08 ([`ac3e3a4`](https://github.com/EpiForeSITE/multigroup-vaccine/commits)) | 128 | [EpiForeSITE/multigroup-vaccine](https://github.com/EpiForeSITE/multigroup-vaccine) | |
-| [Multitask Model to Forecast Patient's Next Unit and Remaining Length of Stay](https://github.com/madhobi/multitask_unit_and_days) |
(20) | [](https://github.com/madhobi/multitask_unit_and_days/issues) | [](https://github.com/madhobi/multitask_unit_and_days/pulls) | 2024-10-10 ([`c21c84e`](https://github.com/madhobi/multitask_unit_and_days/commits)) | 1 | [madhobi/multitask_unit_and_days](https://github.com/madhobi/multitask_unit_and_days) | |
-| [PhenoMapper: an interactive toolbox for the visual exploration of phenomics data](https://github.com/tdavislab/PhenoMapper) | 

(20) | [](https://github.com/tdavislab/PhenoMapper/issues) | [](https://github.com/tdavislab/PhenoMapper/pulls) | 2024-04-22 ([`4cc2a66`](https://github.com/tdavislab/PhenoMapper/commits)) | N/A | [tdavislab/PhenoMapper](https://github.com/tdavislab/PhenoMapper) | |
-| [POMP (Aaron King’s tool, U. of Michigan)](https://github.com/kingaa/pomp) | 



+4 more (20) | [](https://github.com/kingaa/pomp/issues) | [](https://github.com/kingaa/pomp/pulls) | 2025-08-01 ([`6279e55`](https://github.com/kingaa/pomp/commits)) | 52 | [kingaa/pomp](https://github.com/kingaa/pomp) | |
-| [Post-acute care model](https://github.com/mattrmaloney/covid-post-acute-care) | No data | [](https://github.com/mattrmaloney/covid-post-acute-care/issues) | [](https://github.com/mattrmaloney/covid-post-acute-care/pulls) | 2020-06-13 ([`b60c0a6`](https://github.com/mattrmaloney/covid-post-acute-care/commits)) | N/A | [mattrmaloney/covid-post-acute-care](https://github.com/mattrmaloney/covid-post-acute-care) | |
-| [quadkeyr](https://github.com/Fernandez-Lab-WSU/quadkeyr) | 


(20) | [](https://github.com/Fernandez-Lab-WSU/quadkeyr/issues) | [](https://github.com/Fernandez-Lab-WSU/quadkeyr/pulls) | 2025-03-24 ([`83d2c4b`](https://github.com/Fernandez-Lab-WSU/quadkeyr/commits)) | 39 | [Fernandez-Lab-WSU/quadkeyr](https://github.com/Fernandez-Lab-WSU/quadkeyr) | |
-| [rbranding](https://github.com/EpiForeSITE/branding-package) | 



(20) | [](https://github.com/EpiForeSITE/branding-package/issues) | [](https://github.com/EpiForeSITE/branding-package/pulls) | 2025-07-31 ([`baae6a8`](https://github.com/EpiForeSITE/branding-package/commits)) | 75 | [EpiForeSITE/branding-package](https://github.com/EpiForeSITE/branding-package) | |
-| [Multigroup Vaccine Model](https://github.com/EpiForeSITE/vaccine-equity-model) | 


(20) | [](https://github.com/EpiForeSITE/vaccine-equity-model/issues) | [](https://github.com/EpiForeSITE/vaccine-equity-model/pulls) | 2025-07-08 ([`ac3e3a4`](https://github.com/EpiForeSITE/vaccine-equity-model/commits)) | 128 | [EpiForeSITE/vaccine-equity-model](https://github.com/EpiForeSITE/vaccine-equity-model) | |
+| Project | Contributors | Issues, PRs, and Last Commit | Commits | Repository |
+|---------|-------------|--------------------------|---------|------------|
+| [Attention-Based Models for Snow-Water Equivalent Prediction](https://github.com/Krishuthapa/SWE-Attention) |
| [](https://github.com/Krishuthapa/SWE-Attention/issues)
[](https://github.com/Krishuthapa/SWE-Attention/pulls)
2024-12-12 ([`e95fe16`](https://github.com/Krishuthapa/SWE-Attention/commits)) | 2 | [Krishuthapa/SWE-Attention](https://github.com/Krishuthapa/SWE-Attention) | |
+| [Bayesian Transmission Model](https://github.com/EpiForeSITE/bayesian-transmission) | 

| [](https://github.com/EpiForeSITE/bayesian-transmission/issues)
[](https://github.com/EpiForeSITE/bayesian-transmission/pulls)
2025-03-11 ([`f78a06a`](https://github.com/EpiForeSITE/bayesian-transmission/commits)) | 46 | [EpiForeSITE/bayesian-transmission](https://github.com/EpiForeSITE/bayesian-transmission) | |
+| [Branching process outbreak simulator](https://github.com/EpiForeSITE/branching_process/) | 


| [](https://github.com/EpiForeSITE/branching_process//issues)
[](https://github.com/EpiForeSITE/branching_process//pulls)
2025-05-09 ([`8e9bac5`](https://github.com/EpiForeSITE/branching_process//commits)) | 114 | [EpiForeSITE/branching_process](https://github.com/EpiForeSITE/branching_process/) | |
+| [COVID-19 Jail Model](https://github.com/epimodels/COVID19-Jails) |
| [](https://github.com/epimodels/COVID19-Jails/issues)
[](https://github.com/epimodels/COVID19-Jails/pulls)
2020-04-30 ([`561491b`](https://github.com/epimodels/COVID19-Jails/commits)) | 0 | [epimodels/COVID19-Jails](https://github.com/epimodels/COVID19-Jails) | |
+| [COVID-19 NCAA Football](https://github.com/epimodels/inperson_sports) |
| [](https://github.com/epimodels/inperson_sports/issues)
[](https://github.com/epimodels/inperson_sports/pulls)
2020-09-28 ([`9681971`](https://github.com/epimodels/inperson_sports/commits)) | 0 | [epimodels/inperson_sports](https://github.com/epimodels/inperson_sports) | |
+| [Covid Scenario model](https://github.com/HopkinsIDD/COVIDScenarioPipeline) | 



+5 more | [](https://github.com/HopkinsIDD/COVIDScenarioPipeline/issues)
[](https://github.com/HopkinsIDD/COVIDScenarioPipeline/pulls)
2023-02-21 ([`0c6084b`](https://github.com/HopkinsIDD/COVIDScenarioPipeline/commits)) | 0 | [HopkinsIDD/COVIDScenarioPipeline](https://github.com/HopkinsIDD/COVIDScenarioPipeline) | |
+| [CU Metapopulation](https://github.com/epimodels/Metapopulation_MRSA) | 
| [](https://github.com/epimodels/Metapopulation_MRSA/issues)
[](https://github.com/epimodels/Metapopulation_MRSA/pulls)
2022-07-14 ([`35bf356`](https://github.com/epimodels/Metapopulation_MRSA/commits)) | 0 | [epimodels/Metapopulation_MRSA](https://github.com/epimodels/Metapopulation_MRSA) | |
+| [epiworld: Fast Agent-Based Epi Models](https://github.com/UofUEpiBio/epiworld) | 



| [](https://github.com/UofUEpiBio/epiworld/issues)
[](https://github.com/UofUEpiBio/epiworld/pulls)
2025-07-18 ([`f4ecac2`](https://github.com/UofUEpiBio/epiworld/commits)) | 30 | [UofUEpiBio/epiworld](https://github.com/UofUEpiBio/epiworld) | |
+| [epiworld-forecasts: Automatic Disease Forecasting with epiworldR](https://github.com/EpiForeSITE/epiworld-forecasts) | 

| [](https://github.com/EpiForeSITE/epiworld-forecasts/issues)
[](https://github.com/EpiForeSITE/epiworld-forecasts/pulls)
2025-07-22 ([`e69d887`](https://github.com/EpiForeSITE/epiworld-forecasts/commits)) | 49 | [EpiForeSITE/epiworld-forecasts](https://github.com/EpiForeSITE/epiworld-forecasts) | |
+| [epiworldpy: A python wrapper for epiworld](https://github.com/UofUEpiBio/epiworldpy) |
| [](https://github.com/UofUEpiBio/epiworldpy/issues)
[](https://github.com/UofUEpiBio/epiworldpy/pulls)
2025-07-23 ([`c829a07`](https://github.com/UofUEpiBio/epiworldpy/commits)) | 5 | [UofUEpiBio/epiworldpy](https://github.com/UofUEpiBio/epiworldpy) | |
+| [GeoCovid](https://github.com/Fernandez-Lab-WSU/geocovid_app) | No data | [](https://github.com/Fernandez-Lab-WSU/geocovid_app/issues)
[](https://github.com/Fernandez-Lab-WSU/geocovid_app/pulls)
No recent commits | 0 | [Fernandez-Lab-WSU/geocovid_app](https://github.com/Fernandez-Lab-WSU/geocovid_app) | |
+| [linkeR: Effortless Linked Views for Shiny Applications](https://github.com/EpiForeSITE/linkeR/) |
| [](https://github.com/EpiForeSITE/linkeR//issues)
[](https://github.com/EpiForeSITE/linkeR//pulls)
2025-07-28 ([`154105b`](https://github.com/EpiForeSITE/linkeR//commits)) | 40 | [EpiForeSITE/linkeR](https://github.com/EpiForeSITE/linkeR/) | |
+| [Multigroup Vaccine Model](https://github.com/EpiForeSITE/multigroup-vaccine) | 


| [](https://github.com/EpiForeSITE/multigroup-vaccine/issues)
[](https://github.com/EpiForeSITE/multigroup-vaccine/pulls)
2025-07-08 ([`ac3e3a4`](https://github.com/EpiForeSITE/multigroup-vaccine/commits)) | 128 | [EpiForeSITE/multigroup-vaccine](https://github.com/EpiForeSITE/multigroup-vaccine) | |
+| [Multitask Model to Forecast Patient's Next Unit and Remaining Length of Stay](https://github.com/madhobi/multitask_unit_and_days) |
| [](https://github.com/madhobi/multitask_unit_and_days/issues)
[](https://github.com/madhobi/multitask_unit_and_days/pulls)
2024-10-10 ([`c21c84e`](https://github.com/madhobi/multitask_unit_and_days/commits)) | 1 | [madhobi/multitask_unit_and_days](https://github.com/madhobi/multitask_unit_and_days) | |
+| [PhenoMapper: an interactive toolbox for the visual exploration of phenomics data](https://github.com/tdavislab/PhenoMapper) | 

| [](https://github.com/tdavislab/PhenoMapper/issues)
[](https://github.com/tdavislab/PhenoMapper/pulls)
2024-04-22 ([`4cc2a66`](https://github.com/tdavislab/PhenoMapper/commits)) | 0 | [tdavislab/PhenoMapper](https://github.com/tdavislab/PhenoMapper) | |
+| [POMP (Aaron King’s tool, U. of Michigan)](https://github.com/kingaa/pomp) | 



+4 more | [](https://github.com/kingaa/pomp/issues)
[](https://github.com/kingaa/pomp/pulls)
2025-08-01 ([`6279e55`](https://github.com/kingaa/pomp/commits)) | 52 | [kingaa/pomp](https://github.com/kingaa/pomp) | |
+| [Post-acute care model](https://github.com/mattrmaloney/covid-post-acute-care) | No data | [](https://github.com/mattrmaloney/covid-post-acute-care/issues)
[](https://github.com/mattrmaloney/covid-post-acute-care/pulls)
2020-06-13 ([`b60c0a6`](https://github.com/mattrmaloney/covid-post-acute-care/commits)) | 0 | [mattrmaloney/covid-post-acute-care](https://github.com/mattrmaloney/covid-post-acute-care) | |
+| [quadkeyr](https://github.com/Fernandez-Lab-WSU/quadkeyr) | 


| [](https://github.com/Fernandez-Lab-WSU/quadkeyr/issues)
[](https://github.com/Fernandez-Lab-WSU/quadkeyr/pulls)
2025-03-24 ([`83d2c4b`](https://github.com/Fernandez-Lab-WSU/quadkeyr/commits)) | 39 | [Fernandez-Lab-WSU/quadkeyr](https://github.com/Fernandez-Lab-WSU/quadkeyr) | |
+| [rbranding](https://github.com/EpiForeSITE/branding-package) | 



| [](https://github.com/EpiForeSITE/branding-package/issues)
[](https://github.com/EpiForeSITE/branding-package/pulls)
2025-07-31 ([`baae6a8`](https://github.com/EpiForeSITE/branding-package/commits)) | 75 | [EpiForeSITE/branding-package](https://github.com/EpiForeSITE/branding-package) | |
+| [Multigroup Vaccine Model](https://github.com/EpiForeSITE/vaccine-equity-model) | 


| [](https://github.com/EpiForeSITE/vaccine-equity-model/issues)
[](https://github.com/EpiForeSITE/vaccine-equity-model/pulls)
2025-07-08 ([`ac3e3a4`](https://github.com/EpiForeSITE/vaccine-equity-model/commits)) | 128 | [EpiForeSITE/vaccine-equity-model](https://github.com/EpiForeSITE/vaccine-equity-model) | |
---
diff --git a/scripts/update_project_status.R b/scripts/update_project_status.R
index a02e849..bc3c08a 100755
--- a/scripts/update_project_status.R
+++ b/scripts/update_project_status.R
@@ -74,7 +74,7 @@ get_project_metrics <- function(owner, repo, token = NULL) {
last_commit_date = "Unknown",
last_commit_sha = "Unknown",
contributor_avatars = character(0),
- total_commits = 0
+ total_commits = -1
))
}
@@ -108,18 +108,42 @@ get_project_metrics <- function(owner, repo, token = NULL) {
last_commit_date <- as.Date(substr(last_commit_date, 1, 10))
}
- # Get total commits count (use repository stats instead of search API for better reliability)
- total_commits <- 0
- # Try getting repo stats first (faster and more reliable)
- stats_data <- github_api_call(paste0(base_url, "/stats/participation"), token)
- if (!is.null(stats_data) && !is.null(stats_data$all)) {
- total_commits <- sum(stats_data$all, na.rm = TRUE)
+ # Get total commits count using multiple methods for better reliability
+ total_commits <- -1 # -1 indicates API failure
+
+ # Method 1: Try search API first (gets total commits across entire repository history)
+ # Note: This requires authentication and has rate limits, but gives accurate total counts
+ search_url <- paste0("https://api.github.com/search/commits?q=repo:", owner, "/", repo)
+ search_data <- github_api_call(search_url, token)
+ if (!is.null(search_data) && !is.null(search_data$total_count)) {
+ total_commits <- search_data$total_count
} else {
- # Fallback to search API if stats not available
- search_url <- paste0("https://api.github.com/search/commits?q=repo:", owner, "/", repo)
- search_data <- github_api_call(search_url, token)
- if (!is.null(search_data)) {
- total_commits <- search_data$total_count
+ # Method 2: Try getting repository statistics for contributor activity
+ # This might give us a better estimate than participation stats
+ stats_url <- paste0(base_url, "/stats/contributors")
+ contributors_stats <- github_api_call(stats_url, token)
+ if (!is.null(contributors_stats) && length(contributors_stats) > 0) {
+ # Sum up all contributions from all contributors
+ total_commits <- sum(sapply(contributors_stats, function(contributor) {
+ if (!is.null(contributor$total)) contributor$total else 0
+ }), na.rm = TRUE)
+ } else {
+ # Method 3: Fallback to participation stats (last 52 weeks only)
+ stats_data <- github_api_call(paste0(base_url, "/stats/participation"), token)
+ if (!is.null(stats_data) && !is.null(stats_data$all)) {
+ # This gives us commits from last 52 weeks only - not ideal but better than nothing
+ total_commits <- sum(stats_data$all, na.rm = TRUE)
+ } else {
+ # Method 4: Last resort - check if any commits exist
+ commits_page <- github_api_call(paste0(base_url, "/commits?per_page=1"), token)
+ if (!is.null(commits_page) && length(commits_page) > 0) {
+ # Repository has commits but we can't get count - return -1 to indicate API limitation
+ total_commits <- -1
+ } else {
+ # No commits found
+ total_commits <- 0
+ }
+ }
}
}
@@ -219,7 +243,7 @@ main <- function() {
last_commit_date = as.character("Unknown"),
last_commit_sha = as.character("Unknown"),
contributor_avatars_html = as.character(""),
- total_commits = as.integer(0)
+ total_commits = as.integer(-1)
)]
# Get metrics for each project (with progress tracking)
@@ -264,8 +288,8 @@ main <- function() {
"",
paste("This dashboard tracks", nrow(projects_with_github), "EpiForeSITE projects with GitHub repositories."),
"",
- "| Project | Contributors | Issues | PRs | Last Commit | Commits | Repository |",
- "|---------|-------------|--------|-----|-------------|---------|------------|"
+ "| Project | Contributors | Issues, PRs, and Last Commit | Commits | Repository |",
+ "|---------|-------------|--------------------------|---------|------------|"
)
# Create table rows
@@ -278,7 +302,7 @@ main <- function() {
# Handle missing or invalid data gracefully
contributors_display <- if (row$contributors > 0) {
if (nchar(row$contributor_avatars_html) > 0) {
- paste0(row$contributor_avatars_html, " (", row$contributors, ")")
+ row$contributor_avatars_html
} else {
paste0(row$contributors, " contributor", ifelse(row$contributors > 1, "s", ""))
}
@@ -305,7 +329,10 @@ main <- function() {
"No recent commits"
}
- commits_display <- if (row$total_commits > 0) {
+ # Combine Issues, PRs, and Last Commit into single column with line breaks
+ combined_issues_prs_commits <- paste(issues_display, prs_display, last_commit_display, sep = "
")
+
+ commits_display <- if (row$total_commits >= 0) {
as.character(row$total_commits)
} else {
"N/A"
@@ -316,9 +343,7 @@ main <- function() {
table_row <- paste(
paste0("| [", project_name, "](", github_link, ")"),
contributors_display,
- issues_display,
- prs_display,
- last_commit_display,
+ combined_issues_prs_commits,
commits_display,
repo_cell,
"|",