Tour Dash
Report · 8 September 2026

Emergencies, Proof and Quotes

A second batch of feedback from the same beta user, four asks this time. One of them was a naming complaint, and she was right in a way that turned out to be measurable. Our own demo data had made the exact mistake her message described. That one shipped today. The other three are real features, and they are not equal: one is mostly built already and needs a last mile, one needs a table and an upload, and one needs a decision made before anybody writes code. This is what each actually costs, and what we would want to ask her at the mock trial.

From Beta feedback in the Tourdash.io group, 7 September Status One shipped (commit 92f8cca). Three specced, none started.
01

The four asks

Her words, because the detail in them keeps deciding how each one gets built.

🚨 Need Someone ASAP option I’ve had so many emergencies the day before or day of closing! Maybe alert nearby vendors who are available for same day emergencies?

Will there be an area for photos and proof of completion? If I pay someone I want them to be able to upload a photo when completed?

Option to Request quotes from 3 vendors at once being able to send the job to a few vendors and compare options. Then I can send my seller the top 3 cleaners/handymen/movers, and they can choose and potentially pay directly through the app?

I would change “Pick Up Placement” it confused me at first I would make it clearer with 2 options Sign Installation and Sign Removal

AskWhere it standsWhat it needs
Sign namingShipped 8 SeptemberDone. Migration still to run on live.
Need someone ASAPNothing existsA decision first, then a table, a trigger and a delivery channel we do not have.
Proof of completionPieces exist, pointing the wrong wayA vendor-side upload and a bucket. The smallest of the three.
Quotes from three vendorsMost of it is builtHer half is done. The seller’s half does not exist at all.
02

Sign work is two jobs Shipped

The quickest of the four, and the one with evidence behind it that we did not expect to find.

“Pick up placement” was trying to name both halves of sign work in one label and ended up naming neither. Read it cold and it can mean pulling a sign, putting one in, or accepting a placement — which is roughly the set of things she said it might mean.

What settles it is that we made the same mistake ourselves. The demo fixture demo-l-203 is a sign placement job, “Sign placement — Farbrook Drive”, filed under the sign-pickup type, whose description reads “pull the sign from the yard once it has sold or expired.” Somebody writing our own sample data hit the ambiguity and guessed wrong. A label our own team misreads is a broken label rather than a matter of taste.

So the picker now offers the two options she named. sign-pickup keeps its id, because live listings carry it in service_type and renaming ids breaks rows, and is retitled Sign removal. Sign installation is a new type above it, with one extra field, where the sign goes, because that is the thing you have to tell somebody putting one in and never have to tell somebody taking one out.

The Showing and access group on the post an opportunity picker: Home showings, Open house, Sign installation with the description Put the sign up in the yard once the listing goes live, Sign removal with the description Pull the sign from the yard once it has sold or expired, and Open door.
The two options sit side by side in the first group, where a sign job was always going to be looked for.
The same Showing and access group on the dark ground, with Sign installation and Sign removal side by side.
Both grounds. The blue mark is the showing-and-access family, unchanged. This is a naming fix, not a new category of work.

Both stay on the coverage board rather than folding into the sign-service vendor trade. That trade is the professional version, with a truck, an auger and brokerage panel stock, and a vendor only ever sees jobs in their own trade. These two are errands another agent runs on the way past, which is what the coverage board is for. An agent who wants the professional takes the “Hire a vendor instead” door at the bottom of the same page.

03

Need someone ASAP

The largest of the three, and the only one where the hard part is not code.

Nothing like this exists today. A listing has no urgency of any kind: no rush flag, no priority, nothing that separates “a week Tuesday” from “this afternoon or the closing falls apart.” A vendor finds same-day work the same way they find any work: by opening Find opportunities and looking. Her emergency is precisely the case where that fails, because the whole problem is that she does not have time to wait for somebody to check the app.

The notification triggers we have all fire on things that happen inside a job that already has two parties: an invite sent, an application received, a review left. None of them fire when a job simply appears near somebody who could do it. And every notification we send is an in-app row. We have no push and no SMS, so nothing reaches a phone that is not already open on the app. For an emergency posted at 4pm the day before closing, a row nobody opens is the same as nothing.

So the honest scope is three parts, and the third is the one that decides whether this works at all:

And the design question, which we should put to her rather than guess at. An alert that goes to every plumber within twenty miles will be ignored inside a month, and then the feature is worse than not having it, because she will believe it worked. Who gets woken up? Her preferred vendors first, then widening? Only vendors who have opted into emergency work? Is there a premium on the job, so a vendor dropping their afternoon is paid for it? Her message says “vendors who are available for same day emergencies,” which suggests she already pictures it as a thing a vendor signs up for rather than something pushed at everybody. That is the version to build.

04

Photos and proof of completion

Every piece this needs already exists, pointing the wrong way.

Tour Dash already uploads pictures against a listing. There is a pictures column, a listing-pictures bucket and an upload helper. All of it runs in one direction: the agent attaches photos when posting or editing a job, showing the vendor what they are walking into. Nothing comes back the other way. A vendor has no upload surface anywhere in the product.

Which matters most at the exact moment she is describing. Completion today is entirely on the agent’s word: she opens Posted jobs, marks the job complete, and that call releases the vendor’s money through Stripe. The vendor cannot say “here, it is done.” She has nothing to look at before she pays, and he has nothing to point at if she says he did not.

This is the smallest of the three to build and the one most likely to prevent an argument. It needs a bucket a vendor may write to, a few rows joining photos to the appointment, an upload on the vendor’s side of a booked job, and those photos shown on the agent’s completion step so there is something on screen when she releases the money. The payment flow itself does not change.

One question worth asking her: should the photo be required before a vendor gets paid? It is the difference between a nice-to-have and the thing that makes her trust somebody she has not met. It also means a vendor with a dead phone cannot get paid, which is a real cost, so it should be her call and not ours.

05

Quotes from three vendors

She asked for two things in one message. We built the first one months ago. The second does not exist.

Sending a job to several vendors at once already works, and so does comparing what comes back. In Hire a vendor she can select more than one vendor, which posts the job invite-only and sends it to exactly those people. The app confirms it with “Sent to 3 vendors.” If she posts the job without naming a price, it becomes a quote-first job: the vendors see “Send a quote” instead of “Apply”, and each names their own number.

Those numbers then come back into one dialog, listed together, each shown against hers — “$40 above your $110”, or “Their quote” when she never named one. She books one and the card is charged at that figure. The quoted price is frozen by a database trigger the moment it is named, including against her, so nobody can rewrite the number after the fact.

That is her first sentence, working today. It is worth showing her at the mock trial, because a beta user asking for a feature we shipped is the same signal we got from the preferred vendor list last week: the thing exists, and the route to it does not read like the thing she was looking for. She was in Hire a vendor picking one person. Nothing on that screen says “you can pick three and let them bid.”

Her second sentence is the part that does not exist. “Send my seller the top 3 and they can choose and potentially pay directly through the app” means a person who is not a Tour Dash user seeing a shortlist, picking from it, and paying. There is nothing like that anywhere in the product: no way to share anything with anyone outside the app, no client-facing view, no payment by a third party. Stripe Connect is built around an agent paying a vendor, and a seller paying instead is a different flow with its own questions about who is owed a refund when a job goes wrong.

This is the ask with the most product in it and the least code written. It is also the one that would change what Tour Dash is — from a tool an agent uses to something an agent puts in front of a client. Worth taking seriously for that reason, and worth not starting until we understand it.

06

What to ask her at the mock trial

Four questions whose answers change what gets built. Cheaper to ask than to guess and rebuild.