The #TidyTuesday data viewer (ttdviewer) is an Shiny app-package1
for viewing the data from the #TidyTuesday
project. This package
started out as a small application to demonstrate various examples of
downloadable reports (R Markdown, Quarto, etc.), but it’s grown to
include additional features:
- The data are loaded directly from GitHub (i.e., with help from the
tidytuesdayRandttmetapackages). - The returned object is visible as a list on the first
nav_panel()via thelistviewerlitepackage. - The data are visible as a table compliments of the
reactablepackage in the secondnav_panel(). - Data visualizations from the
inspectdfpackage ‘summarise missingness, categorical levels, numeric distribution, correlation, column types and memory usage’ are available on the thirdnav_panel().
The app is packaged as a Shiny application with a single entry point that wires UI and server logic together. The server loads the selected dataset, routes it through module servers, and then exposes the reactive outputs to the UI panels.
%%{init: {'theme': 'neutral', 'look': 'handDrawn', 'themeVariables': { 'fontFamily': 'monospace', 'fontSize':'11px'}}}%%
flowchart LR
Launch["launch()"] --> UI["app_ui()"]
Launch --> Server["app_server()"]
Server --> Input["mod_input_server()"]
Input --> Data["load_tt_data()"]
Server --> ReportInput["mod_report_input_server()"]
ReportInput --> ReportDesc["mod_report_desc_server()"]
ReportInput --> ReportDownload["mod_report_download_server()"]
ReportDownload --> RenderReport["render_report()"]
Server --> List["mod_list_server()"]
Server --> Table["mod_table_server()"]
Server --> Plot["mod_plot_server()"]
Plot --> InspectPlot["inspect_plot()"]
Data --> List
Data --> Table
Data --> Plot
The UI arranges module outputs into panels while the sidebar hosts the dataset selector and report generation options.
%%{init: {'theme': 'neutral', 'look': 'handDrawn', 'themeVariables': { 'fontFamily': 'monospace', 'fontSize':'13px'}}}%%
flowchart LR
Sidebar["Sidebar inputs"] --> InputUI["mod_input_ui()"]
Sidebar --> ReportUI["mod_report_input_ui()"]
Sidebar --> ReportDescUI["mod_report_desc_ui()"]
Sidebar --> ReportDownloadUI["mod_report_download_ui()"]
Tabs["Tab panels"] --> ListUI["mod_list_ui()"]
Tabs --> TableUI["mod_table_ui()"]
Tabs --> PlotUI["mod_plot_ui()"]
Supporting utilities and tests wrap the core modules. Logging, data
helpers, and report builders are kept in standalone R files, while
tests/testthat validates module behavior and data helpers.
%%{init: {'theme': 'neutral', 'look': 'handDrawn', 'themeVariables': { 'fontFamily': 'monospace', 'fontSize':'14px'}}}%%
flowchart TB
subgraph Utilities
Log["logr_msg()"]
Ctr["ctr()"]
Load["load_tt_data()"]
Inspect["inspect_plot()"]
Render["render_report()"]
end
subgraph Modules
ModInput["mod_input_*"]
ModList["mod_list_*"]
ModTable["mod_table_*"]
ModPlot["mod_plot_*"]
ModReport["mod_report_*"]
end
subgraph Tests
TestApp["test-app_*"]
TestModules["test-mod_*"]
TestUtils["test-load_tt_data / test-inspect_plot / test-render_report / test-logr_msg"]
end
Utilities --> Modules
Modules --> Tests
Utilities --> Tests
You can install the development version of ttdviewer from
GitHub with:
# install.packages("pak")
pak::pak("mjfrigaard/ttdviewer")Launch the application using the standalone app function below:
library(ttdviewer)
launch()