Tour Dash
Report · 5 September 2026

The job feed

Every job on Tour Dash was only visible to the people who could take it. Right for a marketplace, wrong for a shop window: with no contractors on the live database, nobody could see the handyman job Carey posted except Carey. tourdash.io/jobs now shows what agents are posting to anyone, at town level, and every job has its own page, built to be sent to the person who should take it.

Scope two public pages, one database function, one new scope on the board Verified 1440 and 390 wide, light and dark, on sample data Live tourdash.io/jobs, function created 5 September
01

The short version

A demand feed, not a third board. It shows the work exists and points at the account that can take it. Applying still happens in the app.

02

The pages

tourdash.io/jobs at 1440 wide on sample data: the headline The work agents are posting right now, a three-figure strip reading 15 jobs open, 8 towns, 15 posted this week, then jobs grouped under Tomorrow, Mon Sep 7 and so on, each row with a service mark, title, town, who takes it, when it was posted, the brokerage and the pay. A rail on the right reads Take this work with Create an account and Sign in.
The feed. Same chrome and market scene as the landing, held still. A filled disc is work another agent covers; a ring is a trade booked from the vendor directory, the mark the app already uses.
One job's page: Home Showings, the title Buyer showing, 4BR colonial, Short Hills, then a card with When, Pay, Posted and Who takes it, and buttons reading Sign in to apply, Create an account, and Send this job to someone.
A job's page. The time of day and the address are named as things that unlock after sign-in, so the page is honest about what it withholds.
The feed in the dark theme.
Dark, for free: every colour on the page is a token.
The feed on a 390-pixel phone: headline, figures, then the day groups in one column.
The feed at 390.
A job's page on a phone: the facts card, then three full-width buttons.
A job at 390. The share button uses the phone's own share sheet where there is one.
The in-app board with All nearby selected: twelve opportunities within five miles, a legend that now includes Ring = vendor work, and the usual cards.
The board's new scope. The segmented controls take a raised card rather than the accent, so Post a job stays the one amber element.
03

Live

The function was created on the live database the same afternoon, and the first job on the public board is the one that started this: the handyman job in Seaside Heights. The page shows its town, its date, "by quote", the brokerage and who takes it, and none of the address, the time or the poster's name. A link to a job id that does not exist says the job is not on the board any more rather than erroring.

tourdash.io/jobs live: figures reading 1 job open, 1 town, 1 posted this week, and one row under Today: a ring mark, Handyman, Seaside heights NJ, booked from the vendor directory, posted 2 hours ago, Signature realty, By quote.
tourdash.io/jobs, live, an hour after the migration.
The live page for the Seaside Heights handyman job: Handyman in Seaside heights NJ, Today, Saturday September 5, time of day shown after you apply, By quote, posted 2 hours ago by an agent at Signature realty, Handyman booked from the vendor directory, and the three buttons.
Its page. This is the link to send to a handyman.

Town and brokerage names arrive in whatever case the poster typed them ("Seaside heights", "Signature realty"). The feed shows them as entered rather than guessing at capitalisation, which would get names like McLean wrong.

04

Files

FileWhat it is
supabase/job-feed-migration.sqljob_feed(limit, job_id): the public read, security definer, granted to anon and authenticated.
src/hooks/useJobFeed.tsThe feed and one-job queries, with the demo store's twin.
src/lib/job-feed.tsWho takes it, town and pay labels, posted-ago, grouping by day, the figures.
src/components/marketing/MarketingShell.tsxThe still version of the landing's chrome, shared by both pages.
src/pages/Jobs.tsx, src/pages/Job.tsxThe feed and a job's page.
src/components/NearbyWorkCard.tsxThe board's card for work this account cannot take.
src/pages/FindOpportunities.tsxThe For you / All nearby scope.
src/lib/hosts.tsmarketingHref(), the link from the app back out to the public page.
src/App.tsx, src/demo/DemoApp.tsxThe two routes, on either host, signed in or out, and under /demo.