
La formulosidad es una aplicación autohospedada para construir y implementar las encuestas usando el código en lugar de los constructores de encuestas tradicionales.
Este enfoque ofrece una serie de ventajas, que incluyen:
La formulación utiliza el lenguaje declarativo legible por humanos YAML.

Panel de administración
Nota: Use user / pass para iniciar sesión en la interfaz de usuario de la consola.
Cada directorio en SURVEYS_DIR es una encuesta. Puede configurar la fuente de sus encuestas configurando diferentes SURVEYS_DIR env var.
surveys/
├── survey1/
│ ├── metadata.yaml
│ ├── questions.yaml
│ ├── security.yaml
│ ├── variables.yaml
│ └── ...
└── survey2/
├── metadata.yaml
├── questions.yaml
└── ... Para comenzar, consulte la carpeta ./surveys con múltiples ejemplos.
¡Se requiere este archivo! El archivo consiste en un objeto YAML con propiedades específicas que describen la encuesta.
title : Survey Title
theme : default # or custom
intro : |
This is the introduction to the survey.
It can be multiple lines long.
outro : |
Thank you for taking the survey.
Your feedback is important to us.¡Se requiere este archivo! El archivo consta de una lista de preguntas, cada una definida como un objeto YAML con propiedades específicas.
single-choice , multiple-choice y ranking . questions :
- type : single-choice
id : question1 # optional ID, must be unique across all questions
label : What is the capital of Germany?
description : You can select multiple options
optionsFromVariable : german-city-options # defined in variables.yaml
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- Cologne
validation :
min : 1
max : 3Este archivo es opcional. El archivo consiste en un objeto YAML con propiedades específicas para la configuración de seguridad de la encuesta.
duplicateProtection : cookie # cookie | ipEste archivo es opcional. El archivo consta de una lista de variables, cada una definida como un objeto YAML con propiedades específicas.
variables :
- id : german-city-options # must be unique
type : list
options :
- Berlin
- Munich
- Hamburg
- Cologne Solicita a los usuarios para una breve respuesta escrita.
- type : short-text
label : What is the capital of Germany?
# set min/max characters
validation :
min : 10
max : 100Solicita a los usuarios una respuesta escrita detallada.
- type : long-text
label : What is the capital of Germany?
# set min/max characters
validation :
min : 10
max : 100Presenta una pregunta con solo una respuesta correcta de una lista de opciones.
- type : single-choice
label : What is the capital of Germany?
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- ColognePresenta una pregunta donde los usuarios pueden seleccionar múltiples respuestas (con limitaciones). Puede personalizar las selecciones mínimas y máximas permitidas en la sección de validación.
- type : multiple-choice
label : Which of the following are cities in Germany?
description : You can select multiple options
validation :
min : 1
max : 3
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- ColognePide a los usuarios que ingresen una fecha específica.
- type : date
label : When was the Berlin Wall built?Presenta una escala para que los usuarios califiquen algo en un rango predefinido.
- type : rating
label : How much do you like Berlin?
min : 1
max : 5Pide a los usuarios que clasifiquen opciones en función de un criterio determinado.
- type : ranking
label : Rank the following cities by population
optionsFromVariable : german-city-optionsPresenta una pregunta donde los usuarios solo pueden responder "sí" o "no".
- type : yes-no
label : Is Berlin the capital of Germany?Le solicita al usuario que ingrese su correo electrónico
- type : email
label : Please enter your email.Le pide al usuario que cargue su archivo en función de un formato dado y el tamaño máximo de carga.
- type : file
label : Upload a Berlin Image
validation :
formats :
- .jpg
- .png
max_size_bytes : 5*1024*1024 # 5 MB Las respuestas se pueden mostrar en la interfaz de usuario y exportar como un JSON. Alternativamente, puede usar la API REST para obtener respuestas de la encuesta:
curl -XGET
http://localhost:9900/app/surveys/{SURVEY_ID}/sessions ? limit=100 & offset=0 & sort_by=created_at & order=desc Donde {SURVEY_ID} id el UUID de una encuesta dada.


docker-compose up -d --build
Y debería poder acceder a la interfaz de usuario en http: // localhost: 3000 (autodenomento predeterminado de autenticación: user:pass ).
Puede implementar servicios individuales a cualquier proveedor de la nube o alojarlos.
El servicio de demostración (enlaces anteriores) se implementa en Fly.io (GO, SQLite) y Vercel (Next.js) y están bajo los niveles libres.
Instale el aire localmente desde aquí
Ejecute el siguiente comando después de la instalación del aire
cd api
air
Este comando ayudará a la recarga en vivo cada vez que se realicen cambios en las API usando air . Las configuraciones personalizadas se pueden establecer modificando el archivo air.toml
API:
DATABASE_TYPE - sqlite o postgresDATABASE_URL - Postgres o SQLite Connection StringLOG_LEVEL - Nivel de registro, por ejemplo, infoSURVEYS_DIR - Directorio con encuestas, por ejemplo /root/surveys . Se sugiere usar volumen montado para este directorio.UI:
CONSOLE_API_ADDR - Dirección pública del backend Go. Necesita ser accesible desde el navegador.CONSOLE_API_ADDR_INTERNAL - Dirección interna del backend Go, por ejemplo http://api:8080 (podría ser lo mismo que CONSOLE_API_ADDR ).IRON_SESSION_SECRET - Secreto para el cifrado de la sesiónHTTP_BASIC_AUTH - formato: user:pass para autores básicos (opcional) Asegúrese de instalar GO-Migrate primero.
cd api
migrate create -dir migrations/postgres -ext sql -seq name
migrate create -dir migrations/sqlite -ext sql -seq name
cd api
make test
¡Solicite solicitudes, informes de errores y todas las demás formas de contribución son bienvenidas y altamente alentadas!