Sometimes the right move is to turn something off without killing it.

The automated measurement pipeline — Google Solar API for property insights, RapidProperty for parcel lookups, SAM for AI lawn detection — was consuming API credits, occasionally producing confusing results for users who just wanted to draw a polygon, and adding complexity to a flow that needed to be simple while the business found its footing. But deleting the code would mean rebuilding it later. And later would come.

One feature flag. FEATURE_AUTOMATED_MEASUREMENT in a new config/features.php file. Default: false.

On the backend, three API routes return 403 when the flag is off — property insights, AI detection trigger, AI detection save. Geocode and autocomplete stay active because address lookup isn't the problem. On the frontend, a matching VITE_FEATURE_AUTOMATED_MEASUREMENT env var gates the UI across three files. When it's false, no API calls fire, no property estimates render, no AI detection buttons appear. The measurement view shows what it showed before any of the automation existed: a satellite map and a polygon drawing tool.

Both layers matter. The frontend hides the buttons. The backend rejects the calls. Even if someone crafts a manual API request, they get a 403. Belt and suspenders.

Everything else stays. Every service class, every model, every composable, every component, every database table, every migration. One hundred and seven lines across seven files. Two environment variables set to true and the entire pipeline comes back.

Three feature tests verify the 403 responses when the flag is disabled. Not because anyone asked for tests, but because a kill switch you can't verify is a kill switch you can't trust.

A soft disable is an act of respect for the work that came before it. The code isn't wrong — it's early. The feature isn't bad — it's premature. Turning it off without deleting it says: we'll be back for you when the time is right.