{"id":375243,"date":"2026-11-10T15:24:01","date_gmt":"2026-11-10T15:24:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/feedback-pins-qa-client-feedback\/"},"modified":"2026-11-10T15:25:21","modified_gmt":"2026-11-10T15:25:21","slug":"pinora","status":"publish","type":"plugin","link":"https:\/\/ta-lk.wordpress.org\/plugins\/pinora\/","author":23573469,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Pinora \u2013 QA & Client Feedback","header_author":"AVANGARDISM","header_description":"Pin feedback right on your pages. Clients click any element, write a note, and the whole team sees it on a shared board, with screenshots, Slack notifications and a Markdown export. Free, no account, everything stays in your WordPress.","last_updated":"2026-11-10 15:25:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/avangardism-alex\/feedback-pins","header_author_uri":"https:\/\/avangardism.com\/?utm_source=pinora&utm_medium=plugin&utm_campaign=plugin-header","rating":0,"author_block_rating":0,"active_installs":0,"downloads":67,"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":"avangardism","date":"2026-11-10 15:25:21","revision":3794666}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3794663,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3794663,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3794663,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3794663,"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":3794663,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3794663,"resolution":"2","location":"assets","locale":"","width":1400,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3794663,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3794663,"resolution":"4","location":"assets","locale":"","width":1400,"height":1000}},"screenshots":{"1":"Pin a note on any element: the screenshot is taken while you type.","2":"The feedback board: every note of the team, in three columns.","3":"Notes on the page, with the side list and the note details.","4":"The settings page: invitation link, key, Slack."}},"plugin_section":[],"plugin_tags":[4317,253348,156887,108,7615],"plugin_category":[42],"plugin_contributors":[291834],"plugin_business_model":[],"class_list":["post-375243","plugin","type-plugin","status-publish","hentry","plugin_tags-annotation","plugin_tags-bug-report","plugin_tags-client-review","plugin_tags-feedback","plugin_tags-qa","plugin_category-contact-forms","plugin_contributors-avangardism","plugin_committers-avangardism"],"banners":{"banner":"https:\/\/ps.w.org\/pinora\/assets\/banner-772x250.png?rev=3794663","banner_2x":"https:\/\/ps.w.org\/pinora\/assets\/banner-1544x500.png?rev=3794663","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pinora\/assets\/icon-128x128.png?rev=3794663","icon_2x":"https:\/\/ps.w.org\/pinora\/assets\/icon-256x256.png?rev=3794663","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pinora\/assets\/screenshot-1.png?rev=3794663","caption":"Pin a note on any element: the screenshot is taken while you type."},{"src":"https:\/\/ps.w.org\/pinora\/assets\/screenshot-2.png?rev=3794663","caption":"The feedback board: every note of the team, in three columns."},{"src":"https:\/\/ps.w.org\/pinora\/assets\/screenshot-3.png?rev=3794663","caption":"Notes on the page, with the side list and the note details."},{"src":"https:\/\/ps.w.org\/pinora\/assets\/screenshot-4.png?rev=3794663","caption":"The settings page: invitation link, key, Slack."}],"raw_content":"<!--section=description-->\n<p><strong>Stop collecting website feedback in endless email threads.<\/strong> With Pinora, your clients click the element they want to talk about, type a note, and a numbered pin stays on the page. Everyone on the project sees everyone else's notes, live, on the page and on a shared board.<\/p>\n\n<p>Built by <a href=\"https:\/\/avangardism.com\/?utm_source=wordpress.org&amp;utm_medium=plugin&amp;utm_campaign=readme\">AVANGARDISM<\/a>, a web agency that uses it on its own client projects. Free, for good: no account, no premium version, no external service.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Send your client the invitation link from <strong>Tools &gt; Pinora<\/strong>.<\/li>\n<li>They type their first name once, then click <strong>+ Note<\/strong> and click any element of any page.<\/li>\n<li>A screenshot is taken, the element is framed, the note is saved with its severity.<\/li>\n<li>Your team sees the numbered pin on the page and the card on the board, within 15 seconds, without reloading.<\/li>\n<li>Move cards from <em>To do<\/em> to <em>In progress<\/em> to <em>Done<\/em>, answer, export.<\/li>\n<\/ol>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Pin notes on any element<\/strong>, on any page, with the page, the section and the screen size recorded automatically.<\/li>\n<li><strong>Automatic screenshots<\/strong> of what the reviewer was looking at, with the element framed and the click point marked.<\/li>\n<li><strong>Shared in real time<\/strong>: everyone who opened the link sees the others' notes, on the pages and on the board.<\/li>\n<li><strong>Feedback board<\/strong> in three columns with drag and drop, filters by page, person and severity, and answers.<\/li>\n<li><strong>\"View on the page\" links<\/strong> that scroll to the element, open the note and make the element blink.<\/li>\n<li><strong>Slack notifications<\/strong> with the screenshot and a direct link, sent by your own server.<\/li>\n<li><strong>Markdown and JSON export<\/strong>, grouped by page and section, ready to paste into a ticket or an AI assistant.<\/li>\n<li><strong>Four severities<\/strong>: blocker, major, minor, nice to have.<\/li>\n<li><strong>No account for your clients<\/strong>: a shared key in the link is enough.<\/li>\n<li><strong>Lightweight<\/strong>: visitors who never opened a review link only download a few hundred bytes.<\/li>\n<li><strong>Works behind page caches<\/strong>: review mode is decided in the browser, not on the server.<\/li>\n<li><strong>Accessible<\/strong>: usable with the keyboard alone (Tab to an element, Enter to pin it), screen reader announcements, WCAG AA contrast, reduced motion respected.<\/li>\n<li><strong>Translation ready<\/strong>, French included.<\/li>\n<\/ul>\n\n<h4>Your data stays yours<\/h4>\n\n<p>Notes are stored as a private post type in your own database, screenshots in your own <code>uploads<\/code> folder. Nothing is sent to AVANGARDISM, ever. The only outgoing call is the optional Slack webhook, which you configure yourself.<\/p>\n\n<h4>Need a website?<\/h4>\n\n<p>AVANGARDISM designs and builds websites, e-commerce stores and business software, with a user-first approach. <a href=\"https:\/\/avangardism.com\/contact?utm_source=wordpress.org&amp;utm_medium=plugin&amp;utm_campaign=readme\">Let's talk about your project<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can send notifications to <strong>Slack<\/strong>, only if you enter a Slack incoming webhook URL in <strong>Tools &gt; Pinora<\/strong> (or define <code>PINORA_SLACK_WEBHOOK<\/code>).<\/p>\n\n<ul>\n<li>What is sent: when a note is created, its text, author first name, page path, section name, screen width, severity, the public URL of its screenshot and links back to your site.<\/li>\n<li>Where: to the webhook URL you provided, on <code>hooks.slack.com<\/code>, directly from your server.<\/li>\n<li>When: each time a new note is created, and when you click \"Save and send a test\".<\/li>\n<li>Slack terms of service: https:\/\/slack.com\/terms-of-service \u2014 privacy policy: https:\/\/slack.com\/trust\/privacy\/privacy-policy<\/li>\n<\/ul>\n\n<p>No other external request is made. The screenshot library (html2canvas) is bundled with the plugin and served from your site.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Notes store the first name typed by the reviewer, the text of the note, the page path, the screen size and the browser user agent. Screenshots may show whatever was on the reviewer's screen within the page. They are saved in <code>wp-content\/uploads\/pinora\/<\/code> under random, unguessable names so that Slack can display them. Delete a note to delete its screenshot.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Screenshots are drawn with <a href=\"https:\/\/html2canvas.hertzen.com\">html2canvas<\/a> 1.4.1 by Niklas von Hertzen, MIT license. Non-minified source: https:\/\/github.com\/niklasvh\/html2canvas\/tree\/v1.4.1<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin from <strong>Plugins &gt; Add New<\/strong>, or upload the <code>pinora<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate it.<\/li>\n<li>Go to <strong>Tools &gt; Pinora<\/strong> and copy the invitation link.<\/li>\n<li>Send it to your reviewers. That's it.<\/li>\n<\/ol>\n\n<p>Logged-in administrators also get a <strong>Feedback<\/strong> menu in the toolbar to review the current page or open the board.<\/p>\n\n<h4>Optional constants<\/h4>\n\n<p>Set them in <code>wp-config.php<\/code> to keep secrets out of the database:<\/p>\n\n<pre><code>define( 'PINORA_KEY', 'your-own-key' );\ndefine( 'PINORA_SLACK_WEBHOOK', 'https:\/\/hooks.slack.com\/services\/\u2026' );\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20my%20clients%20need%20a%20wordpress%20account%3F\"><h3>Do my clients need a WordPress account?<\/h3><\/dt>\n<dd><p>No. The invitation link carries a shared key. Anyone who has it can read and write notes, nobody else can. You can generate a new key at any time, which disables the links sent before.<\/p><\/dd>\n<dt id=\"is%20the%20key%20visible%20in%20server%20logs%3F\"><h3>Is the key visible in server logs?<\/h3><\/dt>\n<dd><p>No. It travels in the URL fragment (<code>#pinora_key=\u2026<\/code>), which browsers never send to the server, and is removed from the address bar as soon as the page opens. Afterwards it is sent in an HTTP header.<\/p><\/dd>\n<dt id=\"where%20is%20the%20board%3F\"><h3>Where is the board?<\/h3><\/dt>\n<dd><p>At <code>\/feedback-board\/<\/code> on your site. If a real page already uses that address, the page wins: change the path with the <code>pinora_board_path<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20down%20my%20site%3F\"><h3>Does it slow down my site?<\/h3><\/dt>\n<dd><p>Regular visitors get a tiny inline loader and nothing else. The toolbar, its styles and the screenshot library are only downloaded by people who opened a review link.<\/p><\/dd>\n<dt id=\"some%20screenshots%20look%20slightly%20different%20from%20the%20page\"><h3>Some screenshots look slightly different from the page<\/h3><\/dt>\n<dd><p>Screenshots are drawn in the browser by html2canvas, which re-creates the page from its HTML and CSS. Some effects (CSS masks, certain background images, cross-origin images) can be simplified. The note is always located on the element itself, so the pin stays accurate.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%20and%20caching%20plugins%3F\"><h3>Does it work with page builders and caching plugins?<\/h3><\/dt>\n<dd><p>Yes. The toolbar sits on top of the page and does not depend on the theme or builder, and the review mode is decided in the browser, so full-page caches are fine.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20it%3F\"><h3>Can I customize it?<\/h3><\/dt>\n<dd><p>A few filters are available: <code>pinora_board_path<\/code>, <code>pinora_capability<\/code>, <code>pinora_sync_interval<\/code>, <code>pinora_notes_limit<\/code>, <code>pinora_note<\/code>, <code>pinora_slack_message<\/code>, and the <code>pinora_note_created<\/code> action.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Deleting it from the Plugins screen removes every note, every screenshot and every setting. Deactivating it keeps everything.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Your clients pin feedback right on the page. Your team sees it all, live, on one board. Screenshots and Slack included. Free, no account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=375243"}],"author":[{"embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/avangardism"}],"wp:attachment":[{"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375243"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375243"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375243"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375243"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375243"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ta-lk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}