What you'll build
A daily opening and closing checklist that any location, clinic, restaurant, or retail store fills out at the start and end of every shift, branching automatically to show only the relevant tasks for that shift type. The moment any item fails or gets missed, the record escalates itself: status flips, a district or regional manager gets an alert email, and a private AI field writes a quick risk read so the manager doesn't have to reconstruct what happened from raw checkbox answers. A portal gives location staff, managers, and leadership their own view of the same data, including a cross-location trend chart and an AI-generated narrative for spotting sites with recurring problems.
When to use this
Every clinic, restaurant, or retail location runs the same open/close routine, cash counts, equipment checks, staffing sign-off, but leadership only finds out something was missed during a monthly review.
A failed or missed item currently reaches a manager by someone remembering to call or text, instead of automatically.
You manage multiple locations and have no single place to see, at a glance, which sites submitted today's checklist and which didn't.
You want a manager to get a fast, readable summary of what went wrong instead of scrolling through a dozen yes/no answers.
You keep noticing the same location shows up with failed items again and again, and want that pattern surfaced instead of buried in individual records.
Part 1 — Build the checklist form with Magic Create
This is where the form itself gets built: shift details, the opening and closing task sets, and the exception fields that only apply when something fails. The fastest way to build it is Magic Create, since it can generate all of this from one plain-language prompt.
💡 Want a fully-built form in seconds instead of dragging fields one by one? Magic Create builds your form, fields, and field IDs from a plain-language prompt. This is the cornerstone article for every workflow that starts with "describe your form to the AI." See how to create any form with AI using Magic Create.
1. Open Magic Create: From your Formaloo homepage, click Magic Create.
2. Paste this prompt: "Build a daily location opening and closing checklist form. Include a dropdown asking which location this is for, a short text field for the staff member's name, a dropdown asking whether this is an opening or closing shift, and a date field for today's date. For opening shifts, add a yes/no field asking if the cash drawer was counted and verified, a number field for the counted cash amount, a yes/no field asking if all safety and emergency systems were checked, and a yes/no field asking if all scheduled staff clocked in on time. For closing shifts, add a yes/no field asking if the cash drawer was counted and reconciled, a number field for the reconciled cash amount, a yes/no field asking if all equipment and appliances were powered down, a yes/no field asking if all doors, windows, and registers are locked, and a yes/no field asking if the alarm system was armed. Add a yes/no field asking if any checklist item failed or got missed, a long text field to describe the issue, a file upload field for optional photo evidence, and a long text field for any additional notes. Also add these admin-only fields, hidden from whoever fills out the form: a status dropdown with Pending review, Escalated, and Resolved, an assignee field, and a long text field for internal notes."
3. Click Create: Formaloo generates the full form from your prompt.
4. Verify your fields: Your form should look like this. Magic Create will have generated most of it. Verify each field and field ID matches exactly.
Field (question form) | Field ID | Type |
Which location is this for? |
| Dropdown |
What's your name? |
| Short text |
Is this an opening or closing shift? |
| Dropdown (Opening / Closing) |
What's today's date? |
| Date |
Was the cash drawer counted and verified? |
| Yes/No |
What was the counted cash amount? |
| Number |
Were all safety and emergency systems checked? |
| Yes/No |
Did all scheduled staff clock in on time? |
| Yes/No |
Was the cash drawer counted and reconciled? |
| Yes/No |
What was the reconciled cash amount? |
| Number |
Were all equipment and appliances powered down? |
| Yes/No |
Are all doors, windows, and registers locked? |
| Yes/No |
Was the alarm system armed? |
| Yes/No |
Did any checklist item fail or get missed? |
| Yes/No |
Please describe the issue |
| Long text |
Upload photo evidence (optional) |
| File |
Any additional notes? |
| Long text |
Status |
| Dropdown (admin-only) |
Assignee |
| Assignee field (admin-only) |
Internal notes |
| Long text (admin-only) |
💡 Want internal fields, like status, assignee, or scores, invisible to the person filling out the form? What are admin-only fields and how they help is the foundational guide to that mechanism.
5. Save your form: Save your form from the island bar at the top of the editor.
Part 2 — Add an AI-powered shift risk read
This is what makes the checklist AI-based, not just a list of yes/no answers. An AI Analysis field runs automatically after every submission and stays entirely internal: it reads the failed items, the description, and the photo, and writes a short risk read plus a suggested next action for whoever picks up the escalation.
1. Open the Add field panel: In your form editor, click Add field and look for AI Analysis.
2. Add the field: Click AI Analysis to drop it onto the canvas, and title it "Shift risk read" with field ID ai_shift_risk.
3. Write its prompt: "Review this shift checklist. Shift type: @shift_type. Whether any item failed or was missed: @item_failed. Description of the issue: @issue_description. Photo evidence is attached in @issue_photo if provided. Write a short risk read for the manager reviewing this: state how serious the issue looks based on what failed and what was described, then suggest one concrete next action. Keep it to two or three sentences."
Note: Admin-only is locked on for the AI Analysis field and can't be turned off, so this stays a private read for your team, never something the staff member filling out the checklist sees.
4. Save your form: Save your form from the island bar.
Part 3 — Branch the form by shift type with Magic Logic
Advanced logic is what makes this one form work for both opening and closing shifts, and what keeps the issue fields out of sight until something actually goes wrong.
💡 Want your form to show, hide, skip, or require fields based on what someone just answered? This is the foundational guide to logic in Formaloo. See what is logic in Formaloo.
1. Open Advanced logic: In the form settings panel on the right side of the editor, open Advanced logic and go to the Logic tab.
2. Click Magic Logic: In the top right corner of the Logic panel, click Magic Logic.
3. Paste this prompt: "Hide these fields by default: Was the cash drawer counted and verified?, What was the counted cash amount?, Were all safety and emergency systems checked?, and Did all scheduled staff clock in on time?. If Is this an opening or closing shift? equals Opening, show all four of those fields. Also hide these fields by default: Was the cash drawer counted and reconciled?, What was the reconciled cash amount?, Were all equipment and appliances powered down?, Are all doors, windows, and registers locked?, and Was the alarm system armed?. If Is this an opening or closing shift? equals Closing, show all five of those fields. Also hide Please describe the issue and Upload photo evidence by default, and require Please describe the issue. If Did any checklist item fail or get missed? equals Yes, show both of those fields."
4. Generate and review: Click Generate Rules. Approve the preview, or redo it if anything looks off.
5. Save: Save your logic from the top right corner of the Logic panel.
6. Add the escalation rule: Still in Advanced logic, go to On Submit and add one more rule: if Did any checklist item fail or get missed? equals Yes, set Status to Escalated.
💡 Want a rule to fire the moment a form is first submitted, like flipping a status or assigning a case? On Submit is that trigger. See what is On Submit logic and how it works.
Part 4 — Create the escalation and resolution email templates
Two emails run this workflow: one alerts the assigned manager the moment something fails, and one closes the loop once that manager marks the issue resolved.
💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? This is the foundational guide to building and sending custom email templates. See how to create and send custom email templates.
1. Open the template builder: Click your profile icon, go to Apps and Integrations, find Custom Email Templates, and click Add New Template.
2. Build the escalation alert: Clear the body, add an AI block, and write: "Write a short, urgent, factual internal alert to a district or regional manager. State plainly that a shift checklist at @location just reported a failed or missed item, submitted by @staff_name during the @shift_type shift on @shift_date. Include the risk read from @ai_shift_risk as the core of the message. Tell the manager to review the full record and respond. Keep it under 100 words, this is a notification, not a report." Set the subject to "Escalation: @location shift checklist flagged an issue," name the template, and save it.
💡 Want different emails to go to different people depending on the answer, like an escalation versus a routine submission? This guide covers routing email notifications with conditional rules. See how to send and receive conditional email notifications.
3. Send it automatically: Go to Advanced logic → On Submit, add a rule that sends this template to @assignee whenever Did any checklist item fail or get missed? equals Yes.
4. Build the resolution confirmation: Add a new template. Write: "Write a brief, calm confirmation email to the assigned manager confirming that the flagged issue at @location from @shift_date has been marked resolved. Reference the original issue described in @issue_description and note that internal notes contain the resolution details. Tone: factual, closing the loop. Keep it under 80 words." Subject: "Resolved: @location shift checklist issue closed out." Save it.
💡 Want a rule to fire whenever an existing record changes, like a status flipping to Resolved? On Update is the trigger for that. See what is On Update logic and how it works.
5. Send it on resolution: Go to On Update, add a rule that sends this template to @assignee whenever Status changes to Resolved.
Part 5 — Build the shift record PDF template
Every checklist can generate a print-ready PDF record, useful for a district audit or for handing a physical copy to a location manager during a site visit. Here's the full HTML.
💡 Want every form submission to generate a polished, branded document automatically? This is the foundational guide to building a PDF template from a submission. See how to create PDF templates to turn responses into documents.
1. Open the PDF template builder: Click your profile icon, go to Apps and Integrations, click Custom PDF Template, and click Add New Template.
2. Switch to HTML view: Toggle the editor to HTML.
3. Paste this code:
<div style="background:#ffffff;max-width:760px;margin:0 auto;padding:60px 72px;font-family:'Inter',system-ui,-apple-system,sans-serif;color:#1a1a1a;"> <!-- Header --> <div style="margin-bottom:48px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:8px;">Daily shift checklist</div> <h1 style="font-size:26px;font-weight:600;margin:0 0 12px 0;color:#1a1a1a;">Daily location opening & closing checklist</h1> <div style="display:flex;justify-content:space-between;font-size:13px;color:#777777;"> <span>Reference: CHK-@rowid</span> <span>Shift date: @shift_date</span> </div> </div> <!-- Shift details --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">Shift details</div> <div style="display:grid;grid-template-columns:1fr 1fr;gap:20px 32px;"> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Location</div> <div style="font-size:14px;color:#1a1a1a;">@location</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Staff member</div> <div style="font-size:14px;color:#1a1a1a;">@staff_name</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Shift type</div> <div style="font-size:14px;color:#1a1a1a;">@shift_type</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Date</div> <div style="font-size:14px;color:#1a1a1a;">@shift_date</div> </div> </div> </div> <!-- Opening tasks --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">Opening tasks</div> <div style="display:grid;grid-template-columns:1fr 1fr;gap:20px 32px;"> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Cash drawer counted and verified</div> <div style="font-size:14px;color:#1a1a1a;">@cash_verified</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Counted cash amount</div> <div style="font-size:14px;color:#1a1a1a;">@cash_amount_open</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Safety & emergency systems checked</div> <div style="font-size:14px;color:#1a1a1a;">@safety_check_open</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Scheduled staff clocked in on time</div> <div style="font-size:14px;color:#1a1a1a;">@staffing_check_open</div> </div> </div> </div> <!-- Closing tasks --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">Closing tasks</div> <div style="display:grid;grid-template-columns:1fr 1fr;gap:20px 32px;"> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Cash drawer counted and reconciled</div> <div style="font-size:14px;color:#1a1a1a;">@cash_reconciled</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Reconciled cash amount</div> <div style="font-size:14px;color:#1a1a1a;">@cash_amount_close</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Equipment & appliances powered down</div> <div style="font-size:14px;color:#1a1a1a;">@equipment_shutdown</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Doors, windows & registers locked</div> <div style="font-size:14px;color:#1a1a1a;">@doors_locked</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;grid-column:1 / -1;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Alarm system armed</div> <div style="font-size:14px;color:#1a1a1a;">@alarm_armed</div> </div> </div> </div> <!-- Exceptions --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">Exceptions</div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;margin-bottom:16px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Did any checklist item fail or get missed?</div> <div style="font-size:14px;color:#1a1a1a;">@item_failed</div> </div> <div style="background:#f9f9f9;border-left:3px solid #dddddd;padding:16px 20px;font-size:13px;color:#444444;line-height:1.6;"> <strong>Issue description:</strong> @issue_description<br> <span style="font-style:italic;color:#999999;">Photo evidence, if provided, is attached to this record automatically.</span> </div> </div> <!-- AI risk read --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">AI risk read (internal)</div> <div style="background:#f6f8fb;border-left:3px solid #a8b8d8;padding:16px 20px;font-size:13px;color:#333333;line-height:1.6;"> @ai_shift_risk </div> </div> <!-- Internal record --> <div style="margin-bottom:36px;"> <div style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:#aaaaaa;margin-bottom:16px;">Internal record</div> <div style="display:grid;grid-template-columns:1fr 1fr;gap:20px 32px;"> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Status</div> <div style="font-size:14px;color:#1a1a1a;">@status</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Assigned reviewer</div> <div style="font-size:14px;color:#1a1a1a;">@assignee</div> </div> <div style="border-bottom:1px solid #eeeeee;padding-bottom:8px;grid-column:1 / -1;"> <div style="font-size:11px;color:#999999;margin-bottom:4px;">Additional notes</div> <div style="font-size:14px;color:#1a1a1a;line-height:1.5;">@additional_notes</div> </div> </div> </div> <!-- Footer --> <div style="display:flex;justify-content:space-between;margin-top:56px;padding-top:16px;border-top:1px solid #eeeeee;font-size:10px;color:#999999;"> <span>Confidential: internal operations record</span> <span>[Your organization name]</span> </div> </div>
4. Name and save: Give the template a name like "Daily shift checklist record" and save it.
Note: The reference number uses @rowid, the incremental row ID of the submission, piped directly into the text as "CHK-@rowid." There's no separate field for it, and no @submission_id variable exists.
Part 6 — Set up the portal pages
Four roles need four different views of the same data: location staff submitting checklists, district or regional managers handling their own escalations, operations leadership overseeing every location, and a reporting layer surfacing patterns across all of them. Start a new project from Dashboard so you have an empty canvas to build these pages on.
💡 Want to give clients, applicants, or teammates their own space to submit and track requests? This is the foundational guide to building a portal and controlling who can see it. See how to create a portal and manage users' access.
Page specification table
Group | Page | Access level | Data block | Filter | Sort | Form? |
Location staff | Submit a shift checklist | Location staff: submit only | Form | None | None | Yes |
Location staff | My submissions | Location staff: view own records only | Table | Submitter = logged-in user | Newest first | No |
District/regional manager | My escalations | Manager: view only submissions assigned to them | Kanban | Assignee = logged-in user | Grouped by Status | No |
District/regional manager | Escalated today | Manager: view only assigned records | Table | Status = Escalated AND Shift date = today | Newest first | No |
District/regional manager | Resolved | Manager: view only their resolved records | Table | Assignee = logged-in user AND Status = Resolved | Newest first | No |
Operations leadership | All submissions (pipeline) | Leadership: full visibility, all locations | Kanban | None | Grouped by Status | No |
Operations leadership | All submissions (log) | Leadership: full visibility, all locations | Table | None | Newest first | No |
Operations leadership | Today's checklist status by location | Leadership: full visibility, all locations | Table | Shift date = today | Grouped by Location | No |
Operations leadership | Locations with repeat issues | Leadership: full visibility, all locations | Table | Did any checklist item fail or get missed? = Yes | Grouped by Location, newest first | No |
Reports | Escalation trend by location | Leadership: full visibility, all locations | Chart (bar) | Did any checklist item fail or get missed? = Yes | Grouped by Location, count descending | No |
Reports | AI Analyze trend report | Leadership: full visibility, all locations | Reference page (AI Analyze) | None | None | No |
What you now have
A daily checklist that runs itself across every location: one form branches by shift type, flags the moment something fails, and gets a manager on it without anyone forwarding an email or making a call. Every escalation carries a private AI risk read next to the raw answers, so a manager can triage in seconds instead of reading a dozen yes/no fields. Location staff, managers, and leadership each open a portal built around exactly what their role needs to see, and leadership gets a bar chart and an AI-written narrative for spotting the location that keeps showing up with the same problem.
What's next
Give leadership a public read-only view of location performance If district or corporate leadership outside this workspace want to check in without editing anything, this covers building a shareable, read-only dashboard from the same submissions. → How to create a public dashboard to display form submissions
Route escalations to a whole team instead of one manager If a location needs its checklist to reach a backup manager or a whole regional team rather than one named person, this is the foundational guide to assigning by team. → What is a team in Formaloo and how to manage it
Chase down the locations that keep missing their checklist If a site keeps showing up empty on the daily status page, an automated outreach campaign can follow up on a missing submission instead of a manager doing it by hand. → How to send an email campaign and collect data with AI agents
Ready-to-use templates
Don't build this from scratch, we've already put it together for you.
Employee request workflow — Routes internal requests by type and tracks approvals from one view. Swap its request categories for the opening and closing task groups here to reuse its internal-routing backbone.
Job applicant tracking workflow — Tracks records across stages with reviewer assignments from a single Kanban view. The same status-and-assignee pattern this checklist uses to route escalations to a manager.
AI lead qualification & scoring form — Uses AI to read a submission and generate a private read next to the raw data. The same idea behind this checklist's AI shift risk field, applied to a different workflow.
Learn more how-tos
A second workflow where AI reads a submission before a person does Useful context for framing what an AI Analysis prompt should ask for, since this workflow also has AI generate a private read before a human ever opens the record. → How to build an AI-powered lead qualification system
Add a second sign-off before an escalation counts as closed If your process needs a second person to confirm a fix before it counts as resolved, this covers layering a second review stage on top of a routing workflow like this one. → How to build a dual-approval request workflow
A conditional-branching intake with AI email templates and a PDF, applied to a different industry Same underlying pattern, form intake, conditional logic, AI-personalized emails, and a PDF template, built for a healthcare intake instead of a location checklist. → How to build a patient intake and consent workflow for healthcare clinics

