Checklist

Client Control Surface: Airtable + Softr Build Checklist

A step-ordered, field-accurate build checklist for shipping a thin client control surface with Airtable + Softr + Make. Designed for solo operators who need on/off toggles, SLA proof chips, and a panic switch—without building a full app.

Use this to ship a thin client control surface (on/off toggles, SLA chips, recent runs, and a panic switch) in under a day with Airtable + Softr + Make. Name fields exactly as shown so your mappings work the first time; use a dedicated service account for auditable updates. Note: Softr’s Call API action requires the Professional plan or higher (as of May 2026).

  1. 1

    0) Pre-flight: plans, accounts, and service user

    Confirm Softr Professional+ (for Call API), an Airtable base, and a Make account. Create a dedicated Airtable service user + Personal Access Token (PAT) named “Service (Make)” and store the PAT + a shared secret (for webhook header) in a password manager.

  2. 2

    1) Airtable — create the Base and Clients table

    Create base “Client Control Surface.” Table: Clients with fields: - Client (Primary, single line text) - Client_ID (Formula: RECORD_ID()) - Portal_Emails (Long text or multiple email; one per line) - Panic_Switch (Checkbox) - Notes (Long text).

  3. 3

    2) Airtable — Toggles table (one row per controllable switch)

    Create table: Toggles with fields: - Toggle (Primary, e.g., “Send Weekly Report”) - Client (Link to Clients; enable ‘Allow linking to multiple records’ off) - Toggle_Record_ID (Formula: RECORD_ID()) - Current_State (Single select: ON, OFF) - Audit_Reason (Long text) - Last_Toggle_At (Last modified time; watch “Current_State” only) - Last_Toggle_By (Last modified by; watch “Current_State” only).

  4. 4

    3) Airtable — Metrics table (proof chips)

    Create table: Metrics with fields: - Client (Link to Clients) - SLA_Target_Minutes (Number, 0–10,000) - Last_Run_At (Date/Time, include time, use GMT/UTC) - Run_Status (Single select: OK, Degraded, Failed) - SLA_Chip (Formula):

    IF(
      {Last_Run_At},
      IF(DATETIME_DIFF(NOW(), {Last_Run_At}, 'minutes') <= {SLA_Target_Minutes},
         "🟢 SLA OK",
         "🟠 SLA Miss"),
      "⚪ No data"
    )
    
  5. 5

    4) Airtable — service access and auditability

    Share the base with the “Service (Make)” user (Editor or higher). Add base-level fields where useful: - Updated_At (Last modified time, watch all) - Updated_By (Last modified by, watch all). Expect updates made via Make to show the service user in ‘Updated_By’ for clean audit chips.

  6. 6

    5) Make — create inbound webhook with a shared-secret gate

    In Make, add Scenario → Trigger: Custom Webhook named toggle_event. In the webhook settings, require header X-HCZ-Secret = [YOUR_SECRET]. Send a sample payload from any REST client to capture the JSON structure.

  7. 7

    6) Make — map, gate on panic switch, and update Airtable

    Add modules: (a) Airtable → Search records in Clients where Client_ID = {{client_id}}; (b) Router A: If Panic_Switch = true, return Webhook Response 423 Locked with {ok:false, reason:"panic_switch"}; (c) Router B: If not locked, Airtable → Update record in Toggles by Toggle_Record_ID to set Current_State = {{desired_state}} and Audit_Reason = {{reason}}; (d) Optional: update Metrics/Clients timestamps. End with Webhook Response {ok:true}.

  8. 8

    7) Softr — connect Airtable and define user groups

    Create a Softr app → Data → connect your Airtable base. Create User Groups: Admin and Client. Add users to groups (your email to Admin; client contacts to Client).

  9. 9

    8) Softr — Client Dashboard page with role/row visibility

    Add a page “Client Dashboard.” Add a List/Grid block bound to Toggles. Visibility: show to Client only. Data rules: filter to records where the linked Clients→Portal_Emails contains currentUser.email (and optionally a Client_ID URL param if you pass it). Add a card header showing Metrics→SLA_Chip and Last_Run_At for proof.

  10. 10

    9) Softr — Call API button (the actual toggle)

    Inside the Toggles list item, add a Button block with Action: Call API (POST) to your Make webhook URL. Headers: Content-Type: application/json, X-HCZ-Secret: [YOUR_SECRET]. Body:

    {
      "client_id": "{{Clients.Client_ID}}",
      "toggle_id": "{{Toggle_Record_ID}}",
      "desired_state": "{{#if (eq Current_State 'ON')}}OFF{{else}}ON{{/if}}",
      "actor_email": "{{currentUser.email}}",
      "reason": "Client toggle from portal"
    }
    

    Success message: “Updated. Check audit chips.” Error: show message from response.

  11. 11

    10) Softr — Admin page and block-level controls

    Add an “Admin” page with lists for Clients, Toggles, and Metrics, plus a visible Panic Switch chip (Clients.Panic_Switch). Restrict the entire page (or sensitive blocks) to Admin only.

  12. 12

    11) Hardening — rate limits, retries, and secrets

    In Make, set maximum concurrent executions to preserve order if needed; understand Make’s webhook rate limits (bursts may 429). Use your secret header filter first in the Scenario; add simple retry (e.g., 2 attempts with short delay) on Airtable update failures.

  13. 13

    12) Post-deploy test — functional sweep

    As Admin, create one test Client + two Toggles. As a Client user, click the toggle button ON→OFF→ON, twice each. Verify in Airtable: Current_State flips correctly, Last_Toggle_At updates, and Last_Toggle_By shows the service user. Confirm Softr success/error toasts match webhook responses.

  14. 14

    13) Post-deploy test — panic/kill switch and rollback

    Flip Clients.Panic_Switch = checked. As the Client user, press the toggle; expect Softr error and no Airtable change. Uncheck Panic_Switch, then manually revert any wrong Current_State values (or add a one-click Admin ‘Reset’ button if desired).

  15. 15

    14) Latency spot-check (fill in real numbers later)

    Run 10–20 toggles while logging three timestamps: request_at (client click), received_at (Make: add a ‘now’ variable), and updated_at (Airtable Last_Toggle_At). Compute median and p95 round-trip; publish these on your Build page once measured.

  16. 16

    15) Go-live hygiene

    Invite actual client users to the Client group; spot-check record filters per user; set sensible defaults in Toggles; and pin the Admin page behind group-only visibility. Document the service PAT rotation date and the secret header location for future maintenance.