Widget Grist SurveyJS
Une plateforme d'enquêtes adossée à Grist et SurveyJS : un serveur de formulaires publics auto-hébergé, et des widgets Grist pour créer les enquêtes, visualiser les réponses et publier en open data.
À quoi ça sert ?
Le projet permet de transformer n’importe quel document Grist en plateforme de collecte de données via des formulaires dynamiques. Il est au coeur du dispositif de recensement : c’est grâce à lui que les tiers-lieux remplissent leurs enquêtes, et que les réseaux régionaux suivent puis republient les réponses.
Ce n’est plus un simple widget : c’est désormais un serveur d’enquêtes auto-hébergé, qui sert les formulaires publics, accompagné de cinq widgets Grist d’administration. Les répondants remplissent un formulaire web public, sans compte ni accès à Grist ; les gestionnaires conçoivent et pilotent les enquêtes depuis Grist.
Principe de fonctionnement
Le formulaire public (côté répondant) est servi directement par le serveur, à une adresse de la forme enquetes.tiers-lieux.fr/{instance}/{document}/{numéro}. Il peut aussi être intégré en iframe dans un autre site :
- Formulaire SurveyJS alimenté par la configuration JSON stockée dans Grist
- Reprise d’une réponse existante via une clé secrète passée dans le lien, ce qui pré-remplit le formulaire
- Sauvegarde continue des réponses au fil de la saisie
- Gestion des pièces jointes et recherche d’adresses via l’API BAN
Le serveur est aussi la frontière de sécurité : c’est lui qui dialogue avec Grist (la clé d’API ne quitte jamais le serveur), isole chaque réponse par un identifiant secret, limite les abus et reçoit les pièces jointes. La conversion entre les questions SurveyJS et les colonnes Grist est entièrement gérée côté serveur.
Les cinq widgets d’administration (côté gestionnaire), à intégrer comme widgets personnalisés dans Grist :
- Éditeur et correspondance : éditeur visuel SurveyJS pour concevoir le formulaire, créer ou compléter les colonnes de la table associée, générer un formulaire depuis une table existante, ou importer un formulaire depuis le lien d’une autre enquête.
- Visualiseur : affiche une réponse en lecture seule, telle qu’elle a été saisie.
- Lien formulaire public : génère le lien public de la ligne sélectionnée (pour reprendre ou compléter une réponse) et un lien « nouvelle réponse ».
- Open data : publie la table sous forme d’un flux JSON public, en choisissant les colonnes à exposer (ou les colonnes d’une vue Grist).
- Synchronisation open data : recopie un flux open data publié vers une table Grist, à sens unique, pour alimenter un réseau régional sans toucher aux lignes saisies à la main.
Stack technique
Le serveur d’enquête est construit avec FastAPI (Python) et dialogue avec Grist via son API REST. Les cinq widgets sont construits avec SurveyJS et Vite, et s’appuient sur l’API Plugin de Grist. L’ensemble est auto-hébergé (Docker, derrière Traefik) : le serveur sert à la fois les formulaires publics et les widgets, sur la même origine.