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
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
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
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
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
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
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 headerX-HCZ-Secret = [YOUR_SECRET]. Send a sample payload from any REST client to capture the JSON structure. - 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: IfPanic_Switch = true, return Webhook Response423 Lockedwith{ok:false, reason:"panic_switch"}; (c) Router B: If not locked, Airtable → Update record in Toggles byToggle_Record_IDto setCurrent_State = {{desired_state}}andAudit_Reason = {{reason}}; (d) Optional: update Metrics/Clients timestamps. End with Webhook Response{ok:true}. - 8
7) Softr — connect Airtable and define user groups
Create a Softr app → Data → connect your Airtable base. Create User Groups:
AdminandClient. Add users to groups (your email to Admin; client contacts to Client). - 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
Clientonly. Data rules: filter to records where the linked Clients→Portal_Emails containscurrentUser.email(and optionally aClient_IDURL param if you pass it). Add a card header showing Metrics→SLA_Chip and Last_Run_At for proof. - 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
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
Adminonly. - 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
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_Stateflips correctly,Last_Toggle_Atupdates, andLast_Toggle_Byshows the service user. Confirm Softr success/error toasts match webhook responses. - 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_Statevalues (or add a one-click Admin ‘Reset’ button if desired). - 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), andupdated_at(AirtableLast_Toggle_At). Compute median and p95 round-trip; publish these on your Build page once measured. - 16
15) Go-live hygiene
Invite actual client users to the
Clientgroup; 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.