No drivers need attention
Add drivers to see stats
Add drivers to see rankings
Click "Add Driver" to get started
Loading trend…
No incidents recorded
No coaching notes yet
Loading schedule...
Loading documents...
Loading...
Loading...
No written warnings on file
No customer complaints recorded
No infractions reported
No OSHA injuries on file
No daily quality data yet
No PPS compliance data yet
Loading safety metrics…
Loading quality metrics…
All drivers are performing well
Click "+ Add Van" to add your fleet
Click "Start Inspection" to begin
Click "Issue Warning" to create one
Click "Log Injury" to create your first OSHA Form 300 entry.
Add drivers to see rankings
Upload your first Amazon scorecard to get started
Click "+ Add Part" to start building your parts catalog. Or wait for the seeded mirror catalog to load.
Add shifts on the Schedule page
Award points and bonuses to recognize top drivers
What is DSPro?
DSPro is a comprehensive operations platform built specifically for Amazon Delivery Service Partners (DSPs). It replaces the half-dozen tools most DSPs juggle — driver scheduling, van inspections, scorecards, attendance tracking, time clock, written warnings, incident reporting, document approvals, and team messaging — with one unified system that all your team uses.
Three Roles
DSPro has three user roles, each with their own view and permissions:
- Owner — Full access. Sets up the station, invites managers and drivers, configures settings, sees billing.
- Manager — Day-to-day operations. Can do almost everything an owner does (schedule, score, log incidents, approve documents) but can't change billing or invite other managers.
- Driver — Self-service. Sees their own scorecard, schedule, attendance, and clock-in card. Can request shift changes, upload documents, and message the team.
First-Time Setup Checklist
Time Clock → Station Setup. Click "📍 Use my current location" while standing at your DSP, then "💾 Save Station Settings". Drivers must be within the geofence radius (default 500ft) to clock in.Settings → Performance Thresholds. Defaults match Amazon's WTN2 station values; adjust if your station uses different cutoffs.Team & Access → + Invite Manager. Manager gets an email to set their password.Van Mgmt → + Add Van for each van. Or use Bulk Upload if you have a CSV.Drivers → + Add Driver for each. Or + Bulk Invite to invite multiple at once.Schedule → click any cell to assign a driver. Save Draft to keep editing, Publish to notify drivers.📌 Why we built this
Before the Upload Station, files were scattered across the Drivers tab and Scorecards tab. Owners had to remember which file went where and used different upload buttons depending on type. The Upload Station is one futuristic-themed page where every file type has its own tile with clear instructions — drop it on the right tile and DSPro routes the data automatically.
🗂️ How it works
Each tile is organized by category — Roster & People, Performance, Defects & Quality, Fleet & Inspections. Click any tile and a modal opens with:
- Specific instructions for that file type (what's in it, where to find it on Amazon)
- Amazon Week Number + Year inputs (required for files that dedup by week, optional for others)
- A drop zone showing the expected filename pattern
- Inline status during processing — success or error messages right in the modal
📋 The 7 file types you can drop
Each tile is color-coded with a different glow on hover so it's easy to find at a glance:
👥 Driver Roster (cyan)
File: AssociateData.csv
From: Amazon Logistics → My Team
What it does: Adds new drivers, updates phones / emails / license dates, marks departed drivers as "flagged for review" (see Drivers section). Routes through the existing Roster Import preview so you confirm before changes apply.
📋 Weekly Station Scorecard (teal)
File: *DSPScorecard*.pdf
From: Amazon Logistics → Performance → Weekly Scorecards
What it does: Imports station-level Overall Standing, Safety, Quality scores, plus per-driver metrics. Populates the Scorecards page, driver profiles, and leaderboard.
📈 DSP Overview Dashboard (pink)
File: DSP_Overview_Dashboard_*.csv or .xlsx
From: Amazon Logistics → Performance → Supplementary Performance Reports
What it does: Amazon's authoritative weekly scoring file with each driver's official Overall Standing, Overall Score, and per-metric tiers. Two variants exist on Amazon's portal:
- Weekly snapshot — single week's data (recommended for normal weekly uploads)
- Trailing Six Week — 6-week rolling average (use only if you specifically want the average)
📸 POD Rejects Report (orange)
File: *POD-Details.pdf
From: Amazon Logistics → Performance → POD Reports
What it does: Per-driver photo-on-delivery rejection breakdown — blurry, no package detected, package in car, etc. DSPro creates one Incident per driver who had rejects (the Incident appears on their profile under Incident History). Re-uploading the same week replaces previous incidents — no duplicates.
💬 Negative Customer Feedback (red)
File: DSP_Customer_Delivery_Feedback_negative_*.csv
From: Amazon Logistics → Performance → Customer Delivery Feedback
What it does: Imports per-driver customer complaints with feedback details (mishandled, unprofessional, wrong address). Powers the Customer Complaints dashboard tile and the complaints section on driver profiles.
🚨 Escalations / Infractions (deep red)
File: Infractions_*.csv
From: Amazon Logistics
What it does: Imports Amazon-reported infractions — violations, defects, MDIs (Multi-Defect Incidents). Displayed in the driver's profile infractions section.
⏱️ DVIC Inspection Times (green)
File: *DVIC_Time*.xlsx
From: Amazon Logistics → Operations → DVIC Reports
What it does: Imports per-driver vehicle inspection durations. DSPro flags drivers with rushed inspections (under 30 seconds — likely skipped) and creates Incidents. Helpful for safety coaching.
🎯 Pro tips
📍 Where to Find Reports in Amazon
All Amazon DSP reports live in the Amazon Logistics Portal:
Most reports are downloaded as CSV or PDF. Below is exactly what to download for each DSPro feature.
📈 Weekly Scorecard
File names typically look like:
Week_NN_YYYY_DSP-Scorecard.pdf(e.g.,Week_18_2026_DSP-Scorecard.pdf)WTN2_DA_Performance_YYYY-MM-DD.csv- Older format:
scorecard_weekly_NN.pdf
How to upload to DSPro: Sidebar → Scorecards → click 📁 Upload Scorecard → drag/drop the file. DSPro auto-parses both PDF and CSV formats.
📅 Daily DSP Report
File name:
Daily_DSP_Report_YYYY-MM-DD.csv
What's in it: Per-driver daily metrics — DCR (Delivered Count Rate), DAR (Delivery Attempt Rate), POD (Photo on Delivery), Contact Compliance, packages delivered, route count.
How to use: Useful for spot-checking a specific day. Upload via Scorecards → Daily Detail tab.
🚐 Vehicle/Van Roster
File name:
Fleet_Roster_StationCode_YYYY-MM-DD.csv- (e.g.,
Fleet_Roster_WTN2_2026-04-29.csv)
How to upload: Van Mgmt → 📁 Bulk Upload → select the CSV. DSPro maps columns: van_number, plate, VIN, make, model, year, registration expiration.
👥 Driver Roster
File names:
Active_DAs_StationCode_YYYY-MM-DD.csvDSP_Driver_Roster_DSPName.csv
What's in it: Driver name, Amazon driver_id (transporter ID), email, phone, hire date, status.
How to use: Drivers page → + Bulk Invite or 📁 Bulk Upload CSV → select the file. DSPro matches existing drivers by driver_id and adds new ones.
🚗 MVR (Motor Vehicle Record) Reports
- Samba Safety: Reports → MVR Batch → Export
- HireRight: Driver Reports → Download
- Direct DMV portal: State-specific (Florida: FLHSMV)
File names vary, but DSPro accepts any CSV with these columns:
How to upload: Dashboard → MVR alert banner → "📥 Bulk Import" tab → upload CSV.
📊 Mentor Safety Report
File names:
Mentor_Driver_Scores_YYYY-MM-DD.csvDriving_Behavior_Report.csv
What's tracked: Speeding, harsh braking, distracted driving, FICO score per driver.
Note: Mentor scores are reflected in your weekly Amazon scorecard. No separate DSPro upload needed currently — just review them when coaching drivers.
📋 Compliance & Hire Date Reports
File name:
Compliance_Report_StationCode.csv
What's in it: Per-driver hire date, license expiration, training completions, background check status.
How to use: Dashboard banner "📋 Hire dates needed" → click → Bulk Import tab → upload Compliance CSV. DSPro extracts hire dates automatically.
🎯 Performance Thresholds Reference
This is NOT a download — it's a reference page. Use it to verify your DSPro thresholds match what Amazon expects:
DSPro: Sidebar → Settings → Performance Thresholds → adjust each metric to match Amazon's published cutoffs for your station.
📦 Quick Reference: What to Download Weekly
- Friday: New weekly scorecard (PDF or CSV)
- Monday: Updated driver roster (catches new hires + departures)
- Monthly: Fleet roster + Compliance report
- Quarterly: MVR batch (every 90 days per Amazon requirement)
Amazon_Reports/2026-04-29/) for your own records, then upload the same file to DSPro.🆘 Can't find a report?
Amazon occasionally renames reports or moves them. If you can't find something:
- Check the Reports Library (left sidebar in Amazon Portal) — has every available export.
- Some reports require permissions — your Operations Manager (Amazon) can enable them for your account.
- Email support@dsproapp.com with the file name you have and we'll tell you which DSPro feature it pairs with.
Cockpit Cards
The top of the Dashboard shows colored stat cards. Each is clickable and drills down to a filtered view:
- 📅 Registration Expiring — Vans with registration renewal due in 14 days. Click to see them and start renewals.
- 🏠 Rentals Returning — Rental vans due back in 14 days. Plan replacements.
- 🚨 Active Incidents — Open incidents needing follow-up.
- 📋 Pending Approvals — Driver-uploaded documents waiting for your review.
Banners & Alerts
Above the cockpit cards, you'll see colored banners when there's bulk work to do:
- Yellow "📋 Hire dates needed" — X drivers missing hire dates. Click → bulk modal to type or upload CSV.
- Purple "🚗 MVR checks needed" — Drivers needing a Motor Vehicle Record check (never run or 90+ days old). Click → drilldown.
Tomorrow's Coverage Widget
The Tomorrow's Coverage card shows a snapshot of your next-day staffing:
Click the card → goes to the Schedule page on tomorrow's date so you can fix gaps.
💬 Customer Complaints Tile (NEW)
The cockpit grid now includes a 💬 Customer Complaints tile that surfaces aggregate negative customer feedback at a glance.
- Color-coded: Gray (0 complaints) → Amber (1–4) → Red (5+)
- Shows the count from the latest week with data — not the current calendar week (so you see real performance, not "no data yet")
- Click the tile → drilldown opens with all drivers who had complaints, sorted by complaint count, with defect type pills (mishandled, unprofessional, wrong address, etc.)
- Powered by uploads from the 💬 Negative Customer Feedback tile in the Upload Station
Adding Drivers
Three ways to add drivers:
- + Add Driver — One driver at a time. Enter name, Amazon driver_id, license info, hire date.
- + Bulk Invite — Paste a list of email addresses. DSPro sends each an invite link to set up their account.
- 📁 Bulk Upload CSV — Upload a CSV with all drivers at once. Template download available in the modal.
Driver Profile
Click any driver to see their full profile:
- Avatar — Photo or colored initial circle. Click to upload / change (deploy_358).
- Performance card — Current scorecard tier (Fantastic+ / Fantastic / Great / Fair / Poor) plus key metrics.
- License status — Active, Suspended, Revoked, or Expiring Soon.
- MVR check status — Last check date, age, status pill (✅ Current, ⚠️ Due Soon, 🚨 Overdue).
- Attendance points — 6-month rolling total. Color-coded by tier.
- Time Clock card — Driver's current clock state (visible on driver's own profile).
- Documents — Driver-uploaded files pending or approved.
- Written warnings — Auto-generated and manually issued.
- Schedule — This driver's published shifts.
Avatars (deploy_358)
Each driver has an avatar that appears everywhere their name is shown — drivers list, leaderboard, top performers, attendance lists, package reports, time clock entries. Until uploaded, DSPro shows a colored circle with the driver's initials (color is generated from their name so it's stable). Once uploaded, the photo replaces the circle app-wide.
- Driver self-upload — Drivers can upload their own avatar from their profile page. Tap the big circle in the header → upload modal opens.
- Owner / manager override — Owners + managers can upload an avatar for any driver. Same flow.
- Use driver license photo — If a DL scan is on file, the modal offers a one-tap "🆔 Use my driver's license photo" button. Useful during onboarding.
- Crop UI — 280px circular preview frame. Drag the photo to position the face, use the zoom slider (100-300%) or scroll wheel. Edges clamp so background never shows through.
- Output — Saved as 400×400 JPEG to the
avatarsstorage bucket. Cache-busted on save so the new photo appears immediately everywhere. - Remove avatar — Removes the file from storage and clears the
avatar_pathcolumn. Driver goes back to the colored-initials circle.
Filtering & Sorting
The driver table can be filtered by:
- Performance tier (top performers, at-risk, etc.)
- License status (active vs suspended)
- Hire date range
- Search by name or driver_id
🔒 Lock Contact Fields
When you re-import the AssociateData CSV from Amazon, by default it overwrites driver phone and email with whatever's in the CSV. If you've manually corrected a driver's contact info, you can lock the field so it survives future imports.
How to lock:
- Drivers tab → click a driver → click the Edit button
- You'll see 🔓 Auto pills next to the Phone and Email labels
- Click the pill to flip to 🔒 Locked (turns amber)
- Click Save
⚠️ Departed Driver Review
When you re-import the AssociateData CSV, drivers who exist in DSPro but aren't in the new CSV get automatically flagged for review. They may have left, been transferred, or be on temporary leave.
What you'll see:
- An amber banner appears at the top of the Drivers page: "X drivers not in latest roster CSV"
- Each flagged driver gets a ⚠️ Review pill next to their name in the table
- Click Review → on the banner → modal opens with all flagged drivers
For each flagged driver, choose:
- Mark Inactive (red button): driver leaves the roster permanently. Status switches to inactive, leaderboard auto-recomputes ranks (one fewer driver counted).
- Still Active (green button): driver stays active, just clears the flag. Use this when a driver is on LOA, temporarily transferred, or accidentally missing from the CSV.
Weekly View
The Schedule page shows a 7-day grid (Sun–Sat). Each cell represents one route on one day. Use the prev/next arrows to navigate weeks.
Building a Schedule
Driver Responses
After publishing, drivers can:
- Acknowledge — Confirms they saw it.
- Decline — Says they can't work the shift. You see this in the Schedule sidebar badge (red number).
- Request change — Asks for a swap with another driver. You can approve or deny.
Schedule Settings
Click the gear icon to set:
- How many routes per day your station runs.
- Default shift start time.
- Whether to send SMS in addition to in-app notifications.
Fleet Setup
Add each van to your fleet:
- Van number — Your internal short ID (e.g., V12, ATX-005).
- License plate + VIN — For DOT compliance and lookup.
- Year/Make/Model — For maintenance tracking.
- Registration expiration date — Triggers alerts at 14 days.
- Rental return date — If it's a rental, set this; alerts at 14 days.
- Status — Active or Grounded.
Stat Cards
Top of the Vans page shows clickable cards:
- Total / Passed / Failed / Not Inspected — Today's status.
- Grounded — Out of service.
- 📅 Reg Exp <14d — Registration expiring soon.
- 🏠 Rentals <14d — Returns due soon.
- Expiring <60d — Wider lookahead.
Click any stat card → fleet table filters + page scrolls down to show results.
Running an Inspection
Click 🔍 Start Inspection:
- Pick the van being inspected.
- Pick the driver doing the inspection (or yourself).
- Step through the checklist (tires, brakes, lights, fluids, etc.).
- Mark Pass or Fail per item.
- If Fail, can attach a photo and notes.
- Final result auto-computed: pass if all items pass, fail if any item fails.
How It Works
When a driver runs a van inspection, DSPro asks for four photos covering all sides of the van. These photos are uploaded to the inspection-photos storage bucket and shown on the van's profile in a clean 2x2 grid.
Driver Photo Capture
- During the van inspection flow, driver is prompted for four photos.
- Photo 1 — Front, including the bumper, headlights, hood.
- Photo 2 — Driver side, full length.
- Photo 3 — Passenger side, full length.
- Photo 4 — Back, including bumper, doors, taillights.
- Photos are auto-resized client-side to 1600px on the long edge before upload — sharper thumbnails, smaller upload, faster mobile experience.
2x2 Photo Grid
On each van's profile, the most recent four photos render in a 2x2 grid. Tap any photo to view full-size. Each photo has a ⋮ menu in the corner with these actions:
- 🔍 View full size — Open the photo in its original resolution.
- ♻️ Replace photo — Upload a new image for that position.
- 🤖 Compare with previous — Manually trigger AI damage detection between this photo and the previous one in the same position.
- 🗑️ Delete photo — Remove from the grid (does not delete history).
🤖 AI Damage Detection
When a fresh set of 4 photos is uploaded, DSPro automatically calls the compare-inspection-photos Edge Function. The function pulls the previous 4 photos for the same van and asks Claude (Anthropic API) to identify any new damage — scratches, dents, cracked lights, missing trim, anything that wasn't there yesterday.
Where Damage Alerts Appear
- A red 📷 AI Damage Alerts banner appears at the top of the Dashboard whenever there are open flags.
- A permanent 📷 AI Damage Alerts stat card on the Dashboard shows the open count (gray = 0, amber = open, red = high severity).
- Email notifications go out to whoever is configured (owner, managers, the responsible driver, plus any extra emails like
fleet@…oraccountant@…).
📌 Why we built this
DSP owners spend hours per week researching the right parts for their vans. Long-arm vs short-arm mirrors. Heated vs non-heated. Driver vs passenger side. Year-specific compatibility. Variants are a maze. Parts Department is a shared catalog where every entry is mapped to specific vehicle models, so you (or any DSPro owner) can find the right part for your fleet in seconds.
🗂️ How it works
The catalog is curated by DSPro. Every part is researched, fitment-verified, and tied to specific vehicle models so you don't have to wade through Amazon's listings hunting for the right driver-side mirror for your 2022 ProMaster. Just filter, click, order.
The page has two filter dropdowns at the top:
- All Vans / Models — filter to parts that fit a specific van in your fleet
- All Categories — filter by part type (Driver Mirror, Tire, Brake, etc.)
Each part shows up as a card with: category icon + label, part name, variant notes, vehicle compatibility ("Fits: Ford Transit Cargo (2015–2026)"), price, and an Order → button that opens Amazon in a new tab.
🪞 Mirror Categories
Mirrors are split into 3 specific categories so there's no ambiguity:
- Driver Side Mirror — left exterior side mirror
- Passenger Side Mirror — right exterior side mirror
- Rear-View Mirror — interior cabin mirror
When you order a "Driver Side Mirror" you don't have to second-guess — it's exactly that side.
🚐 How parts get matched to your vans
The per-van filter only works if your vans have a year and make/model set in the Vans tab. When you add a van with Year and Make/Model, DSPro automatically links it to a fleet vehicle model entry, which is what the catalog uses to filter.
If a van's per-van filter shows "model not set", edit the van to add Year + Make/Model.
📬 Don't see a part you need?
The catalog is growing. If you need a part that isn't listed yet — different vehicle model, specific variant, an eBay-only item, anything — reach out and we'll research and add it. The catalog is a living product; your input shapes what gets added.
💰 How DSPro funds itself
The Amazon links in the catalog use the DSPro Amazon Associate ID. When any owner clicks "Order →" and buys from Amazon, DSPro earns a small commission (~3% of the purchase). This is how DSPro funds development of the platform — no price difference to you, your DSP doesn't pay anything extra.
By policy, we disclose this in our Terms of Service: DSPro is an Amazon Associate.
How an Alert Is Born
- Driver completes a post-trip van inspection with 4 photos (front / back / driver-side / passenger-side).
- The
compare-inspection-photosEdge Function fires automatically. - That function pulls the matching pre-trip photos (the 4 from earlier in the day), packages all 8 images, and sends them to Claude.
- Claude returns a JSON list of any new damage it sees — anything visible in the post-trip photo that wasn't in the pre-trip photo.
- Each finding becomes a row in
damage_alertswith severity (low / medium / high), description, and photo paths. - An email goes out to everyone configured in your Damage Alert Email settings.
Dashboard Surfaces
Open damage alerts surface in two places on the Dashboard, both visible only to owners and managers:
- Red banner — appears above Tomorrow's Coverage when there are any open alerts. Shows count of alerts and number of vans flagged. Hidden when there are no open alerts.
- 📷 AI Damage Alerts stat card — permanent in the cockpit grid, shows the open count, color-coded by severity.
The Review Modal
Click the banner or the stat card to open the review modal. Each alert shows:
- The van's vehicle ID and which side was photographed (front / driver / passenger / back).
- Driver name and timestamp of the inspection.
- A severity badge (Low / Medium / High) color-coded gray / amber / red.
- The AI's plain-English description of what it found.
- A side-by-side photo grid: Before (the previous photo) and After (flagged) (the new photo where damage was detected). Look at the two carefully — the AI is right most of the time, but not always.
Four Actions Per Alert
- ✓ Acknowledge — "I saw it, I'm aware." Marks the alert reviewed and removes it from the open queue. Best for cosmetic stuff you don't need to act on.
- ✗ Dispute (false flag) — "AI is wrong, this isn't actually new damage." Confirms with a prompt, then resolves. Useful when lighting or angle made the AI hallucinate damage.
- 💰 Charge Driver — Opens a sub-modal where you enter a charge amount and reason. Records to the
damage_chargestable for payroll. Note: this records the intent — actual payroll deduction must still be processed in your payroll system. - 🔧 Schedule Repair — Opens a sub-modal where you enter description, estimated cost, vendor, and scheduled date. Records to the
repair_ticketstable.
⚙️ Email Settings
Click ⚙️ Email settings at the top of the review modal to control who gets notified when AI flags new damage:
- Owner — sent to your account email. Default: ON.
- Managers — sent to all managers under your DSP. Default: ON.
- Driver who took the photos — notify the responsible driver. Default: OFF (turn this on if you want drivers to know they were flagged).
- Additional emails — comma-separated list. Useful for fleet@yourdsp.com, accountant@…, insurance contacts, etc.
Email Branding
Damage alert emails go out from alerts@dsproapp.com via Resend. The email shows a red header banner, a card per finding with the AI description and severity badge, before + after photos side-by-side embedded in the email, and a "Open DSPro to triage" button that takes the recipient straight back to the dashboard.
Setup Requirements (one-time)
- Storage bucket —
inspection-photosmust be a public bucket in Supabase Storage. - Edge Functions deployed —
compare-inspection-photosandsend-damage-alert-emailmust both be deployed and active. - Edge Function secrets set —
ANTHROPIC_API_KEY,RESEND_API_KEY,FROM_EMAIL(default: alerts@dsproapp.com), andAPP_URL(default: https://dsproapp.com). - Resend domain verified —
dsproapp.com(or your custom from-domain) must be verified in Resend before any emails will deliver. - Profile column — your owner profile needs
damage_alert_email_enabled = TRUE(default). Thesend-damage-alert-emailfunction hard-gates on this column and silently exits if false or null.
Real-World Behavior Notes
- AI is conservative — by design. The prompt explicitly tells Claude to ignore dirt, lighting, reflections, and shadows, and to only flag clear new damage or foreign objects. Chrome / metallic tape may not register as damage because it can read as a reflection. White paper, neon tape, or anything visually distinct will reliably flag.
- Photo positions — frontend stores 4 photos keyed
front / back / left / right. The AI prompt and prompt-side aliases also acceptdriver_side/passenger_sideas synonyms for left/right, so Claude can use natural language and the system maps it back correctly. - Photo size — photos are resized to 1280px on the long edge at 0.78 JPEG quality before upload. This is plenty of resolution for AI vision and keeps cellular upload fast (~350KB per photo vs. 4K originals at ~5MB).
- Gmail anti-burst — sending 3+ near-identical test emails in quick succession can trigger Gmail's silent suppression (Resend reports delivered, but the email never appears in any folder). Production traffic with one email per real inspection rarely hits this. If testing, wait 5+ min between sends or whitelist
alerts@dsproapp.comvia Gmail filter. - Average flag rate — in our pilot, AI flags new damage on roughly 1 in 30 post-trip inspections. Most days will be quiet. When a flag does come in, it's usually real.
Database Tables Created
damage_alerts— one row per AI finding, status workflow (open → acknowledged / disputed / charged / repair_scheduled).damage_charges— one row per Charge Driver action with amount in cents, reason, payroll status.repair_tickets— one row per Schedule Repair action with description, estimated cost, vendor, scheduled date.
ai_raw_response JSONB column), the resolver's user ID, resolved_at timestamp, and a resolution_note. Nothing gets deleted on resolve — the alert just changes status.Why This Matters
Both FMCSA (federal) and Amazon (DSP contract) require drivers to inspect their vehicle before driving. A documented inspection program is your strongest legal defense if there's an accident — it shows due diligence on equipment safety.
DSPowner replaces paper inspection forms with a phone-based checklist that's faster, photographs failed items, and creates an immediate audit trail.
Where Drivers Submit Inspections
- Time Clock ON (default): Drivers see a banner at the top of the Time Clock page — "⚠️ Pre-Trip Inspection Required" with a Start Pre-Trip button. Strict enforcement: drivers cannot clock in until pre-trip is done.
- Time Clock OFF: Drivers see a dedicated Vehicle Inspection tab in their sidebar. The same banner appears there with the same Start Pre-Trip / Start Post-Trip buttons. No clock-in gating (because there's no clock-in to gate).
Where Owners + Managers See Submissions
The Vehicle Inspection sidebar tab is always available to owners and managers (regardless of Time Clock setting). It shows:
- Today's submission count (pre-trips + post-trips)
- Failed inspection count
- Drivers without pre-trip — most useful: who's working today but hasn't done it yet
- Full list of today's submissions with photos, time, van, result
- CSV export
What's Inspected (25 items across 4 sections)
🚐 Exterior (11 items): Front + rear tires, headlights, brake lights, turn signals, hazards, mirrors, windshield, wipers, body damage check, license plate visibility
🪑 Interior (5 items): Seatbelt, horn, gauges/dashboard, cabin cleanliness, cargo secured
🔧 Mechanical (5 items): Brakes, steering, fluid leaks, engine sound, transmission shifting
⛑️ Safety Equipment (4 items): Fire extinguisher, first aid kit, warning triangles, registration & insurance present
Items marked ⚠️ Critical auto-ground the van if failed (tires, lights, brakes, steering, fluids, seatbelt, horn). The van is removed from active service until you re-inspect.
Driver Workflow
Owner / Manager View
Sidebar → Operations → Vehicle Checklists opens the management page with five clickable stat tiles:
- 📋 Today's Inspections — Total count for today
- 🚐 Pre-Trips — How many drivers completed pre-trip
- 🏁 Post-Trips — How many completed post-trip
- 🚨 Failed — How many had at least one fail item
- ⚠️ Drivers Without Pre-Trip — most useful — who's working today but skipped or hasn't done it yet
The table below shows each inspection with: Driver · Type · Van · Time · Result pill · Issue count. Click "X issues 👁️" on any failed inspection → modal showing every failed item, criticality flag, and driver's notes.
📥 Export CSV — Downloads last 30 days for compliance records or sharing with insurance / Amazon audits.
What Happens on a Critical Failure
If a driver fails ANY item marked Critical (e.g., brake check, headlight, seatbelt):
- Inspection saves with `result: 'fail'`.
- The selected van is auto-set to status `grounded` in your fleet.
- Driver sees red banner: "🚨 Pre-Trip Complete · 1 Issue Reported · Speak with your manager before driving."
- Driver can still clock in (so they're paid for the time), but should not drive that van.
- Van shows up in your dashboard's Grounded count + Vehicle Checklists "Failed" tile.
📌 What it is
At the start and end of every shift, drivers tap a tile on their home screen and submit a quick check-in. The check-in captures the operationally important stuff: which van they're in, mileage, which equipment they have (mini-tote, bags, scanner, charger, key, etc.), and any issues that came up. Owners and managers see all of them on the 🕒 Shift Check-Ins page.
👤 Driver Submission
On a driver's home screen there's a Start / End of Shift Check-In tile (always visible — they don't have to dig for it). Tapping it opens the form:
- Shift Type — Start or End
- Van # — which van they're using (auto-suggests recent vans)
- Mileage — current odometer reading
- Equipment Checklist — Mini-tote, Bag, Scanner, Charger, Key, etc. (checkbox grid)
- Issues — free-text field for any problems (van damage, missing equipment, traffic delays, anything worth noting)
- Photo — optional — handy for documenting issues
Driver hits Submit, the check-in is saved instantly, and they get a toast confirmation.
📋 Owner / Manager View
The Shift Check-Ins page is the central log. Top of the page has stat tiles (today's starts, today's ends, this week's check-ins). Below is a filterable table.
- Filter by driver — pick from the dropdown to see one person's history
- Filter by van — see who's been using van 1247 lately
- Filter by date range — today, yesterday, this week, custom
- Filter by type — Start only, End only, or both
- CSV export — top right button, downloads the current filtered view as a spreadsheet
📱 Mobile-friendly
On phones, each check-in renders as a stacked card instead of a wide table row — driver name, van, mileage, equipment, issues, photo thumbnail. Tap any driver's name to jump to their full profile.
🔍 What you'll actually use it for
- Morning roll call — quickly see who has and hasn't checked in for the day's shifts
- Van handoff disputes — "Driver X says the van had 50,000 miles when they got it" — pull up that day's start check-in and read the actual recorded mileage
- Equipment loss tracking — driver says the scanner is missing? Search their last check-in to see if it was logged then
- Issue trending — filter by "Issues contains..." to find every check-in mentioning a recurring problem (van smoking, locked yard, ramp closure, etc.)
- Audit trail — every shift has a documented start and end with timestamps
How It Works
Each week Amazon publishes a scorecard for your DSP showing per-driver metrics: DCR, DAR, POD, Contact Compliance, Speeding events, Safety scores, etc. DSPro reads these scores, compares them against the thresholds you've set (or Amazon defaults), and assigns each driver a tier.
The Five Tiers
Best
Needs help
Uploading a Scorecard
From the Scorecards page, click 📁 Upload Scorecard. DSPro accepts:
- Amazon's weekly scorecard PDF (most common format)
- CSV exports from the Amazon Logistics Portal
DSPro auto-matches drivers by name + driver_id. Unmatched drivers are flagged for you to resolve.
Scorecard Detail Page
Click any driver row → drill into their full scorecard with:
- Per-metric tier breakdown.
- Week-over-week trend charts.
- Comparison to peer averages.
- Recommended actions (coaching points, escalation flags).
Settings → Performance Thresholds if your station uses different cutoffs than Amazon defaults.🔢 Bake Ranks (NEW)
The 🔢 Bake Ranks button on the Scorecards Week page persists the currently-displayed sort order as actual amazon_rank values in the database. Required for the Swap Rank feature to work properly when Amazon hasn't published per-driver ranks for the week (which happens often when only the Station scorecard PDF is available).
How to use:
- Open Scorecards → click into a week
- Click 🔢 Bake Ranks at the top of the page
- Confirm the dialog — drivers without an Amazon-published rank will get assigned positions (1, 2, 3 ... in current sort order)
- Drivers who already have an Amazon rank from the Personalized PDF are LEFT ALONE — Bake Ranks only fills gaps, never overwrites
📝 Edit Menu — Per-Driver Actions (NEW)
Each driver row in the Scorecards Week table has an editor button (✏️). Click it for these actions:
- 📝 Add Note — Save a coaching note for this driver. Includes context (week + year) automatically. Notes appear in the driver's coaching log on their profile.
- 🔄 Swap Rank With... — Pair-wise rank swap. Pick a target rank → DSPro finds the driver currently at that rank → confirms the two-way trade. Both drivers update atomically. No duplicate ranks.
- ⚙ Override Tier — Force a driver into a specific tier (Fantastic+ / Fantastic / Great / Fair / Poor). Use for appeals or special circumstances. Optional reason field. Override propagates to leaderboard, dashboard tier counts, and bonus calculator. Click again to clear and revert to Amazon's tier.
override_set_by + override_set_at). Helpful for compliance and team accountability.How Rankings Work
Each driver gets a composite score combining:
- Latest scorecard tier (weighted heaviest).
- Safety score / DCR delivery rate.
- Attendance (low points = bonus).
- Tenure (longevity bonus).
Drivers See It Too
Drivers see their own rank on their profile. They see the leaderboard top 10 (anonymized below their position to avoid singling out poor performers).
👁 Last Name Privacy (NEW)
To stay compliant with Amazon's policy of keeping full driver names off public-facing documents, the leaderboard redacts last names by default. Drivers appear as "Jessica H." instead of "Jessica Howell".
How to toggle:
- At the top of the Leaderboard page, click 👁 Show Full Names to reveal last names
- Click 👁 Hide Last Names to redact again
- Your choice is remembered across sessions (saved to your browser)
How Bonuses Are Calculated
Each week, DSPro looks at each driver's:
- Latest scorecard tier (Fantastic+ / Fantastic / Great / Fair / Poor)
- Active attendance points (sum of non-rolled-off events)
Then applies the formula:
Default Amounts
$50
$30
$15
$0
$0
Customizing Amounts
Click the ⚙️ Settings button on the Bonus & Points page to change:
- Dollar amount per tier (any number from $0 up)
- Attendance cutoff (default 6 pts; lower it to be stricter, raise it to be more lenient)
- Toggle the calculator on/off entirely (turns off, page shows disabled state)
Reading the Driver Table
Each row shows:
- Driver name + ID — Avatar circle + Amazon driver_id
- Tier pill — Color-coded current tier
- Att. Pts — Active attendance points (red if at/over cutoff, amber if approaching)
- Base — Tier's dollar amount
- Bonus — Final amount after attendance check (green if >$0)
- Status pill — 💰 Eligible / 🚫 Disqualified / ✅ Paid [date]
- Action button — Mark Paid / Undo
Marking Bonuses Paid
Two ways:
- Per-driver: Click "Mark Paid" on any row → confirms amount → row turns green ✅
- All at once: Click "✅ Mark All Paid" at top → confirms total → all eligible drivers locked in
Marking paid creates an immutable snapshot in the database — historical record never gets recalculated.
The "Undo" Button
If you mark something paid by mistake, click Undo on the row. The snapshot is deleted, status reverts to Eligible. Good for fixing typos or reversing accidental clicks.
Week Navigation
Use ◀️ Prev / Next ▶️ buttons or "This Week" to jump between weeks. You can mark bonuses paid for past or future weeks. The displayed tier and attendance points are calculated as of the END of the displayed week (Saturday).
📥 Exporting for Payroll
The CSV includes:
driver_namedriver_id(Amazon transporter ID)tierattendance_pointsbase_amountbonus_amount(final payout)disqualified(yes/no)paid_at(timestamp if marked paid)
How Payment Actually Happens
DSPro does NOT pay drivers directly. The flow is:
Driver Visibility
Drivers see their own bonus on their profile after you mark it paid. Until then, the bonus calculator is owner/manager-only — drivers don't see preview amounts before payment.
Common Questions
What if Amazon publishes a corrected scorecard? Re-upload the corrected file in Scorecards → re-click Recalculate on Bonus page → updated amounts appear. If you already marked someone paid with the old amount, click Undo first to recalculate fresh.
Can I exclude a driver? Not directly — but you can: (a) mark their bonus as paid with $0 manually, or (b) wait until they have attendance points or a low tier that disqualifies them.
What about half-week drivers / new hires? If they don't have a tier yet (newly hired, scorecard hasn't included them), they show $0. Once their first scorecard comes through, they qualify like everyone else.
Time Clock ON / OFF (Owner)
The toggle lives at the top of the Time Clock page (Station Setup card). Owner-only.
- ⏱️ Time Clock ON (default): Drivers can clock in / out, take breaks, lunch through DSPowner. Pre-trip is required before clock-in. This is the standard DSPowner experience.
- ⏸️ Time Clock OFF: Drivers do not see a Time Clock tab in their sidebar. The clock-in card on their profile is hidden. Pre-trip / post-trip inspections still happen — but via a dedicated Vehicle Inspection tab that appears in their sidebar instead.
- Toggle saves immediately. You can flip it back any time.
- Existing clock-in records are preserved when you toggle off — they just stop being editable. Toggle back on to see them again.
Setup (Owner)
Before drivers can clock in, you need to set the station location:
Driver Workflow
From a driver's profile or Time Clock page:
- Big blue clock card shows current state.
- 🟢 Clock In — Phone shares location, DSPro verifies you're within geofence.
- State changes to "Clocked in · 0h 0m" with a 🍽️ Start Lunch button and a ☕ Break (1/2) button.
- 🍽️ Start Lunch → card flips to a big circular countdown timer (default 30 min). Audio is unlocked the moment the driver taps Start Lunch so the alarm can ring later.
- When the countdown hits 0:00 a bell rings every 4 seconds, the phone vibrates, and a browser notification fires (even with the tab in the background).
- Driver gets three buttons when the alarm rings: 🔕 Stop Alarm (silences but stays on lunch — overage time counts up in red), ⏰ Snooze 5 min (extends lunch by 5 min, alarm re-arms), 🟢 End Lunch (clocks back in immediately).
- Back on shift: ☕ Break (1/2) or ☕ Break (2/2) button is available alongside Clock Out.
- 🔴 Clock Out — DSPro verifies location again, computes total hours minus the lunch break, flags overtime if >8h/day. Paid 15-min breaks are NOT subtracted from total hours.
⏰ Lunch Duration Setting Owner Only
Owners can set how long the lunch countdown timer runs in Time Clock → Station Setup → Lunch Duration. Default is 30 minutes; valid range is 15–120 minutes. This is the timer the driver sees and the time at which the alarm fires.
☕ Paid 15-Minute Breaks All Roles
Drivers may take up to two paid 15-minute breaks per shift, separate from their unpaid lunch. Break time is tracked but not deducted from total hours.
- While clocked in (pre- or post-lunch), driver taps ☕ Break (1/2).
- Card flips to a 15-min countdown — same circular timer style as lunch.
- At 0:00, the same bell + vibrate + notification fires. Same Stop / Snooze / End Break buttons appear.
- After both breaks are used today, the ☕ Break button disappears for the rest of the shift.
- Working state shows a small line under the status: "☕ Breaks today: 2:14 PM (15m) · 4:30 PM (12m)".
driver_breaks table with start time, end time, and duration. Owners can verify exact start/stop times even if the alarm was snoozed or dismissed.Manager + Owner Tools
- Today's Clock-Ins table — All drivers' current state, click any to edit. Status pill shows live state: 🟢 Clocked In, 🍽️ On Lunch, ☕ On Break, or grey "Clocked Out" when the shift's done.
- ☕ Breaks column — Each row shows a count + total minutes for paid 15-min breaks taken today (e.g. "2 (24m)") as a clickable blue pill. Click it to open the Break Details modal with start time, end time, and duration for every break, plus an "In progress" badge for any active break.
- Weekly Hours by Driver — Aggregated totals, OT flagged in red. Includes a ☕ Breaks (paid) column showing the total breaks taken across the entire week per driver.
- + Manual Entry — Add an entry if a driver forgot to clock in/out.
- 📥 Export CSV — Download last 2 weeks for payroll.
driver_breaks table with exact start/end timestamps and computed duration. Owners can verify any disputed break time by clicking the breaks pill on any clock-in row.Why It Exists
Drivers run out of time on lunch. Without a timer, they either guess the time and come back late (over-lunch, paid OT trouble) or rush back early and skip food. The Lunch Timer is a built-in stopwatch with an audible alarm so drivers actually use their full break — and don't run over.
How a Driver Uses It
- Driver is clocked in (see Time Clock section).
- Tap 🍽️ Start Lunch.
- The clock card flips into a full-screen circular countdown timer. Default is 30 minutes, configurable per DSP (see below).
- Driver puts the phone down or pockets it. They can navigate away from DSPro and the timer keeps running in the background.
- When the countdown hits 0:00:
- 🔔 Bell sound rings every 4 seconds
- 📳 Phone vibrates
- 📲 Browser notification fires (even with the tab in background)
- Three buttons appear when the alarm rings:
- 🔕 Stop Alarm — Silences the alarm but stays on lunch. Overage time starts counting up in red. Use when the driver knows they need a few more minutes.
- ⏰ Snooze 5 min — Adds 5 minutes to the timer and re-arms the alarm. Driver can snooze multiple times if needed.
- 🟢 End Lunch — Clocks back in immediately. Card flips back to "Clocked in" state with break buttons available.
⏰ Lunch Duration Setting Owner Only
Owners control the lunch countdown length:
- Open Time Clock → Station Setup
- Find Lunch Duration field
- Enter minutes (valid range: 15 to 120)
- Save
Default is 30 minutes. The new duration applies to every driver under this DSP starting on their next lunch. Already-running lunches keep the duration they started with.
📱 iOS Audio Note
On iPhone, the lunch alarm uses HTML audio that's pre-unlocked when the driver taps Start Lunch. In most cases this works perfectly. However:
- If the iPhone is on silent mode, the alarm won't ring audibly — but the phone still vibrates and shows the notification.
- If the driver navigates to another app and the phone screen locks for an extended period, iOS may suspend background audio. The notification still fires.
- For the most reliable alarm: leave DSPro open in the foreground OR have notifications enabled for the dsproapp.com tab.
How Lunch Affects Pay
Lunch time is unpaid and deducted from the driver's total shift hours. If the lunch timer was set to 30 minutes and the driver actually took 35 (used Stop Alarm with overage), the full 35 minutes is deducted — encouraging drivers to come back on time.
If the driver ends lunch early (e.g., back at 20 minutes), only the actual 20 minutes is deducted. Quick lunches = more paid hours.
Troubleshooting
- Alarm didn't ring — Phone was on silent. Drivers should enable notifications for dsproapp.com.
- Lunch shows as 0 minutes in time log — Driver tapped Start Lunch and End Lunch within seconds. The minimum duration tracked is 1 minute.
- Timer froze — Driver tabbed away in browser, phone backgrounded the tab. Re-opening DSPro should resume from the correct elapsed time.
- Overage time keeps counting and won't stop — Driver tapped Stop Alarm but didn't tap End Lunch. Overage continues until they explicitly end lunch.
Why This Exists
Two of the most common Amazon DSP package problems happen daily across every station: extra packages end up in the wrong driver's truck, and missing packages show up on a driver's route but never made it into the van. Without a structured way to flag these in real time, drivers either text a manager (untracked), call dispatch (no record), or just deliver the wrong stops and create a scorecard hit. The Packages page gives every shift a single source of truth — photo, timestamp, driver, status — that maps cleanly to Amazon's standard support flow.
Driver Workflow
- Driver opens the 📦 Packages page from the left nav (or tap the icon in the mobile top bar).
- Two big buttons appear at the top:
- 📦 Extra Package — Take Photo (blue) — for a package in the truck that's NOT on the route. Driver photographs the package label so the owner has a clear address to work with.
- 🚫 Missing Package — Take Photo (red) — for a package on the route that's NOT in the truck. Driver photographs/screenshots the route app showing the missing stop.
- Tapping a button opens a tinted modal (blue for extra, red for missing) with a camera button and an optional comment field.
- Photo is auto-resized to 1280px on the long edge at 0.78 JPEG quality before upload (sharp thumbnails, ~70% smaller files for fast cellular upload).
- Submit → row created in
package_reportstable with status open, photo uploaded to thepackage-photosstorage bucket. - Driver immediately sees their submission in the report list below the buttons.
Driver Self-Actions (deploy_359)
If the driver realizes after submission that something changed, they get two buttons on their own open reports — no waiting for owner triage:
- 📷 Retake Photo — opens a small modal to capture a new photo. Replaces the original photo on the report (storage + DB updated). Comment + status unchanged. Useful when the driver photographed the wrong package label or the original photo was unclear.
- 🟢 I Found It — closes the report with status
driver_resolved. For "missing" reports, this means the driver located the package after all. For "extra" reports, this means the driver delivered or returned it themselves. Different from owner Resolved/False Alarm so the audit trail is clear.
Owner / Manager Triage
The same Packages page shows all drivers' reports for owners and managers. Each report renders as a stacked card showing the driver's name + avatar, a 📦 / 🚫 type badge, the status, the timestamp, a 📷 View Photo button, the driver's comment, and four action buttons:
- ✓ Resolved — Issue handled, no further action.
- ✗ False — Driver was mistaken (package was actually in their truck / not on their route after all).
- 📞 Amazon — Contacted Amazon support about the package.
Each action moves the report out of the "Open only" view and stamps it with the resolver's user ID + timestamp. Reports the driver has already self-resolved appear with a green "🟢 Driver found it" badge.
Filters
Owner/manager view has three filters at the top:
- Status — Open only (default), All, Resolved, False alarm, or Contacted Amazon.
- Type — All types, 📦 Extra only, or 🚫 Missing only.
- Date range — Last 7 / 30 / 90 days, or All time.
Dashboard Surface
A 📦 Package Issues stat card sits in the dashboard cockpit grid (manager + owner only). Shows today's open count color-coded:
- Gray 0 — No open reports today.
- Amber N — Open reports today, all extras.
- Red N — At least one missing package open today.
The stat card subtitle breaks it down: e.g. "3 extra · 2 missing today". Click the card → jumps straight to the Packages page. The left nav also gets a small red badge with the open count.
⚙️ Email Settings
Click ⚙️ Email settings at the top of the Packages page to control email alerting. Default = OFF on purpose — at scale (100+ vans), you'd be drowning in package alert emails within a single shift. Reports always appear on the dashboard widget and the Packages page regardless.
- Enable email alerts toggle — when ON, sends an email to you, all your managers, and any extra emails listed.
- Additional emails — comma-separated list (e.g.
dispatch@yourdsp.com, ops@…) for routing alerts to the right team without giving them DSPro accounts.
Database Tables Used
package_reports— one row per submission. Columns:id,owner_id,driver_id,report_type('extra' | 'missing'),comment,photo_path,station_code,status,resolved_by,resolved_at,resolution_note,created_at,updated_at.package-photosstorage bucket — public-read, with RLS policies restricting upload to the path{owner_id}/{driver_id}/....profiles.package_alert_email_enabled+profiles.package_alert_extra_emails— per-DSP email config.
The Point System
Each attendance event has a point value:
- Late (under 15 min) — 0.5 points
- Late (15+ min) — 1 point
- Left early — 1 point
- Callout (with notice) — 1 point
- Callout (no notice) — 2 points
- No-show — 3 points
Rolloff
Points roll off after 6 months from the date they were earned. So a driver who got 3 points in January will see those drop off in July.
Tier Thresholds
- Good (0–3 points) — Green
- Watch (3.5–5.5 points) — Yellow
- Warning (6+ points) — Auto-creates a Written Warning
- Final Warning (9+ points) — Auto-creates a stronger Written Warning
- Termination Recommended (12+ points) — Top-severity warning auto-issued
Logging an Event
From the Attendance page, click + Log Attendance Event:
- Pick driver.
- Pick event type (above list).
- Set date.
- Optional: notes (why, context).
- Save → driver is notified, points auto-update, warning auto-created if threshold crossed.
Two Sources
- Auto-generated — Triggered by attendance thresholds (6/9/12 points), scorecard drops to Poor, or repeat incidents.
- Manual — You issue one for behavioral issues, customer complaints, dress code, etc.
Severity Levels
- Verbal — Documented coaching, no signature required.
- Written — Standard formal warning.
- Final — Last chance before termination.
Driver Acknowledgment
Drivers see warnings on their profile and can acknowledge them. Acknowledgment is logged with timestamp + IP address — equivalent to a digital signature.
What Counts as an Incident?
- Vehicle accidents (any contact, even minor).
- Property damage (mailbox, garage, fence).
- Injury to driver or others.
- Customer complaints requiring investigation.
- Stolen package reports.
- Aggressive behavior incidents.
Logging an Incident
- Click
+ Log Incident. - Pick driver involved.
- Select category (accident, customer complaint, etc.).
- Set severity: Low / Medium / High / Critical.
- Date and time.
- Detailed description (what happened, who reported, witnesses).
- Attach photos if available.
Status Tracking
Incidents have a status:
- Open — Just logged, awaiting investigation.
- Investigating — In progress.
- Resolved — Closed with outcome documented.
What Drivers Upload
- Updated driver's license (after renewal).
- Medical card / DOT physical.
- MVR clearance documentation.
- Training certificates.
- Custom request documents.
Review Workflow
- Sidebar Approvals badge shows pending count.
- Click Approvals → see queue with thumbnails.
- Click any item → full preview, driver details, document.
- ✅ Approve — Document accepted, driver record updated, audit logged.
- ❌ Reject — Reason required (driver sees this), driver re-uploads.
Why MVR Matters
Amazon requires DSPs to run MVR checks at least every 90 days on every active driver. Failing to comply puts your contract at risk and creates legal exposure if a driver with a suspended license is involved in an accident.
How DSPro Helps
DSPro tracks the date you last ran an MVR for each driver. The Dashboard shows a banner when MVRs are due:
- Severely Overdue (180+ days) — Red, urgent.
- Overdue (90+ days) — Red.
- Due Soon (60+ days) — Orange.
- Never Run — Grey, needs first check.
Logging MVR Runs
Two ways:
- Per-driver — Open driver profile → MVR card → "✓ Mark Run Today".
- Bulk CSV import — Upload a CSV from Samba Safety, DMV portal, etc. DSPro matches drivers by name/ID and updates last_mvr_check_at + flags any with status issues (suspended/revoked).
What's Tracked
- Van registration expiration (auto from fleet data)
- Driver's license expiration (auto from driver profiles)
- DOT medical cards
- Rental van return dates
- Custom renewal items you add
Lookahead Windows
Renewals page shows everything due in the next 60 days, color-coded:
- Red — Overdue or expiring today
- Orange — Due in 14 days
- Yellow — Due in 30 days
- Grey — Due in 60 days
📊 Quick Filter Tiles (NEW)
The four summary tiles at the top of the Renewals page are now clickable filters. Click any tile to filter the calendar below to that window:
- Past Due — Show only items already overdue
- Next 30 Days — Show only items due in 30 days
- Next 60 Days — Show only items due in 60 days
- Total Tracked — Show everything (default state)
The active tile gets a blue outline. Click the same tile again to deselect, or click Total Tracked to clear all filters.
Message Types
- Announcements — Send to all drivers at once. Pinned to top of their inbox.
- Group messages — Send to a filtered subset (e.g., all Fantastic+ drivers, or all working tomorrow).
- 1:1 chats — Private conversations with individual drivers.
Notifications
New messages trigger a red badge in the sidebar. Drivers also get an in-app notification when they next open DSPro.
What's Logged
- Document approvals/rejections
- Schedule changes (publishing, shift swaps)
- License status changes
- MVR runs (per-driver and bulk)
- Hire date setting
- Attendance event logging + threshold crossings
- Bulk operations (invites, CSV imports)
Each Entry Shows
- Who did it (owner or specific manager).
- What action.
- Which driver/object affected.
- When (timestamp).
- Revert button (where reversible).
Search
Search bar filters by driver name, action type, or actor name. Use this to investigate disputes ("when did this driver get marked as suspended?").
Inviting a Manager
- Click
+ Invite Manager. - Enter their full name + email.
- Select permissions:
- Add drivers
- Upload scorecards
- Log incidents
- Send messages
- Delete records
- Manage team (invite other managers — usually off)
- Send invite — they get an email to set their password.
Manager Mode
When a manager logs in, they see a purple "🔧 ACTING AS MANAGER" badge in the sidebar so they always know what role they're in.
Inviting a Driver
Drivers get DSPro access via the same invite system, but the workflow is on the driver's profile (not Team & Access).
- Drivers tab → click the driver's name to open their profile
- Click Send Invite to DSPro
- The email field is pre-filled from the driver's record. Confirm or edit, then click Send invite to email
- The driver gets an email titled "[DSP Name] invited you to DSPro" with an "Accept Invitation" button
- They click → set their password → land on their driver dashboard
Re-sending an invite generates a fresh link — useful if the driver lost their first email or the link expired.
🔧 Repair Invite Link (NEW)
Sometimes a driver clicks their invite link and sets a password but gets stuck on the "Welcome — set a password" screen, OR logs in and the app shows them as DSP Owner instead of Driver. This happens when the driver's auth account got created but didn't link properly to their driver record.
How to fix:
- Drivers tab → click the affected driver → Send Invite to DSPro
- If the invite is stuck, you'll see a yellow status panel with a 🔧 Repair Link button
- Click 🔧 Repair Link → confirm
- A prompt asks for the driver's auth user ID. Find it:
- Open Supabase Dashboard → your project
- Left sidebar → Authentication → Users
- Search for the driver's email
- Click their row → copy the User UID (long UUID string)
- Paste the UID into the prompt → click OK
- Toast confirms "✅ Invite link repaired"
- Driver can now log in normally with the password they set
Defaults match Amazon's published WTN2 station values. Adjust to match what your DSP has configured in the Amazon Logistics Portal so DSPro and Amazon agree.
Tier Order
- ⭐ Fantastic+ (best)
- 🏆 Fantastic
- 👍 Great
- ⚠️ Fair
- 🚨 Poor
Per-Metric
Set thresholds for each scorecard metric: DCR, DAR, POD, Contact Compliance, Speeding, Distractions, Following Distance, Sign Violations, etc.
Data Protection
- All data encrypted at rest and in transit (TLS 1.3).
- Database hosted on enterprise-grade infrastructure (Supabase / AWS).
- Role-based access control — drivers can't see other drivers' data.
- Daily automated backups with 30-day retention.
Your Rights
- Export all your data anytime (CSV downloads on every page).
- Delete your account and all associated data — irreversible.
- Driver data is YOUR data — Amazon doesn't get a copy.
What It Does
AI Weekly Coaching Briefs lives on your Dashboard (the blue gradient widget under your top stats). Click ⚡ Regenerate Briefs and Claude reads each driver's safety score, quality score, DCR, POD, attendance, and any open incidents — then writes a short coaching paragraph for each one explaining:
- What they did well this week (lead with the positive)
- The single biggest thing they need to fix
- The specific metric or behavior driving their tier
- Whether they're trending up or down vs. last week
The brief is written in your voice — direct, no jargon, focused on what the driver should DO next week, not just what happened last week.
How to Generate Briefs
- Open Dashboard — the blue gradient widget is visible to owners only (scroll down a bit past the top stat cards).
- Pick a week — defaults to the most recent week with scorecard data. You can run briefs for any past week.
- Pick who to analyze — three filters:
- Needs attention (Fair/Poor + incidents) — most common. Just the drivers who need coaching this week.
- All drivers — every active driver, including your stars (good for end-of-quarter reviews).
- Specific tier — drill into one tier at a time (e.g., everyone at Great who almost made Fantastic).
- Click ⚡ Regenerate Briefs — Claude processes 5–10 drivers in parallel. Takes 30–90 seconds depending on fleet size.
- Review the briefs — each driver gets a card with their name, current tier badge, and the coaching paragraph.
What to Do With the Briefs
Two ways to act on a brief:
- Per-driver — Send Coaching button — sends the brief to the driver as an in-app message + SMS (if their phone is on file). Driver sees it on their phone before next shift.
- Bulk Actions — Coach (N) / Check-in (N) — sends all generated briefs at once. Useful Monday morning when you want every driver to see their brief before they roll out.
Stop Button
If a generation run is taking too long or pulling the wrong drivers, click 🛑 Stop. The job halts immediately. Briefs already generated stay; the rest are dropped.
Brief History
Past briefs are preserved on each driver's profile under Coaching History. You can scroll back through weeks and see what you sent — useful for performance reviews or when defending a termination decision.
Privacy & Cost
- Driver names, scorecard metrics, and incident summaries are sent to Anthropic's API for analysis. No photos, no SSN, no payroll data.
- Anthropic does not retain customer data submitted via API for training. See Anthropic's privacy policy.
- Average cost per brief: ~$0.01–0.02. A 60-driver fleet costs roughly $1–2 per weekly generation.
- Edge Function:
clever-worker— same gateway as other AI features.
Troubleshooting
- Brief is empty or generic — driver doesn't have enough weekly scorecard data yet. Upload at least one Amazon weekly scorecard PDF first.
- Wrong driver shown — check the "Who to analyze" filter. "Needs attention" only includes Fair/Poor or those with open incidents.
- Generation hangs — click Stop, refresh the page, try again. If it keeps failing, the Anthropic API may be having a hiccup.
- Driver didn't get the message — verify their phone number is on file. Check Activity Log for the send event.
Why Server-Side?
Every AI feature in DSPro routes through a Supabase Edge Function — never directly from the browser. This keeps the Anthropic API key in Supabase secrets where the user can't see or steal it. If you ever want to disable an AI feature, you can flip it off at the Edge Function level without touching the front-end.
📷 Van Damage Detection
Edge Function: compare-inspection-photos
- Triggers automatically when a fresh 4-photo van inspection is uploaded.
- Pulls the previous 4 photos for the same van.
- Sends all 8 photos to Claude with a prompt asking it to flag new damage.
- Stores the AI's findings on the inspection record.
- Surfaces alerts in the Fleet Pictures section (and dashboard widget — coming deploy 337+).
🚐 VIN Scanner
When adding or editing a van, owners/managers can snap a photo of the VIN plate or registration. The AI reads the 17-character VIN and auto-fills the field — no typing.
🆔 Driver License Scanner
When onboarding a new driver, the owner can photograph the front of the driver's license. The AI extracts: full name, DL number, expiration date, address. Pre-fills the driver record. Owner reviews and confirms before saving.
📊 Scorecard PDF Parser
When uploading the official Amazon weekly scorecard PDF, DSPro uses PDF.js to extract the text, then Claude to interpret it — pulling out per-driver Safety, Quality, Team, and Fleet metrics, plus the station-level rank/tier. The structured data lands in the amazon_* columns on each driver record so the leaderboard and bonus calculator can use it.
API Limits & Cost
- All AI calls bill against the Anthropic key configured in Supabase secrets.
- Damage detection (8-photo comparison) is the most expensive operation per call.
- VIN and DL scans are cheap — single photo, short response.
- Scorecard parses run once per weekly upload.
Driver Sidebar
Drivers see only 3 sidebar items:
- My Profile — Their scorecard, attendance, license, MVR status, documents, warnings, and clock-in card.
- My Schedule — Their published shifts only (not the whole roster).
- Time Clock — Big clock-in card + their own time entries.
What Drivers CAN'T See
- Other drivers' performance data (only their own + leaderboard top 10 anonymized).
- Owner/manager admin pages (Team, Billing, Settings, etc.).
- Other drivers' incidents or warnings.
- Pay rates, financial info.
What Drivers CAN Do
- Acknowledge their schedule, decline shifts, request changes.
- Upload documents (license renewals, etc.) for approval.
- Acknowledge written warnings.
- Send/receive messages with you and managers.
- Clock in/out from station (geofenced).
A driver can't log in
- Confirm they accepted their invite (check Team & Access — invite status).
- Have them try password reset from the login page.
- If still failing, you can resend an invite from their driver profile.
Driver clock-in says "out of range"
- Check Station Setup → confirm coordinates are saved (lat/lng visible).
- Driver should be physically at the station with location enabled on their phone.
- If station radius is small (e.g., 200ft), drivers in the parking lot may be just outside. Increase radius.
Scorecard upload didn't match a driver
- Check the unmatched list shown after upload.
- Most common: name spelling mismatch (e.g., "Mike" vs "Michael" on Amazon's side).
- Update the driver's name in DSPro to match exactly, then re-upload.
Hire date import shows 0 matches
- CSV must have either driver_id or full_name column.
- Names must match drivers in your roster exactly.
- Date format: YYYY-MM-DD (e.g., 2024-03-15).
I issued a warning by mistake
Open the warning, click Edit, mark as Voided. Reason is logged in the audit trail.
How do I reset my own password?
From the login page, click "Forgot password?". A reset link is emailed to your registered email.
Can I export everything?
Yes. Most pages have a "📥 Export CSV" button. Time clock entries, scorecard history, attendance events, drivers list — all exportable.
I uploaded the wrong file to a tile in the Upload Station — did I break anything? (NEW)
No. Files are routed by content detection, not the tile you dropped them on. If you drop a Customer Feedback CSV onto the POD Rejects tile, DSPro reads the headers, recognizes it as Customer Feedback, and routes correctly. The tile is just an instruction-display — the parser does the actual work.
Why is my driver showing as "Fair ↓ from Fantastic" with a strikethrough? (NEW)
Either:
- Tier capping is enabled and the driver's lowest category score (Safety, Quality, or Customer Feedback) brought them below their Overall tier — the strikethrough shows their original Amazon tier
- You manually overrode their tier via the editor menu — click their editor button → Override Tier to clear it
Why doesn't the Swap Rank feature work? (NEW)
Likely because per-driver Amazon ranks haven't been published or imported. Click 🔢 Bake Ranks at the top of the Scorecards Week page first — that anchors the current sort order as ranks. Then Swap Rank works cleanly.
I locked a driver's phone, but it still got overwritten. Why? (NEW)
Two things to check:
- Did you click Save in the edit modal after toggling the lock? The pill state alone doesn't persist until you save.
- Is the pill showing 🔒 Locked (amber) or still 🔓 Auto (gray)? Only Locked is protected from CSV overwrites.
The amber "X drivers not in latest roster CSV" banner won't go away. (NEW)
You need to resolve each flagged driver. Click Review → on the banner → for each driver, click either Mark Inactive (they really left) or Still Active (just clears the flag). Once the list is empty, the banner disappears.
The Customer Complaints tile shows zero but I have negative feedback uploaded. (NEW)
The tile shows the latest week with data count. If your last upload was Week 17 and you're early in Week 18, it'll show the Week 17 totals. If it shows 0, either:
- You haven't uploaded any Customer Feedback CSV yet (use the 💬 tile in Upload Station)
- Your most recent week genuinely had zero complaints (great job!)
A driver clicked their invite link but they're stuck or showing as Owner. (NEW)
Use the 🔧 Repair Link button on the driver's invite modal. Drivers tab → driver's profile → Send Invite to DSPro → if you see a yellow "stuck invite" panel, click Repair Link. See the Team & Access manual section for full step-by-step.
Need more help?
Email support@dsproapp.com for direct help. Include: your DSP name, what you were trying to do, and a screenshot if applicable.
DSPro ("we," "us," or "our") is committed to protecting the privacy of our customers and their employees. This Privacy Policy explains how we collect, use, and protect information when you use the DSPro platform at dsproapp.com.
Account Information: When you sign up, we collect your name, email address, and company information.
Driver & Fleet Data: You provide driver names, performance scores, schedules, van information, inspection records, and written warnings. This data belongs to you.
Usage Data: We may collect basic usage analytics (pages visited, features used) to improve the platform.
Payment Information: Billing is handled entirely by Stripe. DSPro never stores your credit card number or payment details.
• To provide, maintain, and improve the DSPro platform
• To process your subscription and send billing-related communications
• To respond to support requests and customer service inquiries
• To send product updates and feature announcements (you may opt out at any time)
We do not sell, rent, or share your data with third parties for marketing purposes. We use Supabase for database hosting and Stripe for payment processing. Both are bound by strict data processing agreements. We may disclose information if required by law or to protect our legal rights.
We use industry-standard encryption (TLS/HTTPS) for all data in transit. Data at rest is encrypted on SOC 2 Type 2 certified infrastructure. Access is controlled by row-level security policies that ensure your data is isolated from all other customers.
Your data is retained for as long as your account is active. If you cancel your subscription, your data is retained for 30 days and then permanently deleted upon request. You may request data deletion at any time by contacting us at support@dsproapp.com.
You have the right to access, correct, or delete your personal data at any time. Contact us at support@dsproapp.com to exercise these rights.
For privacy questions, contact us at support@dsproapp.com.
By accessing or using DSPro, you agree to be bound by these Terms of Service. Please read them carefully.
DSPro is a fleet and driver management platform designed for Amazon Delivery Service Partners. You agree to use the platform only for lawful purposes and in accordance with these Terms. You are responsible for maintaining the confidentiality of your account credentials and for all activity that occurs under your account.
• Subscriptions are billed monthly via Stripe.
• A 45-day free trial is available for new accounts. No credit card is required to start.
• You may cancel at any time. Cancellation takes effect at the end of the current billing period.
• We reserve the right to change pricing with 30 days notice.
You own all data you input into DSPro. We do not claim any ownership over your driver data, inspection records, or fleet information. You grant us a limited license to store and process your data solely for the purpose of providing the platform services.
You agree not to:
• Use DSPro for any unlawful purpose or in violation of any regulations
• Attempt to gain unauthorized access to other customers' data
• Reverse engineer, decompile, or attempt to extract the source code
• Use the platform to store or transmit malicious code
DSPro is provided "as is" without warranty of any kind. We do not guarantee that the platform will be error-free or uninterrupted. We are not affiliated with Amazon and DSPro is an independent third-party tool.
To the maximum extent permitted by law, DSPro shall not be liable for any indirect, incidental, or consequential damages arising from your use of the platform. Our total liability shall not exceed the amount you paid in the 3 months preceding the claim.
These Terms are governed by the laws of the State of Florida, without regard to conflict of law principles.
Questions about these Terms? Contact us at support@dsproapp.com.
Tier order: ⭐ Fantastic+ (best) → 🏆 Fantastic → 👍 Great → ⚠️ Fair → 🚨 Poor
Invite managers or drivers to join