Tour Dash
Review · 5 September 2026

UI review, September

Every screen in the app, shot in a real browser at 320, 390, 768, 1024 and 1440 wide, light and dark, as the agent and as a contractor. The desktop app is in good shape and reads as a product somebody designed. The phone is not: an agent can reach five pages and the rest have no way in. Below that, the fixes are mostly drift, the small inconsistencies that accumulate when a lot of screens ship quickly, and they are the things that make a product feel generated.

Scope the app at tour-dash.pages.dev, every route, both account types Method headless Chrome over the DevTools protocol against /demo Changes made none, this is a critique
01

The short version

Fix the phone first. Then spend one pass on naming and money formatting across the whole app, because that is where it currently gives itself away.

02

The phone has no way in

This one is structural, not cosmetic. The sidebar component is rendered with hidden md:flex, and the button that would open it is hidden the same way, so below 768 pixels neither exists. The shadcn sidebar already has a phone mode that slides the same menu in as a sheet; the app switches it off and never puts anything in its place.

The agent dashboard on a 390-pixel phone. The header row holds only a bell icon and a moon icon on the right, with the left side empty. The bottom bar has five tabs: Home, Find, Post, Hire, Calendar.
The agent on a phone. The header row is empty apart from the bell and theme toggle, and the five tabs are the whole map. No logo, no search, no menu.
The contractor dashboard on a 390-pixel phone with the same empty header and five tabs: Home, Find, My jobs, Calendar, Wallet.
A contractor gets Wallet in the bar, so their situation is better, but Profile, Settings, How it works and Logout are still unreachable.
Agent on a phoneHow you get there
Dashboard, Find, Post a job, Vendors, CalendarBottom tabs.
My opportunitiesOnly the "All jobs" link on the dashboard.
My listingsOnly the "All posts" link on the dashboard.
WalletOnly "Open wallet" under recent activity on the dashboard.
Leads, ReferralsNo route. The header search that would take you to Find is also hidden below 640.
Profile, Settings, How it works, LogoutNo route. There is no way to sign out on a phone.

What to do. Put the logomark at the left of the mobile header, and next to it a menu button that opens the existing sidebar as a sheet. That is the smallest change that gives every page a way in, and it reuses the role-aware list and the account block the sidebar already has, so contractors get their names and agents get theirs. Keep the five tabs exactly as they are; they are the right five. The search box can live inside the sheet on a phone rather than being dropped.

The alternative is a "More" tab in the bar. It is worse here: it costs Calendar or Hire their slot, and it duplicates a list the sidebar already maintains.

03

Two pages break at phone width

Settings on a 390-pixel phone. A left column of eight menu items in large title-case type takes half the width; the right column is squeezed so 'Notification settings' is cut off and the three toggle switches are clipped at the right edge.
Settings keeps its desktop two-column layout on a phone. The heading is cut off and every toggle is clipped at the edge. The menu on the left is also set larger than anything else in the app.
Profile on a 390-pixel phone. A large avatar takes the left third; the name wraps to two lines beside a clipped Edit profile button; the ZIP code, rating and member-since line wraps into three rows.
Profile at 390. The avatar column wastes a third of the width, the meta row breaks into three lines, and the Edit profile button runs off the edge.
04

Drift: the things that make it read as generated

None of these is a bug. Together they are the difference between an app one person designed and a set of screens that were each fine on their own.

Naming

WhereWhat it saysSuggestion
SidebarFind Opportunities, My Opportunities, My Listings, My Wallet, but How it worksSentence case throughout, the locked convention: Find opportunities, My opportunities, My listings, Wallet.
Nav vs page titleFind Opportunities opens "Available opportunities"; My Wallet opens "Wallet"Make the nav label and the h1 the same words. The subtitle is where the page explains itself.
The vendor flow"Hire a vendor" (My listings, Post a job), "Post a job to a trade" (Vendors), "Browse vendors" (How it works), "Hire" (tab)One label per intent. "Hire a vendor" for the flow, "Vendors" for the directory, and the tab stays "Hire".
Sort controlsFind uses a ghost button reading "Soonest"; Leads uses a full select reading "Freshest first"One sort control, used on both boards.
Login tagline"Every Showing. Every Task. We got you Covered"Random capitals and a fragment chain. Either one plain sentence or nothing under the heading.
404An uppercase "ERROR 404" kicker above the headline, and two buttonsDrop the kicker; the headline already says it. One button back to the dashboard.

Money

The app has no single formatter. The dashboard says "$45" and "Asking $95.00 to $110.00" in the same card. Wallet and My opportunities say "$2,075"; Profile says "$2075.00" with no thousands separator. Leads say "$75.00" while jobs beside them say "$85". How it works says "$25.00" and "$10.00 on a $50.00 job". The Apply dialog, correctly, shows "$71.50" because the cents are real.

The rule to adopt: whole dollars with a thousands separator unless the cents are non-zero, and one helper that everything calls. money() in the admin metrics file is already most of it.

Page shells

Post a job at 1440: a title, a one-line subtitle, a two-step indicator, then three groups of service cards.
Post a job: title, subtitle, content. This is the shell most pages use.
Hire a vendor at 1440: a separate bar with a back arrow and the title, then a three-step indicator and the trade cards.
Hire a vendor: a back-arrow bar with no subtitle. Profile and Settings use this one too. Two shells for the same kind of page.

Pick the title-and-subtitle shell for everything. The back arrow is a browser button; when a page genuinely needs a way back, a small "Back to leads" link like the one on Sell a lead does it without a second header style.

Headline actions on a phone

Every page that has a header button renders it as a full-width secondary button above the figures on a phone: "Find opportunities" on My opportunities, "Sell a lead" on Leads, "Today" on Calendar, "Hire a vendor" and "Post a job" on My listings. It is consistent, which is good, but it spends the first screen on a button. Where the action is also in the tab bar (Post) or is a repeat of the page's own content (Find), drop it on mobile. Where it is the page's one job (Sell a lead), keep it and make it the amber primary.

The filter row on Find

Find opportunities on a 390-pixel phone: the title, the location chip, then nine service-type chips in a wrapping row, then 'Clear all (1)', with the results count and the first card only just visible at the bottom.
At 390 the nine chips and the location chip fill the first screen. At 320 the first result is two screens down.

Below 640, collapse the service chips into one row that scrolls sideways, or behind a "Filters" chip with a count. The location chip and the result count are the two things that must stay visible; the list should start within the first screen.

05

What is holding up

The agent dashboard at 1440: 'Welcome back, Dana', a Waiting on you group with two posts and their applicants, Your next few days with photo cards grouped by date, Work you could take, Recent activity, and a right rail of four figures.
The dashboard, desktop. Grouped by what the agent has to do, in the order they have to do it. The one amber element on the screen is the one primary action.
06

Small things

07

Suggested order

WorkWhy this position
1Mobile header: logomark, menu button opening the sidebar sheet, search inside the sheet.Unblocks every page on a phone, including sign out. One component, one afternoon.
2Settings and Profile at phone width.The only two pages that visibly break.
3One money formatter, called everywhere.Mechanical, touches many files, and it is the most visible tell.
4Sidebar labels to sentence case; nav label equals page title; one name for the vendor flow.Copy only. Half a day including a search for stragglers.
5Retire the back-arrow shell on Profile, Settings and Hire a vendor.Small layout change, large consistency gain.
6Find's filter chips collapse below 640; mobile header buttons trimmed per page.Gets the first result onto the first phone screen.
7The small things above.As they come up.
08

What shipped the same day

Items 1, 2, 4 and 6 from the order above, plus the naming on the bar and the menu, went live on 5 September. Money formatting, the back-arrow shell on Hire a vendor and the small things are still open.

The agent dashboard on a 390-pixel phone after the change. The header now shows a menu icon, the Tour Dash logomark and wordmark on the left, with the bell and theme toggle on the right. The bottom bar reads Home, Find, Post, Vendors, Calendar.
After. The header carries the mark and the way in; the bar's fourth tab is named for the page it opens.
The menu sheet open over the dashboard on a phone: Tour Dash and a close button at the top, a search box, then Home, Find opportunities, My opportunities, Vendors, My listings, Leads, Referrals, Calendar, Wallet, Admin, then How it works, Settings, Logout, and the account name and email at the bottom.
The sheet. Same list as the desktop sidebar, same names as the pages.
09

How this was checked