Smart Quoting

GlyphFex suggests an estimated time, labor rate, and quote price for new jobs based on the tags you pick — using your own past jobs as the data source.

What Smart Quoting Does

The numbers come from your own job history — not an industry benchmark, not a cloud AI model, not anyone else’s shop data. Everything runs locally on your machine, against your own project file. No data leaves your network.

When you create a new entry and pick tags (Material, Process, Priority, etc.), Smart Quoting looks at every past entry in your project with similar tags, weights them by how recent they are and how close in quantity, and shows you a suggestion chip just below the Key Fields section on the Entry page.

A typical chip looks like this:

Smart Quoting chip on Entry page The chip below Key Fields reads, for example, “Similar jobs: ~38–42 hrs · ~$3,200 · based on 7 matches.

If you have zero similar jobs in your project yet, the chip is empty; once you complete a handful with actual_hours filled in, it starts learning.

How It Works

The estimator runs locally in the app every time your tag selection changes (debounced 300 ms so it isn’t fighting your typing):

  1. Find candidates. Every past entry in the same project (across all pipelines) is scored by tag overlap (technically: Jaccard similarity, if you care). Two jobs sharing 4 of 5 tags score 0.8; jobs with no overlap score 0.
  2. Weight by recency. Recent jobs count more. The math is an exponential decay with a 180-day time constant — in practical terms, a job from 6 months ago counts at about 37% of a job from today, and a job from a year ago counts at about 14%.
  3. Weight by quantity closeness. If the new job is for 50 pieces, a past job of 48 pieces scores higher than one of 5 pieces.
  4. Customer boost. If the new job has the same customer name as a past one, that past one gets a 2× multiplier — you tend to repeat work for the same customers in similar ways.
  5. The typical-plus-range answer. From the top matches (typically 5–15), the estimator picks the typical hours (the weighted median of actual_hours) and a realistic low/high range (the weighted 25th and 75th percentiles).

Hours, suggested labor rate, and suggested price all come out of the same matching run. Hours always come from actual_hours on past completed jobs — never estimated_hours — so the estimator only learns from reality, not from your own past guesses.

The Honesty Band: when Smart Quoting tells you it’s unsure

If Smart Quoting has ≥10 close matches and the spread between P25 and P75 is narrow, the chip uses neutral wording:

Similar jobs: ~38–42 hrs · ~$3,200 · based on 12 matches

If it has fewer than 10 matches, or if the spread is wide, it switches to acknowledged-uncertainty wording:

Best guess (low data): ~38–42 hrs · only 6 matches — adjust as you learn

This is the Honesty Band. It exists because pretending to be confident about a 5-job sample is worse than admitting you’re still learning. We follow the Zillow pattern: show the data, never hide thinness, never prescribe. The chip won’t tell you to “drop your price” or “raise your hours” — that’s your call.

The Comparables Popover

Click View comparables on the chip to open the Comparables dialog, which lists the top 7 matched past jobs:

This is the “show your work” layer. If the suggestion looks wrong, the comparables let you see which past jobs the estimator is leaning on and decide whether they’re actually similar. Click any row to open that past entry in a detail window.

One-click Accept & Deviation Warning

The chip includes an Accept button (the “Use 40” button in the screenshot above) that writes the median straight into the estimated_hours field. The labor rate and price suggestions write into labor_rate and estimated_value the same way.

If you manually type an Est. Hours value that’s more than 30% below the suggested median, GlyphFex shows an inline InfoBar warning — not blocking, just flagging. The reasoning: a big undershoot might be deliberate (you negotiated a different scope), but it might also be a typo or a missed step.

Tag-Driven Auto-Pricing

Smart Quoting can also drive price directly from the tags, separately from the hours-from-history estimator above. This is the “Excel on the side” replacement — you put your labor rates and material costs into GlyphFex once, and every new entry auto-suggests a price.

Three-level labor-rate fallback

When you mark a category as a Pricing Category (in Categories & Tags → the category editor), each tag in that category can carry a labor rate. For a new entry with multiple tags:

  1. Tag rate — If the selected tag has a labor rate, use it
  2. Category default rate — Otherwise, use the category’s default labor rate
  3. Shop labor rate — Otherwise, fall back to Settings Hub → Quoting → Shop Labor Rate

When multiple tags from different pricing categories are selected, the MAX rule applies: the highest tag-specific rate wins. This matches how most shops actually charge — if a job touches your high-skill TIG welder, the whole job bills at the TIG rate, not an average.

Material costs per tag

Tags in a Pricing Category can also carry material costs (cost per unit, unit name like “sq ft” or “lb”, and an optional markup percentage). When you pick those tags, GlyphFex sums the material costs and writes the result into estimated_material_cost.

The Auto-Fill formula on the Entry page is:

estimated_value = hours × labor rate  +  Σ (material cost × (1 + markup))

As you type into estimated_hours or labor_rate, the suggested estimated_value updates live as ghost text. Click the ghost-text value to accept it; type your own to override it.

Settings & Configuration

Risk Flag Chips

Below the main suggestion chip, GlyphFex may show one or more risk flag chips for known patterns that have historically led to overrun:

Each chip is informational only. No auto-corrections are applied to the estimate — the chip just makes the pattern visible so you can adjust manually if you think it applies.

Closing the loop: Quote Accuracy

The Analytics page has a Quote Accuracy section that measures how well your estimates have been holding up over time — per tag, per customer, and as a monthly trend.

This is the audit on Smart Quoting: it suggests, Quote Accuracy measures. If a particular tag is consistently underestimated by 20%, the per-tag overrun slice will surface it, and you can adjust your base_hours in the Time Multipliers tab. The estimator picks up the change on the next entry.

Common questions

Does Smart Quoting send any data anywhere?

No. The k-NN matcher runs entirely on your machine, against your own project file. No cloud, no API, no telemetry. Your past jobs never leave your shop’s network.

I have zero completed jobs — what happens?

The chip stays empty for hours estimation, but the tag-driven auto-pricing still works (it doesn’t need historical data — just configured rates and material costs). As you complete jobs with actual_hours filled in, the hours estimator starts producing suggestions.

How many similar jobs before I should trust the suggestion?

The Honesty Band uses 10 matches as the threshold for “reasonable confidence”. Below that, treat the suggestion as a starting point, not an answer. Above that, the suggestion is usually within ±10% of what the job actually ends up taking — but always sanity-check against the comparables.

Can I see the math?

Click the View comparables button on the chip. The dialog shows you exactly which past jobs the estimator weighted heaviest, and you can open each one to inspect its tags, hours, and outcome.

Why is my suggested rate higher than my hourly?

Because of the MAX rule — if any tag in the selection has a higher labor rate (e.g., the TIG welding tag bills at $95/hr), the entire job bills at that rate. To change this, edit the tag’s rate in Categories & Tags → Time Multipliers, or lower the category’s default rate.

Can I disable it?

Yes. Settings Hub → Categories & Tags → Time Multipliers tab → uncheck Enable Smart Quoting. The chip disappears; the entry form behaves like it did before. Auto-pricing has a separate kill switch — set Shop Labor Rate to 0 in Settings Hub → Quoting.