Skip to content
All templates

Surveys 1 step · 6 fields

Team pulse survey

A one-minute anonymous check-in: eNPS, workload, clarity, manager support and recognition.

Get a hosted link and a responses inbox in a minute. No backend, no credit card.

Or set it up yourself

Live preview

Form definition JSON · 93 lines
{  "id": "team-pulse-survey",  "title": "Team pulse",  "description": "Your answers are anonymous. It takes about a minute.",  "submit": { "label": "Send answers" },  "fields": [    {      "key": "enps",      "type": "radio",      "label": "How likely are you to recommend this team as a place to work?",      "layout": "inline",      "helperText": "0 means not at all likely, 10 means extremely likely.",      "options": [        { "value": "0", "label": "0" },        { "value": "1", "label": "1" },        { "value": "2", "label": "2" },        { "value": "3", "label": "3" },        { "value": "4", "label": "4" },        { "value": "5", "label": "5" },        { "value": "6", "label": "6" },        { "value": "7", "label": "7" },        { "value": "8", "label": "8" },        { "value": "9", "label": "9" },        { "value": "10", "label": "10" }      ],      "validation": { "required": true }    },    {      "key": "workload",      "type": "radio",      "label": "How is your workload?",      "options": [        { "value": "too-much", "label": "Far too much" },        { "value": "bit-much", "label": "A bit too much" },        { "value": "right", "label": "About right" },        { "value": "room", "label": "I could take on more" }      ],      "validation": { "required": true }    },    {      "key": "clarity",      "type": "radio",      "label": "I know what is expected of me",      "layout": "inline",      "helperText": "1 means strongly disagree, 5 means strongly agree.",      "options": [        { "value": "1", "label": "1" },        { "value": "2", "label": "2" },        { "value": "3", "label": "3" },        { "value": "4", "label": "4" },        { "value": "5", "label": "5" }      ],      "validation": { "required": true }    },    {      "key": "support",      "type": "radio",      "label": "I get the support I need from my manager",      "layout": "inline",      "helperText": "1 means strongly disagree, 5 means strongly agree.",      "options": [        { "value": "1", "label": "1" },        { "value": "2", "label": "2" },        { "value": "3", "label": "3" },        { "value": "4", "label": "4" },        { "value": "5", "label": "5" }      ],      "validation": { "required": true }    },    {      "key": "recognition",      "type": "radio",      "label": "Good work gets recognized here",      "layout": "inline",      "helperText": "1 means strongly disagree, 5 means strongly agree.",      "options": [        { "value": "1", "label": "1" },        { "value": "2", "label": "2" },        { "value": "3", "label": "3" },        { "value": "4", "label": "4" },        { "value": "5", "label": "5" }      ],      "validation": { "required": true }    },    {      "key": "oneThing",      "type": "textarea",      "label": "One thing that would make next month better",      "rows": 3,      "helperText": "Leave out names and details that could identify you."    }  ]}

Use it with the npm packages ​

Copy the JSON into a file in your app, install the renderer and pass the definition to it. The same JSON works with @formhaus/vue.

sh
npm i @formhaus/core @formhaus/react
tsx
import { FormRenderer } from '@formhaus/react';
import '@formhaus/core/style.css';
import definition from './form.json';

export function Form() {
  return (
    <FormRenderer
      definition={definition}
      onSubmit={(values) => console.log(values)}
    />
  );
}

See Getting started for validation, steps and custom components.

Formhaus is MIT licensed. Legal