{"id":345427,"date":"2026-07-28T21:31:18","date_gmt":"2026-07-28T21:31:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/phildesigns-clean-invoices\/"},"modified":"2026-10-04T14:54:06","modified_gmt":"2026-10-04T14:54:06","slug":"phildesigns-clean-invoices","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/phildesigns-clean-invoices\/","author":6264553,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.1.2","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"PhilDesigns Clean Invoices","header_author":"PhilDesigns","header_description":"Create, send, and track client invoices from your WordPress dashboard.","assets_banners_color":"6c6b77","last_updated":"2026-10-04 14:54:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/phil-designs\/clean-invoices","header_author_uri":"https:\/\/phildesigns.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":257,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.1":{"tag":"1.3.1","author":"PDidee","date":"2026-07-28 21:30:57","revision":3626463},"1.3.2":{"tag":"1.3.2","author":"PDidee","date":"2026-08-13 13:06:03","revision":3645413},"1.4.0":{"tag":"1.4.0","author":"PDidee","date":"2026-10-04 14:54:06","revision":3727534}},"upgrade_notice":{"1.4.0":"<p>Adds expense tracking, receipt uploads, a cash-basis estimated tax panel on the Reports page, and a downloadable CPA Tax Summary PDF.<\/p>","1.3.0":"<p>Internal identifier prefix changed from ci_\/CI_ to philclin_\/PHILCLIN_ per WordPress.org review; QR codes now generate locally. If you have existing invoices\/clients\/settings, back up before updating.<\/p>","1.2.0":"<p>Adds Hourly\/Flat Rate line item types, a live hours total in the invoice editor, and a Hours column in the invoice list.<\/p>","1.1.0":"<p>Adds the Time Tracker, admin bar quick-timer, and add-to-invoice workflow.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3626454,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3626454,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3626454,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.1","1.3.2","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3626454,"resolution":"1","location":"assets","locale":"","width":2150,"height":1574},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3626454,"resolution":"10","location":"assets","locale":"","width":2772,"height":456},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3626454,"resolution":"2","location":"assets","locale":"","width":2562,"height":1508},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3626454,"resolution":"3","location":"assets","locale":"","width":1751,"height":6221},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3626454,"resolution":"4","location":"assets","locale":"","width":2554,"height":842},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3626454,"resolution":"5","location":"assets","locale":"","width":2759,"height":3036},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3626454,"resolution":"6","location":"assets","locale":"","width":1686,"height":2096},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3626454,"resolution":"7","location":"assets","locale":"","width":882,"height":1156},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3626454,"resolution":"8","location":"assets","locale":"","width":961,"height":1202},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3626454,"resolution":"9","location":"assets","locale":"","width":1420,"height":636}},"screenshots":{"1":"Invoice list with status badges, PDF download, and quick-send actions.","2":"Invoice editor with line items, totals, and the Send &amp; Actions sidebar.","3":"Client address book.","4":"Settings page with company info, payment options, and email templates.","5":"Time Tracker with timer, log table, and add-to-invoice workflow.","6":"Sales and revenue report with monthly breakdown.","7":"Dashboard widget showing outstanding invoices.","8":"Recording a payment \u2014 deposits, installments, or full payment.","9":"Invoice preview."}},"plugin_section":[262246],"plugin_tags":[15149,1151,16236,1764,15154],"plugin_category":[45,50],"plugin_contributors":[272989],"plugin_business_model":[],"class_list":["post-345427","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-billing","plugin_tags-clients","plugin_tags-invoices","plugin_tags-pdf","plugin_tags-time-tracking","plugin_category-ecommerce","plugin_category-media","plugin_contributors-pdidee","plugin_committers-pdidee"],"banners":{"banner":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/banner-772x250.png?rev=3626454","banner_2x":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/banner-1544x500.png?rev=3626454","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/icon-256x256.png?rev=3626454","icon_2x":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/icon-256x256.png?rev=3626454","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-1.png?rev=3626454","caption":"Invoice list with status badges, PDF download, and quick-send actions."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-2.png?rev=3626454","caption":"Invoice editor with line items, totals, and the Send &amp; Actions sidebar."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-3.png?rev=3626454","caption":"Client address book."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-4.png?rev=3626454","caption":"Settings page with company info, payment options, and email templates."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-5.png?rev=3626454","caption":"Time Tracker with timer, log table, and add-to-invoice workflow."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-6.png?rev=3626454","caption":"Sales and revenue report with monthly breakdown."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-7.png?rev=3626454","caption":"Dashboard widget showing outstanding invoices."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-8.png?rev=3626454","caption":"Recording a payment \u2014 deposits, installments, or full payment."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-9.png?rev=3626454","caption":"Invoice preview."},{"src":"https:\/\/ps.w.org\/phildesigns-clean-invoices\/assets\/screenshot-10.png?rev=3626454","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>PhilDesigns Clean Invoices<\/strong> handles the full billing workflow from within your WordPress dashboard \u2014 build invoices with line items, generate PDFs, email clients, collect partial or deposit payments, track billable hours, log deductible business expenses, and estimate what you'll owe on 1099 income, without relying on any third-party invoice service.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Invoice creation with configurable prefix and auto-incrementing numbers (e.g. INV-0001)<\/li>\n<li>Line items with description, optional sub-detail, quantity, rate, and auto-calculated amounts<\/li>\n<li>Tax rate (per-invoice or global default), optional shipping, subtotal, and total<\/li>\n<li>Invoice statuses: Draft, Sent, Partial, Paid, Overdue \u2014 with colour-coded badges<\/li>\n<li>PDF generation, browser preview, and download<\/li>\n<li>Send invoice by email to client with PDF attached; test email sends only to you<\/li>\n<li>Customisable email templates for invoices and payment receipts with placeholder tokens<\/li>\n<li>BCC on all outgoing invoice emails<\/li>\n<li>Payment history per invoice \u2014 record deposits, installments, and payments individually; status updates automatically from Sent \u2192 Partial \u2192 Paid<\/li>\n<li>Send payment receipt to client when an invoice is paid<\/li>\n<li>Time tracker with start\/stop timer, persistent state, inline editing, and entry merging<\/li>\n<li>Admin bar quick-timer accessible from any page in the dashboard or front end<\/li>\n<li>Add tracked time directly to an invoice as a line item<\/li>\n<li>Client management \u2014 name, company, email, phone, and full address<\/li>\n<li>Expense tracking with vendor, amount, business-use %, Schedule C category references, and an optional receipt upload (PDF or image)<\/li>\n<li>CSV export of all invoices for a selected year<\/li>\n<li>Sales and revenue report with monthly breakdown, cash-received-by-month, and expenses by category<\/li>\n<li>Estimated tax liability panel \u2014 cash received minus deductible expenses, times your own flat rate<\/li>\n<li>Downloadable CPA Tax Summary PDF \u2014 income, expenses, and a full year-end ledger in one file<\/li>\n<li>Dashboard widget showing outstanding invoices and year-to-date revenue<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>clean-invoices<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Invoices \u2192 Settings<\/strong> and fill in your company details, logo, and email preferences.<\/li>\n<li>Go to <strong>Invoices \u2192 Clients<\/strong> and add your clients.<\/li>\n<li>Go to <strong>Invoices \u2192 Add New<\/strong> to create your first invoice \u2014 select a client, add line items, and save to auto-assign an invoice number.<\/li>\n<li>Use the <strong>Send &amp; Actions<\/strong> sidebar to preview the PDF, send the invoice, record a payment, or send a receipt.<\/li>\n<li>To track time, go to <strong>Invoices \u2192 Time Tracker<\/strong>, start the timer, then use <strong>Add to Invoice<\/strong> to append logged hours as a line item.<\/li>\n<li>To track expenses, go to <strong>Invoices \u2192 All Expenses \u2192 Add Expense<\/strong>, then check the estimated tax panel and download the CPA Tax Summary PDF from <strong>Invoices \u2192 Reports<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20any%20third-party%20services%3F\"><h3>Does this plugin require any third-party services?<\/h3><\/dt>\n<dd><p>PDF generation uses the FPDF library, which is bundled with the plugin. QR codes for Venmo\/Zelle payment options are generated locally as well. No external services are contacted.<\/p><\/dd>\n<dt id=\"will%20my%20data%20be%20deleted%20if%20i%20deactivate%20the%20plugin%3F\"><h3>Will my data be deleted if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>No \u2014 invoice, client, and expense data remains in your database when the plugin is deactivated. Uninstalling the plugin removes all plugin data, including expenses, uploaded receipt files, and settings.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20invoice%20layout%3F\"><h3>Can I customise the invoice layout?<\/h3><\/dt>\n<dd><p>Invoice content is configurable through Settings (company details, logo, payment options, thank-you message). The PDF layout is generated by FPDF.<\/p><\/dd>\n<dt id=\"are%20partial%20payments%20supported%3F\"><h3>Are partial payments supported?<\/h3><\/dt>\n<dd><p>Yes \u2014 you can record deposits, installments, and payments individually. The invoice status updates automatically: Sent \u2192 Partial \u2192 Paid as the balance is paid down.<\/p><\/dd>\n<dt id=\"what%20data%20is%20stored%20per%20invoice%3F\"><h3>What data is stored per invoice?<\/h3><\/dt>\n<dd><p>Invoice number, client, date, due date, line items, tax, shipping, total, status, payment history, and notes. Client data includes name, company, email, phone, and address.<\/p><\/dd>\n<dt id=\"what%20data%20do%20the%20expenses%20store%3F\"><h3>What data do the expenses store?<\/h3><\/dt>\n<dd><p>Each expense records a date paid, vendor, amount, category (with a Schedule C line reference), business-use percentage, an optional receipt\/reference number, an optional uploaded receipt file, and optional notes. The deductible amount (amount \u00d7 business-use %) is calculated on the fly and is never stored separately, so it always matches what's shown on the Reports page and in the CPA Tax Summary PDF.<\/p><\/dd>\n<dt id=\"are%20uploaded%20receipts%20publicly%20accessible%3F\"><h3>Are uploaded receipts publicly accessible?<\/h3><\/dt>\n<dd><p>No. Receipt files are stored outside the normal Media Library, in an uploads subfolder that is blocked from direct web access. Each receipt is reachable only through a link containing a long random token, similar to a file-sharing link. That link, not a WordPress login, is what grants access, which lets the CPA Tax Summary PDF work for an accountant who doesn't have an account on your site. Treat those links as sensitive: anyone who has the exact link (or a copy of the PDF) can view that one receipt. Removing a receipt, or trashing the expense it belongs to, deletes the stored file and invalidates its link. The receipt folder is protected with an <code>.htaccess<\/code> file, which servers that ignore <code>.htaccess<\/code> (such as Nginx) won't enforce \u2014 the random link token still applies there.<\/p><\/dd>\n<dt id=\"does%20this%20replace%20my%20accountant%3F\"><h3>Does this replace my accountant?<\/h3><\/dt>\n<dd><p>No. The estimated tax liability panel and the CPA Tax Summary PDF apply a single flat rate you set yourself to cash received minus deductible expenses \u2014 they don't account for tax brackets, credits, self-employment tax specifics, or other income. They're meant to make handing clean, organised records to your accountant easier, not to replace their advice.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added expense tracking: log business expenses with vendor, amount, category, and business-use percentage; categories map to Schedule C line references for your CPA.<\/li>\n<li>Added receipt uploads on expenses (PDF or image), stored in a protected folder outside the Media Library and opened through a private link.<\/li>\n<li>Reports page: added an estimated tax liability panel that subtracts deductible expenses from cash received (optional, toggle in Settings), plus Expenses by Category and Cash Received vs Expenses by Month.<\/li>\n<li>Reports page: the tax estimate uses cash actually received (payment date), not invoice date, so income lands in the year it was actually paid.<\/li>\n<li>Added a downloadable CPA Tax Summary PDF per year: income, expenses, cash received by month and by client, and a full expense ledger with links to receipts.<\/li>\n<li>Report year tabs now include any year that has an invoice, a payment, or an expense.<\/li>\n<li>Reports and the dashboard widget now share one calculation class so their numbers can't disagree.<\/li>\n<li>Fixed the internal version constant, which had drifted from the plugin header version.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Tested on WP version 7.1, no issues detected.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Renamed bundled third-party classes (<code>FPDF<\/code> \u2192 <code>PHILCLIN_FPDF<\/code>, <code>PhilClinQRCode<\/code> \u2192 <code>PHILCLIN_QRCode<\/code>) so they can't collide with another plugin's copy of the same library.<\/li>\n<li>Unrolled the settings sanitize-callback registration into one explicit <code>register_setting()<\/code> call per option.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Renamed all plugin identifiers (classes, functions, constants, post types, meta\/option keys, AJAX actions, script handles) to a distinct <code>philclin_<\/code> \/ <code>PHILCLIN_<\/code> prefix.<\/li>\n<li>QR codes for Venmo\/Zelle payment options are now generated locally instead of via a third-party API \u2014 no payment data leaves your site.<\/li>\n<li>Removed the FPDF remote-download fallback; the bundled PDF library is now used directly.<\/li>\n<li>Moved all inline <code>&lt;style&gt;<\/code> blocks to properly enqueued stylesheets.<\/li>\n<li>Settings fields now use type-specific sanitization (numbers, email, URL, checkbox) instead of one generic sanitizer.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added Hourly vs Flat Rate type toggle per line item \u2014 click the icon in the line items table to switch between billing modes.<\/li>\n<li>Flat Rate items display \"Flat Rate\" in the Qty\/Rate columns on the browser preview and generated PDF.<\/li>\n<li>Added Hours column to the invoice admin list showing total billable hours at a glance.<\/li>\n<li>Added Total Hours row in the Invoice Details panel on the edit screen; row is hidden automatically when no hourly items are present.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Time Tracker with start\/stop timer, persistent state, inline editing, and entry merging.<\/li>\n<li>Added admin bar quick-timer accessible from any page in the dashboard or front end.<\/li>\n<li>Added ability to add tracked time directly to an invoice as a line item.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Create, send, and track client invoices from your WordPress dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=345427"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pdidee"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345427"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345427"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345427"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345427"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345427"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}