MobilePros

Owner's guide — where everything lives

For the person running the office. The crew app files everything by itself; this page shows where it lands, what the Sheet is for, and the handful of things you do each day.

On this page

  1. How the pieces fit
  2. Your Google Drive, folder by folder
  3. The Sheet, tab by tab
  4. Adding a job
  5. Workers and their private links
  6. What arrives, and when
  7. Reading a visit
  8. The work page (showcase)
  9. Assessments and quotes
  10. Your referral code and partner page
  11. Changing the setup
  12. Housekeeping and privacy
  13. When something goes wrong
Your daily routine is three things: add tomorrow's jobs, read the 6 pm digest, act on the flags. Everything else files itself.

1 How the pieces fit

In one lineThe crew's phones talk to a small Google script in your account. The script puts every photo, PDF and answer into your Drive and your Sheet, and emails you. Nothing is stored anywhere else.
Crew phonesthe app, from a private linkphotos · PDFs · answers The scriptGoogle Apps Scriptchecks the key, files, emails Your Google DriveMobilePros / Jobs / client / jobphotos, videos, certificates Your Google Sheetjobs, workers, every event logged Your inboxstart · certificate · finish · digest

Three things only you can see: the Drive folder, the Sheet, and the emails. The crew sees their jobs and nothing else. The public sees only the work page, and only what you tick.

2 Your Google Drive, folder by folder

PurposeOne folder per job, one sub-folder per service, every file named by service and stage. You never sort a photo; you open a job folder and it is already in order.
MobilePros                                  ← the root, in the account that runs the script
├── Jobs
│   └── Harbourview Plaza                  ← one folder per client
│       └── 2026-10-31 - Harbourview Plaza – Building A - J-1001   ← one per job
│           ├── Pre-visit - Harbourview Plaza – Building A - 2026-10-31.pdf
│           ├── Certificate - Harbourview Plaza – Building A - 2026-10-31.pdf
│           ├── Post-job - Harbourview Plaza – Building A - 2026-10-31.pdf
│           ├── Pressure washing            ← one per service
│           │   ├── Pressure washing - Before - 1.jpg
│           │   ├── Pressure washing - Before - 2.jpg
│           │   ├── Pressure washing - After - 1.jpg
│           │   └── Pressure washing - Before - video 1.mp4
│           └── Window cleaning
│               └── …
├── Assessments
│   └── Harbourview Plaza - Building B - 2026-10-31
│       ├── Quote - Harbourview Plaza - 2026-10-31.pdf
│       ├── Pressure washing - Front walkway   ← photos per quote line
│       └── Area - Front entrance              ← photos per documented area
├── Showcase                              ← public copies of consented photos only (see 8)
│   └── J-1001
└── _uploads                              ← video pieces while they upload; empties itself

Share the MobilePros folder with the office team only. Never share Jobs with a client; send them the certificate PDF or a link to the one job folder instead.

Renaming: the folder and file names come from config.json (drive section). Change them there before the first real job, not after — the script files new jobs by the new pattern and leaves old ones alone.

3 The Sheet, tab by tab

PurposeThe Sheet is the office. Two tabs you type into (Workers, Jobs), one you curate (Showcase), and the rest the script fills in as a permanent log. Edit a cell on Jobs and the crew sees it within a minute.
TabWho writes itWhat it holds
WorkersyouOne row per contractor or employee: name, phone, email, role (worker sees their jobs, admin sees all), the access key and private link the script generates, Active on/off.
Jobsyou, then the scriptThe schedule. You fill in the job (see 4); the script fills in Folder, Started, Certificate, Finished, Rating, Photo consent and Flags as the visit happens. Status moves Assigned → In progress → Done by itself.
VisitsscriptOne line per event: on my way, started (with GPS), certificate, finished (with GPS), review request. The audit trail.
MediascriptEvery photo and video: job, service, Before/After, file name, Drive link, when it was taken and by whom.
CertificatesscriptOne line per certificate: services with areas, issue flagged, not-completed reason, rating, the site contact's comment, photo consent, whether they signed, the PDF.
Assessmentsscript, then youOne line per quote: prospect, totals, services, the PDF and folder. Your menu action turns a row into a job (see 9).
Showcasescript, then youJobs eligible for the public work page. You write the Caption and tick Show on page? (see 8).
LogscriptSetup, links generated, digests sent. For troubleshooting.
Don't rename tabs or header cells. The script finds things by those names. Add columns to the right if you want your own notes; the script ignores them.

4 Adding a job

PurposeA job is one visit to one site. The row you type is exactly what the technician sees on their Pre-visit screen, so what you put in the access notes is what they know when they arrive.
  1. Jobs tab → new row. Job ID: anything unique (J-1042). Status: Assigned. Date as a date, Time as text (8:00 AM).
  2. Client (the company), Site (the location, if a client has several), Address with city and province — the app opens it in Maps and the work page uses the city.
  3. Site contact (name and role), Contact phone (makes the "on my way" text and tap-to-call work), Contact email (where the review request goes).
  4. Access notes: gate codes, parking, water, keys. Job notes: what the client asked for.
  5. Services: comma-separated, spelled exactly as in config.json (Pressure washing, Window cleaning). Each becomes a Before/After card and a certificate line.
  6. Documents: one per line, Work order 2291 https://drive.google.com/…. They appear as buttons on the job.
  7. Assigned to: the worker's name as on the Workers tab (several: comma-separated). The job appears on their phone the next time the app checks, usually within a minute.
Cancelling: set Status to Cancelled; it disappears from the phones. Rescheduling: change the date. A second visit to the same site: a new row with a new Job ID — never reuse one, the folders are named by it.

5 Workers and their private links

PurposeThe private link is the login. No passwords to reset. A link can be switched off or replaced from the Sheet in one click, so a lost phone is a one-minute problem.
  1. Workers tab → new row: Name, Phone, Email, Role. Leave the key and link cells empty.
  2. Menu MobilePros → Generate private links for workers. The key and link fill in; Active is ticked.
  3. Text or email the person their Private link plus the crew training page: …/training/. They open the link once and save the app to their home screen (the training page shows how).
  4. Someone leaves or loses a phone: untick Active (link stops at once) or menu → New key for selected worker (old link dies, new one to send). Their past visits stay on record under their name.
Role admin sees every job on their phone and is for you, a supervisor or a lead hand. Everyone else is worker.

6 What arrives, and when

PurposeYou should not need to open the Sheet during the day. The emails tell you what happened; the 6 pm digest tells you what needs you.
EmailWhenWhat to do
Visit startedthe technician taps Start visitNothing. It confirms they are on site and when; the folder link is in it.
Certificate (PDF attached)the certificate is sent, usually at the end of the workSkim it. If the subject starts with ACTION, something was flagged: not completed (book the return visit) or an issue on site (tell the client).
Visit finished (PDF attached)the post-job checklist is submittedRead the answers that say "see notes". Damage or injury: call the technician.
Assessment (quote PDF attached)a technician saves an on-site assessmentFollow up with the prospect; turn it into a job when they say yes (see 9).
Daily digest6 pm every dayThe one to read: done today, flags needing action, started-not-finished, finished without a certificate, tomorrow's jobs and anyone unassigned.
Thank-you with review linksent to the client after a 4- or 5-star certificate, if the job has a contact email and you set the review linkNothing; a copy is logged on the Visits tab.

Who gets them and the digest hour are set at the top of the script (NOTIFY_EMAILS, DIGEST_HOUR). Send the daily digest now is on the menu if you want one on demand.

7 Reading a visit

PurposeA client asks "was it done, and how did it go?" You answer in under a minute from any of three places.
  1. Fastest: the certificate PDF from the email. One page: services with areas, the before/after thumbnails, the rating, the site contact's comment, both signatures, time on site.
  2. The whole story: Jobs tab → the row's Folder link. Full-size photos by service, the three PDFs, any video.
  3. Minute by minute: Visits tab filtered by the Job ID: on-my-way text, start time and GPS, certificate, finish time and GPS, review request.
  4. To send to the client: forward the certificate email, or share the job folder's Pressure washing sub-folder as view-only. Do not share the Jobs folder itself.

8 The work page (showcase)

PurposeA public page of before-and-after jobs with the client's star rating, built from real certificates. Nothing appears on it unless the client ticked photo consent on the day and you ticked Show on page. It is your portfolio, and it fills itself.
  1. When a visit finishes and the certificate had Photo consent = Yes, the script copies that job's photos into Showcase / Job ID, makes the copies viewable by link, and adds a row to the Showcase tab. The originals stay private.
  2. Open the Showcase tab. Look at the row: city, services, rating, the client's comment, links to the before and after files. Open the folder and look at the photos — only good pairs belong on the page.
  3. Write a short Caption ("Plaza entrance and walkway, hot-water pressure wash") and tick Show on page?. Within ten minutes it is on …/work/.
  4. Untick to take it down. A client changes their mind: untick, then delete the job's folder inside Showcase; the originals in Jobs are untouched.
  5. Photos added after the job was synced (or a sync that failed): select the job on the Jobs or Showcase tab → menu → Refresh showcase photos for selected job.
Sharing one job: every card has a "Share this job" button that copies a link straight to that card. Text it to a prospect in the same trade.

9 Assessments and quotes

PurposeA technician walks a site with a prospect and saves an assessment; you get the quote PDF and photos. When the prospect says yes, the quote becomes a job without retyping anything.
  1. The email arrives with the PDF. The folder in Assessments has the photos per line and per documented area.
  2. Edit the quote if needed: the technician can reopen it on their phone (Jobs screen → Saved on this phone), change lines, and Save & send again; the PDF is replaced and the Assessments row updated.
  3. Prospect says yes: Assessments tab → select the row → menu → Create job from selected assessment. A new Jobs row appears with the client, site, address, contact and services filled in and the quote linked. Add the date, time and Assigned to.

Prices on the phone come from the price list in config.json (assessment.priceList); the technician can override a price on the spot, and the note says why.

10 Your referral code and partner page

PurposeEvery company on MobilePros gets a referral code on day one. Anyone who joins through your link or code pays $69 a month instead of $99, for as long as they stay. Get four of them live and your own monthly fee is $0. Founding partners who get there in their first 90 days keep that for life.
  1. Your code is your company name, short (for example ALWAYSCLEAN). It came in your welcome email, and your partner page is mobilepros.ca/partner/?p=YOURCODE. Bookmark it.
  2. The partner page has your link and code with copy buttons, texts and emails ready to send, images for social, a one-page PDF with a QR code, and a scoreboard of who has applied, who is live and how many count toward your four.
  3. A referral counts once that business has been live for 30 days. Waivers are recalculated on the first of each month; the page shows your fee for the month.
  4. Four names is all it takes: the sub you hand work to, the trade you share a site with, the owner at the supply counter, the competitor in another town you respect. Send the first text on the page; it takes thirty seconds.
This is not a MobilePros tab in your Sheet. Referrals are tracked by MobilePros, not in your copy of the system; the partner page is the live view. Questions: hello@mobilepros.ca.

11 Changing the setup

PurposeEverything the crew sees is in one file, config.json, on the website. Everything the office side does is at the top of the script. Neither needs a developer to change.
You want to change…WhereThen
Company name, colours, logo, phone, emailconfig.json → companyRe-upload the site folder to Netlify (drag onto Deploys). Phones pick it up on their next open.
The list of services, areas, standard notesconfig.json → services, areas, standardNotes
Pre-visit checklist, post-job questions, "on my way" wording, blurry-photo strictness, location recordingconfig.json → visit
Price list, units, tax, quote termsconfig.json → assessment
Training videos (crew and owner pages), work page title and introconfig.json → training, showcase
Folder and file namingconfig.json → drive (and the matching lines in the script)
Who gets the emails, digest hour, review link, email the client the certificate automaticallyTop of Code.gs: NOTIFY_EMAILS, DIGEST_HOUR, REVIEW_LINK, EMAIL_SITE_CONTACTSave → Deploy → Manage deployments → pencil → New version → Deploy. Then run setup once if you changed the digest hour.
The "never" list. Decide now what this system will not do — quoting beyond the on-site assessment, invoicing, payments, a client portal — and keep it to that. Every "just one more field" is how a simple tool stops being used.

12 Housekeeping and privacy

PurposePhotos of client premises, contractor names, signatures and GPS points are personal information under BC's PIPA. The system is built to keep it inside your Google account; these habits keep it that way.

? When something goes wrong

A job is not showing on a technician's phone
Check the Jobs row: Status is Assigned (not Unassigned or Cancelled), the Date is a real date, and Assigned to matches their Workers name exactly. Ask them to tap ↻ on the Jobs screen.
"This link is not active" on a phone
Their Workers row has Active unticked or the key was regenerated. Re-tick, or send the new link.
The photos arrived but the certificate didn't, or the other way round
The phone sends things in order and keeps trying; check again in a few minutes or ask them to open the app (it resends when opened). The Visits tab shows what has landed.
A certificate came in with no site contact signature
Allowed; the post-job answer for the walkthrough says why. Follow up with the client if it matters for that account.
The digest didn't arrive
Script editor → Triggers (clock icon): there should be a daily dailyDigest. If not, run setup again. Check NOTIFY_EMAILS has your address.
A job is on the Showcase tab but not on the page
Show on page? must be ticked and the row must have at least one Before or After file. The page refreshes within ten minutes; add ?nocache=1 to the feed link to force it.
Videos are missing
Clips over the limit (40 MB, about a minute) are refused on the phone with a message. Pieces of a clip in _uploads mean it is still arriving or the phone lost signal; it will resend.
I changed config.json and nothing changed on the phones
Was the site re-uploaded to Netlify? Then have them close the app fully and reopen; it checks for a new config on every open.

Technical contact: the person who set this up.