Back to Skills

scaffold-shiny-app

pjt222
Updated 2 days ago
5 views
17
2
17
View on GitHub
Othergeneral

About

This skill scaffolds new Shiny applications in R using production-ready frameworks like golem (R package structure), enterprise-focused rhino, or vanilla structure for rapid prototyping. It handles project initialization, framework selection, and creates the first module. Use it when starting interactive web apps, data dashboards, or production-grade Shiny applications.

Quick Install

Claude Code

Recommended
Primary
npx skills add pjt222/agent-almanac -a claude-code
Plugin CommandAlternative
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternative
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/scaffold-shiny-app

Copy and paste this command in Claude Code to install this skill

Documentation


name: scaffold-shiny-app description: > Crear una nueva aplicación Shiny usando golem (paquete R de producción), rhino (empresarial) o estructura vanilla (prototipo rápido). Cubre la selección del framework, inicialización del proyecto y creación del primer módulo. Úsalo al iniciar una nueva aplicación web interactiva en R, al crear un prototipo de panel o explorador de datos, al configurar una aplicación Shiny de producción como paquete R con golem, o al arrancar un proyecto Shiny empresarial con rhino. locale: es source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: shiny complexity: basic language: R tags: shiny, golem, rhino, scaffold, web-app, reactive

Scaffold Shiny App

Crear una nueva aplicación Shiny con estructura lista para producción usando scaffolding de golem, rhino o vanilla.

Cuándo Usar

  • Al iniciar una nueva aplicación web interactiva en R
  • Al crear un prototipo de panel o explorador de datos
  • Al configurar una aplicación Shiny de producción como paquete R (golem)
  • Al arrancar un proyecto Shiny empresarial (rhino)

Entradas

  • Requerido: Nombre de la aplicación
  • Requerido: Elección del framework (golem, rhino o vanilla)
  • Opcional: Si incluir scaffolding de módulos (predeterminado: sí)
  • Opcional: Si usar renv para gestión de dependencias (predeterminado: sí)
  • Opcional: Destino de despliegue (shinyapps.io, Posit Connect, Docker)

Procedimiento

Paso 1: Elegir el Framework

Evalúa los requisitos del proyecto para seleccionar el framework apropiado:

FrameworkMejor ParaEstructura
golemApps de producción distribuidas como paquetes RPaquete R con DESCRIPTION, tests, viñetas
rhinoApps empresariales con pipeline de compilación JS/CSSMódulos box, Sass, bundling JS, rhino::init()
vanillaPrototipos rápidos y aprendizajeUn solo app.R o par ui.R/server.R

Esperado: Decisión clara de framework basada en el alcance del proyecto y las necesidades del equipo.

En caso de fallo: Si no estás seguro, usa golem por defecto — proporciona la mayor estructura y se puede simplificar más adelante. Vanilla solo es apropiado para prototipos desechables.

Paso 2: Crear el Scaffolding del Proyecto

Camino Golem

golem::create_golem("myapp", package_name = "myapp")

Esto crea:

myapp/
├── DESCRIPTION
├── NAMESPACE
├── R/
│   ├── app_config.R
│   ├── app_server.R
│   ├── app_ui.R
│   └── run_app.R
├── dev/
│   ├── 01_start.R
│   ├── 02_dev.R
│   ├── 03_deploy.R
│   └── run_dev.R
├── inst/
│   ├── app/www/
│   └── golem-config.yml
├── man/
├── tests/
│   ├── testthat.R
│   └── testthat/
└── vignettes/

Camino Rhino

rhino::init("myapp")

Esto crea:

myapp/
├── app/
│   ├── js/
│   ├── logic/
│   ├── static/
│   ├── styles/
│   ├── view/
│   └── main.R
├── tests/
│   ├── cypress/
│   └── testthat/
├── .github/
├── app.R
├── dependencies.R
├── rhino.yml
└── renv.lock

Camino Vanilla

Crea app.R:

library(shiny)
library(bslib)

ui <- page_sidebar(
  title = "My App",
  sidebar = sidebar(
    sliderInput("n", "Sample size", 10, 1000, 100)
  ),
  card(
    card_header("Output"),
    plotOutput("plot")
  )
)

server <- function(input, output, session) {
  output$plot <- renderPlot({
    hist(rnorm(input$n), main = "Random Normal")
  })
}

shinyApp(ui, server)

Esperado: Directorio del proyecto creado con todos los archivos de scaffolding.

En caso de fallo: Para golem, asegúrate de que el paquete golem esté instalado: install.packages("golem"). Para rhino, instala desde GitHub: remotes::install_github("Appsilon/rhino"). Para vanilla, asegúrate de que shiny y bslib estén instalados.

Paso 3: Configurar las Dependencias

Golem/Vanilla

# Inicializar renv
renv::init()

# Añadir dependencias principales
usethis::use_package("shiny")
usethis::use_package("bslib")
usethis::use_package("DT")         # si se usan tablas de datos
usethis::use_package("plotly")     # si se usan gráficos interactivos

# Capturar estado
renv::snapshot()

Rhino

Las dependencias se gestionan en dependencies.R:

# dependencies.R
library(shiny)
library(bslib)
library(DT)

Esperado: Todas las dependencias registradas en DESCRIPTION (golem) o dependencies.R (rhino) y bloqueadas con renv.

En caso de fallo: Si renv::init() falla, verifica los permisos de escritura. Si los paquetes no se instalan, verifica la compatibilidad de la versión de R.

Paso 4: Crear el Primer Módulo

Golem

golem::add_module(name = "dashboard", with_test = TRUE)

Esto crea R/mod_dashboard.R y tests/testthat/test-mod_dashboard.R.

Rhino

Crea app/view/dashboard.R:

box::use(
  shiny[moduleServer, NS, tagList, h3, plotOutput, renderPlot],
)

#' @export
ui <- function(id) {
  ns <- NS(id)
  tagList(
    h3("Dashboard"),
    plotOutput(ns("plot"))
  )
}

#' @export
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$plot <- renderPlot({
      plot(1:10)
    })
  })
}

Vanilla

Añade las funciones del módulo a un archivo separado R/mod_dashboard.R:

dashboardUI <- function(id) {
  ns <- NS(id)
  tagList(
    h3("Dashboard"),
    plotOutput(ns("plot"))
  )
}

dashboardServer <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$plot <- renderPlot({
      plot(1:10)
    })
  })
}

Esperado: Archivo de módulo creado con funciones UI y server usando el espacio de nombres correcto.

En caso de fallo: Asegúrate de que el módulo use NS(id) para todos los IDs de input/output en la función UI. Sin el espacio de nombres, los IDs colisionarán cuando el módulo se use varias veces.

Paso 5: Ejecutar la Aplicación

# Golem
golem::run_dev()

# Rhino
shiny::runApp()

# Vanilla
shiny::runApp("app.R")

Esperado: La aplicación se lanza en el navegador sin errores.

En caso de fallo: Revisa la consola de R para ver mensajes de error. Problemas comunes: paquetes faltantes (instálalos), puerto ya en uso (especifica un puerto diferente con port = 3839), o errores de sintaxis en el código UI/server.

Validación

  • El directorio de la aplicación tiene la estructura correcta para el framework elegido
  • shiny::runApp() se lanza sin errores
  • Al menos un módulo está creado con funciones UI y server
  • Las dependencias están registradas (DESCRIPTION o dependencies.R)
  • renv.lock captura todas las versiones de paquetes
  • El módulo usa NS(id) para aislamiento correcto del espacio de nombres

Errores Comunes

  • Elegir vanilla para producción: La estructura vanilla carece de infraestructura de tests, documentación y herramientas de despliegue. Usa golem o rhino para cualquier cosa más allá de prototipos.
  • Espacio de nombres faltante en módulos: Cada inputId y outputId en la UI de un módulo debe estar envuelto con ns(). Olvidarlo provoca colisiones silenciosas de IDs.
  • golem sin flujo de trabajo devtools: Las apps golem son paquetes R. Usa devtools::load_all(), devtools::test() y devtools::document() — no source().
  • rhino sin box: rhino usa box para importaciones de módulos. No uses llamadas library() — usa box::use() para importaciones explícitas.

Habilidades Relacionadas

  • build-shiny-module — crear módulos Shiny reutilizables con aislamiento correcto del espacio de nombres
  • test-shiny-app — configurar tests de shinytest2 y testServer()
  • deploy-shiny-app — desplegar en shinyapps.io, Posit Connect o Docker
  • design-shiny-ui — temas bslib y diseño de layout responsivo
  • create-r-package — scaffolding de paquetes R (las apps golem son paquetes R)
  • manage-renv-dependencies — gestión detallada de dependencias renv

GitHub Repository

pjt222/agent-almanac
Path: i18n/es/skills/scaffold-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Related Skills

llamaguard

Other

LlamaGuard is Meta's 7-8B parameter model for moderating LLM inputs and outputs across six safety categories like violence and hate speech. It offers 94-95% accuracy and can be deployed using vLLM, Hugging Face, or Amazon SageMaker. Use this skill to easily integrate content filtering and safety guardrails into your AI applications.

View skill

cost-optimization

Other

This Claude Skill helps developers optimize cloud costs through resource rightsizing, tagging strategies, and spending analysis. It provides a framework for reducing cloud expenses and implementing cost governance across AWS, Azure, and GCP. Use it when you need to analyze infrastructure costs, right-size resources, or meet budget constraints.

View skill

quantizing-models-bitsandbytes

Other

This skill quantizes LLMs to 8-bit or 4-bit precision using bitsandbytes, achieving 50-75% memory reduction with minimal accuracy loss. It's ideal for running larger models on limited GPU memory or accelerating inference, supporting formats like INT8, NF4, and FP4. The skill integrates with HuggingFace Transformers and enables QLoRA training and 8-bit optimizers.

View skill

dispatching-parallel-agents

Other

This Claude Skill dispatches multiple agents to investigate and fix 3+ independent problems concurrently. It is designed for scenarios involving unrelated failures that can be resolved without shared state or dependencies. The core capability is parallel problem-solving, assigning one agent per independent problem domain to maximize efficiency.

View skill