{"id":340679,"date":"2026-07-19T14:14:18","date_gmt":"2026-07-19T14:14:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sitesignoff-client-feedback-visual-review-page-approval\/"},"modified":"2026-07-19T14:13:44","modified_gmt":"2026-07-19T14:13:44","slug":"clientpin","status":"publish","type":"plugin","link":"https:\/\/ta.wordpress.org\/plugins\/clientpin\/","author":23283094,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"ClientPin \u2013 Pin Client Feedback & Get Page Approval","header_author":"Upluggit","header_description":"Let clients pin visual feedback on the live site and approve pages \u2014 with review links, screenshots, feedback rounds, and an approval log.","assets_banners_color":"48406d","last_updated":"2026-07-19 14:13:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/upluggit.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"upluggit","date":"2026-07-19 14:13:44"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3613624,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3613624,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3613624,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3613624,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3613624,"resolution":"1","location":"assets","locale":"","width":2560,"height":1600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3613624,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3613624,"resolution":"3","location":"assets","locale":"","width":2560,"height":1600},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3613624,"resolution":"4","location":"assets","locale":"","width":2560,"height":1600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3613624,"resolution":"5","location":"assets","locale":"","width":2560,"height":1600},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3613624,"resolution":"6","location":"assets","locale":"","width":2560,"height":1600}},"screenshots":{"1":"Dashboard \u2014 project health tiles, active round, and client activity feed","2":"Client overlay \u2014 numbered feedback pins with comment thread, status, and replies, right on the live site","3":"Page approval \u2014 clients approve or request changes with name, note, and recorded timestamp","4":"Approvals log \u2014 every approval decision with approver identity, plus printable Approval Certificate","5":"Feedback board \u2014 drag-and-drop Kanban view with filters and CSV export","6":"Review Links \u2014 generate secure client links and manage active sessions"}},"plugin_section":[],"plugin_tags":[8196,272328,145645,63174,39469],"plugin_category":[],"plugin_contributors":[241778],"plugin_business_model":[],"class_list":["post-340679","plugin","type-plugin","status-publish","hentry","plugin_tags-approval","plugin_tags-client-approval","plugin_tags-client-feedback","plugin_tags-visual-feedback","plugin_tags-website-review","plugin_contributors-upluggit","plugin_committers-upluggit"],"banners":{"banner":"https:\/\/ps.w.org\/clientpin\/assets\/banner-772x250.png?rev=3613624","banner_2x":"https:\/\/ps.w.org\/clientpin\/assets\/banner-1544x500.png?rev=3613624","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/clientpin\/assets\/icon-128x128.png?rev=3613624","icon_2x":"https:\/\/ps.w.org\/clientpin\/assets\/icon-256x256.png?rev=3613624","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-1.png?rev=3613624","caption":"Dashboard \u2014 project health tiles, active round, and client activity feed"},{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-2.png?rev=3613624","caption":"Client overlay \u2014 numbered feedback pins with comment thread, status, and replies, right on the live site"},{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-3.png?rev=3613624","caption":"Page approval \u2014 clients approve or request changes with name, note, and recorded timestamp"},{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-4.png?rev=3613624","caption":"Approvals log \u2014 every approval decision with approver identity, plus printable Approval Certificate"},{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-5.png?rev=3613624","caption":"Feedback board \u2014 drag-and-drop Kanban view with filters and CSV export"},{"src":"https:\/\/ps.w.org\/clientpin\/assets\/screenshot-6.png?rev=3613624","caption":"Review Links \u2014 generate secure client links and manage active sessions"}],"raw_content":"<!--section=description-->\n<p><strong>ClientPin turns \"can you move that logo?\" emails into pinned, trackable, approvable feedback \u2014 directly on the live WordPress site.<\/strong><\/p>\n\n<p>Built for agencies and freelancers: send your client a secure review link (no account needed), they click anywhere on the page to leave a comment, and when they're happy they press <strong>Approve<\/strong> \u2014 creating a permanent approval record with name, timestamp, and IP. No more \"but I never approved this.\"<\/p>\n\n<p>Your data never leaves your server. No SaaS subscription, no per-seat fees, no proxy rendering that breaks your site.<\/p>\n\n<h3>Why ClientPin<\/h3>\n\n<ul>\n<li><strong>Page approval, recorded.<\/strong> Clients approve pages (or request changes) with one click. Every decision is logged with approver identity, note, timestamp, and IP \u2014 and you can print a branded <strong>Approval Certificate<\/strong> per feedback round.<\/li>\n<li><strong>Figma-style visual comments.<\/strong> Clients click any element to drop a numbered pin, write feedback, and attach inspiration images. Pins are anchored to DOM elements and reposition responsively.<\/li>\n<li><strong>Automatic viewport screenshots.<\/strong> Every comment captures what the client actually saw, stored in your Media Library.<\/li>\n<li><strong>No client accounts.<\/strong> Secure, expiring, revocable review links bypass the WordPress login.<\/li>\n<li><strong>Team workflow.<\/strong> Assign comments to teammates, track Todo \/ In Progress \/ Done, reply in threads, and work in versioned feedback rounds.<\/li>\n<li><strong>Email notifications.<\/strong> Assignment, status, reply, and approval alerts via wp_mail() \u2014 fully toggleable, with extra recipient support.<\/li>\n<li><strong>Admin dashboard.<\/strong> Project health tiles, activity feed, feedback manager with filters and bulk actions, approval log, and review-link manager.<\/li>\n<\/ul>\n\n<h3>Perfect for<\/h3>\n\n<ul>\n<li>Agencies collecting feedback on staging sites<\/li>\n<li>Freelancers who need documented client approval before invoicing<\/li>\n<li>Teams tired of feedback scattered across email, Slack, and calls<\/li>\n<\/ul>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>This plugin bundles <a href=\"https:\/\/html2canvas.hertzen.com\/\">html2canvas<\/a> v1.4.1 (MIT license) to capture the viewport screenshot attached to each comment. The screenshot is rendered entirely in the visitor's browser; no page content is sent anywhere except to your own WordPress site. Both the minified build (<code>assets\/js\/vendor\/html2canvas.min.js<\/code>) and the unminified source (<code>assets\/js\/vendor\/html2canvas.js<\/code>) are included.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin does not contact any external service. It sends no data anywhere: no licensing checks, no update pings, no analytics, no usage tracking. All feedback, screenshots, and approval records are created and stored on your own server.<\/p>\n\n<p>The one exception is entirely under your control and off by default: if you enter a Slack Incoming Webhook URL or a generic webhook URL (Zapier, Make, or your own endpoint) in ClientPin \u2192 Settings, feedback events are sent to the endpoint you chose. Nothing is transmitted unless you enter a URL yourself. What is sent: the event type, comment or approval text, the reporter\/approver name, and the page URL. Because you choose the destination, refer to the terms of whichever service you point the webhook at \u2014 for example <a href=\"https:\/\/slack.com\/trust\/privacy\/privacy-policy\">Slack's Privacy Policy<\/a>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>ClientPin stores the following data in custom database tables on your own server:<\/p>\n\n<ul>\n<li><strong>Feedback comments:<\/strong> the comment text, the page URL, the position of the pin, an optional reporter email address, and screenshots the reviewer captured or uploaded (stored in your Media Library).<\/li>\n<li><strong>Approvals:<\/strong> the approver's name, an optional email address and note, the page URL, a UTC timestamp, and \u2014 as the audit trail that gives an approval its legal weight \u2014 the reviewer's <strong>IP address and browser user agent<\/strong>.<\/li>\n<li><strong>Review links:<\/strong> the access token, an optional description, and the expiry date.<\/li>\n<\/ul>\n\n<p>Because approval records deliberately capture IP addresses, you should tell your clients that their approval is being logged. All of this data is deleted when you uninstall the plugin, unless you enable \"Keep data on uninstall\" in ClientPin \u2192 Settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>clientpin<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via Plugins \u2192 Add New.<\/li>\n<li>Activate the plugin through the 'Plugins' menu.<\/li>\n<li>Open <strong>ClientPin \u2192 Review Links<\/strong>, generate a link, and send it to your client.<\/li>\n<li>Your client comments and approves pages directly on the site \u2014 you manage everything from <strong>ClientPin \u2192 Dashboard<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20clients%20need%20a%20wordpress%20account%3F\"><h3>Do clients need a WordPress account?<\/h3><\/dt>\n<dd><p>No. Review links use cryptographically secure tokens that bypass the login screen. Links can expire automatically and can be revoked at any time.<\/p><\/dd>\n<dt id=\"what%20exactly%20is%20recorded%20when%20a%20client%20approves%20a%20page%3F\"><h3>What exactly is recorded when a client approves a page?<\/h3><\/dt>\n<dd><p>The approver's name, optional email, optional note, the page URL, a UTC timestamp, IP address, and browser user agent. You can print an Approval Certificate summarizing all approvals in a round.<\/p><\/dd>\n<dt id=\"can%20clients%20change%20or%20delete%20my%20team%27s%20task%20assignments%3F\"><h3>Can clients change or delete my team's task assignments?<\/h3><\/dt>\n<dd><p>No. Guests with review links can comment, reply, set comment status, and approve pages. Assigning tasks, managing rounds, and viewing your team's user list require a logged-in staff account.<\/p><\/dd>\n<dt id=\"where%20are%20screenshots%20stored%3F\"><h3>Where are screenshots stored?<\/h3><\/dt>\n<dd><p>Uploaded screenshots are validated, re-checked as real images, and stored in your WordPress uploads folder via the Media Library.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%3F\"><h3>What happens to my data if I uninstall?<\/h3><\/dt>\n<dd><p>By default all plugin data is removed. Enable \"Keep data on uninstall\" in ClientPin \u2192 Settings to preserve feedback and approval records.<\/p><\/dd>\n<dt id=\"do%20the%20emails%20work%20with%20smtp%20plugins%3F\"><h3>Do the emails work with SMTP plugins?<\/h3><\/dt>\n<dd><p>Yes. All notifications are dispatched through wp_mail(), so any SMTP plugin applies automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Visual pin comments on the live site with automatic viewport screenshots and inspiration image attachments.<\/li>\n<li>Secure, expiring, revocable client review links \u2014 no client accounts needed.<\/li>\n<li>Page approval: clients approve pages or request changes, recorded with identity, timestamp, and IP.<\/li>\n<li>Feedback rounds with carry-over of unresolved comments and per-round progress tracking.<\/li>\n<li>Admin dashboard with project stats, activity feed, and onboarding checklist.<\/li>\n<li>Feedback manager with server-side filtering, pagination, bulk actions, and inline assignment.<\/li>\n<li>Team assignments, status tracking, threaded replies, and background email notifications.<\/li>\n<li>Mobile-friendly review overlay with welcome tour, element highlighting, and resolved-pin toggle.<\/li>\n<li>Printable Approval Certificates, Kanban board view, and CSV export of feedback and approvals.<\/li>\n<\/ul>","raw_excerpt":"Clients pin visual feedback on your live site and approve pages \u2014 review links, screenshots, feedback rounds, and a recorded approval log.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/340679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=340679"}],"author":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/upluggit"}],"wp:attachment":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=340679"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=340679"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=340679"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=340679"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=340679"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=340679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}