{"id":365843,"date":"2026-10-30T21:00:33","date_gmt":"2026-10-30T21:00:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tssg-crm\/"},"modified":"2026-10-30T21:00:12","modified_gmt":"2026-10-30T21:00:12","slug":"the-solo-software-group-works","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/the-solo-software-group-works\/","author":13533574,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.4","requires":"6.4","requires_php":"8.3","requires_plugins":null,"header_name":"The Solo Software Group Works","header_author":"The Solo Software Group","header_description":"A CRM for freelancers, contractors, and small businesses. Clients, quotes, invoices, and jobs on your own site.","assets_banners_color":"3c424c","last_updated":"2026-10-30 21:00:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/thesolosoftwaregroup.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":152,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"Leifingson","date":"2026-10-30 21:00:12","revision":3776020}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3776013,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3776013,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3776013,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3776013,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3776013,"resolution":"1","location":"assets","locale":"","width":1080,"height":2081},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3776013,"resolution":"2","location":"assets","locale":"","width":1080,"height":2084},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3776013,"resolution":"3","location":"assets","locale":"","width":1080,"height":2081},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3776013,"resolution":"4","location":"assets","locale":"","width":1080,"height":2316}},"screenshots":{"1":"The client list: every client, residential and business, with\nstatus and search in one place.","2":"The client record, with contacts, addresses, files, and\nactivity in one place.","3":"A quote as the client sees it on the public link, ready to\nsign.","4":"An invoice as the client sees it, with the pay button that\nopens Stripe Checkout."}},"plugin_section":[],"plugin_tags":[275574,1150,51828,11914,26218],"plugin_category":[58],"plugin_contributors":[289849],"plugin_business_model":[],"class_list":["post-365843","plugin","type-plugin","status-publish","hentry","plugin_tags-contractors","plugin_tags-crm","plugin_tags-estimates","plugin_tags-freelancers","plugin_tags-invoicing","plugin_category-user-management","plugin_contributors-leifingson","plugin_committers-leifingson"],"banners":{"banner":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/banner-772x250.png?rev=3776013","banner_2x":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/banner-1544x500.png?rev=3776013","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/icon-128x128.png?rev=3776013","icon_2x":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/icon-256x256.png?rev=3776013","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/screenshot-1.jpg?rev=3776013","caption":"The client list: every client, residential and business, with\nstatus and search in one place."},{"src":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/screenshot-2.jpg?rev=3776013","caption":"The client record, with contacts, addresses, files, and\nactivity in one place."},{"src":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/screenshot-3.jpg?rev=3776013","caption":"A quote as the client sees it on the public link, ready to\nsign."},{"src":"https:\/\/ps.w.org\/the-solo-software-group-works\/assets\/screenshot-4.jpg?rev=3776013","caption":"An invoice as the client sees it, with the pay button that\nopens Stripe Checkout."}],"raw_content":"<!--section=description-->\n<p>Works, from The Solo Software Group, is a CRM that runs entirely on\nyour own WordPress install. Your client records live in your\ndatabase on your host. Nothing is uploaded to us, there is no\naccount to create, and no usage data is sent anywhere.<\/p>\n\n<p>It is built for the person who runs a small service business and\ndoes their own paperwork: the client calls, you send a quote, they\nsign it on their phone, you do the work, you send the invoice, they\npay it by card, and the whole trail stays in one place.<\/p>\n\n<p><strong>Clients<\/strong><\/p>\n\n<ul>\n<li>Residential and business clients, each with contacts, addresses,\nfiles, and a full activity history<\/li>\n<li>Company relationships: which contact works for which business<\/li>\n<li>Import from CSV, XLSX, ODS, or vCard, and export back out<\/li>\n<\/ul>\n\n<p><strong>Quotes and estimates<\/strong><\/p>\n\n<ul>\n<li>Line items, taxes, discounts, deposits, optional items, and terms<\/li>\n<li>Custom proposals: free-form documents beyond quote and estimate<\/li>\n<li>A public link the client opens on any device<\/li>\n<li>E-signature on the page, or signed in person on your own device<\/li>\n<li>Change orders against an accepted quote, with a redline showing\nwhat moved<\/li>\n<li>Presets: save any quote, job, or invoice and apply it to the next\none in one tap<\/li>\n<\/ul>\n\n<p><strong>Invoices<\/strong><\/p>\n\n<ul>\n<li>One-off invoices, created from a quote or from scratch<\/li>\n<li>Card payment through Stripe Checkout on the client's link<\/li>\n<li>Receipts, partial payments, adjustments, and refunds<\/li>\n<li>Receipt and refund records the client can open any time<\/li>\n<\/ul>\n\n<p><strong>Jobs and tasks<\/strong><\/p>\n\n<ul>\n<li>Projects with tasks, cost tracking, files, and notes<\/li>\n<li>Meetings proposed to the client, accepted or rescheduled on their\nlink, with calendar files<\/li>\n<\/ul>\n\n<p><strong>Calendar<\/strong><\/p>\n\n<ul>\n<li>Your meetings, project dates, and task due dates in one calendar,\nas an agenda, a day, a week, or a month<\/li>\n<li>Today and the week ahead on the dashboard<\/li>\n<li>A private feed you can subscribe to in Google, Apple, or Outlook\ncalendar, and an .ics download<\/li>\n<\/ul>\n\n<p><strong>Notifications<\/strong><\/p>\n\n<ul>\n<li>Email templates for every step: proposal sent, viewed, accepted,\ninvoice sent, paid, receipt, meeting booked, and more<\/li>\n<li>Merge tags, your own wording, your own sign-off<\/li>\n<li>A queue you can see, with a log of everything that went out<\/li>\n<\/ul>\n\n<p><strong>Reminders and follow-ups<\/strong><\/p>\n\n<ul>\n<li>Proposal expiry reminders and follow-ups<\/li>\n<li>Project and task reminders<\/li>\n<li>Overdue invoice reminders and late fees<\/li>\n<li>All on your site's own schedule; nothing is sent to an outside\nservice<\/li>\n<\/ul>\n\n<p><strong>Everything else<\/strong><\/p>\n\n<ul>\n<li>A dashboard that opens every module, with a setup checklist that\ntracks what is left to configure<\/li>\n<li>A setup wizard; company name is the only required field<\/li>\n<li>Activity log, message log, and an append-only consent ledger<\/li>\n<li>Branded sign-in at \/tssg on your own site<\/li>\n<\/ul>\n\n<h4>The Solo Software Group Works Pro<\/h4>\n\n<p>The Solo Software Group Works Pro is a separate plugin, sold from\nthesolosoftwaregroup.com. It adds recurring invoices, credit notes,\ntext messaging through your own Twilio account, campaigns and promo\ncodes, surveys and testimonials, recurring services with visit\nschedules, service plans, bulk sending, team seats, and an\nassistant.<\/p>\n\n<p>Both editions share the same database tables, so upgrading keeps\nevery client, quote, invoice, and file you already have: upload the\nPro plugin and activate it, and this plugin steps aside on its own\n(it deactivates itself, never the other one). Nothing\nin this free plugin is locked, trial-limited, or waiting on a\npurchase; a card on the dashboard and a link on the Plugins screen\npoint to the paid plugin.<\/p>\n\n<h3>Third-Party Services<\/h3>\n\n<p>This plugin connects to one outside service, and only after you\nconfigure it. Until then it contacts nothing, apart from the one\nreachability check described below.<\/p>\n\n<p><strong>Stripe<\/strong> processes card payments through Stripe Checkout. You\nsupply your own Stripe account credentials. When a client pays,\nthe invoice amount, currency, and reference are sent to Stripe,\nand the client completes payment on a page hosted by Stripe. When\nthey return, the plugin asks Stripe whether that checkout was paid\nand records the answer; a Stripe webhook can deliver the same\nconfirmation if you set one up. No card details ever pass through\nthis plugin or your server. Your Stripe account is your own\nrelationship with them.\nService: https:\/\/stripe.com\nTerms: https:\/\/stripe.com\/legal\/ssa\nPrivacy: https:\/\/stripe.com\/privacy<\/p>\n\n<p>The setup wizard's environment check makes one request to\napi.stripe.com to confirm your server can reach the internet over\nHTTPS. It sends no data.<\/p>\n\n<h4>Fonts<\/h4>\n\n<p>The plugin's typefaces (Outfit and Cormorant Garamond) are bundled\nwith the plugin under the SIL Open Font License. Nothing is loaded\nfrom a font service.<\/p>\n\n<h4>Bundled libraries and data<\/h4>\n\n<ul>\n<li>Cropper.js 2.2.0 (image cropping), MIT License,\nhttps:\/\/github.com\/fengyuanchen\/cropperjs<\/li>\n<li>illuminate\/view, illuminate\/container and illuminate\/events (the\nBlade template engine), MIT License, with the packages they\ndepend on, all MIT License: illuminate\/bus, collections,\nconditionable, contracts, filesystem, macroable, pipeline,\nreflection and support; symfony\/clock, finder, translation,\ntranslation-contracts, deprecation-contracts, polyfill-mbstring\nand polyfill-php83 through polyfill-php86; psr\/clock, container\nand simple-cache; doctrine\/inflector; voku\/portable-ascii;\ncarbonphp\/carbon-doctrine-types<\/li>\n<li>openspout\/openspout (spreadsheet import and export), MIT License;\none component under the Apache License 2.0, whose licence text\nships with it<\/li>\n<li>nesbot\/carbon (dates), MIT License<\/li>\n<li>Outfit and Cormorant Garamond typefaces, SIL Open Font License<\/li>\n<li>The US ZIP code table, from SimpleMaps US Zips, CC BY 4.0,\nhttps:\/\/creativecommons.org\/licenses\/by\/4.0\/<\/li>\n<\/ul>\n\n<p>Each ships with its licence text, and the unminified source sits\nnext to any minified file.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Client records stay in your WordPress database. Public links carry\nan unguessable token and are marked noindex. A personal calendar\nfeed is off until you turn it on in My Profile; its address is a\nprivate, unguessable link, and its events carry titles only unless\nyou switch on client names and addresses. Regenerate or turn off the\nfeed and the old address stops working. The plugin sends nothing to\nThe Solo Software Group: no telemetry, no usage statistics, and no\nerror reports.<\/p>\n\n<p>Terms of Service: https:\/\/thesolosoftwaregroup.com\/terms-of-service\/\nPrivacy Policy: https:\/\/thesolosoftwaregroup.com\/privacy-policy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through Plugins &gt; Add New Plugin, search for \"The Solo\nSoftware Group Works\", and click Install Now. Or upload the zip,\nor copy the plugin folder into \/wp-content\/plugins\/.<\/li>\n<li>Activate it on the Plugins screen. Activation creates the\nplugin's own database tables and seeds its stock notification\ntemplates.<\/li>\n<li>The first admin page load opens the setup wizard. Company name\nis the only required field, and it starts as your site title;\neverything else can be skipped and changed later under The Solo\nSoftware Group Works &gt; Settings.<\/li>\n<li>Optional: add Stripe keys under Settings &gt; Integrations to take\ncard payments on invoices.<\/li>\n<\/ol>\n\n<p>WordPress 6.4 or newer and PHP 8.3 or newer are required.\nPermalinks must not be set to Plain: the public proposal, invoice,\nand meeting links are rewrite rules.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20my%20client%20data%20leave%20my%20server%3F\"><h3>Does my client data leave my server?<\/h3><\/dt>\n<dd><p>Not unless you set up card payments. Then the invoice amount,\ncurrency, and reference go to Stripe when a client pays.\nA calendar feed you turn on sends the schedule your calendar shows\nyou to the calendar app you subscribe it in.\nEverything else stays in your own database.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20stripe%20account%3F\"><h3>Do I need a Stripe account?<\/h3><\/dt>\n<dd><p>Only to take card payments on invoices. Without one, invoices still\nsend and you record payments by hand.<\/p><\/dd>\n<dt id=\"can%20clients%20sign%20a%20quote%20on%20their%20phone%3F\"><h3>Can clients sign a quote on their phone?<\/h3><\/dt>\n<dd><p>Yes. The public link carries a signature field: the client types\ntheir name to sign, and the signature, the time, and the address\nit came from are stored with the quote.<\/p><\/dd>\n<dt id=\"can%20i%20text%20clients%3F\"><h3>Can I text clients?<\/h3><\/dt>\n<dd><p>Text messaging is a feature of The Solo Software Group Works Pro.\nThe free plugin sends email when you act (send a quote, send an\ninvoice, book a meeting), and it also sends the follow-up, expiry\nand overdue reminders and the project and task reminders you\nconfigure, on your site's own schedule.<\/p><\/dd>\n<dt id=\"will%20i%20lose%20anything%20if%20i%20upgrade%20to%20the%20solo%20software%20group%20works%20pro%3F\"><h3>Will I lose anything if I upgrade to The Solo Software Group Works Pro?<\/h3><\/dt>\n<dd><p>No. Pro is a separate plugin that uses the same tables. Download\nthe zip from thesolosoftwaregroup.com\/download\/, upload it under\nPlugins &gt; Add New Plugin and activate it; this plugin sees\nPro is active and deactivates itself, and every record is where you\nleft it. A notice then points you to the license box. Deleting the\nretired free plugin afterwards removes nothing while Pro is active.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%3F\"><h3>What happens if I uninstall?<\/h3><\/dt>\n<dd><p>Nothing is deleted by default. Deleting the plugin from the Plugins\nscreen leaves your tables, settings, and uploaded files in place,\nso a reinstall picks up where it left off. Settings &gt; System &gt; Data\nhas a checkbox to delete everything on uninstall if that is what\nyou want.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>Ask in this plugin's support forum on WordPress.org. The plugin has\nno built-in support form and sends nothing to its maker.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Each site gets its own tables and settings. Uninstall cleans up per\nsite when the delete option is on.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Works is now a suite of apps, and the CRM is its first app. The\nbrand tile in the header opens an app grid; with one app installed\nthe grid has one tile, and every page opens where it always did.<\/li>\n<li>Role names: CRM User, CRM Manager and CRM Admin are now Works User,\nWorks Manager and Works Admin. Servicer is unchanged. What each\nrole may do does not change.<\/li>\n<li>Each person's access to an app is set on the Team tab; everyone who\nhad access to the CRM keeps it.<\/li>\n<li>Under the hood the CRM's code moved into its own namespace, and\nstored references to it are rewritten once on update. No table\nchanges; your data is untouched.<\/li>\n<\/ul>\n\n<h4>1.1.11<\/h4>\n\n<ul>\n<li>Payment notices from Stripe are checked field by field before a\npayment or refund is recorded.<\/li>\n<li>Refunds made in the Stripe dashboard are recorded on every Stripe\nAPI version.<\/li>\n<li>The Back link on an activity entry only returns to a page of this\nplugin.<\/li>\n<li>The plugin no longer ships an unused translation template; your\nlanguage comes from WordPress.org's language packs.<\/li>\n<li>Housekeeping for the WordPress.org review: the security checks are\nwritten in the form its scanner reads, and the edition guard asks\nWordPress which plugins are active. Nothing changes in use.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>The setup wizard's environment checks and the dashboard checklist\nsay when the server's PHP is missing the October 2026 security\nfixes, with the release to ask your host for. Advisory only; the\nplugin keeps running.<\/li>\n<li>The Pro page points at the download page for the Pro zip.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>The setup wizard no longer places your stored Stripe secret key and\nwebhook secret in the page; it shows the masked form the Settings\ntabs use. Otherwise keeps this edition's version in step with Pro.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Keeps this edition's version in step with Pro; nothing in the free\nedition changes.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>After each update, the dashboard shows what's new, once for each\nperson, until they dismiss it.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Groundwork so a later switch to the Pro edition keeps every record\nin place; the Pro page now lists AI app connections.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>A message sent \"now\" goes out on the next page load on every\nsite; on sites ahead of UTC it could wait for the next scheduled\nrun.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>\"Last saved\" in a record's header counts from your site's time\nzone, rather than reading hours off right after a save.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Going Back to the Calendar from a visit or a log now shows what\nyou changed there, instead of the calendar as you left it.<\/li>\n<li>Unfinished drafts are kept for the full time set in Settings,\nrather than a few hours less depending on your time zone.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Calendar items are raised cards with a soft shadow, and an empty\nday lies flat beside them.<\/li>\n<li>An item booked over another one for the same person shows a grey\n\"Overlaps\" tag instead of a red outline.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>A Week view on the Calendar: the seven days side by side on a\ncomputer, with multi-day projects as bars across the top; on a\nphone, the week as a row of days with the picked day's list below.<\/li>\n<li>The Calendar sits in a panel like the other screens, its dates are\nin the same type as the rest of the app, and an empty day looks\nlike a busy one: the same heading, then a \"Nothing scheduled\" row.<\/li>\n<li>The \"+\" on a day is the gold add button, always at the end of the\nday's heading.<\/li>\n<li>Rounded buttons and links keep their shape when tapped on a phone,\nand the month no longer leaves the last-tapped day highlighted.<\/li>\n<li>Clients are named the same way everywhere on the calendar, as the\nclient list names them.<\/li>\n<li>Calendar items are plain cards with a coloured dot for their kind,\nand an empty day's card matches them.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>A calendar. The dashboard opens on today's schedule, and the new\nCalendar page shows your tasks, projects and meetings by agenda,\nday or month. Tap an item to see it and open its record.<\/li>\n<li>A personal calendar feed in My Profile adds your schedule to\nGoogle, Outlook or Apple Calendar. It is off until you turn it on,\nshows titles only unless you include client names and addresses,\nand stops working when you regenerate or turn it off. You can also\ndownload it once as an .ics file.<\/li>\n<li>Meetings remember who sent them, and a meeting with no time is an\nall-day event in calendar files. Accepted meetings now stay as\nhistory instead of being moved to the trash once their day passes.<\/li>\n<li>Fixed: a task with only a title disappeared from its job.<\/li>\n<li>Fixed: restoring a trashed record brings back its scheduled\nreminders.<\/li>\n<li>Fixed: a project that starts on its start date is started, and\nnoted in its activity, once instead of twice.<\/li>\n<li>Fixed: a name with an ampersand, such as \"Pat &amp; Lee\", showed a\nstray \"amp;\" after the \"&amp;\" on the calendar, lists and messages,\nand in the email sender name, and a site title like \"Smith &amp; Sons\"\nreached the setup wizard's company name the same way. Names now\nshow as typed.<\/li>\n<li>Pale grey hints, captions, labels and counts, and amber warnings,\nare now dark enough to read comfortably (WCAG AA). Gold badge\ntext, the outlines of checkboxes, and the edges of text boxes,\nsearch boxes and dropdowns (on the pages your clients open too)\nare a shade darker for the same reason; other borders, icons and\nplaceholders keep their lighter look.<\/li>\n<li>Invoice, quote and job pages open faster with a large client list.<\/li>\n<li>The setup wizard, Settings and the invoice page no longer mention\nrecurring invoices, which this plugin does not include.<\/li>\n<li>Fixed: the email you get when a client declines a meeting showed\nthe reason's formatting as code. It now shows the reason, and a\ntest email shows a decline reason and notes as the real email\ndoes.<\/li>\n<li>Fixed: searching jobs, proposals and invoices by a team member's\nname now finds names with &amp;, &lt; or &gt; in them, such as\n\"B&amp;B Hauling\".<\/li>\n<li>Fixed: copying a client's address onto a job showed \"Done\"\ninstead of saying so.<\/li>\n<li>Fixed: on a phone, the file viewer's title and description ran\npast the edge of the screen and hid the edit pencil.<\/li>\n<li>Links you send clients (invoices, quotes, receipts, files, opt-in\nand unsubscribe pages) now open directly instead of passing\nthrough a redirect first; links already sent keep working.<\/li>\n<li>Private files are kept out of the WordPress media library and\nits REST endpoint.<\/li>\n<li>If an update cannot finish, Settings &gt; System and the setup\nchecklist say so, and it is retried a few minutes later.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>The plugin opens straight onto its setup wizard, inside WordPress's\nown toolbar and admin menu. The terms screen that stood in front of\nit is gone; the Terms and Privacy Policy stay linked under\nSettings &gt; System.<\/li>\n<li>Fixed: the setup wizard showed without its styles, and offered to\nturn on pretty permalinks when they were already on.<\/li>\n<li>Skip setup keeps your site title as the company name and names you\nas the owner, so a first quote can go out straight away.<\/li>\n<li>The Report a Bug button is gone; ask in the support forum instead.<\/li>\n<li>The sign-in page at \/tssg no longer links to The Solo Software\nGroup, and the dashboard no longer shows its logo.<\/li>\n<li>Settings, preset fields, and list filters for recurring invoices,\nservices, and service plans no longer appear, since this plugin\ndoes not include those features.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Translations come from WordPress.org language packs, which\nWordPress loads by itself; the plugin no longer loads its own\ntranslation files.<\/li>\n<li>Admin requests check their security token with WordPress's own\nnonce check wherever a value is read. Nothing changes in use.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Presets fill a new record's terms, tax rate, follow-up, and\nreminder even where the site defaults were already filled in, and\nundo puts those defaults back.<\/li>\n<li>Saving a record as a preset no longer captures the site's default\nterms or a zero tax rate, so applying it later keeps the record's\nown.<\/li>\n<li>The apply-preset list shows every preset instead of the first 20.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Fixed: a sent quote or proposal could stop accepting a signature\nafter its edit page was merely opened or a line's price field was\ntapped, because those saves marked it revised. Saves that change\nnothing no longer revise it.<\/li>\n<li>A proposal edited after sending now tells the client it is being\nupdated, instead of showing the document with nowhere to sign,\nand the change is recorded in its activity.<\/li>\n<li>Send now refuses a proposal whose expiry date has passed, with a\nnote to choose a new one first.<\/li>\n<li>Fixed: accepting a quote with a deposit due immediately, without\nStripe connected, showed a bare page; it now links to the deposit\ninvoice.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fixed: on a brand-new install, one database link between\nproposals and jobs was skipped. Updating adds it.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Every link and form that creates or changes a record now carries\nits own security token: the Add New menu, the pickers' Add New\nlinks, and the background requests on the client-facing pages.\nA page left open for more than a day asks for a reload instead\nof failing quietly.<\/li>\n<li>When the Pro edition is activated over this plugin, this plugin\ndeactivates itself and leaves a notice; it never touches the\nother one. Every record is kept.<\/li>\n<li>Scheduled maintenance (reminders, the message queue, the\nexternal cron endpoint) works within the host's own time limit\ninstead of asking for more.<\/li>\n<li>Exports, reports and attachments are written straight to the\ndownload; the email previews load their styling from a\nstylesheet.<\/li>\n<li>Fixed: filtering survey responses by status, score, source or\nquestion failed with an error; the import clean-up task had\nbeen matching nothing since the rename; a soft-deleted client's\nverification link still worked; the licence text of one bundled\ncomponent now ships with a .txt extension.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>The bundled libraries now ship under this plugin's own namespace,\nso another plugin or theme carrying a different version of the\nsame library can no longer change which copy this plugin runs.\nNothing about how the plugin works changed.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Renamed to The Solo Software Group Works; the paid edition is\nThe Solo Software Group Works Pro. Menus, the setup wizard, the\nsign-in page, and the Plugins screen use the new name. The CRM\nis the first module of Works; nothing about how it works\nchanged<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Changes from the WordPress.org plugin review: every request value\nis sanitized where it is read and every printed value is escaped\nwhere it is printed, every public form carries a nonce, and the\nclient-facing pages load their styles and scripts through\nWordPress<\/li>\n<li>Reminders, follow-ups, proposal expiry, overdue sequences and late\nfees are part of the free edition<\/li>\n<li>The free edition carries no locked pages or padlocks; one Pro page\ndescribes what The Solo Software Group Works Pro adds<\/li>\n<li>The crop tool for the profile photo and the company logo runs on\nCropper.js 2.2.0; the bundled Blade and OpenSpout libraries are\nupdated<\/li>\n<li>Requires WordPress 6.4 or newer<\/li>\n<li>Every request input is unslashed before it is sanitized<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>The plugin header no longer repeats the author's site as the\nAuthor URI, which the WordPress.org upload check refuses<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>The return from Stripe Checkout no longer trips host firewalls\nthat block a parameter named session_id<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Card payments are recorded the moment the client returns from\nStripe, with or without a webhook<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release on WordPress.org<\/li>\n<li>Presets and custom proposals are included<\/li>\n<li>The Solo Software Group Works Pro replaces this plugin on activation and keeps every\nrecord; one Pro page in the menu describes what it adds<\/li>\n<li>Typefaces are bundled with the plugin instead of loaded from a\nfont service<\/li>\n<li>Settings &gt; System has a Data section with an opt-in delete on\nuninstall<\/li>\n<\/ul>\n\n<h4>0.1.13<\/h4>\n\n<ul>\n<li>The About panel's Check for updates button no longer changes\nsize while it works, and the maker link sits on its own row,\npointing at the plain-language page about the plugin<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Settings &gt; System has an About panel showing the version you are\nrunning, a link to The Solo Software Group, and an Update button\nwhen a newer version is available<\/li>\n<li>Check for updates from that panel instead of waiting for the next\nscheduled check<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>The dashboard shows only the modules your role can open<\/li>\n<li>An unverified email address no longer hides a client's email\nnotifiers or drops them from a bulk send; both warn instead<\/li>\n<li>Converting a proposal to an invoice no longer copies the\nproposal's personal note through its preset<\/li>\n<li>The toolbar's WordPress menu handle is drawn from the standard\nWordPress icon font rather than a bundled copy of the logo<\/li>\n<\/ul>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Meetings can be cancelled<\/li>\n<li>The update runner clears compiled templates again<\/li>\n<li>Scheduled jobs start on their start date again<\/li>\n<li>The setup check reports the real PHP floor, 8.3<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>Schema version bumped so new tables install on update, not only\non a fresh activation<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Proposal type conversion between quote and contract<\/li>\n<li>Notification templates no longer send with nothing to report<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Tested against WordPress 7.1<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Plugin icon on the updates screen and in the version details\nmodal<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Requires PHP 8.3, matching the dependency tree the plugin has\nalways shipped<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Security pass: merge tag escaping, sandboxed log previews,\nexport tokens gated at mint, import ownership checks, and one\nsource for visitor IP<\/li>\n<li>Branded sign-in at \/tssg, carrying the site's own identity<\/li>\n<li>Header navigation, account menu, and list pills reworked<\/li>\n<li>WordPress account details stay off client-facing documents and\ninvites<\/li>\n<li>Invoices: a corrected refundable ceiling and a past due filter<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Append-only consent ledger<\/li>\n<li>Third-party service disclosure<\/li>\n<\/ul>","raw_excerpt":"A self-hosted CRM for freelancers and contractors. Clients, quotes with e-signature, invoices with card payment, and jobs, all on your own site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365843"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/leifingson"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365843"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365843"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365843"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365843"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365843"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}