{"id":363028,"date":"2026-09-27T09:44:48","date_gmt":"2026-09-27T09:44:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/loginstudio\/"},"modified":"2026-09-27T10:27:19","modified_gmt":"2026-09-27T10:27:19","slug":"latchkey","status":"publish","type":"plugin","link":"https:\/\/wol.wordpress.org\/plugins\/latchkey\/","author":23528372,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.2","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Latchkey | Custom Login Page Designer","header_author":"sajmn","header_description":"Design the WordPress login, registration and password screens with a live preview of the real page.","assets_banners_color":"142b46","last_updated":"2026-09-27 10:27:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/akoenterprise.cz\/pluginsbysajmn\/latchkey\/","header_author_uri":"https:\/\/akoenterprise.cz\/pluginsbysajmn\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"sajmnantropiusovic","date":"2026-09-27 10:27:19","revision":3715316}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3715337,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3715337,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3715337,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3715337,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3715325,"resolution":"1","location":"assets","locale":"","width":2079,"height":1405},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3715325,"resolution":"2","location":"assets","locale":"","width":2088,"height":1444},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3715325,"resolution":"3","location":"assets","locale":"","width":2073,"height":1734},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3715325,"resolution":"4","location":"assets","locale":"","width":2080,"height":1687},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3715325,"resolution":"5","location":"assets","locale":"","width":2088,"height":1378},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3715325,"resolution":"6","location":"assets","locale":"","width":2080,"height":1738}},"screenshots":{"1":"The design panel, with the live preview of the real login page beside it","2":"Midnight Aurora, with the background controls open","3":"Sunset Split, with the brand panel shown beside the form","4":"Studio Glass over an image of your own","5":"Clean Slate, a light design with motion switched off","6":"Contrast measured against WCAG AA and AAA as you choose colours"}},"plugin_section":[],"plugin_tags":[3691,41128,5574,603,3830],"plugin_category":[58],"plugin_contributors":[276630],"plugin_business_model":[],"class_list":["post-363028","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-login","plugin_tags-login-customizer","plugin_tags-login-page","plugin_tags-registration","plugin_tags-wp-login","plugin_category-user-management","plugin_contributors-sajmnantropiusovic","plugin_committers-sajmnantropiusovic"],"banners":{"banner":"https:\/\/ps.w.org\/latchkey\/assets\/banner-772x250.png?rev=3715337","banner_2x":"https:\/\/ps.w.org\/latchkey\/assets\/banner-1544x500.png?rev=3715337","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/latchkey\/assets\/icon-128x128.png?rev=3715337","icon_2x":"https:\/\/ps.w.org\/latchkey\/assets\/icon-256x256.png?rev=3715337","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-1.jpg?rev=3715325","caption":"The design panel, with the live preview of the real login page beside it"},{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-2.jpg?rev=3715325","caption":"Midnight Aurora, with the background controls open"},{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-3.jpg?rev=3715325","caption":"Sunset Split, with the brand panel shown beside the form"},{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-4.jpg?rev=3715325","caption":"Studio Glass over an image of your own"},{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-5.jpg?rev=3715325","caption":"Clean Slate, a light design with motion switched off"},{"src":"https:\/\/ps.w.org\/latchkey\/assets\/screenshot-6.jpg?rev=3715325","caption":"Contrast measured against WCAG AA and AAA as you choose colours"}],"raw_content":"<!--section=description-->\n<p>Your login page is the first screen many people see of your site, and by default it is the same grey box as everyone else's. Latchkey lets you design it \u2014 colours, background, card, fields, button, typography, logo \u2014 and see the result on the real page while you work.<\/p>\n\n<h4>Two things make it different<\/h4>\n\n<p><strong>The preview is the real page.<\/strong> The panel loads your actual <code>wp-login.php<\/code> in a frame and updates it as you drag a slider. There is no second rendering path that can drift from what visitors get, so what you approve is what ships.<\/p>\n\n<p><strong>It never touches how logging in works.<\/strong> Every form stays the form WordPress rendered, posting where WordPress told it to post. No custom sign-in handling, no password processing, no session code. That is why Latchkey keeps working next to your two-factor and security plugins instead of fighting them \u2014 and why it cannot lock you out.<\/p>\n\n<h4>Nothing is held back<\/h4>\n\n<p>There is no licence key, no trial and no setting that stops halfway. Every template, every colour, every control in this plugin works on every install.<\/p>\n\n<h4>What you can change<\/h4>\n\n<ul>\n<li>Four templates to start from, every one of them fully editable<\/li>\n<li>Three arrangements: centred card, split screen, full screen<\/li>\n<li>Backgrounds: solid colour, animated gradient, aurora, mesh, or your own image<\/li>\n<li>Every colour, with no restrictions<\/li>\n<li>Card surface, opacity, glass blur, corner radius, width and padding<\/li>\n<li>Field style, height, corner radius, floating labels and icons<\/li>\n<li>Button colours, size, corner radius and hover behaviour<\/li>\n<li>Typography and logo<\/li>\n<li>Which elements appear: remember me, navigation links, back-to-site link<\/li>\n<\/ul>\n\n<h4>Built to behave<\/h4>\n\n<ul>\n<li>No external requests. Nothing is loaded from a font CDN or an analytics endpoint.<\/li>\n<li>No tracking, no telemetry, no phoning home.<\/li>\n<li>One database row. Uninstalling removes it.<\/li>\n<li>Respects <code>prefers-reduced-motion<\/code>, and offers its own switch for people who want animation off regardless.<\/li>\n<li>Contrast is checked as you design, against WCAG AA and AAA.<\/li>\n<li>The interim login modal inside wp-admin is left alone, because a full-screen design would break it.<\/li>\n<\/ul>\n\n<h4>About the password strength meter<\/h4>\n\n<p>The meter is drawn by this plugin but scored by WordPress core, using the zxcvbn library that already ships with WordPress. The calculation happens entirely in the browser. This plugin reads the resulting rating, not the password: it watches the class name core writes and mirrors it onto a segmented bar. No password value is read, stored, logged or transmitted by Latchkey.<\/p>\n\n<p>The meter appears where WordPress creates a password \u2014 the \"set a new password\" screen. It never appears on the sign-in form, where showing an assessment of an existing password would tell you nothing useful.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it through Plugins \u2192 Add New.<\/li>\n<li>Activate it.<\/li>\n<li>Open <strong>Latchkey<\/strong> in the admin menu and design.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20change%20how%20logging%20in%20works%3F\"><h3>Does this change how logging in works?<\/h3><\/dt>\n<dd><p>No. The plugin never touches authentication. It styles the page around the native forms.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20my%20security%20or%20two-factor%20plugin%3F\"><h3>Will it conflict with my security or two-factor plugin?<\/h3><\/dt>\n<dd><p>It should not. Because the native markup is preserved, plugins that add fields, checks or messages to the login form continue to work; their additions simply inherit the design.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20design%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to my design if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>The login screen returns to the WordPress default immediately. Nothing is left behind in your theme or in wp-login.php.<\/p><\/dd>\n<dt id=\"can%20i%20preview%20the%20registration%20screen%20even%20though%20registration%20is%20closed%3F\"><h3>Can I preview the registration screen even though registration is closed?<\/h3><\/dt>\n<dd><p>Yes, inside the admin preview. That preview is restricted to administrators and cannot create accounts.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20a%20renamed%20login%20url%3F\"><h3>Does it work with a renamed login URL?<\/h3><\/dt>\n<dd><p>Yes. Plugins that move <code>wp-login.php<\/code> to an address of your choosing still render the same page underneath, so the design applies there too.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20login%20page%20down%3F\"><h3>Will it slow my login page down?<\/h3><\/dt>\n<dd><p>The stylesheet is a single cached file and the per-site part is about a kilobyte written inline. Nothing is fetched from anywhere else.<\/p><\/dd>\n<dt id=\"can%20i%20move%20my%20design%20to%20another%20site%3F\"><h3>Can I move my design to another site?<\/h3><\/dt>\n<dd><p>Yes. Export writes a JSON file of every setting and import reads it back. Uploaded images live in each site's own media library, so pick those again on the new site.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Customise the WordPress login page, registration and password screens \u2014 with a live preview that is the real page, not a mock-up.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363028"}],"author":[{"embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sajmnantropiusovic"}],"wp:attachment":[{"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363028"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363028"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363028"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363028"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363028"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wol.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}