Upcoming Jobs
Profit by Service
Recent Invoices
| # | Customer | Amount | Status |
|---|---|---|---|
| {{ inv.invoiceId }} | {{ inv.clientName || 'Client' }} | {{ formatCurrency(inv.total) }} | {{ statusLabel(getInvoiceStatus(inv)) }} |
Recurring Revenue
Projected monthly recurring contract revenue
Profit Guard
30-Second Phone Quoting Engine
Current Pricing Strategy: {{ settings.pricing && settings.pricing.method || 'hybrid' }} ·
1. Property Specifications & Scope
| Quote # | Client | Service | Total | Status | Date | Actions |
|---|---|---|---|---|---|---|
| {{ q.quoteId }} v{{ q.version }} | {{ q.clientName || 'Prospect' }} | {{ q.serviceType }} | {{ formatCurrency(q.total) }} | {{ statusLabel(q.status) }} | {{ formatDate(q.createdAt) }} |
{{ jobStats.scheduledJobs }} scheduled · {{ jobStats.completedJobs }} completed
Booked work waiting to be completed
Realized after jobs are marked complete
{{ formatPercent(jobStats.expectedMargin) }} expected margin
| Date | Job | Revenue | Hours | Miles | Profit | Status | Actions |
|---|---|---|---|---|---|---|---|
| {{ formatJobDate(j.date) }} |
{{ j.clientName || 'Unnamed client' }}
{{ j.serviceType || 'Cleaning' }}
{{ j.notes }}
|
{{ formatCurrency(j.revenue) }} | {{ jobHoursLabel(j) }} | {{ j.miles || 0 }} mi | {{ formatCurrency(calculateJobCost(j, settings).profit) }} {{ jobProfitLabel(j) }} · {{ formatPercent(calculateJobCost(j, settings).margin) }} | {{ j.status }} |
|
{{ scheduleView }} Cleanings
{{ scheduleView === 'today' ? todayJobs.length : scheduleView === 'week' ? thisWeekJobs.length : upcomingJobs.length }} jobs listed{{ new Date(calendarYear, calendarMonth).toLocaleDateString('en-US', { month: 'long', year: 'numeric' }) }}
Active Recurring Cadences
Automated recurring cleaning engine. Generates forward schedules without database clutter.
{{ c.name }}
{{ c.phone || 'No phone set' }}
| Invoice # | Client | Invoice Date | Due Date | Total | Balance | Status | Actions |
|---|---|---|---|---|---|---|---|
| {{ inv.invoiceId }} | {{ inv.clientName }} | {{ formatDate(inv.invoiceDate) }} | {{ formatDate(inv.dueDate) }} | {{ formatCurrency(inv.total) }} | {{ formatCurrency(getInvoiceBalance(inv)) }} | {{ statusLabel(getInvoiceStatus(inv)) }} |
| Date | Category | Description | Type | Amount | Actions |
|---|---|---|---|---|---|
| {{ formatDate(exp.date) }} | {{ exp.category }} | {{ exp.description || '—' }} | {{ exp.type || 'variable' }} | {{ formatCurrency(exp.amount) }} |
Cleaner Desk Estimating Calibrator
Compares your estimated hours & margins against verified on-site actuals to prevent chronic underpricing.
{{ ins.message }}
Based on {{ ins.sampleSize }} completed clean(s) with actual time logged.Estimate vs Actual Variance by Service
Verified actuals from completed clean logs| Service Category | Sample Size | Avg Quoted Hrs | Avg Actual Hrs | Hours Drift (%) | Avg Est Margin | Avg Actual Margin | Margin Drift |
|---|---|---|---|---|---|---|---|
| {{ row.serviceType }} | {{ row.jobCount }} cleans | {{ row.avgEstHours ? row.avgEstHours.toFixed(1) : '—' }}h | {{ row.avgActualHours ? row.avgActualHours.toFixed(1) : '—' }}h | {{ row.hoursVariance ? (row.hoursVariance > 0 ? '+' : '') + row.hoursVariance.toFixed(1) + '%' : '—' }} | {{ row.avgEstMargin ? formatPercent(row.avgEstMargin) : '—' }} | {{ row.avgActualMargin ? formatPercent(row.avgActualMargin) : '—' }} | {{ row.marginVariance ? (row.marginVariance > 0 ? '+' : '') + formatPercent(row.marginVariance) : '—' }} |
{{ reportType.replace(/_/g, ' ') }}
Exportable commercial report| {{ reportPresentation.segment }} | {{ reportPresentation.primary }} | {{ reportPresentation.secondary }} |
|---|---|---|
| {{ reportRowLabel(row, idx) }} | {{ reportPrimaryValue(row) }} | {{ reportSecondaryValue(row) }} |
Business Settings & Rate Baselines
All configurations are stored locally on your device and take effect immediately.
Section 1: Business Profile & Letterhead
Section 2: Workflow Defaults
Section 3: Invoice, Import, and Update Defaults
Invoice Defaults
Data Defaults
Download Updates
Section 4: Hybrid Pricing Engine Strategy & Rules
Set to 0 to disable minimum charge
Used by Hourly & Sq Ft methods
Room-Based Pricing Rates
Used when Room-Based model is activeFlat Rate Pricing by Service
Used when Flat Rate model is activeSquare Footage Labor Bands
Baseline hours for Sq Ft and Hybrid calculationsCondition Multipliers
Adjusts labor hours for condition severity in Hybrid quotesInitial / First Clean Adjustment
Optional surcharge applied to first-time cleaning services.
Section 5: Cleaner Desk Profit Guard Cost Constants
Determines labor cost split between owner time value and cleaner wages in quoting.
Payment Processing Cost Allowance
Optional quoting allowance only. Set both to zero if your usual payment method has no processing fee.
Section 6: Mileage & Vehicle Cost Configuration
Separate internal travel costs from IRS mileage tax deduction reference rates.
Section 7: Add-On Cleaning Services
Section 8: Dynamic Cleaning Checklist Proposal Scope
Customize the room-by-room tasks shown in Template 3 (Cleaning Checklist Proposal).
Section 9: Dashboard & Button Color Themes
Section 10: Quotation Templates Suite & Brand Polish
{{ opt.desc }}
Section 11: Trust Claims & Business Credentials
Configure verified trust badges for quotation proposals. Claims remain disabled until explicitly activated by you.
Section 12: Local App Lock & Privacy
Scheduled Cloud Backup
{{ backupStatusLabel }}Keep CleanerDesk local-first while automatically saving encrypted backups to storage you choose.
Choose any folder on your computer, external drive, network storage, or a folder synced by services such as Google Drive, OneDrive, Dropbox, or iCloud.
Automatic Backup Schedule
If the month has fewer days, the backup runs on the last valid day of that month (e.g. Feb 28/29, Apr 30).
Retention & Encryption
Older automatic backups are pruned only from the CleanerDesk folder. Unrelated files and manual exports are never touched.
Scheduled backups use authenticated AES-256-GCM with PBKDF2 SHA-256 (100,000 iterations). Your recovery password is kept in your OS Keychain / Credential Manager and is never uploaded to CleanerDesk servers.
Commercial Backup & Data Portability
Your entire business database (clients, quotes, jobs, invoices, expenses) in a single secure file.
Saves a versioned .cqbackup file containing all your local records.
Restores data with a preview and automatic safety backup of current data.
Two-Way Excel Workbook Engine
Download your clients, jobs, invoices, payments, expenses, and recurring schedules as one .xlsx workbook.
Use the blank template for clean imports, or download the filled sample to see the format.
Preview rows before import. Cleaner Desk downloads a safety backup before writing records.
Product Updates
Check CleanerDesk for a newer eligible desktop release. Business data stays local.
Last checked: {{ formatDate(settings.updates.lastChecked) }}
Demo Sandbox & Reset
Business Activity Audit Trail
Chronological history of quotes, completed cleans, invoices, and backups.