Customer Portal

Fetch Photos from Jobber

Initializing…

⚠ Review Before Publishing

The technician notes may contain private information. Review the highlighted content before proceeding.

Technician Notes
⚠️ Please also manually verify no customer names appear in the notes before publishing.

Fetch Technician Notes from Jobber

Initializing…

Geocode Addresses

Initializing…

Auto-Categorize

Fetching unclassified records…

Admin Access

Enter your admin PIN to continue

Loading stats…
Loading submissions…

Cadence Settings

Publish Cadence

AI Notes Rewriter

Enter your Anthropic API key to enable automatic AI rewriting of technician notes when queuing jobs. The key is stored in this browser only and never sent anywhere except Anthropic's API.

Queue Status

Loading…

Jobber Webhook

Auto-imports completed Jobber jobs as pending records. Deploy the worker, then paste its URL below.

Developer Tools

Required SQL — Run First

Run this in the Supabase SQL Editor before using Backfill or Fetch Photos.

ALTER TABLE public.points_of_propane
  ADD COLUMN IF NOT EXISTS jobber_id text,
  ADD COLUMN IF NOT EXISTS jobber_job_number text;

CREATE UNIQUE INDEX IF NOT EXISTS pop_jobber_id_unique
  ON public.points_of_propane (jobber_id)
  WHERE jobber_id IS NOT NULL;

Backfill Jobber IDs

Fetches all jobs from Jobber and matches them to existing Supabase records by job number, writing the Jobber node ID into the jobber_id column. Run this once to enable the photo fetcher on pre-existing records.

Restore Photo URLs

Finds records where photo_urls is null or empty, checks Supabase storage for matching files under each job's prefix, and re-links them. Use this to recover photos wiped by the import PATCH bug.

Debug DB

Fetches the first 5 rows from points_of_propane and shows raw JSON — id, description, jobber_id, jobber_job_number. Use this to verify whether jobber_id is truly NULL before running Backfill.



          
          

Re-fetches those 5 Supabase records, extracts job numbers via /#(\d+)\s*$/, then pulls page 1 from Jobber and shows whether the numbers overlap.


        

Clean Ticket Numbers

Strips Jobber ticket references (e.g. — #1234) from all description fields. Queries every record, strips the pattern /\s*[-—]+\s*#\d+/g from any that match, and PATCHes them back.

Import Jobs from CSV

📂

Drag & drop your Jobber CSV here

Accepts .csv files only