{"id":375649,"date":"2026-10-02T19:54:49","date_gmt":"2026-10-02T19:54:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kinetichub-frontend-doctor\/"},"modified":"2026-10-02T19:54:24","modified_gmt":"2026-10-02T19:54:24","slug":"kinetichub-frontend-doctor","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/kinetichub-frontend-doctor\/","author":23473886,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"KineticHub Frontend Doctor","header_author":"KineticHub","header_description":"Find what is breaking your WordPress frontend - and see the exact element involved. A browser-local diagnostic for administrators; nothing loads for visitors.","assets_banners_color":"3d4d70","last_updated":"2026-10-02 19:54:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/getkinetichub.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"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":"kinetichub","date":"2026-10-02 19:54:24","revision":3725420}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3725420,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3725420,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3725420,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3725420,"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":3725420,"resolution":"1","location":"assets","locale":"","width":1179,"height":535},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3725420,"resolution":"2","location":"assets","locale":"","width":1178,"height":570},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3725420,"resolution":"3","location":"assets","locale":"","width":1176,"height":521},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3725420,"resolution":"4","location":"assets","locale":"","width":1363,"height":571},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3725420,"resolution":"5","location":"assets","locale":"","width":1365,"height":582}},"screenshots":[]},"plugin_section":[],"plugin_tags":[94,2275,23519,4036,58854],"plugin_category":[59],"plugin_contributors":[264673],"plugin_business_model":[],"class_list":["post-375649","plugin","type-plugin","status-publish","hentry","plugin_tags-debug","plugin_tags-developer","plugin_tags-diagnostics","plugin_tags-layout","plugin_tags-overflow","plugin_category-utilities-and-tools","plugin_contributors-kinetichub","plugin_committers-kinetichub"],"banners":{"banner":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/banner-772x250.png?rev=3725420","banner_2x":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/banner-1544x500.png?rev=3725420","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/icon-128x128.png?rev=3725420","icon_2x":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/icon-256x256.png?rev=3725420","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/screenshot-1.png?rev=3725420","caption":""},{"src":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/screenshot-2.png?rev=3725420","caption":""},{"src":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/screenshot-3.png?rev=3725420","caption":""},{"src":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/screenshot-4.png?rev=3725420","caption":""},{"src":"https:\/\/ps.w.org\/kinetichub-frontend-doctor\/assets\/screenshot-5.png?rev=3725420","caption":""}],"raw_content":"<!--section=description-->\n<p>Something on the page scrolls sideways. A sticky header stops sticking. A button\nwill not take a click. Frontend Doctor looks at the page as your browser has\nactually laid it out, and shows you the element responsible.<\/p>\n\n<p>It runs entirely in your browser, on the page you are already looking at.\nNothing is uploaded, nothing is stored, and nothing is sent anywhere. There is\nno scan history, no dashboard of scores, and no database table - close the panel\nand the plugin has left no trace but the file it was installed from.<\/p>\n\n<p><strong>Five checks<\/strong><\/p>\n\n<ul>\n<li><strong>Viewport Doctor<\/strong> - finds the element making the page scroll sideways.<\/li>\n<li><strong>Sticky Doctor<\/strong> - explains why a sticky header or sidebar is not sticking.<\/li>\n<li><strong>Click Doctor<\/strong> - finds what is sitting on top of a button and swallowing the click.<\/li>\n<li><strong>Floating UI Inspector<\/strong> - finds floating buttons, bars and widgets sitting on top of each other.<\/li>\n<li><strong>Anchor Doctor<\/strong> - checks in-page links and where they actually land.<\/li>\n<\/ul>\n\n<p><strong>Built to stay out of the way<\/strong><\/p>\n\n<p>Only administrators see it. A logged-out visitor loads none of it - not a byte,\nnot a tag, not a request. An administrator browsing their own site carries a\nlauncher of well under two kilobytes, and the diagnostic engine is fetched only\nwhen they ask for it.<\/p>\n\n<h3>Rebuilding the compiled JavaScript<\/h3>\n\n<p>The two files in <code>assets\/js<\/code> are compiled. Everything they are compiled from\nships beside them, in <code>assets\/src<\/code>, along with the script that compiles them.<\/p>\n\n<p>With Node.js 18 or newer, in the plugin directory:<\/p>\n\n<ol>\n<li><code>npm install<\/code> - installs one dependency, the esbuild bundler.<\/li>\n<li><code>npm run build<\/code><\/li>\n<\/ol>\n\n<p>That rewrites <code>assets\/js\/khfd-launcher.js<\/code> and <code>assets\/js\/khfd-runtime.js<\/code> from\n    assets\/src. The build is deterministic: on an unmodified copy of the plugin it\nreproduces the two shipped files byte for byte.<\/p>\n\n<p>The human-readable JavaScript source is in <code>assets\/src<\/code>, and <code>scripts\/build.js<\/code>\nrebuilds the two compiled bundles from it; both ship in this package. The\npublic source repository contains the same source and the build material needed\nto rebuild the distributed JavaScript. The internal test suites, linters and\nrelease tooling are not part of this package or of the public source\nrepository.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code>, or install it through the\nPlugins screen.<\/li>\n<li>Activate it.<\/li>\n<li>Visit any page on your site and choose <strong>Scan This Page<\/strong> in the admin bar,\nor open <strong>Tools -&gt; Frontend Doctor<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20anything%20leave%20my%20site%3F\"><h3>Does anything leave my site?<\/h3><\/dt>\n<dd><p>No. The scan runs in your browser. The plugin makes no network request of its\nown, has no REST route, no admin-ajax endpoint, and no analytics.<\/p><\/dd>\n<dt id=\"does%20it%20store%20anything%3F\"><h3>Does it store anything?<\/h3><\/dt>\n<dd><p>No. It creates no options, no transients, no user meta and no database tables.<\/p><\/dd>\n<dt id=\"can%20editors%20use%20it%3F\"><h3>Can editors use it?<\/h3><\/dt>\n<dd><p>No. It requires the <code>manage_options<\/code> capability, which in practice means\nadministrators.<\/p><\/dd>\n<dt id=\"will%20it%20change%20my%20site%3F\"><h3>Will it change my site?<\/h3><\/dt>\n<dd><p>No. It reads the page and draws on top of it. It never writes to your content,\nnever applies a fix, and never modifies the layout it is measuring.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Find what is breaking your WordPress frontend - and see the exact element involved.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=375649"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kinetichub"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375649"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375649"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375649"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375649"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375649"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}