Curator dashboard for reviewing BioAnalyzer predictions — sortable table + field-level feedback form. Built with R, Quarto, and DT and served on GitHub Pages (no server).
Live site: https://waldronlab.io/curator-desk/
- Data: Load CSV (or Parquet if
arrowis installed) from a path or URL at build time. - Table: Sortable, searchable, filterable (DT DataTables); Priority Score; PubMed links.
- Feedback: Form for curator ID, PMID, overall verdict, comment, BioAnalyzer version, and field-by-field validation (curator TRUE label + “Was BioAnalyzer correct?”). Submit via a GitHub issue (CSV is pre-filled in the issue body). There’s also a “Download CSV only” option.
Rscript -e 'install.packages(c("DT", "jsonlite", "arrow"), repos = "https://cloud.r-project.org")'From the repo root (e.g. curator-desk/):
quarto renderOutput is written to docs/. Open docs/index.html in a browser to test.
The table is built from a single dataset at render time:
- Default:
data/sample.csv(minimal example). - Custom: Set one of:
CURATOR_DATA_PATH— path to a local CSV/Parquet (e.g.../results/analysis_results.csv).CURATOR_DATA_URL— URL to a CSV/Parquet (e.g. raw GitHub URL).
Examples:
# Use a local file
export CURATOR_DATA_PATH="data/sample.csv"
quarto render
# Use a URL (e.g. raw file from GitHub)
export CURATOR_DATA_URL="https://raw.githubusercontent.com/your-org/your-repo/main/data/predictions.csv"
quarto renderTo update the table with new data, re-run quarto render (or use a CI job that does this and publishes docs/).
- CI (
.github/workflows/ci.yml) runs on every pull request and push tomain: builds the site with Quarto, installs R dependencies (with cache), and checks thatdocs/index.htmlis produced. Use it as a required status check so PRs must pass before merge: Settings → Branches → Branch protection rules formain→ Require status checks → select "Build & validate". - Deploy (
.github/workflows/quarto-publish.yml) runs on push tomainonly: builds the site, uploads the artifact, and deploys to GitHub Pages. R package caching is enabled to speed up runs.
This project uses only GitHub Pages; no other platform (e.g. Vercel) is required.
- Curators fill the feedback form and click Submit review.
- A new tab opens on your repo’s new-issue page with the title and body pre-filled (the feedback CSV is in the body). The curator clicks Create on GitHub to create the issue.
- Maintainers review in the issue — the full feedback (curator initials, comments, field-by-field validation) is in the issue body as a CSV block.
Optionally, the GitHub Action (.github/workflows/curator-feedback-notify.yml) runs when an issue whose title contains "Curator feedback" is opened: it posts a short comment on the issue acknowledging the feedback. Review is done directly in the issue (the CSV is in the issue body).
Build-time options:
GITHUB_REPO— repo URL (e.g.https://github.com/owner/repo) so Submit review opens the correct new-issue page. Set in your deploy workflow or locally beforequarto render.BIOANALYZER_VERSION(default1.0.0) — fixed version in the form.
curator-desk/
_quarto.yml # Quarto project, output-dir: docs
index.qmd # Main page: table + feedback form
R/
config.R # STATUS_COLUMNS, options, feedback schema
data.R # load_data(), normalize_dataset(), priority_score, PMID link
feedback.R # feedback row builder (for reference; CSV is built in JS)
data/ # Put your analyzed-papers CSV here
curator-feedback/ # Feedback CSVs from submitted reviews (via GitHub Action)
docs/ # Rendered output (git-tracked for Pages)
README.md # This file
Column names and options match curator_table/app.py:
- Status values:
ABSENT,PARTIALLY_PRESENT,PRESENT - Feedback columns:
PMID,curator_id,overall_verdict,comment,timestamp,bioanalyzer_version, pluspred__*,true__*,col_feedback__*for each status field.