BGBidGauge Documentation
Updated New since the last pass: deep-link/refresh support, an optional login MFA step, live "someone else is editing" presence indicators, and a Backup & Recovery tab in Company Settings.

Pages, in sidebar order

PageGated by
Dashboardeveryone (default landing page)
AnalyticscanViewAnalytics
Project Storageeveryone, scoped to accessible projects
Service PortalcanManageService
Payment ApplicationscanViewPaymentApplications
Project Summaryeveryone, once a project is selected
Item Libraryeveryone
User Preferenceseveryone (own preferences only)
Company SettingsCompany Admin (full) or Location Admin (Users tab only)
Proposal Editorreached only via an "Edit Proposal" action, not a sidebar link

Login & account access

Sign-in now has three layers, checked in order: email/password (Firebase Auth), then optionally Firebase-native TOTP MFA if the account has it enrolled, then optionally a company-wide custom email-code verification step (if companyPrefs.requireEmailLoginVerification is on and this account hasn't verified this company recently). The email-code step offers a "remember this browser" checkbox — see Auth & Permissions for how that's actually implemented (a claim on the Auth token, not browser storage). Password reset and new-account setup both arrive as branded emails that land back inside the BidGauge UI via a ?mode=resetPassword deep link rather than Firebase's default hosted page.

Deep links & navigation

Every page and most selected records (a project, a proposal, a storage folder, a service ticket, a Company Settings tab) now have a real URL, built and parsed entirely by hand — there's still no router dependency. Loading one of these URLs directly (or refreshing the page) restores the same page and selection instead of dropping back to the Dashboard. Browser back/forward is wired to a popstate listener that re-syncs the app's state to the URL; it will interrupt a back-navigation with a confirmation prompt if a database backup/restore or a file upload is in progress, so a mid-flight operation can't be silently abandoned.

Dashboard

The default landing page and primary work surface. Shows the full list of projects as a sortable, filterable, searchable table (OpportunityTable) with configurable columns (dollar amounts, sold date, stage, department, customer). Now backed by the lightweight projectSummaries collection rather than one shared document — see Data Model. Supports fuzzy search, multi-department filtering, and per-user column/scope preferences. Opening a row leads into Project Summary; creating a new project or proposal opens modals from here.

Analytics

Stat-card rollups across stage, department, billing, and service-ticket volume — a read-only reporting view over the same summary data used by the Dashboard.

Project Storage

Per-project file storage: folders and files backed by Firebase Storage under companies/{'{'}companyId{'}'}/project-storage/{'{'}projectId{'}'}/. Folder metadata now lives in its own projects/{'{'}id{'}'}/storageFolders subcollection rather than an embedded array, loaded only while a user is actually viewing that project's Storage page. Company-wide storage usage is tracked against a quota of 50 GB per subscribed user.

Service Portal

A parallel, simpler workflow to standard projects, for standalone service work. A Service Project has no address of its own — each Service Ticket under it carries its own site address and contact. Tickets default to a simplified estimate shape (no factors/clarifications/scope-of-work sections; instead two side-by-side text areas, "Reason for Service Call" and "Work Performed"), auto-populate three default line items (Materials Used, Service Labor, Travel Charges), and carry an open/resolved status. Export uses the company's most recently used Terms & Conditions for service tickets specifically.

Payment Applications

AIA-style progress billing (PaymentApplicationsPage). The core math — draft-line construction, totals, retainage, prior-period rollups — now lives in a small, unit-tested module, src/lib/paymentApplications.js, rather than inline in the page component. Exports a PDF laid out to mirror the standard AIA G702/G703 continuation-sheet format, including a certification block and a placeholder for notary. Only available once a project is in the Installation / Implementation stage — see Project Lifecycle.

Project Summary

The hub page for a single project: current stage and stage history, proposal/change-order list with approval actions, links into Storage, Payment Applications, and Post Mortem, and a saved copy of the most recently exported PDF for approved/sold proposals and changes. Now also shows a live "someone else is editing this" banner (EditPresenceWarning) when another user has an active heartbeat on the same project or proposal — see Data Model for how editPresence works.

Post Mortem

A margin-variance calculator reached from Project Summary. Compares the expected (tax-free) margin from the approved proposal against actual material, labor, and factor spend entered after the fact. Produces a results view and a matching exported PDF, saved directly into the project's Storage under an auto-created "Post Mortem" folder.

Item Library

The shared pricing catalog used when building estimates — now one Firestore document per item rather than one array inside the company document. Supports CSV/XLSX import and export (hand-rolled parser/writer — see Technical Risk Notes), duplicate-part-number handling on import, and per-user visibility of items they created within a company-wide shared library.

User Preferences

Personal settings only: default dashboard scope, default export options, and column visibility preferences. Persisted to users/{'{'}uid{'}'}, unchanged.

Company Settings

Organized into tabs: company profile (logo, cover page PDF), workflow defaults (stage list, installation-sync toggle), estimate defaults (tax rates, factors), locations, storage settings, Users (invite/manage users and the granular capability flags, including the new canManageCompanyUsers), and two additions:

Backup & Recovery new

Admin-only. Create a manual snapshot, view the four rotating snapshot types (manual/yesterday/weekly/monthly) with size and timestamp, and restore one after typing "RESTORE" to confirm. See Cloud Functions Reference.

Login verification settings new

Toggle requireEmailLoginVerification company-wide and choose the default "remember this browser" window (up to 120 days). See Auth & Permissions.

Location Admins still see only the Users tab, scoped to their location.

Proposal Editor

The estimate-building surface: grouped line items, a custom contenteditable-based rich text editor, per-item margin overrides, labor/material tax handling, and factors. Also shows the live edit-presence banner when a colleague has the same proposal open. Feeds directly into the PDF proposal preview/export and, once approved, into the Schedule of Values.

Cross-cutting tools

Travel Calculator

Estimates travel cost using live GSA per-diem data with local fallback defaults; result applies directly into a proposal.

BOM Export

Filters a proposal's Material-type line items into a hand-built .xlsx workbook, named for the project.

SOV Export

Breaks a project's approved proposals/changes into phase- and cost-code-grouped Schedule of Values rows, feeding Payment Applications.

Job Numbering

Per-location job-number suffixes, uniqueness enforcement, and legacy CSV import/migration.

Previous← Project Lifecycle