{"id":56,"date":"2026-03-31T09:28:19","date_gmt":"2026-03-31T09:28:19","guid":{"rendered":"https:\/\/kr0311.com\/projects\/?p=56"},"modified":"2026-04-02T14:29:24","modified_gmt":"2026-04-02T14:29:24","slug":"phase-7-first-look-at-the-kr0311-panel-ssl-groundwork-client-experience-redesign","status":"publish","type":"post","link":"https:\/\/kr0311.com\/projects\/phase-7-first-look-at-the-kr0311-panel-ssl-groundwork-client-experience-redesign\/","title":{"rendered":"Phase 7: First Look at the KR0311 Panel \u2013 SSL Groundwork &amp; Client Experience Redesign"},"content":{"rendered":"<p>Phase 7 of the custom hosting control panel build started with a clear and focused goal: implement SSL groundwork, validate domain readiness, and prepare the system for certificate issuance.<\/p>\n<p>This phase builds directly on <a href=\"\/projects\/phase-6-control-panel-web-stack-provisioning\/\">Phase 6<\/a>, where the panel gained the ability to provision the live web stack safely.<\/p>\n<p>What followed was a turning point in the project.<\/p>\n<p>As development progressed, it became clear that SSL was not just a backend concern \u2014 it directly affected how users understand and interact with their sites.<\/p>\n<p>Without the right interface, even a well-built system becomes difficult to use.<\/p>\n<p>That realisation led to a major shift.<\/p>\n<p>Phase 7 evolved into two key outcomes:<\/p>\n<ul>\n<li>A complete SSL and domain readiness foundation<\/li>\n<li>A full redesign of the client experience<\/li>\n<\/ul>\n<p>Both were necessary \u2014 and more importantly, both now work together.<\/p>\n<hr \/>\n<h2>\ud83e\udded Why Phase 7 Expanded in the Custom Hosting Control Panel Build<\/h2>\n<p>The original plan for this phase was simple:<\/p>\n<ul>\n<li>Validate DNS<\/li>\n<li>Check domain readiness<\/li>\n<li>Enable SSL issuance<\/li>\n<\/ul>\n<p>Very sensible. Very focused. Very optimistic.<\/p>\n<p>But during implementation, a problem became obvious.<\/p>\n<p>There was no clear way for a user to understand:<\/p>\n<ul>\n<li>Why SSL was not available<\/li>\n<li>What needed to be fixed<\/li>\n<li>Whether their site was actually ready<\/li>\n<\/ul>\n<p>Adding SSL functionality on top of an unclear interface would not have created value.<\/p>\n<p>It would have created confusion with a padlock icon on it.<\/p>\n<p>Instead of forcing it through, the decision was made to step back and redesign the client experience properly.<\/p>\n<p>This was not a delay.<\/p>\n<p>It was a necessary correction.<\/p>\n<hr \/>\n<h2>\ud83d\udda5\ufe0f First Look: The Client Panel<\/h2>\n<p>Up until this point in the build, everything had been backend-focused.<\/p>\n<p>Provisioning, system services, queue workers, infrastructure \u2014 all critical pieces, but nothing truly visible to the end user.<\/p>\n<p>Phase 7 changes that.<\/p>\n<p>For the first time, the control panel starts to feel like an actual product rather than a very organised pile of good intentions and backend logic.<\/p>\n<p>With the client experience redesign, the system now has a structured, feature-driven interface that allows users to manage their sites in a way that is both clear and familiar.<\/p>\n<p>Below is the first look at the KR0311 client panel in its current state:<\/p>\n<figure style=\"margin: 24px 0;text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/kr0311.com\/projects\/wp-content\/uploads\/2026\/03\/phase7.png\" alt=\"custom hosting control panel build phase 7 client panel redesign\" style=\"max-width: 100%;height: auto;border-radius: 12px\" loading=\"lazy\"><figcaption style=\"margin-top: 10px;font-size: 14px;color: #666\">\n        First look at the redesigned KR0311 client panel during Phase 7.<br \/>\n    <\/figcaption><\/figure>\n<p>This view represents a significant shift from earlier phases:<\/p>\n<ul>\n<li>Clear navigation with grouped functionality<\/li>\n<li>Dedicated site management sections<\/li>\n<li>Real-time visibility of system state<\/li>\n<li>Actionable controls instead of passive data<\/li>\n<\/ul>\n<p>It is no longer just infrastructure.<\/p>\n<p>It is an interface people can actually use without needing a guided tour and a quiet cry.<\/p>\n<hr \/>\n<h2>\ud83d\udd10 SSL Groundwork<\/h2>\n<p>At its core, Phase 7 introduces a structured SSL readiness system.<\/p>\n<p>Instead of immediately attempting certificate issuance, the system now evaluates whether a site is actually ready to receive SSL.<\/p>\n<p>This includes:<\/p>\n<ul>\n<li>Certificate presence detection<\/li>\n<li>HTTP availability checks<\/li>\n<li>DNS validation status<\/li>\n<li>Environment constraints<\/li>\n<\/ul>\n<p>The guiding principle is simple:<\/p>\n<p><strong>Only attempt SSL when the system is ready.<\/strong><\/p>\n<p>This avoids failed issuance attempts, reduces confusion, and keeps system state consistent.<\/p>\n<p>Which is much better than repeatedly asking Let\u2019s Encrypt for miracles and then acting shocked when it says no.<\/p>\n<p>The overall workflow is being shaped around the same principles described in the <a href=\"https:\/\/letsencrypt.org\/how-it-works\/\" target=\"_blank\" rel=\"noopener\">Let\u2019s Encrypt overview<\/a>, where certificate issuance depends on domain control and environment readiness rather than wishful thinking.<\/p>\n<hr \/>\n<h2>\ud83c\udf0d DNS &amp; Domain Readiness<\/h2>\n<p>To support SSL readiness, a DNS validation layer was introduced.<\/p>\n<p>This is handled through a dedicated service:<\/p>\n<ul>\n<li><strong>DnsValidationService<\/strong><\/li>\n<\/ul>\n<p>This service is responsible for:<\/p>\n<ul>\n<li>Checking domain resolution<\/li>\n<li>Preparing for DNS record validation<\/li>\n<li>Returning structured validation results<\/li>\n<\/ul>\n<p>Even in its current placeholder form, it establishes a critical rule:<\/p>\n<p><strong>DNS is verified \u2014 not assumed.<\/strong><\/p>\n<p>Which sounds obvious, right up until a system assumes it is fine and then spends the rest of the day proving otherwise.<\/p>\n<p>The intended direction also aligns with the kind of DNS and HTTP validation required for ACME-based issuance, as outlined in the <a href=\"https:\/\/letsencrypt.org\/docs\/challenge-types\/\" target=\"_blank\" rel=\"noopener\">Let\u2019s Encrypt challenge documentation<\/a>.<\/p>\n<hr \/>\n<h2>\ud83c\udfe0 Internal-Only Constraints &amp; Design Decisions<\/h2>\n<p>This phase is being developed in an internal-only environment.<\/p>\n<p>That has a direct impact on SSL functionality.<\/p>\n<p>Public ACME validation, such as Let\u2019s Encrypt, requires:<\/p>\n<ul>\n<li>Public DNS resolution<\/li>\n<li>External HTTP accessibility<\/li>\n<\/ul>\n<p>Neither are available in this setup.<\/p>\n<p>Rather than attempting awkward workarounds or pretending the limitation did not exist, the system explicitly accounts for it.<\/p>\n<p>This led to a deliberate design approach:<\/p>\n<ul>\n<li>Block certificate issuance in internal environments<\/li>\n<li>Clearly communicate why in the UI<\/li>\n<li>Expose readiness status instead of forcing actions<\/li>\n<\/ul>\n<p>This keeps behaviour predictable in development while making the path to production clear.<\/p>\n<p>In other words: the panel now knows the difference between \u201cnot ready yet\u201d and \u201cflat-out impossible in this environment,\u201d which is a very useful distinction.<\/p>\n<hr \/>\n<h2>\ud83e\uddea Readiness System &amp; Manual Control<\/h2>\n<p>Phase 7 introduces a manual SSL readiness check.<\/p>\n<p>Users can trigger a <strong>\u201cCheck SSL Readiness\u201d<\/strong> action, which evaluates:<\/p>\n<ul>\n<li>DNS status<\/li>\n<li>Web server readiness<\/li>\n<li>Environment eligibility<\/li>\n<\/ul>\n<p>The results are stored and displayed directly in the interface.<\/p>\n<p>This approach provides:<\/p>\n<ul>\n<li>Transparency into system state<\/li>\n<li>Clear feedback for troubleshooting<\/li>\n<\/ul>\n<p>Automation will come later \u2014 but only after the behaviour is proven and the feedback loop is clear.<\/p>\n<p>Which is a much nicer strategy than automating confusion at scale.<\/p>\n<hr \/>\n<h2>\ud83d\uddc4\ufe0f Database Structure for SSL &amp; DNS Tracking<\/h2>\n<p>To support this system, new fields were added to the <strong>sites<\/strong> table:<\/p>\n<ul>\n<li>ssl_last_checked_at<\/li>\n<li>ssl_last_check_status<\/li>\n<li>ssl_last_check_message<\/li>\n<li>ssl_dns_last_checked_at<\/li>\n<li>ssl_dns_status<\/li>\n<li>ssl_dns_message<\/li>\n<\/ul>\n<p>This allows the system to persist validation results and present meaningful feedback to the user.<\/p>\n<p>Everything is tracked. Nothing is assumed.<\/p>\n<p>Which is becoming a bit of a theme in this project \u2014 for very good reason.<\/p>\n<hr \/>\n<h2>\ud83c\udfa8 Client Panel Redesign<\/h2>\n<p>This is where Phase 7 expanded significantly.<\/p>\n<p>The original client interface was functional, but it lacked clarity, structure, and room to grow.<\/p>\n<p>It could display information, but it was not doing enough to explain the system or guide the user through it.<\/p>\n<p>Rather than iterating on a weak foundation, the decision was made to rebuild it properly.<\/p>\n<p>The new client panel introduces:<\/p>\n<ul>\n<li>Clear, grouped navigation<\/li>\n<li>Dedicated feature sections<\/li>\n<li>Improved visibility of system state<\/li>\n<li>A more intuitive management flow<\/li>\n<\/ul>\n<p>This brings the panel closer to the kind of structure users expect from real hosting platforms, while still keeping full control over the design and behaviour.<\/p>\n<hr \/>\n<h2>\ud83e\udde9 Moving Toward a cPanel-Style Experience<\/h2>\n<p>The redesigned interface follows a familiar model:<\/p>\n<ul>\n<li>Feature-based navigation<\/li>\n<li>Logical grouping of tools<\/li>\n<li>Clear separation between sections<\/li>\n<\/ul>\n<p>Key areas now include:<\/p>\n<ul>\n<li>Site Details<\/li>\n<li>SSL &amp; Security<\/li>\n<li>PHP Management<\/li>\n<li>Web Stack<\/li>\n<\/ul>\n<p>This structure reduces friction and makes the system easier to understand without needing constant explanation.<\/p>\n<p>That matters, because users should be managing their site \u2014 not deciphering the panel like it is a puzzle game.<\/p>\n<hr \/>\n<h2>\ud83d\udee0\ufe0f Improvements to Site Management<\/h2>\n<p>The \u201cManage Site\u201d experience has been completely reworked.<\/p>\n<p>It now provides:<\/p>\n<ul>\n<li>Quick action shortcuts<\/li>\n<li>Clear status indicators<\/li>\n<li>Structured data presentation<\/li>\n<li>Context-aware messaging<\/li>\n<\/ul>\n<p>Users can now immediately understand:<\/p>\n<ul>\n<li>What is working<\/li>\n<li>What is not<\/li>\n<li>Why<\/li>\n<\/ul>\n<p>This shifts the interface from reactive to informative.<\/p>\n<p>Which is exactly what a hosting panel should be doing instead of just standing there looking technical.<\/p>\n<hr \/>\n<h2>\ud83c\udfd7\ufe0f Architecture Decisions &amp; Separation<\/h2>\n<p>The system continues to follow a clean architecture approach.<\/p>\n<p>Controllers remain thin, with logic handled by dedicated services:<\/p>\n<ul>\n<li><strong>SslStatusService<\/strong><\/li>\n<li><strong>DnsValidationService<\/strong><\/li>\n<li><strong>SiteStatusService<\/strong><\/li>\n<\/ul>\n<p>This ensures:<\/p>\n<ul>\n<li>Reusable logic<\/li>\n<li>Clear separation of concerns<\/li>\n<li>Future scalability<\/li>\n<\/ul>\n<p>The UI is no longer tightly coupled to system behaviour, which allows both to evolve independently.<\/p>\n<p>Which is very helpful when one side needs a redesign and the other side is busy deciding whether DNS is behaving itself.<\/p>\n<hr \/>\n<h2>\ud83d\udd04 What Changed From the Original Plan<\/h2>\n<p>Phase 7 was originally intended to focus purely on SSL.<\/p>\n<p>It expanded into a broader phase because SSL depends heavily on user understanding and interaction.<\/p>\n<p>The existing UI could not support that effectively.<\/p>\n<p>Rather than layering complexity on top of a weak interface, the foundation was rebuilt.<\/p>\n<p>This decision significantly improved the overall system.<\/p>\n<p>It also made Phase 7 much bigger than planned, which seems to be what happens every time a project starts \u201cjust adding one thing.\u201d<\/p>\n<hr \/>\n<h2>\u2705 Final Outcome of Phase 7<\/h2>\n<p>By the end of this phase, the control panel now has:<\/p>\n<ul>\n<li>A complete SSL readiness system<\/li>\n<li>DNS validation groundwork<\/li>\n<li>Structured tracking of SSL and domain state<\/li>\n<li>Environment-aware behaviour<\/li>\n<li>A fully redesigned client interface<\/li>\n<li>Clear separation between admin and client functionality<\/li>\n<\/ul>\n<p>This phase established a much stronger foundation for future work.<\/p>\n<p>Not just technically, but from a product and usability point of view as well.<\/p>\n<hr \/>\n<h2>\ud83d\udd1c What Comes Next<\/h2>\n<p>With the groundwork in place, the next phase will focus on:<\/p>\n<ul>\n<li>Real DNS validation logic<\/li>\n<li>Public ACME integration<\/li>\n<li>Certificate issuance workflows<\/li>\n<li>Automation using queued jobs<\/li>\n<\/ul>\n<p>Phase 7 did not just introduce SSL groundwork.<\/p>\n<p>It made the system ready for SSL <em>properly<\/em>.<\/p>\n<p>And for the first time, it made the client side of the panel feel like it belongs in the same sentence as the backend powering it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Phase 7 introduces SSL groundwork, DNS readiness tracking, and a redesigned client panel that makes site management clearer and more usable.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[59,34,20,58,62,61,60,38,44,57],"class_list":["post-56","post","type-post","status-publish","format-standard","hentry","category-control-panel","tag-client-panel-redesign","tag-control-panel-build","tag-custom-hosting-control-panel","tag-dns-validation","tag-hosting-platform","tag-hosting-ui","tag-lets-encrypt-readiness","tag-self-hosted-control-panel","tag-site-management","tag-ssl-groundwork"],"_links":{"self":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/56","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/comments?post=56"}],"version-history":[{"count":5,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/56\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/56\/revisions\/115"}],"wp:attachment":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/media?parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/categories?post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/tags?post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}