A. S. Toler Corp.
Bid Panel
Internal access only
 
Restricted to authorized A. S. Toler Corp. staff. Contact Alex if you should have access.
Active Bids
0
Closing in 7 days
0
Vendor Requests
0
Awaiting Quote
0
Active Bids — all bids currently in the pipeline, pulled from three sources: the bid system (updated every 5 min from SharePoint) · Dropbox EST# folder (confirmed at setup) · Gmail label ESTIMATING / CURRENT BIDS / YY-NNN (created at setup). All three should align for every active bid. Expanding a card shows: vendor quote requests & response status · GCs bidding (SBX plan room + Gmail invitations) · addenda count (Gmail subject + Dropbox folder + SBX listing) · SBX project link · job walk date & location · pre-qual status.

📡 Bid Radar

Sort:

AI-classified bid invitations pulled from your inbox (PlanRoom / BuildingConnected / direct GC outreach). Only those whose due date hasn't passed.

📥
No bid invitations yet Once the inbox parser is wired to public.bid_invitations in Supabase, future-due bid invitations from PlanRoom / BuildingConnected / direct GC outreach will land here automatically.

SBX Watchlist

— of —

Live feed from onlineplanservice.com filtered to Alameda, Contra Costa, Santa Clara, San Mateo. Refreshed every 4 hours.

🛠 Setup Queue

Bids being automatically set up by the pipeline (Dropbox folder, Gmail label, BID BREAKDOWN, plans download — all running in the background). Once setup completes, click Confirm Setup to verify everything looks right and move the bid to your active BID LIST.

📊 Analytics

— bids loaded

Award rates and pipeline health from the bid system + JOBS ARCHIVE.xlsm. Closed bids only (Awarded / Not Awarded). Pending bids excluded from win-rate math.

Loading analytics…

🪪 Prequal List

— agencies

Agencies where A. S. Toler is pre-qualified to bid. Parsed from the A. S. Toler Admin prequal-approval forwarded emails by Claude. SBX listings whose owner appears here get a PREQUALIFIED pill.

⚡ Bay PowerBid

Internal estimating intelligence system — A. S. Toler Corp. Bay Division

Loading live stats…

What It Does

Bay PowerBid is A. S. Toler Corp.'s live bidding dashboard. It connects the BID LIST Excel workbook, Gmail, Dropbox, and the SBX plan room into a single view — so estimators always know what's active, what's due, who's bidding, and whether every file, folder, label, and setup task is complete.

Everything on this page is pulled from live cloud databases that are continuously refreshed by a set of automated jobs (GitHub Actions crons + a local Windows watcher). There is no manual refresh button — the page is always current.

Data Sources & Update Schedule

Source Table Refresh
the bid systembids_cloudEvery 5 min via GitHub Actions. Reads the full BID LIST from SharePoint/cloud storage and does a TRUNCATE + INSERT. Status, estimator, PE, division, bid date, and job walk all flow from here.
Local watcherbids_realtime_cloudImmediately at bid setup. Writes Gmail label, Dropbox folder URL, and SBX description within ~2 seconds of a new bid being claimed — so cards appear before the next 5-min bids_cloud sync.
Gmail (OAuth)bid_invitations, bid_addenda_cloudEvery 5 min. Scans inbox for bid invitations (Bid Radar) and addendum notices. Matches threads to active bids by project name token overlap.
SBX plan roomsbx_listings_cloud, sbx_plan_holders_cloudDaily (7 AM UTC). Scrapes the SBX plan room for all active future-bid listings — project description, bidder list (GCs who downloaded plans), addenda count. Parser reads Bootstrap div.BidderEntry structure.
Bid setup pipelineprebid_bids_cloud, bid_setup_steps_cloudTriggered instantly when you click Set Up Bid. Netlify function creates Gmail label + Dropbox folder; local watcher handles BID LIST row, BID BREAKDOWN autofill, and SBX plan download.
Prequal emailsprequal_approvals_cloudWhenever a prequal approval email is forwarded to the estimating inbox. Claude extracts agency name, approval date, and expiration. Drives the PREQUAL REQUIRED pill on bid cards.
Ensure-labels cronbids_realtime_cloud, sbx_plan_holders_cloudEvery 30 min. Guarantees every active bid always has a Gmail label under ESTIMATING/CURRENT BIDS/. Also scans label threads for external GC contacts and writes them as plan holders.

What Each Tab Shows

📨 Active Bids

Your live bid list — every bid currently in BIDDING or BID OR BAIL status in the bid system. Each card shows: scope description (from SBX), bid due date & time, job walk date, quotes in/out, coverage pills (LV, FA, LTNG…), addenda count, GCs bidding from SBX plan holders, Gmail label indicator, Dropbox folder link, and SBX plan room link. Cards expand to show vendor detail, addenda records, and the full setup checklist.

📊 Analytics

Win/loss history, quote coverage trends, and estimator workload across all historical bids. Driven by bids_cloud which retains full history.

📡 Bid Radar

Incoming bid invitations from GCs, scraped from Gmail every 5 min. Claude extracts project name, bid date, scope, and GC contact from each email. Invitations are automatically dismissed once their EST# label exists in Gmail (meaning they've been set up). Vendor quote replies and out-of-state bids are filtered out.

⚡ SBX Watchlist

All future-dated electrical bids on the SBX plan room that match A. S. Toler's scope keywords. Refreshed daily. Click Set Up Bid to launch the full automated setup pipeline for any listing.

🛠 Setup Queue

Live checklist for every bid currently going through setup. Shows each pipeline step — folder sync, BID LIST claim, Gmail label, BID BREAKDOWN autofill, SBX plan download, folder verification, job walk invite — with real-time status from the local watcher.

🪪 Prequal List

Agencies where A. S. Toler is pre-qualified to bid, parsed from forwarded prequal approval emails. When an SBX listing's owner agency matches an entry here, the bid card gets a PREQUAL REQUIRED pill.

Bid Card — Data Sources per Field

Project name / EST#
the bid system → bids_cloud (5 min)
Status (BIDDING / BID OR BAIL)
the bid system → bids_cloud (5 min)
Bid due date & time
the bid system → bids_cloud, then bids_realtime_cloud fallback
Job walk date
BID LIST "JOB WALK" column → bids_cloud; SBX prebidconf → prebid_bids_cloud
Scope description
SBX listing description → sbx_listings_cloud or prebid_bids_cloud (daily)
GCs bidding
SBX plan holders → sbx_plan_holders_cloud (daily); Gmail label threads → ensure-labels cron (30 min)
Addenda count
Gmail thread scan + SBX addenda field → bid_addenda_cloud (5 min)
Coverage pills (LV / FA / LTNG…)
Parsed from scope keywords by renderCoverageRow() — no external source
✉ LABEL / ✉ NO LABEL
prebid_bids_cloud.gmail_label; fallback bids_realtime_cloud.gmail_label
📁 FOLDER / 🔗 LINK
prebid_bids_cloud (Dropbox URL); SBX plan room link from sbx_listing.ProjectLink
SBX badge
prebid_bids_cloud.sbx_listing.ProjectLink (direct); fuzzy-match fallback via sbx_listings_cloud
PREQUAL REQUIRED pill
prequal_approvals_cloud matched to bid's client/owner agency

Bid Setup Pipeline — What Happens When You Click "Set Up Bid"

  1. Netlify function (instant, cloud) — Creates Dropbox folder from template, creates Gmail label under ESTIMATING/CURRENT BIDS/, sends setup email to PE + Alex with bid summary, uploads Gmail attachments to PLANS & SPECS if bid came from Bid Radar.
  2. Local watcher poll (within ~60 s, PC-side) — Detects the new prebid row, waits for Dropbox to sync the folder to disk, cross-checks EST# against BID LIST and other Dropbox folders for duplicates.
  3. Claim BID LIST — Kills Excel, appends a new row to the bid system via xlwings (disables AutoSave first), re-opens the file. EST# is now reserved.
  4. BID BREAKDOWN autofill — Opens BID BREAKDOWN.xlsm in a hidden Excel instance, writes HOME!F6-F18 + PROPOSAL!C12/C14 from BID LIST canonical fields. Renames the .xlsm and FEI ESTIMATE docx/pdf files to match the new project.
  5. SBX plan download — Triggers OPS Downloader for the bid's opsplannum, waits for the package to land in ~/Downloads, mirrors all files into PLANS & SPECS/.
  6. Folder verify — Confirms PLANS & SPECS folder, BID BREAKDOWN.xlsm, and FEI ESTIMATE.docx all exist.
  7. Notification email — Sent by separate cron within 5 min: PE + Alex get a manifest of every file downloaded.

Automated Background Jobs

Job Runs What it does
sync-bid-listEvery 5 minDownloads the bid system from SharePoint, TRUNCATE + INSERTs bids_cloud
parse-gmail-quotesEvery 5 minScans Gmail inbox for bid invitations and vendor quote replies; classifies with Claude Haiku
ensure-bid-labelsEvery 30 minGuarantees every active bid has a Gmail label; scans label threads for GC contacts
dismiss-set-up-invitationsEvery 30 minHides Bid Radar entries whose Gmail thread already carries an EST# label (already set up)
sync-sbx-detailsDaily 7 AM UTCScrapes SBX filter.aspx for all active listings — description, bidder list (GCs), addenda count
send-job-walk-invitesDaily 2 PM UTCSends calendar invite (.ics with RSVP buttons) for any future job walk not yet emailed; deduped by EST# + job walk hash
sync-sbx-watchlistDailyPulls all future SBX electrical listings into sbx_listings_cloud for the SBX Watchlist tab
local watcher (PC)Every 60 sPolls for new prebid rows; runs the full setup pipeline (BID LIST → BB autofill → OPS download). Requires Alex's PC to be on. Status visible in system tray icon.

Tech Stack

Frontend — Vanilla JS/HTML/CSS, no framework. Served via Netlify CDN.
Backend — Supabase (PostgreSQL + PostgREST). No server required; frontend queries Supabase directly.
Crons — GitHub Actions (Python). All scheduled jobs live in astoler-cloud-cron repo.
Local watcher — Python on Alex's PC (bid_setup_watcher.py), xlwings for Excel automation, system tray via pystray.
AI — Claude Haiku for Gmail classification and location extraction ($0.30/day est.). Claude Sonnet for Bay Bid AI chat.
Integrations — Gmail OAuth (alex@), Dropbox API (team namespace), SBX / OPS Downloader.

System Health

Checking systems…