abmdash is an R package that builds a private Quarto dashboard from REDCap, Google Sheets, Google Calendar, and ABS data. It is rendered via Docker + Quarto, encrypted with staticrypt, and deployed to GitHub Pages every day (cron) and on every push to main. There is no running server — the output is static HTML pushed to the repo.
docs/okf/index.md— the agent/human map: module docs, deploy pipeline, conventions. Read this first.docs/okf/modules/— module concept docs for the R/ modules (week12_tracking.R is covered via the run_initial_function doc; a full OKF regen is a known follow-up).opencode/skills/abmdash-guide/— repo skill: learn-repo walkthrough + debug workflows.
The vignettes are written for non-engineers and follow an "if you see X, here's the cause and the fix" pattern. They live in vignettes/*.md — plain Markdown, rendered directly by GitHub:
- FAQ: runtime errors and their fixes — most common errors with exact error text, cause, and fix
- REDCap data access — missing token,
""vsNAbug class - Google Sheets and Calendar access — service-account JSON quoting and sharing
- ABS portal login and downloads — credentials,
Not authenticated, connection quirks - Local Docker build — make targets,
docs/clobber warning, image issues - Daily CI build — the two jobs, secrets, and the four failure modes
tests/testthat/ is the executable spec: tests pin current behavior (e.g. test-redcap-behavior-lock.R, test-snapshot-lock.R). Harness utilities in helper-harness.R provide with_fixed_clock() (pins time/TZ) and local_isolated_env() (unsets API credentials). RECORDING.md documents the fixture recording + redaction workflow (fixtures live in tests/testthat/fixtures/).
Run tests:
make test # or: Rscript -e 'devtools::test()'
make test-trad # trad-compliance tests only- Restore renv (
renv::restore()) BEFORE runningmake teston a fresh clone. - Makefile targets —
test,test-trad,docker-build,docker-test-auth,docker-render(full local render, same as CI),lint,serve(servesdocs/on :8000). build-dashboard.sh— local deploy. WARNING: it runsrm -rf docs— back up anything underdocs/okf/you want to keep first.load-env.sh— sources.Renviron(API credentials) for local runs.- renv — package versions are locked by
renv.lock; runrenv::restore()after cloning. - Codegraph index —
.codegraph/is a machine-local symbol index for coding agents (gitignored, never committed). Runcodegraph initfrom the repo root after structural changes toR/, or when agent navigation seems stale.
- Clone —
git clone git@github.com:moodlab/abmdash.git - Create an issue describing what you'll change (prefix
feat:,bug:, ormaint:). To request someone else do the work, describe current vs desired behavior and assign the issue. - Branch —
git switch -c <your-github-username>/<short-description>(e.g.mcmullarkey/add-pre-commit).mainis protected; feature branches are how changes get reviewed. - Change + commit — include
Closes #<issue-number>in a commit message so the issue auto-closes on merge. - Push + PR —
git push origin <branch>, then open a pull request from the URL GitHub prints.
Pre-commit hooks run styler/lintr on every commit (CI enforces the same checks). Install once from R: install.packages("precommit") then precommit::use_precommit(). If a hook fails the fixes are usually automatic — re-stage (git add .) and re-commit; otherwise read the hook output and file an issue if stuck.
Deployment is automatic: GitHub Actions rebuilds the dashboard on push to main and on the daily cron — you only push code. Thanks for contributing!