Reusable customer install
TruShine reporting data layer
Each Service Pilot customer gets its own customer folder, provider connection records, sanitized data snapshots, and import jobs. The report UI reads the customer snapshot; provider credentials stay outside the deployed static site.
Current mode: scheduled_import. Last page build: 5/27/2026, 5:17:55 AM.
Provider auth
3 of 3 providers authorized
Provider auth and importer data both have to be complete before automatic refresh is live.
Imported data
3 providers have at least one imported row
Meta and GHL have imported snapshots; Google still needs its first import.
Refresh path
38 Meta campaigns, 6 Google rows
Use a scheduled worker or server route to rebuild this customer snapshot.
Customer isolation
Credentials must be encrypted and server-only
Do not copy one customer token into another customer's folder or build artifact.
Connection actions
Each customer uses its own OAuth/token connection. The connect links start the provider login flow and the refresh action rebuilds the customer snapshot from whatever is already connected.
Provider setup
This is the operator/customer setup view for every copied Service Pilot reporting account.
Facebook / Meta Ads
oauth
Uses campaign spend, impressions, clicks, lead forms, campaign status, and source labels.
- Customer step
- Connect the customer's Meta ad account with their own login.
- System step
- Store only encrypted refresh credentials, then run the Meta campaign importer.
- Rows
- 38
- Last import
- Never
Google Ads
oauth
Uses campaign/ad group/keyword rows, spend, clicks, calls, forms, and conversion labels.
- Customer step
- Connect the customer's Google Ads account with their own Google login.
- System step
- Store only encrypted refresh credentials, then run the Google campaign importer.
- Rows
- 6
- Last import
- Never
GoHighLevel
private token
Provides booked jobs, won jobs, revenue, junk/spam filtering, and ROAS matchback.
- Customer step
- Connect the customer's GHL location or private integration token.
- System step
- Map opportunities, contacts, source labels, booked status, won revenue, and pipeline stage.
- Rows
- 100
- Last import
- Never
Current limitation
cPanel static hosting can show the latest generated snapshot, but it cannot securely complete OAuth or refresh tokens on its own. Automatic updates need a scheduled worker, Vercel/Supabase function, or another server-side job that writes fresh customer snapshots.
Reusable install contract
1. Create a customer folder with `config.json`, `connections.status.json`, and `data/*.csv`.
2. Let the customer authorize Meta and Google with their own account.
3. Connect the customer's GHL location/private integration token.
4. Run the scheduled importer and rebuild/revalidate the report snapshot.
Credential rule
Customer usernames, passwords, OAuth refresh tokens, and GHL private tokens must never be copied into the static app, CSV files, or repo. Store only encrypted server-side credentials and write sanitized report rows for the UI.