Recall

A spec for the smallest useful tool in a trade where the entire lifetime value of a customer is one well-timed text message.

What it is

A friend cleans dryer vents for a living. A vent wants cleaning once a year — twice with pets or a lot of towels — so every job he finishes is a job that comes due again on a date he already knows. The customer will not remember. He has no system that remembers either.

That’s the whole product:

When a job is finished, schedule a text for when that vent is due again, and make rebooking one tap.

Three screens. Six tables. No invoicing, no payments, no routing, no estimates, no dispatch. The spec spends most of its length on what not to build.

Why it doesn’t already exist

It does, sort of. It’s just priced as though it were a platform.

Jobber tierPriceAutomated client reminders
Core$29/mo—
Connect$99/mo annual · $139 monthlyfirst tier with it
Grow$149/mo✓

The one feature that is the business model costs three to five times the price of admission. That’s not an accident or an oversight. A cron job and a text message is not a $99/month product, so it gets bundled upward into something that is. The economics of vertical SaaS mean nobody will ever sell the small thing to the guy standing at the counter.

Running cost for the version in this spec, including carrier fees and a box to put it on: $10–15 a month.

The thing worth stealing

Since 1 February 2025, US carriers block 100% of unregistered A2P traffic on 10-digit long codes — silently.

Not throttled, not bounced. Blocked, with no error surfaced to the sender and nothing visible to the recipient. You can build an entire reminder system, watch every send report success, and have zero messages arrive. The fix is registering a Brand and a Campaign through The Campaign Registry — service reminders file as Customer Care — at about $15 one-time plus $1.50–10/month, and approval takes days.

It’s the long pole on a weekend project, it has to happen before any code is worth writing, and it is invisible until it bites. Anyone building SMS into anything should know this first.

Restraint as a feature

The interval rule is one function and has to stay one function. Pets or heavy use, six months; otherwise twelve. Send one month early, so the booking lands near the anniversary rather than after it.

Duct run length, termination type and floor are deliberately excluded — those drive price, not frequency. Letting them into the interval logic is exactly how a tool with one job becomes a configuration screen with a settings tab.

Two messages per cycle. Maximum. The first on the due date, one follow-up ten days later, then silence until the next job resets it. A third message is how a useful tool becomes spam and how a small operator’s phone number gets carrier-flagged.

There is no AI in it

Worth stating plainly, because the research that produced this spec started from the opposite question — where does AI fit in this trade? The honest answer, after going through it properly, was: not here. The best tool for this business is a date comparison and a text message.

The AI-shaped opportunity in the same trade is real and it’s somewhere else entirely — the deliverable in dryer vent cleaning is a geo-tagged before-and-after photograph that goes in an insurance file, which makes verification rather than generation the thing with a price on it. That’s a different project.

Technical details

StorageSQLite — six tables, one of them an append-only event log
DeliveryTwilio SMS + inbound webhook for STOP
InterfaceThree server-rendered screens, phone-sized, no build step
SchedulingOne cron entry. Not a queue system
AuthOne shared password. One user. No roles
ComplianceA2P 10DLC registration, logged consent, permanent opt-out keyed by phone
MetricJobs booked within 30 days of a reminder
StatusSpecified, not built

The opt-out table is keyed by phone number rather than customer, and sits outside the customer record on purpose: editing or re-creating a customer must never resurrect a number that said stop.