Tour Dash
Report · 7 September 2026

The Property Hub

Two asks came in from a beta user on 7 September, and they turned out to be very different jobs. One was for a “Preferred Vendor” list, which the product already had — as a filter chip on the page for finding new people, which is why she never found it. The other was for somewhere to see everything attached to one house: cleaning, sign installation, inspection, CO, coverage. That one did not exist at all, and could not, because a listing IS a job at an address and two jobs on one house were two unrelated rows with nothing joining them. Both are built. The second needed a new table, and it was shaped by a detail in her own list: only three of the five things she named are things Tour Dash sells.

From Beta feedback in the Tourdash.io group, 7 September Status Live. Migration applied and app deployed 7 September; commits e1e8fe1, 6a1c8cc and a011ca6
01

What she actually asked for

Two messages, back to back. Worth reading in her own words, because the second one contains the constraint that decided how this was built.

Also Is there a way I can do Favorite list? I am the type of person I stick to the people I can rely on and trust! Maybe a section as “Preferred Vendor” and hire them again without searching?

Maybe it’s just me, but I’m neurotic about having everything organized in one place. I have so much on my plate and sub out almost everything. It would be great to create a property profile like hub or something and see everything attached to it cleaning, sign installation inspection CO coverage everything in one place

The list in that second message is the specification. Cleaning, sign installation and coverage are Tour Dash trades. An inspection and a certificate of occupancy are not, and never will be — an inspector is hired outside this marketplace and a CO is issued by a township. She was not describing a filtered view of her Tour Dash jobs. She was describing the spreadsheet she keeps, and asking whether the product could replace it.

02

The preferred list was already there

Every part of it shipped months ago. What was missing was anywhere it read as a list rather than as a setting.

So nothing was rebuilt. The same data was given a shape, a name and a door: a Preferred vendors section at the top of the directory, and a row of them on the dashboard. One tap opens the hire wizard with the trade and the person already chosen, which is the literal request — hire them again without searching. Somebody who has not finished payout setup is shown as unbookable on the row rather than three screens into the wizard.

A dashboard section headed Preferred vendors with a count of 3 vendors and an All vendors link, beside three cards showing Teddy Hollis, Locksmith; Rosa Delacruz, Cleaner; and Mira Kovacs, Listing photographer, each with an avatar.
On the dashboard, below the day’s work and above the ledger. It is not something waiting on the agent today — it is the shortcut they reach for once they have decided something needs doing.
A section at the top of the Vendors page headed Preferred vendors with a count of 3 and the line Tap one to hire them again without searching, above three vendor cards.
And at the top of the directory, above the search controls, so your own people come before the list of everybody else.
03

The hub

One house and two lists, divided by whether Tour Dash sells the work.

The property hub for 45 Chapel Hill Road, Short Hills NJ, marked Under contract with 5 outstanding. A section headed Tour Dash work lists Home showings open, Deep clean booked, and Sign install done. Below it a section headed Tracked elsewhere lists Certificate of occupancy waiting, Inspection scheduled, Appraisal to do, Smoke certification done, and Utility transfer not needed, each with a date, who is doing it, a status dropdown and a note. A Notes field sits at the bottom.
45 Chapel Hill Road. The three jobs bought through Tour Dash sit above the five things being chased outside it, which is the arrangement the feedback described.
The Properties page listing six houses in Short Hills and Summit NJ, each row showing the address, the town, an outstanding count and a stage pill reading Active or Under contract.
The list is deliberately thin. It exists to get you into a hub, so a row carries the address, the stage, and one count of what is still owed.
04

What went into the database

Two tables and one column, plus a backfill so the feature does not ship empty.

WhatWhy it is shaped that way
propertiesBelongs to the agent, not the house. Two agents co-listing get a row each, which is correct rather than duplicated: the hub is a private worklist and its notes are your own.
address_keyGenerated in the database, never written by the client, so the key and the address can never disagree. Normalises case, punctuation and whitespace only — it does not expand “Ave” to “Avenue”. Splitting one house into two hubs is a nuisance you fix by renaming; merging two houses into one is data loss.
listings.property_idon delete set null, emphatically not cascade. A listing carries applications, an appointment and a payment, and money that has moved cannot be un-moved by tidying up a hub.
property_itemsThe work Tour Dash does not sell. Ownership is checked through the parent rather than by carrying a copy of the agent id, because a copy can be wrong in a way the subquery cannot express.
The backfillGroups every listing already posted onto a house by normalised address. Without it an agent with forty posted jobs opens the list to nothing and concludes it does not work.

New jobs are attached in the client rather than by a database trigger. A trigger fires for every insert, including listings posted by vendor accounts and by the demo seed, and would create properties for accounts with no hub to show them in. It also cannot be explained on screen. The find-or-create runs at the two places that post a job, catches the unique-index violation if two tabs race, and re-reads.

05

How it was checked

06

Shipped, and what is left