=== PaintClarity ===
Contributors: paintops, freemius
Tags: painting, contractor, estimates, scheduling, invoicing
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.2.057
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Run your painting business from WordPress: quotes to invoices, crews, scheduling, customers, photos, profit reports, optional AI and card payments.

== Description ==

**PaintClarity turns your WordPress site into the back office for your painting business.** *(PaintClarity was formerly known as PaintOps. Same plugin, same team, same data.)* Build professional quotes, send them to customers who can view, e-sign, and pay a deposit online, schedule crews on a calendar, track every job from lead to invoice, and, on Pro, see your real profit per job, per crew, and per worker.

It was built by a painter, for painters. The quote builder understands painting scope: interior/exterior components, standard inclusions and exclusions, and the disclaimer language that keeps you out of disputes. Your data lives in your own WordPress database, not locked inside someone else's SaaS.

= Quote to invoice, start to finish =

* **Quotes, estimates & bids**: a scope-aware builder with reusable inclusions/exclusions, itemized or lump-sum pricing, printable output, and email delivery.
* **A professional customer page**: your customer opens a clean, branded page (your logo, your terms & conditions) and accepts by typing their name, an e-signature-grade record with timestamp. They can also decline with a reason, or ask a question, and you're notified either way.
* **Acceptance converts the quote to a job automatically**, whether they paid a deposit online or you shook hands, and a "Mark as Won" button covers the phone call.
* **Invoices**: numbered invoices for the balance (full or partial), emailed or shared by link, payable online (Pro + Stripe) or marked paid for check/cash, with the payment logged so balances always agree.
* **Receivables at a glance**: unpaid invoices surface on your dashboard with amounts and age.

= Running the work =

* **Scheduling calendar** with crew filtering, worker badges, time-off, and a subscribe link for Google/Apple/Outlook. Add your own recurring holiday labels.
* **Crews**: group your painters into named, colored crews; staff a job with one tap and filter the calendar and reports by crew.
* **Job board / pipeline**: Quote → Active → Completed, plus a lost-leads drawer with the customer's decline reason so you can revive the ones worth re-working.
* **A real app for your painters**: install-to-home-screen (PWA), a "My Jobs" home, one-tap directions (Google/Apple/Waze), per-job check-in/out that works offline and syncs, photo/receipt/note logging, a "My Hours" view of their own time and pay, and a "Mark Job Complete" button that notifies the office. Workers see only what their permissions allow, never your numbers.
* **Customers**: a directory with contact details, lifetime value, job history, and **multiple service addresses per customer**, built for landlords, realtors, property managers, and GCs whose one account means a dozen properties.
* **Before/After photos** with camera alignment overlay and a compare slider.
* **Color Visualizer**: load a photo of the house or the room, select the surface, and turn a color wheel until it is the color you are proposing. The wall changes color and keeps its own shading, grain and texture. Select by fill, by matching color, or by dragging a box over a big flat wall. Handles stucco, siding, brick, concrete block and interior drywall, takes the Sherwin-Williams or Benjamin Moore number alongside it, and prints or saves the render for the customer. Runs entirely in your browser: no photo is uploaded anywhere.
* **Trade calculators, paint-color tracking, and resource links.**
* **A choice of visual themes** (light, dark, industrial, and more) with a modern app-style navigation bar on desktop and phone.

= What Pro adds =

* **Job financials & profitability**: costs, materials, labor hours; gross, expenses, profit, and margin per job; a Profits dashboard with profit-by-classification, profit-per-hour rankings, and **profit by crew and by worker** (allocated by logged hours).
* **Expenses & receipts** against any job, plus business-level and vehicle expense tracking for tax time.
* **Online payments**: deposits on quote acceptance and invoice balances through Stripe Checkout, recorded automatically.
* **AI tools (bring your own OpenAI key)**: estimate dimensions, gallons, and a Description of Work from a photo; scan receipts to auto-fill expenses; get feedback on or a rewrite of your quote wording.

Pro is a paid upgrade handled through Freemius. The free plugin is fully functional on its own; Pro is optional.

== Bundled artwork ==

The four ready-made logos offered under Business > Logo URL (assets/img/logos/) are AI-generated original artwork created for this plugin. They carry no third-party rights and are distributed under the same GPLv2-or-later license as the rest of the plugin. They are optional, off by default, and carry no PaintClarity branding or link.

== External services ==

This plugin can connect to the following third-party services. Some are optional and only run when you enable and configure the corresponding feature.

**OpenAI (Pro AI features, optional).** When you use an AI feature (Photo Estimate, Receipt Scan, Description-of-Work Feedback or Rewrite), the plugin sends the relevant input, the photo you choose to upload and/or the quote text you are working on, to the OpenAI API using **your own** OpenAI API key, and receives the generated result. No data is sent unless you click one of these buttons. PaintClarity does not store the photo. Requests go to https://api.openai.com. See OpenAI's Terms (https://openai.com/policies/terms-of-use) and Privacy Policy (https://openai.com/policies/privacy-policy).

**Stripe (Pro online payments, optional).** If you enable card payments and a customer pays online, the plugin creates a Stripe Checkout session and verifies Stripe's webhook using your own Stripe keys. Order/amount details are exchanged with Stripe to process the payment. Requests go to https://api.stripe.com. See Stripe's Services Agreement (https://stripe.com/legal/ssa) and Privacy Policy (https://stripe.com/privacy).

**Google Maps Platform (optional).** If you add a Google Maps API key, address fields use Google Places/Geocoding for autocomplete and validation, and job locations may be shown on an embedded map. The address text you type is sent to Google to return suggestions. Requests go to https://maps.googleapis.com and related Google Maps endpoints. See Google's Terms (https://cloud.google.com/maps-platform/terms) and Privacy Policy (https://policies.google.com/privacy). (One-tap turn-by-turn Directions for your crew use keyless map links and need no API key.)

**YouTube and Vimeo (Resources page video embeds, optional).** The Resources page (staff-facing, inside your admin area) lets you save links to training videos, and seeds a starter list of publicly available painting tutorials on YouTube. When a staff member clicks a saved YouTube or Vimeo link's play button, the video is embedded on the page via the provider's standard embed player (www.youtube.com / player.vimeo.com), which loads content from that provider and is subject to its terms; no data is sent until the play button is clicked, and you can delete any or all saved links. See YouTube's Terms (https://www.youtube.com/t/terms) and Google's Privacy Policy (https://policies.google.com/privacy), and Vimeo's Terms (https://vimeo.com/terms) and Privacy Policy (https://vimeo.com/privacy).

**Freemius (licensing & updates).** PaintClarity uses the Freemius SDK to manage Pro licenses, deliver Pro updates, and (optionally) collect anonymous usage diagnostics you can opt out of. Site and license information is exchanged with Freemius. See Freemius's Terms (https://freemius.com/terms/) and Privacy Policy (https://freemius.com/privacy/).

You control every one of these by whether you enter the corresponding API key and enable the feature. With no keys entered, PaintClarity runs entirely on your own site.

== Privacy ==

Your customers' details live in your own WordPress database. PaintClarity's author never sees them, and nothing is sent to a PaintClarity server. That also means you, not the plugin, are the one a customer asks when they want to know what you hold about them, so the plugin's job is to make sure you can answer.

**Quote and invoice pages are blocked from search engines.** Those pages are reached by a long private link rather than a password, and a link can be forwarded, pasted into a chat, or picked up from a referrer header. Every customer-facing document PaintClarity serves is marked no-index, no-archive at both the page and the header level, so a link that escapes cannot turn into a search result.

**Data requests work out of the box.** Under Tools -> Export Personal Data and Tools -> Erase Personal Data, WordPress can search PaintClarity by email address. Export collects the customer record, their jobs, quotes, invoices, payments, and the emails you sent them. Erase removes their details from all of it.

**Erasing does not destroy your books.** Quotes, invoices and payments are kept and stripped of the name, address, phone, email, typed signature and IP address instead of being deleted, because a business is required to keep financial records for years and data protection law allows exactly that. Any quote or invoice link previously sent to that customer stops working. Job photos are left for you to review yourself rather than deleted automatically.

**Suggested privacy policy wording** for what PaintClarity stores and which services can receive data is added to Settings -> Privacy -> Policy Guide.

**Three optional limits, all off by default**, under PaintClarity -> Settings -> Privacy & Customer Data: delete the emailed-communication log after N months, forget the IP address recorded when a quote was signed online after N months, and make quote and invoice links stop working after N days. A business working only in the United States can leave all three off and nothing changes.

None of this is Pro. It is all in the free plugin.

== Installation ==

1. Install PaintClarity from the Plugins screen (Plugins → Add New → search "PaintClarity"), or upload the plugin ZIP under Plugins → Add New → Upload Plugin. Activate it.
2. Create a WordPress Page and add the shortcode `[paintops_app]`. This one page is your whole PaintClarity app; it routes internally.
3. Go to **PaintClarity → Settings** and set your Company Profile (business name, logo, country, currency), and review the Setup Health panel.
4. (Optional) Add team members under **PaintClarity → Painters/Helpers**, set their permissions, and group them into Crews.
5. (Optional) Add your Quote Terms & Conditions under Business Settings so customers see and sign against them.
6. (Optional, Pro) Under **Settings → AI Settings** connect OpenAI, under **Stripe Payments** add your Stripe secret key AND webhook signing secret (both are required before online payment buttons appear), and add a Google Maps API key for address autocomplete.

== Frequently Asked Questions ==

= Do I need a paid account to use it? =
No. The free plugin runs entirely on your own WordPress site and lets you quote, schedule, and manage unlimited jobs. Pro is an optional upgrade.

= What happens to my data if I deactivate or delete the plugin? =
Nothing is deleted. Your jobs, quotes, customers, payments, hours, and photos stay in your WordPress database, so nothing is lost if you deactivate temporarily or reinstall later. If you truly want the data gone, delete the plugin's tables and its uploads from your database and media library.

= Does it work without OpenAI, Stripe, or Google Maps? =
Yes. Those are optional integrations. If you don't enter their keys, the related features simply stay off and everything else works, including keyless turn-by-turn directions for your crew.

= Can my customers really sign a quote online? =
They accept by typing their full name, which is stored with a timestamp and IP address alongside your Terms & Conditions, a solid acceptance record. They can also decline with a reason, and change their minds later.

= Who pays for the AI usage? =
You do, through your own OpenAI account and key, typically a fraction of a cent to a few cents per action. PaintClarity adds per-month usage caps you control so costs stay predictable.

= Can my painters log in without seeing my numbers? =
Yes. Painters/Helpers get a dedicated role with opt-in permissions and their own app view: My Jobs, My Hours (their own time and pay only), directions, check-in/out, photos and receipts. Financial figures are owner-level and hidden from workers unless you explicitly grant access.

= Does it work in the field with bad reception? =
The app installs to a phone's home screen, and Time Clock check-in/out keeps working offline and syncs when a connection returns.

= Where is my data stored? =
In your own WordPress database. PaintClarity doesn't host your business data on an external server.

== Screenshots ==

1. The quote/estimate builder with scope components and inclusions/exclusions.
2. The customer's accept page: branded, e-signed, with online deposit.
3. The scheduling calendar with crews, worker badges, and holiday labels.
4. A painter's phone view: My Jobs, directions, and offline check-in.
5. The Profits dashboard (Pro) with profit by crew and worker.
6. An invoice with online payment and mark-as-paid.
7. Settings: Company Profile, Appearance themes, Stripe, and AI.
8. The Color Visualizer: select a surface in the customer's photo and turn the wheel until it is the color you are proposing.

== Changelog ==

= 1.2.057 =
* New Production Rates page, under Tools in the menu as "Rates". It works out how much area one painter covers in one day from the jobs you have already finished: your logged hours and the paintable area on each job. The headline is your own figure, with a breakdown per job category beside it, and the rate you quote from underneath so you can see the two next to each other.
* Every finished job in the window is listed, not just the ones that can be scored. A job with no paintable area recorded shows an "Add area" link instead of a rate, so it is obvious what is missing rather than quietly absent. You can look at the last 5, 10, 20 or 50 completed jobs.
* A job whose numbers look impossible, under 25 or over 2,000 sq ft per painter per day, is set aside in its own section with the reason explained, and is not counted. Usually it means an area was typed with a digit too many, or hours have not been logged yet.
* You have the last word on any job. "Count it anyway" puts an unusual but real job back in, "Leave out" takes a job out, and either can be undone. Four sprayers in a warehouse really do move that fast, and PaintClarity should not argue with you about it.
* New Production rate setting under Business > Pricing Rules, with an optional override per job category under Job Categories. The Labor Days & Crew Cost Calculator now starts from that figure and tells you which one it used and where to change it, instead of a general number out of a book.
* New Paintable Area field on the job form, and the Paint Calculator can save its own result straight onto the job with one click, which is what feeds the rates above. The calculator now confirms the save instead of leaving you wondering whether the click landed.
* Fixed: on a site set to metric units, the Paintable Area field could refuse to let the job form save at all.

= 1.2.056 =
* New installs now start with the calculators that suit each job category instead of just one. Residential Painting opens a quote with the Paint Calculator, the Paint Quantity Calculator and the Cabinet & Trim Calculator; Commercial Painting gets Paint, Paint Quantity and Labor Days. The category screen has allowed several calculators for a while, but every category still shipped naming only one, so four of the five sat unused in settings where nobody looks.
* The Fence and Handyman category templates were shipping with no calculator at all. Fence now comes with the Deck/Fence Staining Calculator it was built for, and Handyman with the Labor Days & Crew Cost Calculator.
* If you have already set your own calculators, nothing changes. Your selections are left exactly as you made them.

= 1.2.055 =
* Fixed five links in the app that pointed at pages which no longer exist. The Help Center button on the Help page, the "how do I do a full backup" link on the Business page, the plugin author link, and two of the starter links on the Resources page (the PaintClarity Software Tutorial and Getting the Most out of PaintClarity) were all still using addresses from before the plugin was renamed, so each one landed on a "page not found".
* If your Resources page already has those two starter links, they are corrected for you on update. A link you edited or replaced yourself is left alone.

= 1.2.054 =
* Export Personal Data now includes everything it should: the state or region on the address, the inclusions and exclusions, the itemized lines as the customer saw them on their quote, the reason they gave if they declined, and when and how many times they opened their quote link.
* Erase Personal Data now clears the state on the customer record and on every job, and the reason the customer gave for declining. Those were being left behind.
* Erasing now also tells you if scope or internal notes on the customer's jobs were kept, since free text can name someone anywhere inside it and no automated pass can tell.

= 1.2.053 =
* Fixed, and important if you ever run a data request: Export and Erase Personal Data were following the wrong link from a customer to their jobs. PaintClarity stores two different ids on a job, one for the customer record and an older one for a WordPress user account, and the data tools were reading the older one. A request could therefore miss jobs that did belong to the person, and in an erase it could have reached records belonging to someone else. Both now follow the customer record. If you ran an export or erase on 1.2.052, please run it again.

= 1.2.052 =
* Quote and invoice pages are now blocked from search engines, so a link you email a customer stays out of search results even if it gets forwarded or shared.
* Data requests: Tools -> Export Personal Data and Tools -> Erase Personal Data now search PaintClarity by email address, covering the customer record, jobs, quotes, invoices, payments and the emails you sent them.
* Erasing a customer anonymizes rather than deletes. Quotes, invoices and payments keep their amounts and dates and lose the personal details, so your books stay intact, and links previously sent to that customer stop working.
* Suggested privacy policy wording for what PaintClarity stores and who else sees it now appears under Settings -> Privacy -> Policy Guide.
* New Settings -> Privacy & Customer Data section with three optional retention limits, all off by default. Everything here is in the free plugin.

= 1.2.051 =
* Job search results: the job title and its status chips were indented further than the rest of the card. Everything in the card lines up now.
* Not Won: the Call, Text and Email strip renders as the segmented control it was meant to be in the row view as well as the board, and the row has room above it. In the row view it had been drawing as three plain links run together.
* File a Receipt, job expenses and the vehicle log: the "Scan Receipt with AI" and "Manually Enter" buttons are spaced apart. They were separated by a left margin, which does nothing once the pair wraps onto two lines, which on a phone is always.

= 1.2.050 =
* Sign out. The app had no logout anywhere: an Administrator could leave through WP Admin, but a Painter/Helper had no way off the app at all. It now sits next to your name at the foot of the menu, on both the sidebar and the phone menu, and signing out clears the cached job pages so a shared phone does not keep the last person's work readable.
* Jobs: the Not Won drawer is in the row view as well as the board. A lost lead appears in no column and no row section, so that drawer is the only route back to one, and it was only ever drawn under the board.
* Jobs: the Communication section is on the board view as well as the rows view, including its "nothing logged yet" state.
* Vehicle Log: every field on the page is one height again. Most of the form was rendering at 34px while a few fields came out at 45px, so a single row could hold a tall Date next to a short Driver. The Log and Report filter row is deliberately left compact.
* File a Receipt: the two Receipt search date boxes were taller than the Search button beside them. All three now match.

= 1.2.049 =
* Jobs board: removed the white card that wrapped the three columns. The screen was three surfaces deep, a card holding tinted columns holding job cards, and the outer one carried no information. The columns now sit on the page like the row view's sections do.

= 1.2.048 =
* Editing a job or request now shows where it sits and lets you move it: Back to Request, Mark Completed, Reopen as Job, Mark as Not Won, whichever apply. The same buttons the board has, on the one screen dedicated to editing the record, which had none of them.
* A request marked Not Won can be reopened. It drops off the board entirely, so until now there was no obvious way back.

= 1.2.047 =
* Jobs: the Actions menu on the "Needs Your Attention" rows (Completed Jobs With a Balance Due, Completed Jobs Missing Expenses) opened far away from the row you clicked, usually off the visible screen. It now opens directly under its row.
* A job with no category no longer has the word "Uncategorized" pushed in front of its name anywhere it is listed. "Deck stain", not "Uncategorized Deck stain".

= 1.2.046 =
* Painters/Helpers: "Can manage financials" now means what it says. It gives full financial access to the jobs that person is assigned to, and no longer opens the business-wide Profits and Rankings pages, which showed year-to-date profit, margin, every job in the book, and each crew member's profit share. Per-job access is unchanged.
* Painters/Helpers: Expenses, Business and Checkup are no longer shown to a painter. They led nowhere: clicking one quietly reloaded My Jobs.
* Painters/Helpers: Help now opens for a painter instead of reloading My Jobs.
* A job whose category is missing or was deleted shows "Uncategorized" instead of a bracketed number. Job titles read "Job #14 Kitchen repaint" rather than "Job #14 [0] Kitchen repaint", and the same fix reaches the quote PDF headline and customer emails.
* Permission messages are a proper card with a heading and a way back to your jobs, instead of one sentence on a blank page.
* New Quote: the "add a Google Maps key in Settings" link only shows to someone who can open Settings. Everyone else is told to ask the office.

= 1.2.045 =
* Jobs board: the empty Requests column no longer shows its own "+ New Request" button. It pointed at the same screen as the New Job button at the top of the page, so the same action was offered twice within one scroll. The column now just says what lands there.

= 1.2.044 =
* New Quote: Exclusions is now a formatted box like the Description of Work, with its own bold, italic, list and heading controls. Paragraphs, bullets and emphasis survive all the way to the quote the customer reads.
* New Quote: the Situational clauses checklist moved inside the Exclusions field, between the toolbar and the box, matching the Standard lines strip added to the Description of Work in 1.2.043. Tick a clause and it appears in the box right underneath.
* Exclusions saved before this update are plain text and keep their line breaks exactly as they were, on the job view and on the customer's quote. Nothing needs to be retyped.

= 1.2.043 =
* New Quote: the Scope wording helper is now part of the Description of Work field itself, sitting between the formatting toolbar and the text box as a "Standard lines" strip. It had been above the field, then below it, and neither read right, because it writes into that field and belongs to it rather than beside it. Tick a line and you watch it appear in the box directly underneath.
* New Quote: more room between Remove and "+ Add another option" in the add-ons, so the two stop reading as one split control when one of them deletes a row.

= 1.2.042 =
* New Quote: the "Show an itemized price breakdown to the customer?" question moved inside the itemize panel, so it appears when you open the panel to itemize. A quote that already has it ticked opens the panel by itself, so the setting is never switched on and out of sight.
* New Quote: the green "Prefilled from this job's most recent quote" banner is now a tooltip on the Description of Work label, where the question actually occurs to you. Same words, one less line of page.
* New Quote: the Description of Work box is 420px tall, up from 220px, and Exclusions is 280px, up from about 96px. Both are minimums, so they still grow with what you type.
* New Quote: Optional add-ons is an accordion. It folds away on a quote that has none and opens itself, with a count, on a quote that has some.
* New Quote: a little more room under the AI Job Photo Estimator link.
* The Price List reference window is readable on a phone. It was missing the one tag that tells a phone to lay a page out at screen width, so the whole thing was being rendered wide and then zoomed out to fit.

= 1.2.041 =
* New Quote: every tool in the Quote Tools drawer has its own icon, and the calculators dropped the "Use The" from their names. "Use The Paint Calculator" is now "Paint Calculator".
* New Quote: fixed a real problem from the last release. After running a calculator the page reloads and reopens it, but the drawer had closed, so the answer was computed and invisible. The drawer now opens itself whenever a calculator is coming back with numbers.
* New Quote: the Scope wording helper sits directly above Exclusions, so the two wording libraries stand together. Ticking a line now says what it inserted and where, because the description is above it.
* New Quote: unticking the last line of standard wording no longer leaves a blank line at the foot of the customer's description.
* The Request acceptance rate moved off the New Quote screen and onto Business, in its own Request Performance section above Outstanding Balances. An all-time rate is a fact about the business, not about the quote in front of you.
* The little "i" tooltips read properly again. They used to open upward into the app bar, which clipped them, and on a phone they ran off the side of the screen. They open downward now, and on a phone they sit at the bottom of the screen where the whole note fits.

= 1.2.040 =
* New Request: a filter box above "Select Existing Customer". Type part of a name or an address and the list narrows as you type. Words can be in any order, so "peterson dana" finds "Dana Reyes, 88 Peterson St". It filters the list already on the page, so there is no waiting and it works with no signal.
* New Request: the customer list is capped at your 500 most recent, chosen by who you last did a job for rather than by where their name falls in the alphabet. If you have more than that, a line under the list says how many are not shown and links to Customers. A customer the page was opened for is always in the list, however long ago you worked for them.
* New Request: the page is much lighter for a busy shop. At 3,000 customers it was 848 KB, most of it a hidden block of customer data rather than the dropdown itself. It is now under 200 KB.
* New Request: Customer Info, Job Info and Scheduling each start with a marked heading band, so the three parts of the form read as three parts.

= 1.2.039 =
* New Quote: one "Quote Tools" drawer at the top holds Google Earth measuring, the price list and this job category's calculators. They used to be two loose rows of links half a page apart. Each tool is now its own row with its name and what it does, laid out in as many columns as fit.
* New Quote: Exclusions is one section again. The situational clauses write into the exclusions box, so they now sit above it inside the same bordered block instead of underneath it looking like a separate checklist.
* New Quote: "Show an itemized price breakdown to the customer?" moved inside the itemize card, where the lines it governs are. The card header now reads as something you can open, and it says what happens if you do not.
* New Quote: the Quote Total note no longer points the wrong way. It said to adjust the labor line "below" when that line has always been above it. Plurals are right too, so it reads "1 worker" rather than "1 worker(s)".
* The AI description tools are off the new request form. They exist to improve wording the customer will read, and a request never leaves the office. They are on the quote builder, against the Description of Work.

= 1.2.038 =
* The New Job button on the Jobs page is aligned properly on a laptop and on a phone. The title now sits on its own line with one rule under it, and the button and the View All / Board links sit in a clean row beneath, the same shape as the Expenses page.

= 1.2.037 =
* The Profits page reads properly on a phone. The year cards used to hold the stats beside the big Profit figure no matter how narrow the screen got, which squeezed them to nothing: every label was cut to two letters ("SALES TA...") and the dollar figures ran into each other. On a phone the card now stacks, Profit first, with the stats under it in as many columns as actually fit.
* Same fix on a small laptop window. At 1024px the stat strip was holding five columns in the space for three and clipping the same way.
* The Top and Bottom jobs ranking no longer pushes the whole app sideways on a very narrow phone.

= 1.2.036 =
* One load control in the Visualizer, not two. While the photo area is empty it is the button; once a photo is in, the toolbar button comes back as "Change photo", which is what it does at that point.
* New Job at the top of the Jobs page.
* File a Receipt at the top of the Expenses page.

= 1.2.035 =
* The empty photo area in the Visualizer is now the button. Tap or click anywhere in it to load a photo, instead of reaching back up to the toolbar. On a desktop you can also drop a file straight onto it.
* Take a photo with the camera. On a phone the empty area offers "Take a Photo" alongside "Choose a Photo", so you can shoot the wall you are standing in front of rather than hunting for it in your library.
* Selection tolerance moved up again, to directly under the file name. The hint you read once should not sit above the slider you drag all day.

= 1.2.034 =
* All three receipt forms now open the same way. Business Related asks "Scan Receipt with AI" or "Manually Enter" first, the way the vehicle and job forms already did, instead of dropping a full form on you with the scan button buried inside it.
* Removed the "File a Vehicle Receipt" button from the Vehicle Log. It sat directly above the form it linked to.

= 1.2.033 =
* One menu on a phone. The hamburger beside the search box is gone; the bottom bar and its More sheet are the menu. Everything the hamburger reached is in the sheet, including Checkup, which it was missing, plus your version, who you are signed in as, and the WP Admin link for administrators. Tablets keep the hamburger, because they have no bottom bar.
* Renamed "Completed & all jobs" to "View All Jobs".

= 1.2.032 =
* Deleting a job now clears everything it owns. Quote add-ons were being left behind entirely, and so were logged messages. Photos, notes, receipts and their images, the time clock, financials, payments, paint colors, invoices, follow-up visits and quotes all go, verified table by table against a test job built with one of everything.
* An overhead expense or a vehicle trip that was tagged to a deleted job keeps the record and loses the tag. Neither is the job's money, so neither is removed.
* Every delete in the app is now a button rather than a link: business notes, vehicle log entries, automatic vehicle costs, and the permanent job delete. A link that deletes can be fetched twice, which is what was swallowing the confirmations, and could be fired by anything that follows a URL.
* New vendor names now match what is already on your books. Type a name that differs only in capitalization or spacing and it saves under the spelling you already use. Type something close, like sherwin-williams when Sherwin-Williams is on file, and the form offers it before you save. Your choice either way, and once you take it the next receipt matches on its own.
* The Expenses page sections fold, one open at a time: Where it went, Month by month, Who you paid.
* The duplicate receipt finder moved from Business to Expenses, next to the spending it asks about.
* Taxes & Filing reads shorter. The explanation of what goes in each tax bucket is still there, folded into About this data.
* Removed two database queries that ran on every visit to the Business page and fed nothing.

= 1.2.031 =
* Business overhead is back on the Business page. The list of logged overhead, with its edit and delete, now lives inside the Business Expenses & Overhead section where it used to be, instead of on a page of its own. Filing a receipt is still File a Receipt's job.
* The Expenses page is now a summary of the year. Job materials, vehicle and overhead side by side with what each one did against last year, every category ranked largest first, who you paid ranked by size, and a month by month list you can open and check against a card statement.
* Fixed: deleting an overhead expense never showed its confirmation. The app's offline worker was fetching the delete link a second time, and the second fetch, finding the row already gone, drew the page with nothing to say. Deleting is now a button rather than a link and confirms properly.
* Fixed: opening a section on the Business page. Two sections claimed to open by default and three more worked out which should open only after they had already been drawn, so the section you got was whichever came first in the file. The page now decides once, before anything is drawn.

= 1.2.030 =
* File a Receipt is now the one place every receipt starts. Vehicle, Business Related and Job Cost each have their own form on that page, folded into three cards with one open at a time. Landing there opens none of them, because the question the page asks is which kind of receipt this is.
* Links can still go straight to the right form. A job's Add Expense page is unchanged, and the Vehicle page has a new File a Vehicle Receipt button that lands on the vehicle form with it already open.
* Fixed: on the Business Related form, picking "+ New vendor" did not open the box to type the name in, and the Scan with AI button did nothing. Both had been broken since the form moved to this page in 1.2.027.

= 1.2.029 =
* The Board and Row view switch now agrees with itself. The link text was being drawn before the click was processed, so it showed the view you had just left. The view itself was always right; only the label was a click behind.
* Moving a card on the Job Board now says so. Mark as Job, Mark as Not Won, Mark Completed and Back to Request all rewrote the record and then the card simply vanished from its column, which looks the same as a click that did nothing. Each one now names the record and what it became.
* The folded sections on the Jobs page have a light outline, so a closed section reads as a card that is shut rather than a line of text floating on the page.

= 1.2.028 =
* The Business page is a stack of accordions again, one open at a time. Taxes & Filing is first and opens by default, because it is what you came for; the roster and the vehicle list are reference and stay folded until you want them.
* The Vendors & 1099 table finally works on a phone. Each vendor is a card with its own labels instead of a seven-column table dragged sideways, so the two decisions you are there to make are a tap each.
* "Do not track" is now "1099 not needed". The decision you are recording is about the form, not about the vendor.
* The 1099 threshold moved to PaintClarity > Business > 1099 Reporting. It is a setting, not something you do while reading a vendor list, and it had been sitting inside that list's Save button making it look like the button only saved the number beside it. The Business page now shows one line saying which figure is in force and why.
* The rest of that block is regrouped: saving says what it saves, the bulk action is named in plain words and asks before it writes, and the two accountant exports sit apart under their own label.
* Two lines of page furniture removed: the paragraph describing the Business page to someone already on it, and the sentence explaining the year switch sitting directly below the year switch.

= 1.2.027 =
* File a Receipt is now genuinely the one front door for every receipt. The overhead form used to live on the Expenses page and had to be summoned with a second parameter, so the one-front-door page had one door that opened onto a different building. The form is on File a Receipt itself now, at one route with one parameter.
* The Expenses page is the ledger and nothing else: what has been logged this tax year, and editing or deleting a row in it. Its File a Receipt button goes straight to the overhead form.
* If overhead is the only place you can file a receipt, File a Receipt takes you straight to the form instead of asking a question with one answer, the same way it already did for a lone job or the vehicle log.

= 1.2.026 =
* Quotes Out and Needs Your Attention now stay folded until you open them. They were set to open themselves whenever something was in them, which on a working business is every day, so neither was ever actually seen folded. The counts in each heading are what tell you whether to look.
* Receipt search moved from the Business page to File a Receipt. Checking whether a stack of paper receipts is already filed is a filing job, so it now sits on the filing page, right above the chooser you use when the answer is no. The duplicate finder stays on Business, where the year picker it uses lives.
* The Expenses page is a ledger again. The add form sits behind a File a Receipt button, which is the one front door for a job receipt, a vehicle receipt or an overhead receipt.
* The Scan Receipt with AI and Manually Enter buttons above that form are gone. The form has its own Scan with AI button on the receipt photo field, so those two asked a question about a choice the form already offered. Picking a photo still starts a scan on its own.

= 1.2.025 =
* Message History can now start the next contact, not just write down the last one. Call, Text and Email open your own phone or mail app and log themselves into the history below; Email Quote, Send Follow-Up Email and Text Follow-Up are the same composed sends the quote screen and the alerts card already offer, shown only when they actually apply to the record.
* Record a contact folds away on that page. It was six fields sitting above the history, so reading what had already happened started with a scroll past a form nobody had asked for. It reopens by itself if an entry fails to save.
* The Communication section on Jobs folds away too, alongside Quotes Out and Needs Your Attention.
* Mark quote declined now appears only when there is something to decline: a request with a quote on it the customer has not accepted. A request nobody has priced and an already accepted quote no longer offer the button, and the same test is enforced when the form is submitted, not just when it is drawn.
* The Communication section's replies say whether they worked. Four of its five messages are refusals and every one of them was being drawn in the green success box.
* Today's Crew is gone from the Jobs page. It listed the jobs scheduled for today, all of which were already in Active Jobs at the top of the same page with more detail; on the commonest day it was a card that existed to say nothing was scheduled.

= 1.2.024 =
* The Jobs page is now organized by what you can do about it. Active Jobs and Upcoming come first and are always open; Quotes Out and Needs Your Attention fold away underneath, opening on their own when there is something in them worth looking at.
* Every job list has column headers now, so the date, the crew and the value are labeled instead of guessed at. On a phone, where the rows stack, each value keeps its own small label.
* Wrapping Up is gone. Every row it drew was already in Needs Your Attention one heading higher, and it was drawing them from the same two scans, doubling the work the page did on every load. Its Collect link and its Actions menu moved up into Needs Your Attention, so nothing you could reach from it is lost.
* Two bugs went with it. Staff who are not allowed to see money were reading balances in Wrapping Up that were hidden from them in the card above. And a completed job that already had an unpaid invoice was counted twice, once as a job and once as an invoice, which is the double-counted total the September 16 fix corrected in one place and not the other.
* New Communication section at the foot of Jobs: the last contact logged against each open job and quote, and a picker to start the next one. Pending quotes are in the picker too.
* From that same picker you can mark a quote declined. It moves out of Quotes Out and into Not Won, where Board view's Back to Request brings it back if the customer changes their mind.
* Request Performance moved to a page of its own, reached from the acceptance rate shown on the New Quote screen, where the number is worth a glance before you price something. It charts the rate by year and keeps the year by year figures in a show and hide underneath.
* Completed & all jobs and the Board and Row switch moved up beside the Jobs heading on a wide screen, instead of sitting at the bottom under three lists of rows.

= 1.2.023 =
* The 1099 threshold now follows the year you are reporting on. The IRS figure was $600 for payments made through 2025 and is $2,000 from 2026, so those two years are no longer judged against the same number. If your site still had the old $600 sitting in it only because that used to be the shipped default, it is cleared for you. Type your own figure any time to override it.
* The Upgrade to Pro button turned purple once you had clicked it. It was falling through to the browser's default link colors.
* Color Visualizer: selection tolerance moved out of the right rail to sit directly under the photo, where you can see what it is doing while you drag it. This matters most on a phone, where the rail sits below the photo entirely. Its minimum is now 1 instead of 4, for finer cuts.
* Color Visualizer: the color card moved above the surface card. Colors get changed over and over while trying options in front of a customer; the surface is set once.
* The AI Job Photo Estimator moved above the Description of Work instead of sitting in a drawer below it. It writes that field, so it now comes before it.
* The estimator has its own box to say what is being painted, with guidance. It used to quietly send whatever was in the Description of Work, which on a new quote was nothing at all.
* The estimator's result is more compact. Paint and supplies sit side by side, and the write-up with its Insert buttons sits directly under the figures instead of a screen below them.

= 1.2.022 =
* Housekeeping, no change you can see. The three big settings screens, Business, Painters/Helpers and Settings, moved out of the main plugin file into their own file. They work exactly as before. This keeps the main file small enough for our build system to package correctly.

= 1.2.020 =
* Housekeeping. The plugin now states where its own updates come from, so a Pro install is never offered the free version by mistake. Nothing you can see has changed.

= 1.2.019 =
* New: Message History on every job, in the job menu directly above Call Customer and Text Customer. Every way you talked to this customer about this job, in one list, newest first. Reading the history and making contact are the same errand, so they sit together as one group.
* Record what happened outside the app: a call from your own phone, a text thread, an email you pasted into your mail app, a conversation on site. Mark whether you contacted them or they contacted you, set the date it actually happened rather than today, and write down what was agreed.
* Every entry says how much it is worth. "Sent by PaintClarity" means the app composed it and handed it to your mail server. "Link opened" means somebody tapped a call or text link and what happened next is anyone's guess. "Recorded by hand" means a person says it happened. Those first two used to look identical, which quietly overstated the second.
* Your crew can record a contact on a job they are on, which is often the only way a driveway conversation ever gets written down. They do not see the history back; customer contact history stays in the office.
* Anything PaintClarity sent itself can never be edited or deleted, by anyone. A record you can rewrite is not a record. Entries written by hand can be corrected, and a corrected entry says it was edited, when, and by whom.
* Quotes, invoices, payment reminders, follow-ups and review requests have been logging themselves since July. That history was only ever visible in a collapsed drawer at the bottom of the job page that showed nothing when empty, so most people never found it. It has a real page now.
* The panel on the job page shows even when a job has nothing logged, and says so, rather than disappearing. It carries the same marks the full page does, so you can tell at a glance whether a line was sent by PaintClarity or is somebody's account of a call.
* The record-a-contact form is properly laid out. Fields line up on one baseline, labels read as labels, and the date and notes boxes match every other field in the app instead of being whatever the browser drew.
* Two field types, date-and-time and multi-line notes, were missing from the app's form styling everywhere, not just here. They now match the rest, including the larger touch targets phones need.

= 1.2.016 =
* The review request now delivers the customer their paint colors. Color, product, sheen and where each one went, in the same email that asks for the review. Give and get at the same time.
* Colors have only ever been recorded for your crew. Sending them turns a pure request into something the customer actually wants to receive, and it answers in advance the call every painter gets two years later asking what was on the hallway wall. That email then sits in their inbox with your name on it and the exact product, which is where they look when they want the trim done.
* How many gallons is deliberately left out. That is a purchasing note, it reads like a line on a bill to a homeowner, and it is no use to them when they want to match a color later.
* A job with no colors logged sends exactly the email it sends today, with no empty heading and no gap. Rows with nothing but a location are skipped.
* Place the list yourself with {paint_colors}, or leave your message as it is: one written before this existed does not need editing, the colors go in just after your review link. There is a switch under Settings > Google Reviews to turn the whole thing off.
* The preview on the send screen is the email. What you read there is what goes out, colors included.

= 1.2.015 =
* New: Vendors and 1099, under Business. Everyone the business paid in a year, added up from job receipts, business overhead, and the hours of anyone you have marked as paid on a subcontractor basis, ranked biggest first.
* Subcontractor hours count. For most painting shops the real 1099 money is the person paid by the hour who is not on payroll, and those dollars live in the time log rather than in the receipts. Tick "Paid as sub" next to someone on Painters/Helpers and their hours roll up like any other vendor, at the rate stamped when the hours were logged, so a raise in March cannot restate January.
* Record a decision per vendor once and it sticks: Track for 1099, 1099 not needed, or Undecided. Vendors over the threshold that nobody has ruled on are pulled to the top and highlighted, so a paint store you will never 1099 stops competing for attention with the drywall sub you will.
* Different capitalization and spacing fold together on their own, so "Sherwin Williams" and "sherwin  williams" are one line. For the ones that cannot fold automatically, "Same as" folds two rows into one for good.
* A printable sheet to hand your accountant, and a CSV to send them.
* It says plainly what it cannot do: whether a payment is reportable depends on the vendor's business type, whether you bought services or goods, and whether it went out on a card, none of which the app can know. It totals the year accurately and holds your decisions. It does not fill in a form.
* Spend on jobs marked "exclude from reports" stays out of the totals, as it does in every accountant-facing report here, but the amount is named on the page instead of disappearing quietly.
* Fixed: on PHP 8.4 the Export Data download wrote PHP deprecation warnings into the .csv file itself, so the export opened with warning text mixed into the rows.

= 1.2.014 =
* New: the job form now checks your crew before you save. Tick a worker who has approved time off during the job and the box will not stay ticked, with the days named. Tick someone already booked on another job in that window and you get a warning naming the job and the dates, and you decide: a supervisor covering three jobs on one schedule, or two callbacks in a day, is normal work and is not blocked.
* Time off and overlapping jobs are both checked live, as you change the dates, the length, or who is on the job, on a new job and on one you are editing.
* The check reads the whole job, not just its first day. A three-day job that runs over someone's Thursday off is caught now; the old check only looked at the start date, only ran on jobs already saved, and never looked at time off at all.
* Repeating time off is respected across years, so a standing day off still blocks a booking on next year's calendar.
* The old note on the job form saying conflicts were not checked until the job was saved is gone, because it is no longer true.

= 1.2.013 =
* New: optional add-ons on a quote. Quote the work the customer has decided on, then offer the rest as tick boxes they check when they sign. The homeowner who wants the living room and kitchen now, and is undecided about the bedrooms, gets one quote instead of two. Add them under "Optional add-ons" on the quote form with a title, description, price and your cost.
* On the customer's quote page the add-ons appear as tappable cards. Ticking one updates the total and the deposit on the spot, and whatever is ticked when they type their name is what they have agreed to and what the quote total becomes.
* Accepted add-ons are itemized on the quote document, so the signed paperwork says what was bought and not just a larger number, and the amount printed is the amount charged at the time, even if your tax rate changes later.
* Your cost for each add-on feeds the job's expected profit, so selling one raises revenue and costs together. An add-on priced with no cost is caught: Job Pulse leaves expected profit off rather than reporting it too high by the whole add-on, and tells you which one to fix.
* The quote view shows what was accepted and what was passed on, so the office knows what the crew is walking into.
* An accepted add-on is locked on the quote form: editing the quote afterwards cannot reprice or delete something the customer has already signed for.

= 1.2.012 =
* The app now says which build you are on: "PaintClarity Free" or "PaintClarity Pro", in the sidebar, the sidebar footer, and the version lines in Business Settings. A Pro copy with no active license reads Free, because that is what it can actually do.
* Fixed: clicking the Complete / Not Complete pill on a job worked, but left you on a broken half-loaded page with no confirmation. The job flipped and the date was recorded correctly; it was the page afterward that failed. It now lands cleanly on the job with "Marked complete." (or "Marked as not complete."), and a refresh can no longer flip the job a second time.

= 1.2.011 =
* Job Pulse is honest now when nobody is logging hours. Plenty of shops do not run a clock, and the page used to answer anyway: a job with nothing on the clock showed a pace, a projection built from zero, and a per-hour figure in the hundreds of thousands. Pace, per-hour and the projection are left out when there are no real hours, and the page says so and says what still holds (revenue, costs, profit and what is owed never depended on hours).
* Fixed: being far behind the schedule's hours was marked green. Running over is a warning, running level is good, and running well under is now neither, because it can mean an efficient crew or it can mean hours are not being logged and the page cannot tell which.
* Fixed: a job could report that "every hour was logged by someone with no hourly rate on file" when no hours had been logged at all.
* The "What this job is telling you" lines now carry a mark and a verdict: Went well, Worth watching, Needs attention, or Worth knowing for the lines that are a statement rather than a pass or a fail. The colored edge alone asked you to already know what green and red meant.
* The AI's "Next time" advice has to be an instruction you can act on, naming what to change on the next quote, instead of repeating this job's hours and days back as though that were the advice.

= 1.2.010 =
* Sales tax, VAT, gross receipts tax: whatever it is called where you work, it is now tagged per JOB rather than applied to everything. Painting is not taxed in Florida, is taxed in California and South Dakota, is hit with gross receipts tax in New Mexico, and carries VAT in Germany, and a shop near a line works both sides of one. Set your rate (and what to call it) under Business Settings > Pricing Rules, then tick "Has 6.5% tax" on the jobs it applies to. Add more rates if you work more than one jurisdiction and the job form offers a picker instead.
* Tax you collect is no longer counted as money you earned. Profit, margin, profit per hour, the Profits page, crew and classification reports, job rankings, customer lifetime value, Job Pulse and the job coversheet all read the job net of tax now, and the Business Financial Report shows what you collected, the tax inside it, and your actual income as three separate lines for your accountant. What the customer owes is unchanged: the quote, deposit, invoice and balance due all still include the tax, because they still owe it.
* A job keeps the rate and the name it was tagged with. Changing or retiring a rate later never restates a year you have already filed.
* Nothing changes at all if you do not charge tax. Leave the rate at 0 and no tax option appears anywhere.
* Fixed: the credit card fee was written on every quote and never actually charged. There is now a switch for it. Off (the default) means no fee is added and the quote stops mentioning one. On means the fee shows as its own line on the payment page, and the quote, the deposit page and the pay button all say what it is before your customer commits. The fee is not counted as income on the job, the same as your processor's cut is not counted as an expense.
* Fixed: the deposit schedule could go backwards. With the shipped tiers a $4,001 job asked for $1,200 where a $3,999 job asked for $1,400, so pricing a job two dollars higher collected two hundred less up front. A deposit now only ever rises with the job. It is also worked out on the job itself rather than on the job plus tax, since the tax is not yours to finance.
* New: refunds. "Record a Refund" sits beside Add Payment on Job Financials. Enter a positive amount and the reason; it reduces what the job has collected, re-opens the balance due, puts the job back on your receivables, flips its invoice back from paid, and comes out of the year's income. Recording it here does not move money, put the refund through however you took the payment.
* Job Pulse is now a link beside the status on the job page, instead of only living under More Actions.
* Fixed: the Time Clock offered Check In on a job already marked complete. Check In is available on upcoming, active and running-long jobs, and closes once the job is completed. Anyone on the clock when a job is completed can still check out, and a punch made offline still syncs.
* Fixed: a payment logged as "check" instead of "Check" did not match the dropdown, so the next save of Job Financials silently changed its method. Existing entries are tidied up on update.
* Job Financials payments now take an optional note, so a check number or the reason for a refund lives with the row.

= 1.2.009 =
* A pass over the everyday screens, from a page-by-page walkthrough of the app. (The 1.2.008 build was an internal step and was never released; everything from it is here.)
* Fixed: Email Quote landed on the "this page needs to know which job" message instead of the email screen. The helper message added this cycle for a bare ?estimates=1 did not know about the Email Quote address, which carries the quote id rather than the job id. All four ways into the quote screens are recognized now.
* Links are underlined now, everywhere except menus, buttons and tiles. Working out what is clickable should not take a guess.
* Hovering a button no longer washes out its text. Some WordPress themes set their own hover color for buttons, which on a light theme could put white text on a near-white button and leave it unreadable. Every button and menu row in the app now states its own hover colors, so the theme cannot repaint them. This showed up on the invoice reminder buttons, on Add Payment and Add Hours on Job Financials, and on Mark Completed and Actions on the Jobs list.
* Invoices: a new invoice reads "Not sent" rather than "Draft", which is what it actually means. Opening your own copied customer link to check it no longer records the invoice as sent. Only a real customer opening it does that.
* Invoices: More Actions is a proper menu now, the same as the ones on the job pages, and the long pay link that used to wrap inside it is an "Open the customer pay page" row.
* Jobs list: the date column sits beside the status it belongs with, and the status says Started or Scheduled instead of carrying its own copy of the date.
* Jobs list: "Completed & all jobs" and the Board/Rows switch moved up under Today's Crew, where they can be found while scanning the page.
* Request Performance sits under its own heading like every other section on the page, reads in title case, and no longer says "quoted", since a request can be a quote, an estimate or a bid.
* Job view: More Actions opens under its own tile instead of at the far left of the row, and floats over the page rather than pushing it down. An empty Job Description now says so and links to the edit form, instead of printing a heading with nothing under it.
* Job Financials: an Update button sits with the Billable amount. It saves the whole page, exactly as the Save Financials bar does.
* Job edit: the Directions gear is visible on this page again (it was being painted the same color as its own icon), the stray colored square above the worker list is gone, and a Color Visualizer link joins the other job links at the foot of the form.
* Quote form: one heading instead of three, the customer and schedule read as context rather than as a field to fill in, the reference tools and calculators read as links rather than as fields, and the two paragraphs of small print moved to where they apply, beside the total and beside the save button. Row spacing is even throughout.
* Callback / Punch List: only the visit type you picked is explained, the date and arrival time sit together, and the billable wording is shorter.
* Notes & Photos: each section says how many photos and notes it holds, or "none yet", so you can see what is there without opening it.

= 1.2.007 =
* Includes everything from the 1.2.006 build, which was an internal step and never released.
* The Color Visualizer is now on the job menu, so you can open it from a job instead of from the main menu and start over. Going in that way fills the customer name and service address onto the printed sheet for you. It is on the job's own page, on the job cards, and on the Search Jobs list.
* The Color Visualizer print is a proper document now. Your business name, logo and contact line sit at the top with the date and who it is prepared for, then the render, then the color list. The app's sidebar, search bar and menu no longer print with it, and the photo gets the full width of the page. Open the Visualizer from a job with the job link and the customer name and service address fill themselves in, or type whatever should appear.
* Every render now carries a short note that a color on a screen is an approximation and not a color match, and that a physical sample or a test patch should settle it before paint is ordered. It prints on the sheet and it is written onto the downloaded PNG as well, since that is the file that usually gets texted to the customer on its own. That PNG also no longer carries your selection outline.
* Picking the same surface several times now reads as one line. Working across a stucco elevation takes several clicks, and each one used to print as its own identical row on the customer's sheet. They group into a single entry that says how many areas it covers, and changing the color or the paint code moves all of them together.
* "What is this" now decides how the surface gets picked, which it was supposed to do all along. Brick, Concrete block and Cabinets switch to Similar color, because a plain fill from one brick face stops at the mortar and gets you one brick. Everything else uses Connected. If you have already selected something, changing the type re-cuts it, and changing it back puts it exactly as it was.
* The controls are reordered so the tolerance slider is on screen with the photo instead of below the fold. The color wheel folds away behind its swatch and opens when you want it, which puts the whole panel in view at once. The photo scrolls with the page again rather than staying fixed.
* Fixed: the floating Install PaintClarity button and the offline banner were printing on top of documents. Neither appears on paper now, on any page the app prints.
* Smaller things: the three selection mode buttons no longer read as one cramped block, the paint code box now shows a hint instead of what looked like a real paint already entered, and the tolerance number flashes when the tool tightens it for you so you can see what moved.

= 1.2.005 =
* On a wide screen the photo now stays put while you scroll. Reaching a control further down the panel used to take the picture off the top of the screen, which is the one thing that should not happen while you are editing it.
* Two explanation paragraphs are now hover tooltips instead: the note about what to put in Paint color code, and the note about how each selection mode spreads. The panel is shorter and the wording is still one hover away.

= 1.2.004 =
* New Color Visualizer, in the menu above Notes. Load a photo of the house or the room, select the surface you want to paint, and turn the color wheel until it is the color you are proposing. The wall changes color and keeps its own shading, grain and texture, so stucco still looks like stucco and the shadow under the eave stays a shadow.
* Three ways to select. Connected spreads from where you click and stops at edges, which suits stucco, siding and a single wall plane. Similar color picks up every matching area in the photo, which is what brick and block need, because a plain fill from one brick face stops at the mortar and gets you one brick. Box lets you drag a rectangle over the whole surface at once, which is the fastest way to take a big flat wall: shift-drag adds another box, and holding Alt while you drag cuts one back out for the windows and the doors.
* The tolerance slider re-cuts the surface you have selected as you drag it, so you can see the selection grow and shrink instead of guessing. Each surface remembers how it was built, including everything you shift-clicked or boxed, so it is rebuilt properly rather than approximated.
* A selection that starts spreading across most of the photo tightens itself and says so. A white wall, a white ceiling and a pale tile floor all measure about the same, and without this a fill that started on the wall would walk out over the floor.
* Put the Sherwin-Williams or Benjamin Moore number on each surface and it prints with the render, so the customer has the color in hand. Hold to compare flips back to the original photo, and the render saves as a PNG or prints to PDF.
* Everything on the page runs in your own browser. No photo of a customer's house is uploaded anywhere, and there is nothing to configure.

= 1.1.002 =
* The AI buttons now show they are working. The sparkle on the button pulses while it waits for an answer, and the button no longer greys out, so there is no wondering whether the click registered.
* Need a logo? The Business screen now offers four ready-made ones under the Logo URL box. The artwork is AI-generated and free for you to use. Pick one and it appears on your quotes, invoices and customer pages straight away. They are shared with other businesses using PaintClarity, so your own logo is still the better answer once you have one.
* The free version now shows the Pro features in the menu instead of hiding them. Profits, Expenses, Business and Vehicle appear with a small Pro marker, and opening one explains what it does. Before this, a free user had no way to know PaintClarity had financials in it at all.
* Fixed the search icon sitting on top of the words in the jobs search box on some themes. The padding that held the icon clear could be overridden by the site's theme; it no longer can.
* New Activate License item in the PaintClarity menu for anyone who bought a license before installing the plugin. WordPress only offers the license box on the Plugins screen, and the Upgrade screen is a checkout with no key field, so this takes you straight to it.
* The "updates are paused" notice no longer appears on a brand new Pro install that has not been set up yet. It was competing with the setup screen and pointing at the wrong place.
* Settings now explains how to switch from Pro to the free version, including why the plugin search screen shows PaintClarity as already installed and which route works instead.
* Better text contrast in a number of panels across the app, and on the jobs board, badges, tooltips and the calendar's today marker. Several were hard to read on the darker themes.

= 1.1.001 =
* PaintClarity now tells you inside the app when a new version is available, instead of only on the WordPress Plugins screen. Most owners work on the app page and never open that screen, so updates could sit unnoticed for months. The notice appears only for people who are allowed to update plugins, and it carries an Update now button.
* New "Updates" item under Settings > Setup Health showing which version you are on, whether anything is waiting, and a one-click update button when there is.
* New setting: install PaintClarity updates automatically. This uses WordPress's own automatic update list, the same switch as the Auto-updates column on the Plugins screen, so the two always agree. Recommended, and it means the office never has to remember to update.
* If your host has switched automatic updates off for the whole site, the setting explains that rather than offering a switch that would do nothing.
* The in-app notice can be dismissed. Dismissing it hides that one version only, so the next release brings it back.
* New installs now open the Jobs screen in the row layout instead of the board. Existing sites are not changed, and the Board and Rows switch at the bottom of the Jobs screen works as before.
* Pro sites running without an active license now say so in the app. Such a site receives no updates from either channel, which was completely silent before. The notice can be dismissed and returns monthly, and it offers both ways out: activate a license, or switch to the free version.
* Clearer guidance on where a fuel receipt belongs. The Vehicle page now explains that on the standard mileage method you log the trip rather than the receipt, because fuel is already inside the per-mile rate.
* File a Receipt now asks one question first: Vehicle, Business, or Job. It offers only the destinations your account and plan can actually reach, and the camera opens on the next screen.
* Painters can file receipts themselves. File a Receipt used to be office only; crews now reach it from their own menu, and the job list shows only the jobs they are assigned to.
* If only one destination applies to you, the question is skipped and you go straight to the camera.
* The main job search bar now appears on every layout, not only the sidebar one, and the Job Board's duplicate box is gone.
* Themes: eight are now five. Modern, Mist and Fresh have been retired after a contrast audit. Sites using one are moved to the closest remaining theme automatically: Modern to Classic, Mist to Seaside, Fresh to Dark.
* Every remaining theme now meets the WCAG AA contrast standard for body text. Faint secondary text on Classic, Industrial and Retro has been darkened, and Classic's blue is slightly deeper so buttons and links are readable.
* Themes no longer recolor the WordPress admin screens. A dark theme used to leave text on those screens almost invisible against WordPress's white panels; they now read the same whichever theme you pick, and your chosen theme still styles the app itself exactly as before.

= 1.1.000 =
* A visual refresh across the whole app. The menu is now a dark navy rail with the PaintClarity mark at the top, and the page you are on is marked with a blue bar rather than a filled pill.
* Every screen now has a proper page header: the screen name, a thin rule under it, and, where the page already knows it, a short line of context such as how many customers are listed or which year the Profits page is showing.
* Text sizes are consistent everywhere. Helper sentences used to render at whatever size your WordPress theme happened to use, which on many themes made them larger than the headings above them.
* Money columns in every table now line up on the right with their decimal points stacked, so a column of figures can be read down.
* Buttons now have three clear levels: one solid action per screen, bordered buttons for everything secondary, and plain links for the rest. Previously almost every button looked equally important.
* The job stat tiles lead with Profit, marked with a rule across the top. On some themes the old highlight made the most important figure look like the faded one.
* Cards and tables are flatter and tighter, with a hairline border instead of a shadow. Shadows are now used only for menus and panels that genuinely float above the page.
* Keyboard users get a clear focus outline on every control in the app.
* The company logo you upload is unchanged everywhere it belongs: quotes, invoices, expense reports and your customer payment pages. Only the app menu shows the PaintClarity mark.
* Accessibility: icons, the job search box and the phone menus now keep their screen-reader attributes, which WordPress had been stripping. Form fields across the app that had no label now have one.
* Editing a customer's address from the Customers list now opens the full Edit Customer form instead of a small editor inside the row. One form, one save, one set of rules, so the two can never drift apart.
* Fixed a typo in one of the starter Resource links, "12 Mistakes That Loose Sales". New installs were already correct; sites set up before the fix have the title corrected automatically, and if both spellings ended up on your site the misspelled one is moved to the trash where you can still get it back.

Older releases are listed in changelog.txt, which ships with the plugin.
