Daily Standup

For Teams

A quick form for team members to write about the work they're doing every day.

Doing this async can be a big time-saver for many teams, and Formulate's conversational style takes away a lot of the drudgery of standup updates. This form also saves time by to prefilling the respondent's name via the who query parameter, and only prompts the user if the parameter is blank.

Responses could go straight to a manager's inbox or a shared Slack channel for context sharing without interruptions.

Build
Build on this example by creating an editable copy of this form.
export default async function () {
  await form.statement('Skip the meeting and post your daily update via the **Standup Form**', {
    description: 'This will only take 60 seconds',
    banner: true,
  })

  // Get the team member's name from the `who` param if available.
  // Only prompt the user for their name if this param is empty.
  let who = form.param('who');

  if (who) {
    await form.hidden('who', who);
  } else {
    // This is a static JSON file for this example, but could be a tunnelled link
    // to your HR tool to fetch a real-time list of team members.
    let response = await form.fetch("https://prod.static.formulate.dev/gallery/team-members.json")
    let teamMembers = JSON.parse(response.text);

    let {value: memberName} = await form.multi(
      "Let's get started! Whose standup update is this?", 
      teamMembers, 
      {name: 'who'}
    );

    await form.statement(`Perfect, hi ${memberName}! 👋`, {
      description: `You can use this [personalized link](https://formulate.dev/f/docs-standup?who=${memberName}) to avoid identifying yourself every time.`
    })
  }

  await form.long('What did you do yesterday?');
  await form.long('What are you planning to work on today?');
  await form.long('Do you have blockers or other concerns?', {optional: true});
}