Skip to content

Create and Deploy Surveys Using Shiny and SurveyJS

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

dylanpieper/shinysurveyjs

Repository files navigation

shinysurveyjs

The goal of this package is to integrate the flexible frontend of the SurveyJS library with the reactive backend of Shiny to interface with a PostgreSQL database and create dynamic user experiences. Whether you need a simple feedback form or a complex survey system for your organization, this package is designed to scale with you.

Basic Features

  • Host a single survey or multiple surveys in one app

  • Store and manage survey data in a PostgreSQL database, including metadata such as the duration to completion, date created and updated, Shiny session ID, and IP address

  • Design surveys and create JSON objects with a user-friendly visual editor

  • Save survey progress as cookies and resume later

  • Change the primary theme color and select from dark and light themes

Advanced Features

  • Dynamically populate choices (i.e., response options) from a database table and create dependent inputs (e.g., select a car brand and filter available models)

  • Dynamically stage JSON objects in the database to modify surveys using a staging table

  • URL query tokens and one-time access tokens for secure survey distribution

  • Asynchronous worker to handle database updates without interrupting the survey, including app logging, updating staged JSON objects, and managing tokens

Installation

# Install from GitHub
pak::pkg_install("dylanpieper/shinysurveyjs")

Basic Usage

Single Survey

Read the survey from a json object to host a single survey. Data is stored in a PostgreSQL database table hosted on Supabase.

library(shinysurveyjs)

survey <- '{
  "title": "R Package Feedback",
  "pages": [
    {
      "name": "userInfo",
      "elements": [
        {
          "type": "rating",
          "name": "rating",
          "title": "Please rate the shinysurveyjs 📦:",
          "rateValues": [
            {"value": 1, "text": "⭐"},
            {"value": 2, "text": "⭐⭐"},
            {"value": 3, "text": "⭐⭐⭐"},
            {"value": 4, "text": "⭐⭐⭐⭐"},
            {"value": 5, "text": "⭐⭐⭐⭐⭐"}
          ],
          "rateMax": 5,
          "isRequired": true
        },
        {
          "type": "comment",
          "name": "feedback",
          "visibleIf": "{rating} notempty",
          "title": "Why did you rate it {rating} stars?",
          "rows": 2
        },
        {
          "type": "html",
          "name": "lowRatingMessage",
          "visibleIf": "{rating} <= 2",
          "html": "I am sorry you had a poor experience. Please reach me at <b>[email protected]</b> so I can help improve your experience."
        }
      ]
    }
  ]
}'

survey_single(
  json = survey,
  show_response = TRUE,
  theme_color = "#00AD6E",
  theme_mode = "dark",
  shiny_config = list(
    host = "0.0.0.0",
    port = 3838
  ),
  db_config = list(
    host = Sys.getenv("HOST"), # aws-0-us-east-2.pooler.supabase.com
    port = as.numeric(Sys.getenv("PORT")), # 5432
    db_name = Sys.getenv("DB_NAME"), # postgres
    user = Sys.getenv("USER"), # username
    password = Sys.getenv("PASSWORD"), # password
    write_table = Sys.getenv("WRITE_TABLE"), # survey_package_feedback
    log_table = Sys.getenv("LOG_TABLE") # survey_app_logs
  ),
  cookie_expiration_days = 7
)

By default, the database configuration looks for environmental variables (e.g., Sys.getenv("PASSWORD")) that can be loaded from an .env or .yaml file or a secrets manager. Using encrypted secrets is recommended for production environments.

About

Create and Deploy Surveys Using Shiny and SurveyJS

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages