PageSourceSearch

https://splashiq.ai/assets/_authenticated-2MOnXhw8.js

js splashiq.ai collected 2026-10-05 12:43:02 UTC 9,410 bytes, 1 lines download raw bytes

1import{r as a,u,j as e,X as c,c as l,b as m,d as h,O as g}from"./index-CzAkNt2W.js";import{C as d}from"./circle-question-mark-CDYWTUQU.js";import{O as f}from"./OnboardingCards-Rh1uiVUT.js";import"./onboarding-jHA7TBgq.js";import"./dialog-DFazxlVc.js";import"./send-Bd9t90n1.js";import"./chevron-left-Bt6XNF6Y.js";const r={default:{title:"Help",description:"Click the ? icon on any page to learn what it does. Look for ? icons next to individual buttons and settings for feature-level guidance.",tips:["Help is contextual — it changes per page.","If something feels confusing, open the help card first."]},"/today":{title:"Today",description:"Your daily overview: visits scheduled for today, overdue items, and quick actions for your team.",tips:["Start your day here to see what needs attention.","Tap a visit to open its details and start it."]},"/dashboard":{title:"Dashboard",description:"Business-wide KPIs at a glance — customers, leads, visits, work orders, revenue MTD, and outstanding invoices.",tips:["Numbers update when underlying data changes; pull to refresh on mobile.","Use a staging workspace for test records; production screens do not inject sample customers."]},"/schedule":{title:"Schedule",description:"Plan and assign visits across your techs. Drag visits between days or techs to reassign.",tips:["Conflicts and overdue items are highlighted.","Use route optimization to reduce drive time."]},"/customers":{title:"Customers",description:"All customers and leads. Click a row to open the customer profile, properties, equipment, and history.",tips:["Toggle Leads-only to focus on prospects.","Use search to find by name, address, or phone."]},"/work-orders":{title:"Work Orders",description:"Track jobs from open to completed. Filter by status, priority, or assignee.",tips:["High-priority work orders show a red badge."]},"/estimates":{title:"Estimates",description:"Create, send, and track estimates. Approved estimates convert to invoices.",tips:["Use templates to speed up common quotes."]},"/invoices":{title:"Invoices",description:"Create invoices, track reconciliation status, and follow up on overdue balances.",tips:["Overdue invoices are surfaced on the Dashboard."]},"/visits":{title:"Visits",description:"All scheduled, in-progress, and completed visits. Open one to see notes, water tests, and photos."},"/chat":{title:"Team Chat",description:"Message your team and dispatch in real time."},"/chat/dispatch":{title:"Dispatch Chat",description:"Coordinate with field techs and assign on the fly."},"/equipment":{title:"Equipment",description:"Track customer pool equipment, warranties, and trigger maintenance reminders."},"/team":{title:"Team",description:"Invite users, set roles, and manage seats.",tips:["Roles control what each user can see and do."]},"/field-techs":{title:"Field Techs",description:"Manage your field techs and their seat allocations."},"/templates":{title:"Templates",description:"Reusable templates for estimates, emails, and service notes."},"/financing":{title:"Financing",description:"Offer customers financing for larger jobs. Configure providers and review applications."},"/branding":{title:"Branding",description:"Logo, colors, and email signatures shown to your customers."},"/setup":{title:"Setup",description:"Initial setup wizard — business info, service areas, and integrations."},"/homeowner":{title:"Homeowner Portal",description:"What your customers see when they log into the portal: service history, water reports, invoices."},"/tech/time-clock":{title:"Time Clock",description:"Clock in/out for techs. Hours feed into payroll reports."},"/marketing":{title:"Marketing",description:"Campaigns, lead gen, and brand assets. Use the sub-tabs to navigate."},"/marketing/brand":{title:"Brand",description:"Your marketing brand assets used across campaigns."},"/marketing/lead-gen":{title:"Lead Gen",description:"Generate leads from scraped pool-pro data and outreach campaigns."},"/reports/revenue":{title:"Revenue Report",description:"Revenue by month, customer, and service type."},"/reports/ar-aging":{title:"AR Aging",description:"Outstanding receivables grouped by 0-30, 31-60, 61-90, 90+ days."},"/reports/utilization":{title:"Utilization Report",description:"Tech utilization — billable vs scheduled hours."},"/account/profile":{title:"Profile",description:"Your name, email, and personal preferences."},"/account/billing":{title:"Billing",description:"Your subscription plan, payment method, and invoices."},"/settings/quickbooks":{title:"QuickBooks Sync",description:"Connect QuickBooks Online only after validating the sync against a staging company.",tips:["Disconnect anytime — historical data is preserved."]},"/superadmin":{title:"Super Admin",description:"Platform-wide controls. Most actions here affect every tenant — proceed carefully.",tips:["Audit log records every super-admin action."]}
1,"/admin/growth":{title:"Growth Funnel",description:"End-to-end funnel from scraped contractors → enriched → emailed → engaged. Diagnose where prospects drop off.",tips:["Failed enrichment tab lets you retry one-at-a-time.","Settings tab controls auto-retry and max attempts.","Export CSV at any stage for offline analysis."]},"/admin/contractors":{title:"Contractors",description:"All scraped pool contractors in the database. Search, filter, and inspect enrichment status."},"/admin/contractor-scrape":{title:"Contractor Scrape",description:"Trigger or monitor scraping jobs that pull contractor records by region.",tips:["Use Scrape Regions to define which areas to scan."]},"/admin/scrape-regions":{title:"Scrape Regions",description:"Define the cities and states the scraper covers. Add a region, then run a scrape from the Contractor Scrape page."},"/admin/companies":{title:"Companies",description:"All tenant companies on the platform. Click to inspect."},"/admin/plans":{title:"Plans",description:"Subscription plans, seat counts, and feature flags."},"/settings/access":{title:"Access & Roles",description:"Grant or revoke roles (superadmin, owner, office, tech) for any user.",tips:["Role changes take effect on the user's next request."]},"/admin/impersonate":{title:"Impersonate",description:"Log in as another user to reproduce issues. Every impersonation is logged.",tips:["Use sparingly and only with cause."]},"/admin/ai-usage":{title:"AI Usage",description:"Track AI Gateway spend, tokens, and per-tenant usage."},"/admin/system-health":{title:"System Health",description:"Background jobs, queue depths, error rates, and last-run timestamps."},"/admin/email-deliverability":{title:"Email Deliverability",description:"Bounce rates, complaint rates, and domain reputation. Watch for spikes."}};function v(i){const s=i.replace(/\/+$/,"")||"/";if(r[s])return r[s];const o=Object.keys(r).sort((t,n)=>n.length-t.length);for(const t of o)if(t!=="default"&&(s===t||s.startsWith(t+"/")))return r[t];return r.default}function y(){const[i,s]=a.useState(!1),o=u({select:n=>n.location.pathname}),t=v(o);return e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button","aria-label":"Page help",onClick:()=>s(n=>!n),className:l("fixed z-40 bottom-4 right-4 h-11 w-11 rounded-full","bg-primary text-primary-foreground shadow-lg","flex items-center justify-center","hover:scale-105 active:scale-95 transition-transform","focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"),children:i?e.jsx(c,{size:20}):e.jsx(d,{size:22})}),i?e.jsxs("div",{role:"dialog","aria-label":"Help for this page",className:l("fixed z-40 bottom-20 right-4 w-[min(22rem,calc(100vw-2rem))]","rounded-lg border bg-popover text-popover-foreground shadow-xl","p-4 text-sm animate-in fade-in-0 zoom-in-95"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2 mb-2",children:[e.jsx("div",{className:"font-semibold leading-tight",children:t.title}),e.jsx("button",{type:"button","aria-label":"Close help",onClick:()=>s(!1),className:"text-muted-foreground hover:text-foreground -mr-1 -mt-1 p-1 rounded",children:e.jsx(c,{size:14})})]}),e.jsx("p",{className:"text-muted-foreground leading-relaxed whitespace-pre-line",children:t.description}),t.tips&&t.tips.length>0?e.jsxs("div",{className:"pt-2 mt-2 border-t",children:[e.jsx("div",{className:"text-xs font-medium mb-1",children:"Tips"}),e.jsx("ul",{className:"list-disc pl-5 space-y-1 text-muted-foreground text-xs",children:t.tips.map((n,p)=>e.jsx("li",{children:n},p))})]}):null,e.jsxs("div",{className:"mt-3 pt-2 border-t text-[11px] text-muted-foreground",children:["Tip: look for ",e.jsx(d,{size:11,className:"inline -mt-0.5"})," ","icons next to individual features for more detail."]})]}):null]})}function T(){const i=m(),s=h(),[o]=a.useState(()=>typeof window>"u"?!1:new URLSearchParams(window.location.search).get("field")==="1");return a.useEffect(()=>{if(!(typeof document>"u")){try{localStorage.getItem("splashiq-hc")&&localStorage.removeItem("splashiq-hc")}catch{}return document.documentElement.classList.toggle("hc",o),()=>{document.documentElement.classList.remove("hc")}}},[o]),a.useEffect(()=>{i===null&&s({to:"/login",replace:!0})},[i,s]),i==null?e.jsx("main",{className:"min-w-0 flex min-h-[50vh] items-center justify-center",children:e.jsx("div",{className:"text-sm text-muted-foreground",children:"Checking session…"})}):e.jsxs("main",{className:"min-w-0",children:[e.jsx(g,{}),e.jsx(y,{}),e.jsx(f,{})]})}
1export{T as component};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.