Back to projects
Take-home technical assessment · Operations & AI Automation Specialist role

Three numbers in the brief didn't add up. I found them before I built anything.

A ClickUp workspace and seven self-hosted n8n workflows for a fictional 12-room assisted-living facility, engineered around a 60-use lifetime custom-field budget and a 5-automation ceiling on the free tier.

ClickUpn8nWorkflow AutomationProcess DesignREST APIs
≈$99K/yr
Forgone revenue found in a 3-bed staffing ceiling
32/60
Custom-field budget spent — everything else moved to free objects
7
Self-hosted n8n workflows, built and live-tested against the real workspace
0
Duplicate notifications across repeated runs — idempotent by design
The scenario

A fictional facility. A very real set of constraints.

The brief described a 12-room assisted-living facility running since 2018 — three caregivers, a 1:3 ratio policy, cash-only billing, and a free-tier ClickUp plan expected to hold all of it together.

FactValue
Licensed capacity12 rooms
Current census8 residents
Caregivers3, at a 1:3 ratio policy
Caregiver lunch break30 min, at noon, for each caregiver
Sales calls45/day, 8 min average, 22% stated conversion
Sales shift6 hours active
Billing$2,000–$3,500/month per bed, cash only

Two deliverables were required: a ClickUp workspace covering task management, medication tracking, a sales CRM, and a relatives directory (Part 1); and an n8n automation sending visit-day weather briefings to relatives (Part 2, the brief's one explicit automation requirement).

What I found

Three problems hiding in the brief's own arithmetic.

Not gaps the brief left open — numbers it stated that quietly contradicted each other.

STAFFING

All three caregivers break at the same time

Noon lunch, taken simultaneously, for thirty minutes — for that window the facility runs 0 staff to 8 residents, a daily breach of its own 1:3 ratio policy.

CAPACITY

Three beds are structurally unsellable — and nobody had noticed

3 caregivers × 1:3 ratio caps safe census at 9. The facility is licensed for 12. Three beds sit empty for staffing reasons, not demand — about $99,000 a year in forgone revenue.

SALES MATH

The stated conversion rate breaks the business model

45 calls × 8 minutes is the entire 6-hour shift, leaving no time to log a call or follow up. And a flat 22% dial-to-admit rate would mean roughly 10 new admissions a day into a 12-bed home.

The build

A 60-use field budget, for the life of the workspace.

ClickUp's free plan doesn't cap custom fields — it caps uses: every value set on every task, counted once, forever. Eight residents on six ordinary fields would spend 80% of that budget on a single list. The design doctrine: a field earns its place only where a machine must read the value; everything else moves onto free, unlimited native objects.

01

Field-budget doctrine

Custom fields treated as a non-renewable resource — statuses, tags, checklists, and relationships carry meaning for free instead.

02

Four-Space workspace

Care Operations, Growth, Family Relations, and Business Office — 12 lists total, built around the doctrine above.

03

5 native automations, spent deliberately

Each of ClickUp Free's five automation slots assigned to the single highest-value trigger on its list.

04

Free-plan workarounds

No chart cards, no map view, no webhooks, no automation conditions — each gap engineered around rather than accepted.

05

n8n as the escape hatch

Self-hosted, unlimited execution — everything conditional, cross-list, scheduled, or chart-based that the free plan structurally cannot do.

The automation suite

Seven workflows, each covering a gap ClickUp Free cannot close natively.

Every workflow below was built, debugged against real API responses, and executed live against the actual workspace — not simulated.

WorkflowRunsWhat ClickUp Free can't do
W1 — Visit-Day Weather BriefingDaily 06:00No task webhooks, no external API calls, no household grouping — the brief's one explicit Part 2 requirement
W2 — Medication Safety NetEvery 30 minCan trigger on a status change, not evaluate a numeric threshold like '45 minutes late' or '3× in 7 days'
W3 — Sales Command CenterDaily 06:15No chart cards on Free, and Dashboards cap at 60 lifetime views
W4 — Shift Handover Digest06:45 & 18:45One automation is scoped to one List; this aggregates four Lists per caregiver
W5 — Cash & Arrears ControlDaily 08:00Can't total a column or compare consecutive receipt numbers for gaps
W6 — Capacity-Aware Lead RoutingDaily 08:30Cross-list comparison — beds vs. leads — against a policy ratio, then branching
W7 — Retention Radar & HygieneWeekly, Mon 07:30No trigger exists for 'this relationship doesn't exist' across two lists

W1's idempotency was verified directly: run twice in immediate succession, the second run processed zero households — zero duplicate emails, proven rather than assumed.

Engineering reality

The bugs are part of the work, not incidental noise.

Real debugging that shaped the final build.

API

A GET request disguised as a PUT

ClickUp's API silently defaulted the HTTP method, returning a 403 from CloudFront with no obvious cause. Fixed by explicitly setting the method on every write-back node — now a standing verification step.

DATA FLOW

One chain, two consumers, a silent overwrite

A linear node chain let a later step overwrite data an earlier step still needed downstream. Rewired into two parallel branches off the same source node so both consumers get their own copy.

FIELD NAMES

A `400 – Comment is required` error with a comment already in the payload

The code referenced `$json.commentText`, but the upstream node's real output field was named `comment` — `JSON.stringify` silently drops keys that resolve to `undefined`. Fixed by cross-checking the exact field name in the actual upstream output before writing any downstream expression.

SCOPE HONESTY

The video script ran over the assessment's 10-minute limit

Flagged plainly rather than hidden, with a prioritized, quantified cut plan — exactly what to shorten and how much time each cut recovers — so the final recording fits the constraint without losing the content that best demonstrates the reasoning.

Note on assets

This one lives in ClickUp and n8n, not a code repo.

The deliverables for this project are a ClickUp workspace, seven live n8n workflows, and a set of written guides rather than a public repository — so there's no "View source" link here. Get in touch and I'm glad to walk through the live workspace, the workflow canvases, or the full written report.

Built with
ClickUp APIn8nJavaScript (Code nodes)REST APIsGoogle Sheets APIProcess AutomationTechnical Documentation