Title: PaintClarity
Author: paintops
Published: <strong>29 Luglio 2026</strong>
Last modified: 6 Ottobre 2026

---

Ricerca i plugin

![](https://ps.w.org/paintops/assets/banner-772x250.png?rev=3692081)

![](https://ps.w.org/paintops/assets/icon-256x256.png?rev=3692081)

# PaintClarity

 Di [paintops](https://profiles.wordpress.org/paintops/)

[Scarica](https://downloads.wordpress.org/plugin/paintops.1.2.078.zip)

 * [Dettagli](https://it.wordpress.org/plugins/paintops/#description)
 * [Recensioni](https://it.wordpress.org/plugins/paintops/#reviews)
 *  [Installazione](https://it.wordpress.org/plugins/paintops/#installation)
 * [Sviluppo](https://it.wordpress.org/plugins/paintops/#developers)

 [Supporto](https://wordpress.org/support/plugin/paintops/)

## Descrizione

**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. The Manual
   tab runs entirely in your browser: no photo is uploaded anywhere.
 * **AI Visualizer** (Pro): the other tab. Upload or take a photo, pick colors by
   brand and name from the Sherwin-Williams and Benjamin Moore books, add a note
   like “paint the stone wall too, in Alabaster”, and get back a realistic repainted
   photo to show the customer. This tab sends the photo to OpenAI under your own
   API key (Settings > AI), billed to your OpenAI account at a few cents per render.
   Renders can be saved to the job’s photos. Colors on screen are approximate; brand
   and color names are trademarks of their owners and PaintClarity is not affiliated
   with any paint manufacturer.
 * **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.

## Screenshot

[⌊The quote/estimate builder with scope components and inclusions/exclusions.⌉⌊The
quote/estimate builder with scope components and inclusions/exclusions.⌉[

The quote/estimate builder with scope components and inclusions/exclusions.

[⌊The customer's accept page: branded, e-signed, with online deposit.⌉⌊The customer's
accept page: branded, e-signed, with online deposit.⌉[

The customer’s accept page: branded, e-signed, with online deposit.

[⌊The scheduling calendar with crews, worker badges, and holiday labels.⌉⌊The scheduling
calendar with crews, worker badges, and holiday labels.⌉[

The scheduling calendar with crews, worker badges, and holiday labels.

[⌊A painter's phone view: My Jobs, directions, and offline check-in.⌉⌊A painter's
phone view: My Jobs, directions, and offline check-in.⌉[

A painter’s phone view: My Jobs, directions, and offline check-in.

[⌊The Profits dashboard (Pro) with profit by crew and worker.⌉⌊The Profits dashboard(
Pro) with profit by crew and worker.⌉[

The Profits dashboard (Pro) with profit by crew and worker.

[⌊An invoice with online payment and mark-as-paid.⌉⌊An invoice with online payment
and mark-as-paid.⌉[

An invoice with online payment and mark-as-paid.

[⌊Settings: Company Profile, Appearance themes, Stripe, and AI.⌉⌊Settings: Company
Profile, Appearance themes, Stripe, and AI.⌉[

Settings: Company Profile, Appearance themes, Stripe, and AI.

[⌊The Color Visualizer: select a surface in the customer's photo and turn the wheel
until it is the color you are proposing.⌉⌊The Color Visualizer: select a surface
in the customer's photo and turn the wheel until it is the color you are proposing
.⌉[

The Color Visualizer: select a surface in the customer’s photo and turn the wheel
until it is the color you are proposing.

## Installazione

 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.

## FAQ

### 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.

## Recensioni

Non ci sono recensioni per questo plugin.

## Contributi e sviluppo

“PaintClarity” è un software open source. Le persone che hanno contribuito allo 
sviluppo di questo plugin sono indicate di seguito.

Collaboratori

 *   [ paintops ](https://profiles.wordpress.org/paintops/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

[Traduci “PaintClarity” nella tua lingua.](https://translate.wordpress.org/projects/wp-plugins/paintops)

### Ti interessa lo sviluppo?

[Esplora il codice](https://plugins.trac.wordpress.org/browser/paintops/) segui 
il [repository SVN](https://plugins.svn.wordpress.org/paintops/), segui il [log delle modifiche](https://plugins.trac.wordpress.org/log/paintops/)
tramite [RSS](https://plugins.trac.wordpress.org/log/paintops/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.2.078

 * Added: a review card at the foot of Checkup, for administrators, with a link 
   to leave an honest WordPress.org review and the two steps to get a free WordPress.
   org account. It appears once the site has completed three jobs or used PaintClarity
   for a month; “I already reviewed” hides it for good, “Maybe later” for sixty 
   days. Reviews are never paid or rewarded.
 * Changed: the link at the foot of the menu that read “WP Admin” is now “Settings”
   and opens PaintClarity > Settings. Administrators only, as before.
 * Added: Help now opens with “Watch the walkthrough”, a link to the five-minute
   video tour in the Help Center, with chapter links to jump to any part of the 
   app.
 * Fixed: the Jobs rows keep their layout when the browser translates the page. 
   The Actions toggle used to grow across the Job Value figure, crew initials were
   translated and spilled out of their circles, and the “Job Value” header, the 
   section counts and “Tomorrow” stayed English. The toggle is now capped to its
   column, initials and crew names are left alone, and the labels, counts and “Tomorrow”
   translate. Lead rows pin the contact and the received date the same way.
 * Fixed: on Production Rates, “Add area” on a completed job that has no paintable
   area now opens a one-field Save form right in the row, the same form the completion
   confirmation uses, and the job’s rate appears as soon as it is saved. It used
   to send you to Edit Job.
 * Fixed: “Add hours” on Production Rates now opens the job’s Hours page, where 
   hours are entered. It used to open Job Pulse, which only shows them.
 * Fixed: new jobs, quotes and invoices are stamped with the site’s own date and
   time. They used to take the database server’s clock (UTC on most hosts), so on
   a US site a quote or invoice created in the evening carried the next day’s date,
   and an invoice’s balance could read low for a few hours after another invoice
   on the same job was marked paid. Records created before this update keep their
   original stamp.

#### 1.2.077

 * Improved: PaintClarity now works cleanly with your browser’s translation (Chrome,
   Safari, Edge) and with front-end translation plugins. Customer names, addresses,
   phone numbers and emails, job numbers, amounts, dates, paint colour names and
   codes, and the PaintClarity name are marked so translators leave them exactly
   as they are, while labels and sentences translate. This covers the Jobs rows 
   and board, the job page, Customers, Profits, Business, Pulse, Payments, the quote
   document, the online quote and invoice pages, and the Visualizer colour picker.
 * Fixed: the public quote, detail and payment pages, the invoice page and the printable
   reports declared English regardless of the site’s language. They now declare 
   the site language, so browsers detect it correctly and offer translation when
   it applies.

#### 1.2.076

 * Changed: calculator measurements start blank. Interior square feet, baseboard
   length, exterior perimeter, wall area, cabinet counts, trim length and the Labor
   Days area no longer open with an example size filled in; the example shows as
   grey placeholder text instead. A section you never touch adds nothing to the 
   quote or to the job’s paintable area. Rates, ceiling height, coats and coverage
   keep their starting values.
 * Added: when a calculator’s line looks like one already on the quote (a paint 
   line you typed by hand, say), “Add These Numbers to Quote” asks whether to add
   it as a new line or replace the existing one, then lists exactly what was added
   or replaced and highlights the changed rows. Nothing gets counted twice by accident.
 * Changed: the Business page tile “Total Deductions” is now “Materials, Vehicle
   and Overhead”, with a note that crew wages are not in it and that the Financial
   Report adds them. The arithmetic is unchanged.
 * Added: marking a job completed that has no paintable area shows “Paintable area
   is missing” in the confirmation, with a show/hide holding one field and a Save
   button, so the number can be added right there and the job counts in Production
   Rates. Completion itself stays one tap. The Jobs rows view now also prints the
   confirmation sentence for any stage move; it used to show nothing.
 * Changed: after “Note added” on Notes & Photos, the log opens with the new entry
   on top, marked “Just added”, so the text, time and author can be checked at once.
 * Changed: an interior-only job (Interior ticked, Exterior not) no longer pre-fills
   the “Weather (exterior work)” clause, even when that clause is on by default.
   The quote document’s “What’s Next?” and the online detail page now both point
   to accepting online; the “reply with I accept” wording is gone.
 * Changed: inside a job, “Customer History” is now “Communication History”. The
   customer’s work history stays under Customers.

#### 1.2.075

 * Fixed: the Resources list’s stylesheet and script loaded on every page of the
   site and every wp-admin screen, whether or not a resource list was on it. They
   now load only where a list renders (the app’s Resources page and pages using 
   the [paintops_resources] shortcode). The small Pro-unlicensed upgrade-button 
   script was scoped the same way. Ordinary pages of the site carry no PaintClarity
   assets at all.
 * Changed: the PaintClarity app page is no longer added to a menu that has “Automatically
   add new top-level pages” turned on, and it stays out of a theme’s automatic page
   lists (the no-menu fallback and the Page List block). It still shows under Pages
   and in the menu editor, so adding it to a menu on purpose works as before.

#### 1.2.074

 * Added: Business Notes has an “Add a Note to a Job” accordion. Pick an open request
   or job, write the note, and it lands on that job’s Notes & Photos log with the
   time and your name, without leaving the page.
 * Added: “Preview Online Quote” on the quote screen opens the page the customer
   will see, in a new tab. Opening it while logged in as staff never counts as a
   customer view: no “Viewed by customer” badge, no owner notification, no history
   line, and the quote is not marked sent.
 * Changed: on the Free plan the Visualizer opens on the Manual tab, where the working
   tool is. The AI tab is still one tap away with its upgrade details. Pro is unchanged.

#### 1.2.073

 * Changed: the crew initials on a Jobs row are the whole control; the “Show names”/“
   Hide names” text is gone. Click or tap the initials to list the full names, again,
   outside, or Escape to collapse. Screen readers hear “Show crew names” / “Hide
   crew names”.

#### 1.2.072

 * Improved: one name for new work. The Jobs page button reads “+ New”, and the 
   menu item, the New Customer page buttons and the form heading all read “New Request/
   Job”. The Quote / Estimate / Bid / Job pills and the remembered choice are unchanged.
 * Fixed: after creating a job the cleared form still carried the paintable square
   feet and the “Exclude this job from financial reports” box. Both now clear, with
   the exclusion back to off.
 * Improved: crew names on a Jobs row. The initials sit in a plain control with 
   a “Show names” label beside them; a click, tap, Enter or Space lists every crew
   member’s full name on its own line underneath and the label reads “Hide names”.
   Clicking again or outside collapses it. Hover titles on desktop stay, and the
   row’s Actions menu and links are untouched.
 * Improved: the amount column on the owner’s Jobs rows is labeled “Job Value”. 
   The painter view is unchanged.

#### 1.2.071

 * Fixed: on the quote screen, pressing “Save … as this job’s paintable area” re-
   rendered the calculator from its starter values (1,500 sq ft, 600 ft of baseboard)
   while still showing them as results, so a room entered as 224 sq ft with no baseboards
   offered Interior Painting at 1,239 sq ft and $1,290 of baseboards to the quote.
   The typed values now survive that press.
 * Changed: each calculator’s green button adds only that calculator’s numbers to
   the quote (“Add These Numbers to Quote”). It used to add every calculator on 
   the page at once, including one calculated earlier with its starter values and
   never touched again.
 * Fixed: Job Pulse compared payroll with the “labor rate” setting divided by this
   job’s observed hours per day, which on a short day turned a $575 day into $172.50
   an hour and reported more “charged” than the whole job. It now holds payroll 
   against the quote’s own labor line; when the quote has none, the setting is named
   as a suggestion, per standard day, never as what the quote charged. Settings 
   calls it “Suggested labor cost” throughout.
 * Fixed: on Profits, “Profit By Job Classification” and “Profit by Crew / Worker”
   covered every job ever, including upcoming and Not Won, under a “year to date”
   heading. They now cover the same jobs as the year’s totals (that year, started,
   not Not Won) and say so.
 * Improved: the Profits year block says how many jobs have no hours or expenses
   logged yet and how much of their revenue is counted as profit only because no
   costs are on the books.
 * New: the manual Visualizer tab offers the job’s existing photos as thumbnails,
   the same strip the AI tab has, so an original never has to be uploaded twice;
   the job stays attached when switching tabs. Thumbnails on both tabs carry a caption(
   the photo’s note, or Before / After / Photo with the day and time).
 * New: on the manual Visualizer, a “Next tap on the photo” switch (New surface,
   Add to it, Take away) replaces having to know Shift-click and Alt-drag, so a 
   selection that spread onto the floor can be corrected by touch. Undo now reverses
   the last tap rather than removing the whole surface.
 * Changed: colors spotted in the AI Visualizer notes are shown as suggestions with
   an “Add to a surface” action, and only colors on a surface reach the render. 
   A sentence that says what to keep, leave or not paint is never read as a color
   to use, and a plain color word such as “white” is not matched to a catalog color
   unless its brand or code is beside it.
 * Fixed: after saving an AI preview to a job, “Open job photos” pointed at a WordPress
   admin address; it now opens the job’s Notes & Photos inside the app.
 * Improved: Before / After pairing on Notes & Photos picks from thumbnails with
   captions and ids instead of “Photo #12, timestamp” dropdowns, so two photos from
   the same minute can be told apart.
 * Improved: a Cloudflare Turnstile key pair that cannot work now shows on the Quote
   Request Form summary line (“Turnstile NOT WORKING, requests filed under Spam”)
   and as its own row on the Setup Health board, instead of only inside the section.
   Saving a bad pair has been refused since 1.2.066.
 * Fixed: the Appearance summary line described the app bar and mobile display while
   the sidebar layout was on, which replaces both. It now states the effective layout,
   and the overridden controls say “Not in effect”.
 * Fixed: a job marked completed before its scheduled start still showed “Arrive
   in N days” on the job page. A completed job shows “Completed “.
 * Improved: more than 16 hours for one person on one date (usually a double entry)
   is called out on Job Pulse and badged on the job’s Hours page and on the Financials
   hours editor, rather than carried into the per-day figures without comment.
 * Fixed: a whole-dollar total that the arithmetic left a hair under the whole number(
   14,689.999…) printed as $14,690.00 on the dashboard tiles, where cents are shown
   only when there are cents.

#### 1.2.070

 * Improved: the Jobs page reads the same in row view and board view. The row view’s“
   Quotes Out” is now “Requests”, matching the board’s first column, and a collapsed“
   Completed” section joins it below Upcoming, with the same count and the same “
   N unpaid, $X outstanding” note the board shows. Finished jobs with a balance 
   read “Balance due” with a Collect link; the Actions menu offers the same moves
   as the board.
 * Improved: Production Rates shows each job’s Started date instead of Completed.
   A scheduled job always has a start date, while the completed date is only stamped
   by Mark Completed, so most rows read “No date”.
 * Fixed: a job marked “exclude from financial reports” was left off the Production
   Rates list. That flag is about money; a production rate is hours over area, so
   every completed job now counts.
 * Fixed: in the sidebar layout, hovering WP Admin or Sign out turned the text dark
   against the dark rail; a theme’s own link hover was winning.
 * Removed: the “Waiting on payment” list on the Jobs row view. The Completed section
   now carries the unpaid count and total with a Collect link per job, and Needs
   Your Attention lists the same balances with Mark As Paid and Record Payment, 
   so a third list with no actions was clutter.

#### 1.2.069

 * Fixed: the last wide accent bars are gone: the Business Checkup summary box, 
   Job Pulse tiles, calendar entries, the form section labels, the About panel on
   Business, the admin-only note above the profit summary and the vivid theme’s 
   extra-wide label edge. Where a colour carried meaning (red for attention, green
   for clean, tile tone) it now colours the box’s regular 1px border instead.

#### 1.2.068

 * Fixed: AI Visualizer renders came back zoomed in, with the ceiling and floor 
   cut off. The photo is fitted to the model’s frame by extending its edges; the
   flat grey bars used for that read as letterboxing to the model, which zoomed 
   the photo to fill them. The extension is now a mirrored copy of the photo’s own
   edges, so there is nothing to fill in and the render lands back on the real photo.
 * Fixed: the render on the right showed larger than the photo on the left. Both
   are now capped at the same height so they sit side by side at one size.
 * Fixed: a plugin that queues a script late in the page (an SEO toolbar, for one)
   could still reach the app page past the “other plugins” setting. The check now
   runs as each tag is printed, whenever it was queued.

#### 1.2.067

 * New: Payments on the Free plan. Every job has a Payments page for anyone who 
   can see money: record cash, check or in-person card payments and refunds, remove
   a mistake, and see Billed, Paid and Still owed. Payments recorded here flip the
   job’s invoices to paid when they cover the job, the same as on Pro. On Pro the
   Payments action opens the Financials payments drawer.
 * New: invoicing more than the job is billing now asks first. An invoice above 
   what is left to invoice comes back as a question with the numbers; confirm it
   and the invoice is created and Billable on the job is raised to match, with a
   line in Customer History saying so.
 * New: the year-end report adds “tax to remit, by filing period”: one table per
   tax label and rate, by quarter, with a by-month view for monthly filers. Cash
   basis, following the payment date.
 * New: the quote form holds its Request a Quote button until Cloudflare Turnstile
   hands over a token, so a person cannot send the form before the check passes.
 * New: quote form submissions that are plainly automated (the hidden field filled
   in, or no Turnstile token while Turnstile is on) are dropped without creating
   a row. The Leads screen shows one line, “N automated submissions dropped in the
   last 30 days”, instead of a Spam tab full of them. Softer rejections keep their
   rows so Not spam stays possible.
 * New: a pattern check on the quote form for sites without Turnstile: first name
   equal to last name (or names with digits and underscores), a message mostly in
   non-Latin script on a US, CA, GB, AU, NZ or IE business, and links in the message.
   Two of the three together flag a request as spam; one alone never does.
 * Improved: a Financials save no longer restamps every payment with the person 
   saving and the current time; a payment that did not change keeps who recorded
   it and when.
 * Improved: the AI photo estimate shows metres, square metres and litres on a business
   set to metric, and the write-up is asked for in metric too.
 * Fixed: the AI Visualizer’s result box scrolled under the sticky header when a
   render started, cutting the progress spinner in half.
 * New: other plugins’ scripts and styles stay off the app page. SEO toolbars, chat
   widgets, cookie banners and page-builder bundles have no job on the private app
   screens and can make them jump (Rank Math’s Frontend Stats Bar inserted and removed
   a bar on every screen). Your theme, WordPress itself and anything loaded from
   another site are not affected, and the rest of your site is untouched. Settings
   > Appearance > Navigation has the switch and an exceptions box by plugin folder.

#### 1.2.066

 * Fixed: on the Quote Request Form settings, a browser’s password manager could
   fill the Cloudflare Turnstile fields with your WordPress username and password
   when you pressed Save, because a text field followed by a password field looks
   like a login form. The widget then failed on every visit and every real request
   was filed under Spam without a word. Secret fields across the plugin (Turnstile,
   Stripe, OpenAI) are now masked text fields that password managers leave alone,
   and a Turnstile key that is not a key is refused at save with a message naming
   the field.
 * Fixed: a Turnstile widget that cannot complete no longer fails silently. Two 
   requests in a row arriving without a Turnstile token put a warning at the top
   of Leads and on the settings page, saying what usually causes it and how to turn
   Turnstile off; administrators viewing the form also see a note under the widget
   when Cloudflare reports it did not load. A saved key that is not a Turnstile 
   key is called out the same way.
 * Improved: the quote form’s validation messages are plain: “Some fields are missing
   or need a correction” and “First name is required”, instead of “A few fields 
   need a moment”.
 * Improved: the City, State and Zip fields on the quote form no longer show example
   values.
 * Improved: notices and banners across the app lose their thick left accent bar
   and keep an ordinary border (the same rule that took the top rule off the stat
   tiles).

#### 1.2.064

 * New: Message History is now Customer History. One timeline per job, newest first:
   the quote request, the quote going out, opened, signed or declined, invoices 
   raised, sent and paid, every payment and refund, the job finishing, and every
   call, text, email and note in between, with a funnel strip across the top that
   shows which stage the customer has reached and what has not happened yet. Same
   page, same link.
 * New: painters can reach the office from a job. Call, Text and Email pills to 
   the company phone and email on the painter’s job page and Customer History, with
   the job already named, logged as “Called the office”. A contact a painter records
   from the field is now emailed to the office, which the form always said and never
   did.
 * New: the AI Visualizer can save a render when it was opened without a job: pick
   the job from a list. When it was opened from a job, the job’s actions bar sits
   above the tabs so the rest of the job is one tap away.
 * Improved: the AI Visualizer no longer comes back cropped or reframed. The model
   only draws on three fixed canvases, so a phone photo was being recomposed to 
   fill one; the photo is now placed on the right canvas with flat bars, the model
   paints it as-is, and the bars are trimmed off the result, so the render has exactly
   the photo’s own edges. The model is also told not to write any text, labels or
   swatches into the picture, and to keep each wall one uniform color from floor
   to ceiling, after real renders came back with a caption strip and a lighter band
   under the ceiling.
 * Improved: the AI Visualizer’s result bar is Download and Save; the original photo
   already sits beside the result, so Hold to compare and Render again are gone,
   replaced by a note on how to re-render. While a render is in flight the result
   box itself shows Rendering with a spinner and the status, so the wait is visible
   without looking down at the Render button.
 * Improved: the standard mileage rate is per tax year (2025 = 70 cents, 2026 = 
   72.5 cents built in), each trip is valued at the rate of the year it was driven,
   and typing this year’s rate no longer restates last year’s report.
 * Improved: outside the US the vehicle and vendor screens stop talking about the
   IRS, 1099s and miles: a Canadian company sees CRA, T4A and kilometres, a British
   one HMRC and miles, and Colour is spelled the local way.
 * Improved: the calendar feed has an option to leave customer names, street addresses
   and phone numbers out, for a calendar the whole crew can see.
 * Improved: deleting a job that carries payments or paid invoices now says how 
   much money leaves the books before you confirm.
 * Fixed: a fourth real quote request from the same address inside the window no
   longer lands in Spam because bot submissions were being counted toward the cap.
 * Fixed: the card processing fee and its sentence on the quote only apply where
   a card can actually be taken online; Free and Pro-without-Stripe sites no longer
   disclose a fee nobody can pay. The card fee and 1099 settings are Pro-only on
   the settings page.
 * Fixed: Job Pulse honours the licence, so a lapsed Pro build locks it with the
   rest.
 * Fixed: Profits no longer counts a job moved to Not Won, or a job whose start 
   date is still ahead, as the year’s revenue; the Profit per Hour denominator follows
   the same rule.
 * Fixed: the review request greets the customer by first name; {customer_full_name}
   is available for the body.
 * Fixed: PHP notices on document upload, on CSV import under PHP 8.4, and when 
   the Email Quote page is opened with a stale id (it now says the quote was not
   found).
 * Fixed: the AI Visualizer’s monthly cap message named the wrong feature, the renders-
   used line did not move until a reload, and the void-invoice prompt now says the
   reason is shown to the customer.
 * New: Hours on the Free plan. Every job has an Hours page (staff only): one row
   per person per day with a note, each row removable on its own. Hours logged on
   Free feed Profit per Hour and the labor lines the moment Pro is turned on, because
   they go in the same table with the worker’s rate stamped at save. On Pro the 
   Hours action still opens the Financials hours editor.
 * New: quotes carry cents. A quote total, its tax and an accepted upsell are stored
   to the cent instead of being rounded to whole dollars, so a $1,847.50 itemized
   quote no longer reads $1,848 on the customer’s page and the invoice. Existing
   figures are untouched; the columns are widened on upgrade.
 * New: a printable letterhead on the quote. The company name, address, phone and
   email print across the top of the customer’s quote and the printable version,
   only the lines you have filled in.
 * New: a subcontractor pay run on the Business page. Pick a through date and the
   date you paid, and every unpaid subcontractor hour up to that date is stamped
   with the pay date. The year report and the vendor report then follow the money:
   labor counts in the year it was paid (cash basis, what the 1099 or T4A asks for),
   with hours that have no pay date yet shown by work date and called out as such.
 * New: payee details per vendor and subcontractor (legal name, entity type, address,
   last four of the tax id, how they are paid) on the Business page, carried onto
   the vendor report and its CSV, so the January forms can be filled from one screen.
 * Improved: money on the dashboards drops the “.00” (a $1,800 job reads $1,800,
   a $1,847.50 one keeps its cents) on the Profits tiles, the rankings cards, the
   Financials summary and the Waiting on payment drawer. Lists, invoices and anything
   a customer sees keep two decimals.
 * Improved: one date format everywhere. Every date the app shows follows the site’s
   Settings > General date and time format instead of three different built-in styles.
 * Improved: the dark theme covers the classic layout as well as the app shell, 
   and the app area on a classic page sits in its own panel so the theme does not
   bleed into the rest of the site.
 * Improved: an expired quote or invoice link counts its privacy window from the
   last time the document was sent, not from the day it was created, so “send it
   again” makes the link work again. The expired page says so.
 * Improved: the year report splits “Labor, employees” from “Contract labor” and
   adds a “tax collected, by rate” table on a cash basis, next to the accrual “Tax
   Billed” tile, with a note saying which is which.
 * Improved: the browser tab is titled after the screen (“Customer History #10, 
   Acme Painting”) instead of the page name, on every layout.
 * Improved: a painter adding a receipt sees the amount of their own earlier receipts
   on the job and not a colleague’s.
 * Improved: on an iPhone the install hint says where Add to Home Screen lives, 
   and going offline no longer stacks a second banner on top of the first.
 * Fixed: the job-start reminder read “begins tomorrow, the 30th at .” when the 
   job had no start time.
 * Fixed: a stray table cell on the vehicle settings page.
 * Fixed: the data export now includes a painters CSV, and the quote and invoice
   files no longer carry the customers’ public link tokens.
 * Fixed: two upgrade steps read a column’s type through information_schema, which
   answers nothing on some MySQL 8 hosts, so the step was skipped there without 
   a word: the photo attachment column could stay NOT NULL (every AI render save
   would then fail), and this version’s quote-cents widening would not have run.
   Both now read the type with SHOW COLUMNS, the same way the rest of the upgrader
   does.

#### 1.2.063

 * Fixed: on a site that installed PaintClarity fresh from 1.2.059 on, business 
   expenses and vehicle trips were reported as saved and were not. Two of the plugin’s
   tables were never created because a note inside their definition contained a 
   semicolon. The tables are created on upgrade, and a save that fails now says 
   so instead of showing a green notice.
 * Fixed: an invoice raised for the remaining balance was shown to the customer 
   with the job’s earlier payments subtracted a second time, so a $2,493 invoice
   after a $1,000 deposit read “Balance Due $1,493.00” and the online payment charged
   that. An invoice now remembers what had been paid when it was raised, and only
   money received after that reduces it. A second invoice on a job keeps its own
   amount after the first one is paid.
 * Fixed: editing a job and saving without touching the tax box could quietly move
   it to today’s default rate when the rate it was stamped with had been changed
   or retired, which restated a quote that was already out. A stamped job keeps 
   its rate unless you pick a different one; the form now shows a rate that is no
   longer offered and says so.
 * Fixed: a painter given “view financials” could open the Business page, the Checkup,
   the Expenses page, the year-end reports and any job’s profit coversheet, including
   the hourly rates of the whole crew. That permission now covers the painter’s 
   own jobs only; the office pages and reports are for staff.
 * Fixed: a check-in or check-out saved on the phone while out of signal could be
   dropped without a word if the app had been open more than a day. Saved punches
   are now kept until they send, the app fetches a fresh key before sending, and
   it tells the painter when something is still waiting.
 * Fixed: when a customer signed a quote and the online deposit could not start,
   they were shown a technical error and the same form again while their signature
   and any add-on they ticked were already recorded. The acceptance is now completed
   the same way an offline acceptance is, the customer is thanked and told you will
   arrange the deposit, and your email says what went wrong on the Stripe side.
 * Fixed: the itemized quote a customer signs listed an accepted add-on twice, once
   at its price and once at your internal cost. The cost line stays in your own 
   costing and never prints for the customer.
 * Invoices now state the tax included, the rate, and the amount before tax, matching
   the quote to the cent.
 * The public quote says how the deposit is paid when it is not collected online,
   and the deposit percentage prints as the …

## Meta

 *  Versione **1.2.078**
 *  Ultimo aggiornamento **2 giorni fa**
 *  Installazioni attive **Meno di 10**
 *  Versione WordPress ** 6.2 o superiore **
 *  Testato fino alla versione **7.1.3**
 *  Versione PHP ** 7.4 o superiore **
 *  Lingua
 * [English (US)](https://wordpress.org/plugins/paintops/)
 * Tag
 * [contractor](https://it.wordpress.org/plugins/tags/contractor/)[estimates](https://it.wordpress.org/plugins/tags/estimates/)
   [invoicing](https://it.wordpress.org/plugins/tags/invoicing/)[painting](https://it.wordpress.org/plugins/tags/painting/)
   [scheduling](https://it.wordpress.org/plugins/tags/scheduling/)
 *  [Visualizzazione avanzata](https://it.wordpress.org/plugins/paintops/advanced/)

## Valutazioni

Non sono state ancora inviate recensioni.

[La tua recensione](https://wordpress.org/support/plugin/paintops/reviews/#new-post)

[Vedi tutte le recensioni](https://wordpress.org/support/plugin/paintops/reviews/)

## Collaboratori

 *   [ paintops ](https://profiles.wordpress.org/paintops/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

## Supporto

Hai qualcosa da dire? Ti serve aiuto?

 [Chiedi nel forum di supporto](https://wordpress.org/support/plugin/paintops/)