The following code is taken from the article “psychTestR - Ein R-Paket für (musik-) psychologische Tests und Fragebogeninventare” in “Musik und Internet. Musikalische Phänomene populärer Kulturen” (2022) by Nicolas Ruth & Peter Moormann. Feel free to copy and modify it according to your needs.

# Beispielcode  ------------------------------------------------------
 
library(psychTestR)
library(psyquest)
 
# Codeblöcke
save_time_started <- code_block(function(state, ...) { # Speichern der Startzeit 
  set_global(                                          # global für diesen Teilnehmer
    key = "time_started",
    value = Sys.time(),
    state = state  # interne Statusvariable von psychTestR
  )
})
 
compute_time_taken <- code_block(function(state, ...) {        # Berechnung und Ausgabe          
  time_taken <- Sys.time() - get_global("time_started", state) # der Bearbeitungsdauer
  msg <- paste0(
    "So lange hast du den Fragebogen bearbeitet: ",
    format(time_taken, digits = 3)
  )
  shiny::showNotification(msg)  
})
 
timeline_abb_1 <- join( # Timeline aus Abbildung 1
  one_button_page( # Willkommensseite
    button_text = "Weiter",
      shiny::div(
        p("Willkommen zum", tags$strong("Musikfragebogen!")),
        p(tags$em("Wir wollen heute mehr über Musik in deinem Leben erfahren."))
      )
  ),
  text_input_page( # erste Frage (Instrument)
    label = "Instrument",
    prompt = "Welches Instrument spielst du?",
    button_text = "Weiter",
    on_complete = function(answer, state, ...) {
      set_global(
        key = "instrument",
        value = answer,# answer enthält immer die letzte Antwort
        state = state  # interne Statusvariable von psychTestR 
      )
  }),
  reactive_page(function(state, answer, ...) { # zweite Frage (Dauer)
    msg <- sprintf(
        "Wie lange spielst du schon %s?",
        get_global("instrument", state) # holt den aktuellen Wert aus state
    )
    NAFC_page(
        label = "time_instrument",
        msg,
        c(
          "Ich habe erst angefangen.",
          "ein Monat bis ein halbes Jahr",
          "0,5 bis 1 Jahr"
        )
    )
  })
)
 
# verschiedene Pages zu einer Timeline durch join() bündeln
timeline <- join(
  new_timeline(                                  # Timeline für die Startzeit
    save_time_started,                           # Timelines brauchen ein Dictionary, das die
    dict = psyquest::psyquest_dict               # internationalisierten Sprachbausteine 
                                                 # enthält, hier nur ein Dummy.
  ),
  timeline_abb_1,                                # Timeline aus Abbildung 1
  GMS(language = "de"),                          # Goldsmiths Musical Sophistication Index
  compute_time_taken,                            # Berechnung und Ausgabe Bearbeitungsdauer
  elt_save_results_to_disk(complete = TRUE),     # Speicherung der Ergebnisse
  final_page("Vielen Dank!")                     # Abschlussseite
)
 
# fertigen Fragebogen öffnen
questionnaire <- make_test(
  timeline,
  opt = test_options(
    title = "Musikfragebogen",
    admin_password = "abc",
    languages = "de"
  )
)
 
shiny::runApp(questionnaire)

Of course, real psychTestR experiments tend to be much more complex! See Research examples for some example applications.