Tap a callback to jump to that door on the map.
Nothing yet. Log a door on the map and it shows up here.
Step 1 of 3
Add New Pin
Pick a time to continue.
Skip needs permission skip_calendar_booking
Please enter the information of the potential customer, a copy of the customer's bill and any notes.
Fill in the fields marked in red.
More outcomes
Layers
Off by default. Loads only what is on screen.
Five layers. The current prospecting map has about 45 toggles in one modal.
Built for a thumb at the door
One screen, map first. The phone on the left works: log doors, set an appointment, drop the signal, turn layers on.
One tap logs the knock
Tap the outcome and the next door is ready, ringed on the map. A mis-tap? Undo is there for 5 seconds.
Every house, colored by history
Every door in the turf shows its last outcome, so nobody knocks a "do not knock" or re-pitches yesterday's no.
Appointments use the flow you know
Same submission steps and backend as today's map, restyled: Add New Pin, Calendar, Lead Submission, then Podio, GHL and the closer, with every step shown.
Works with no signal
Knocks save on the phone and sync once when the signal returns. A chip shows exactly what is waiting.
5 layers, off by default
Past installs, warm leads, move-ins, bad roofs and your old pins. Each loads only for the area on screen.
Try it: tap outcomes, tap any house dot, flip the wifi icon in the status bar, then check Follow-ups and Me.
Turf, live team and today's board
For team leads and anyone Colton's team gives manage_doors. Checked on the server, every call.
Scroll sideways to see the full console.
Turf
Live team
Updated every few secondsLive only while the rep has the app open (opt-in). Faded dots have not updated recently.
Today's board
Tap a column to sort. Doors/Appt: lower is better.
Handoff health · today
Every appointment tracked from the door to the closerA module inside rtpdashboard
Same login, same permissions, same GHL and Podio connections. Door data lives in a Cloudflare Worker on RTP's own account, reachable only from the dashboard server.
Scroll sideways to see the whole diagram.
Uses what you already have
Auth0 login, access_control permissions, GhlClient and the Podio lead path all stay as they are. Doors adds no second login and no second CRM connection.
Nothing trusts the browser
Each Doors route reads the caller from the Auth0 session. The Worker accepts only dashboard server calls with a bearer token and a caller claim signed in the last 60 seconds.
Old map stays live until sign-off
/prospecting stays as it is. Doors ships dark behind DOORS_ENABLED and view_doors. Old pins and knocks import into Doors, dry run first. The old map retires only when your team signs off.
Tighten how dashboard API routes check who is calling, before door data grows
Doors does not depend on this change, and it touches code your team owns, so it goes to you as its own PR for review. Details are in the written spec.
It ships only with your approval.
Five phases, each with a finish line
The rep map comes first because the goal is more set appointments per rep-hour. Every phase ships dark and turns on only when its "done when" is met.
/api/doors proxy and the signed caller claim./prospecting.Decisions made
- DEC-1First goal: set appointments per rep-hour.The rep map (phase 2) comes first. The manager console follows in phase 3.
- DEC-2Door appointments go through Dispatch.The setter picks a time from Dispatch availability. The appointment lands in the Awaiting Dispatch queue and Dispatch assigns the closer. Booking straight onto a closer calendar stays available as a per-team setting, since that is how SetMenu works today.
- DEC-3Sized for teams of 5 to 25 reps.Team leads and anyone with
manage_doorsmanage turf. Your team decides who gets it. - DEC-4Live location is opt-in and app-open only.No background tracking, so no App Store app. The always-on 5-minute location upload is not reused.
- DEC-5Doors does not wait on Fieldhouse.The first commit moves
requireCallerinto a sharedlib/auth/requireCaller.ts, cut from main. Fieldhouse switches to it when it lands.
Needs from Colton's team
- Who gets
manage_doors.Team leads get turf tools by default. Name anyone else who should. - Approve the phase 0 PR.It tightens how API routes check who is calling, before door data grows.