Zeon Signs

Checking Access…

Confirming your admin permissions.

← Back to Team Hub
← Back to Hub

Admin Dashboard

Edit checklist sections and items, manage settings, and reset to defaults. Changes are saved automatically to this browser and applied immediately to the checklist tool.

Import Open Jobs CSV

Drag & drop or select your CSV file. Jobs will be upserted by Project#.

Drop CSV here or click to browse
Requires: Project# and Status columns. All other columns are stored and shown in the job detail view.
Current Jobs in System
Loading…
Kanban Board Settings
Salesperson Colors

Choose a badge color for each salesperson. Colors appear on cards in the Kanban board and rows in the List view.

Pipeline Display Settings

Choose which stages appear in the Pipeline widget on the homepage and in what order. Drag rows to reorder. Toggle the eye to show/hide a stage. These settings are independent from the Kanban board.

Create View

Select which status columns to show in this view. Uncheck to hide a column.

Manufacturing Checklist
Low Complexity Checklist
Ship-In Checklist
Service Checklist
Permit Checklists

Shared by Manufacturing & Ship-In. Add one checklist per municipality.

Review QR Code

Upload your customer review QR code here. It will appear at the bottom of every printed checklist. The image is stored in this browser — upload it once and it's always ready.

No QR uploaded

Accepts PNG, JPG, GIF, or SVG. Recommended size: 300×300px or larger for best print quality.

How it works: Select your QR image and click Save. The image is stored in this browser and will automatically appear on all printed checklists going forward. If you clear your browser data you'll need to re-upload it.

Import ABQ Permit Export

Download the Excel export from the ABQ permit portal, then import it here. Permits are merged — existing records updated, new ones added. Job numbers are matched to Open Jobs by address.

→ Open ABQ Permit Portal (log in, search your permits, export to Excel)

Drop .xlsx file here or click to browse

Accepts the standard ABQ permit portal export format

Current ABQ Permit Count

—

permits stored in Supabase

View Permits Page →
Closed Jobs List

Import a CSV of closed/completed jobs so the Permits page can link permits to past work. This list is internal — it does not appear on the Open Jobs board or anywhere else.

→ View Permits Page

Same format as Open Jobs CSV

Requires a Project# column. Optional: Name, Salesperson, Status. All other columns are stored and used for address matching.

Drop .csv file here or click to browse

Same column format as your Open Jobs export

Closed Jobs Stored

— jobs

Turned In for Billing

Import a CSV of jobs turned in for billing. Used by the Permits page for candidate matching only — not visible on any other page.

Same format as Open Jobs CSV

Requires a Project# column. Optional: Name, Salesperson, Status. All other columns are stored and used for address matching.

Drop .csv file here or click to browse

Same column format as your Open Jobs export

Billing Jobs Stored

— jobs

Pending Jobs

Import a CSV of pending jobs. Used by the Permits page for candidate matching only — not visible on any other page.

Same format as Open Jobs CSV

Requires a Project# column. Optional: Name, Salesperson, Status. All other columns are stored and used for address matching.

Drop .csv file here or click to browse

Same column format as your Open Jobs export

Pending Jobs Stored

— jobs

Expiration Email Notifications

A daily automated check runs on your Netlify server. It emails the people below when any issued permit is expiring within your threshold window.

OFF

Each PM will only receive alerts for their own permits. Pulled automatically from your Open Jobs list.

Receives a summary of all expiring permits regardless of salesperson.

Each owner listed here will also receive the full summary of all expiring permits.

Emails are sent once per day. Only permits with status "Issued" are included.

One-time Setup Required

  1. Create a free account at resend.com
  2. Verify your sending domain (or use their free onboarding@resend.dev address for testing)
  3. Create an API key in Resend → copy it
  4. In Netlify: Site → Environment Variables → add RESEND_API_KEY = your key
  5. Also add SUPABASE_URL and SUPABASE_KEY as env vars (same values from this admin page)
  6. Add the file netlify/functions/check-expiring-permits.js to your repo (provided separately)
Cloud Sync (Supabase)

Connect a free Supabase database so the job board is shared across all browsers and devices. Once configured, uploading a CSV here will automatically push the jobs to the cloud — everyone will see the updated board instantly.

One-time setup
  1. Go to supabase.com and create a free account & new project.
  2. In your project, click SQL Editor in the left sidebar and run this SQL:
create table hub_data (
  key text primary key,
  value jsonb not null,
  updated_at timestamptz default now()
);
alter table hub_data enable row level security;
create policy "Public access" on hub_data
  for all using (true) with check (true);
  1. Go to Project Settings → API and copy your Project URL and anon / public key.
  2. Paste them below and click Test & Save.

This is the public anon key — safe to use in a browser for an internal tool.

Sync Diagnostics

Use this to verify that settings are being saved to the cloud and to force-push everything if something seems out of sync. If you see "Write blocked" below, follow the fix instructions.

If writes are blocked: Open your Supabase project → Table Editor → hub_data → RLS Policies → make sure a policy exists that allows INSERT/UPDATE for the anon role. Run this SQL in the SQL Editor if not:
create policy "Allow anon writes" on hub_data
  for all using (true) with check (true);
Beta Database Sync

Copy data between production and beta databases. Safe to run at any time — it overwrites the target with a fresh copy of the source.

Admin Access

Admin access is now controlled by your Team Hub account's roles, not a shared password. To change your own sign-in password, go to My Account. To grant someone else admin access, use the Manage Users page (admins only).

Danger Zone

Reset All Checklists to Default

This will remove all customizations you've made to every checklist and restore the original items. This cannot be undone.

Inventory CSV Upload

Upload a SquareCoil inventory export (.csv) to populate the Inventory page. All items are stored in Supabase and are immediately visible to the team.

Expected columns (from SquareCoil export):

ID, Description, Size, Category, Vendor, Purchase Cost, Purchase UOM, QOH, Cost UOM, Cost, Last updated

Drop CSV here or click to browse

SquareCoil Inventory export (.csv)

Current Inventory in System
Loading…
Inventory Editor

Edit subcategory names and keyword rules inline. Drag ⠿ to reorder items, subcategories, or whole categories. Click Save Changes when done.

Loading…
Settings

QR Code — Inventory Help Form

Upload a QR code image that links to your inventory request/correction form. It will appear at the top of the Inventory page when staff tap the "QR Code" button.

Current QR

Drop image here or click to browse

PNG, JPG, or GIF — recommended square

The link the QR code points to. Shown as a clickable "Open Form" link on the Inventory page itself — the QR code image only appears on the printed version.


QR Code — Service Inventory Form

Upload a QR code image that links to the service inventory request/correction form. It will appear on the Service Inventory page when staff tap the "QR Code" button.

Current QR

Drop image here or click to browse

PNG, JPG, or GIF — recommended square

The link the QR code points to. Shown as a clickable "Open Form" link on the Service Inventory page itself — the QR code image only appears on the printed version.


Google Maps API Key

Used by Zone Lookup and the Survey Estimate Calculator to geocode addresses and calculate drive time. Set it once here and it applies for every Team Hub user automatically — no one else needs to get or paste in their own key.

Needs the Distance Matrix API, Maps JavaScript API, and Places API (New) (for address suggestions — note the "(New)" name specifically, the older "Places API" is a separate product our address suggestions don't use) enabled on the key in Google Cloud Console → APIs & Services → Library.

Survey Estimate Calculator

Survey Labor Rates

Drives every price the Survey Estimate Calculator shows — the crew-size cards, the labor-rates reference table, and the printed rate sheet all update from what's saved here.

Rate 1 Man 2 Men
Survey ($/hr)
Travel ($/hr)
Per Diem ($/day)

Survey Calculator Minimums

The standard/baseline package the Survey Estimate Calculator assumes — these three should stay consistent with each other and with the rates above (1 Man Travel rate × Standard Travel Hours + 1 Man Survey rate × Standard Survey Hours should equal the Minimum Job Price).

Service Inventory Editor

Edit service categories and standard inventory items in one place. Three category types: standard (pulls from master inventory), custom (manually entered items), tiered (price tier lists).

Service Categories

Loading…

Standard Inventory Items

Only categories assigned to the service inventory are shown. Add or remove them below — changes are saved with Save All.

Loading…
Loading…
Customer Feedback Emails

Each day the Closed Order Queue is uploaded (Admin → SquareCoil Uploads → Closed Jobs). Any new job gets a personalized feedback email to its project contact — except addresses whose domain is on the Blocked Email Domains list below, and jobs with no contact email. Customers answer on the Hub (no login). Salespeople and PMs see their own results under My Account → Customer Feedback; admins and managers see everything.

Sending status
Loading…

While OFF, every closed-jobs upload is a dry run: it only reports who would be emailed, and saves and sends nothing. The first time it is turned ON, every job already in the closed queue is recorded as already handled and no one is emailed; only jobs that show up in later uploads get an email.

Closed Queue

The Raspberry Pi pulls the Closed Order Queue from SquareCoil automatically every day at 12:00 PM. These buttons ask it to do it right now (it picks the request up within about 30 seconds). While sending is OFF nothing is emailed or saved, so running it is safe.

No sync recorded yet.

What is in the queue

Loading...

Jobs are split into tabs. Queue is what is waiting to send or failed and will retry. Sent is everything that has gone out. Not emailed is anything skipped, removed, or recorded only. Use View form to open the exact form a customer would see (nothing you enter is saved).

Job #JobWould email Salesperson / PMResult
No upload recorded yet.

Clear the queue

Cancel waiting emails stops every email that is queued or failed and has not been sent. They are marked cancelled, not deleted, so they cannot come back on the next upload.
Delete the entire queue erases every job record and every customer answer, and starts over as if this had never run. The next upload counts as a first run. It cannot be undone.

General Feedback Form (for QR codes)

A general form for anyone, not tied to a job, salesperson or PM. They enter their name, email and job, then give the same star rating and company questions (no questions about individual people). Use this link to make your own QR code. Answers appear in Customer Feedback for admins and managers only.

Open form
Blocked Email Domains

Jobs whose contact email is on one of these domains are never emailed. For example, adding zeonsigns.com blocks anyone@zeonsigns.com and anyone@mail.zeonsigns.com. Use it for your own company, partners, or any customer who shouldn't be surveyed. Changes save automatically and apply to the next upload.

Import accepts a CSV or text file with one domain per line (or separated by commas). Domains are added to the list; nothing on it is removed.

Email Style

Which design customers receive. Plain is a short, personal note signed by the salesperson / PM — it looks like a message from a person, so it is less likely to be sorted into “Other” or promotions. Branded is the original design with the logo header and a red button. Use Plain while the sending domain is new, then consider switching to Branded once emails are landing in inboxes reliably. Use the test email below to preview either one first.

Saves automatically when you choose.
Test Mode: Send a Test Email

Sends one real, branded email to any address you choose (not the customer), using a recent closed job from your uploaded list as the example. Test sends never count as a customer's feedback request and work even while sending is OFF.

Leave the names blank to use the job's own. Add a project manager here to preview the questions about both people (they are asked on every rating).

CSV Column Mapping

Each box is titled with the column header from your SquareCoil closed queue CSV. Leave a box empty to use that default header, or type a different header to override it. Run a Test pull to see the headers SquareCoil actually returns.

Also saves automatically when you leave a field.
Feedback Activity
Job #JobSent to Salesperson / PMStatusDetail
Loading…
Automatic Sync

The Raspberry Pi downloads the Labor Analysis Report from SquareCoil and uploads it here automatically every day at 5:00 AM. Use the button to run it right now. The Pi picks the request up within about 30 seconds.

No sync recorded yet.
Import Labor Analysis CSV

Upload the daily Labor Analysis Report. Each upload is saved to history — the dashboard shows trends over time.

Drop CSV here or click to browse
Accepts the standard "Labor Analysis Report" CSV export. Each file is stored with a timestamp so history builds up automatically.
Upload History

No uploads yet.

View Labor Dashboard