Application review board for Gravity Forms submissions

By General Input

Give your program team one screen to read, score and decide on every application, with decision emails and a daily recap in Slack.

Integrations

  • Gravity Forms
  • Gmail
  • Slack Bot

Type

App

Categories

  • HR & People
  • Operations

Build me an app my program team opens to review applications that arrive through a Gravity Forms application form, so reviewers never have to log into wp-admin. The people using it are program managers and reviewers on a grants, scholarships, awards or hiring team, and this app is the only place they work.

Start with a short setup screen. Use Gravity Forms List Forms to list the forms on the site and let an admin pick which one is the application form. Fetch that form's full form object from List Forms and keep its field definitions, so the app can map field IDs to human labels everywhere instead of hardcoding them. On the same screen let the admin pick which field on the form holds the review decision, paste the program's eligibility criteria as free text, choose the Slack channel for the daily recap, and edit the accept and reject email templates. Save all of this in the app's own storage.

The main screen is a review board with five columns: New, Screening, Shortlist, Rejected and Accepted. Fill the columns using Gravity Forms List Entries by Form for the selected form, paging through the results so nothing is missed, and place each entry in a column based on the decision value stored on the entry, defaulting to New when it is empty. Each card shows the applicant name and email resolved through the field label map, the submission date, the reviewer score if one has been set, and a one line preview of the screening assessment if one exists. Let reviewers move a card between columns, and give the board a search and filter box on applicant name and submission date.

Clicking a card opens the full submission in a detail view built from Gravity Forms Get Entry. Render every field value with its human label from the form object, in the form's own field order, and render file upload fields as clickable links to the uploaded files. Keep raw values visible for anything the app cannot confidently label.

In the detail view a reviewer sets a score from one to five, writes notes, and picks a decision of New, Screening, Shortlist, Rejected or Accepted. Scores and notes live in the app's own storage keyed by the Gravity Forms entry ID, along with who wrote them and when, so several reviewers can each leave their own score and the entry object stays clean. Show every reviewer's score and notes in the detail view and the average score on the card. Gravity Forms has no entry notes operation in the catalog, which is exactly why this data belongs in app storage rather than on the entry.

The decision is the one thing that writes back to Gravity Forms, using Update Entry. This is important: Update Entry is a full replacement PUT and any value not included in the request will be blanked out. Every write-back handler must first call Get Entry for that entry ID, merge the new decision into the field the admin chose during setup, and send the complete entry object back, including every other field value and the entry metadata. Never construct a partial entry object. Entry field values are keyed by field ID, for example 1.3 for a name sub-field and 3 for an email field, so always merge by field ID against the entry you just fetched.

Every card and the detail view get a Screen this application button that kicks off a background agent. The agent reads the full submission with Get Entry, reads the program's eligibility criteria from app storage, and writes back a structured assessment: a short summary of the applicant, a list of strengths, a list of gaps or missing requirements, any eligibility rule the application clearly fails, and a recommended score from one to five with a one line rationale. Store the assessment in app storage keyed by entry ID and show it on the card and in the detail view, with a visible running state while the agent works and a timestamp for the last screening. The recommended score is advisory only: it must never overwrite a reviewer's own score or set a decision by itself.

When a reviewer sets a decision to Accepted or Rejected, send the applicant a decision email with Gmail Send a Message, using the matching template from setup with the applicant's name merged in and their email address read from the entry through the field label map. Show the reviewer the drafted email and require a confirm click before it sends, then record in app storage that the email went out and when, so nobody gets emailed twice.

Add a Post today's decisions button that gathers every application accepted or rejected that day and posts a single summary to the review channel with Slack Bot Send a Message: the count accepted and rejected, then one line per application with the applicant name, the decision, the reviewer score and who decided. If no decisions were made that day, say so instead of posting an empty message.

A few things to handle carefully: page through List Entries by Form rather than assuming a single page of results; treat entries that have never been reviewed as New; refresh the field label map by refetching the form object when the admin asks, so form edits do not break the labels; and keep the board readable when a column holds fifty or more cards.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seats