fix(web): sidebar footer simplification + onboarding doc links — operator-reported drift

Two small, operator-reported regressions in the live demo:

1. SIDEBAR FOOTER
   Pre-fix the bottom-left of the sidebar had:

     Built and maintained by Shankar         <- only "Shankar" linked
     certctl                          [⎋]     <- "certctl" label + logout

   Operator dropped the "certctl" label as redundant (the brand mark +
   product name are already in the sidebar header), and asked for the
   WHOLE attribution sentence to be the LinkedIn link rather than only
   "Shankar". Post-fix the entire sidebar footer is one row:

     Built and maintained by Shankar             [⎋]

   The full sentence is now an ExternalLink to
   https://www.linkedin.com/in/shankar-k-a1b6853ba. Logout sits flush-
   right via `flex justify-between` and only renders when authRequired
   is true (unchanged contract). Same Phase 5 / Hotfix #8 chokepoint
   (ExternalLink) means the L-015 CI guard stays green — caught my
   first attempt where the explanatory comment text contained the
   literal `target="_blank"` string and the line-grep guard fired on
   the comment itself. Fixed by rephrasing the comment.

2. ONBOARDING WIZARD DOC LINKS
   The CompleteStep ("You're all set!") screen had three doc links at
   the bottom — all 404s:

     Quickstart Guide → docs/quickstart.md         (gone)
     Architecture     → docs/architecture.md       (gone)
     Connectors       → docs/connectors.md         (gone)

   Root cause: the 2026-05-04 docs overhaul reorganized into the
   audience-organized tree (`getting-started/`, `reference/`,
   `operator/`, etc.). The CompleteStep links weren't updated. Every
   operator who completed the wizard hit three 404s.

   Verified against the live repo BEFORE writing the new links — the
   exact paths that exist today:

     docs/getting-started/quickstart.md
     docs/reference/architecture.md
     docs/reference/connectors/index.md  (29 per-connector .md siblings)

   New links point at those paths. Each still uses target="_blank" +
   rel="noopener noreferrer" on the same line so the L-015 guard
   passes.

Verification:
  • npx tsc --noEmit — exits 0
  • Layout 7/7 + OnboardingWizard 4/4 = 11/11 green
  • All 34 CI guards pass (L-015 included)
  • npx vite build ✓ in 3.30s
This commit is contained in:
shankar0123
2026-05-14 18:02:51 +00:00
parent a9e229bd2a
commit c146e8f75b
2 changed files with 33 additions and 32 deletions
+23 -29
View File
@@ -284,38 +284,32 @@ export default function Layout() {
</button>
</div>
{/* Maintainer attribution row — mirrors the landing-page footer
(certctl.io: "Built and maintained by Shankar · certctl.io").
Same font-mono / muted-text typography; only "Shankar" carries
the LinkedIn link (the same href + rel="me noopener" pattern
the landing page uses). Single-maintainer OSS standard
(Cal.com, Plausible, Beekeeper Studio do the same). */}
{/* Maintainer attribution row. The Bundle-8 L-015 CI guard line-greps
for `target="_blank"` without `rel="noopener noreferrer"` on the
SAME LINE — splitting target + rel across lines (as the prior
bare <a> did) tripped the guard. ExternalLink is the canonical
chokepoint that the guard allowlists. We lose the rel="me" hint
(LinkedIn's identity-claim signal, not load-bearing), but gain
the CI gate. */}
<div className="px-5 pt-3 pb-1 border-t border-white/10">
<span className="text-2xs text-sidebar-text/70 font-mono">
Built and maintained by{' '}
<ExternalLink
href="https://www.linkedin.com/in/shankar-k-a1b6853ba"
className="text-sidebar-text/90 hover:text-white transition-colors underline-offset-2 hover:underline"
title="Shankar on LinkedIn — opens in a new tab"
>
Shankar
</ExternalLink>
</span>
</div>
<div className="px-5 pt-1 pb-3 flex items-center justify-between">
<span className="text-2xs text-brand-300/60 font-mono">certctl</span>
{/* Sidebar footer (post-2026-05-14 simplification per operator).
Pre-fix the footer had two rows: the maintainer attribution
(with only "Shankar" linked) PLUS a "certctl" font-mono label
sitting next to the logout button. Operator dropped the
"certctl" label as redundant (the brand mark + product name
are already in the sidebar header), so this single row is
the entire footer:
• Whole "Built and maintained by Shankar" line is the
LinkedIn link — routes through ExternalLink so the
rel="noopener noreferrer" pair is auto-emitted on the
same line + the Bundle-8 L-015 CI guard stays green.
• Logout sits flush-right on the same row, separated
visually by justify-between flex layout. Only renders
when authRequired is true. */}
<div className="px-5 pt-3 pb-3 border-t border-white/10 flex items-center justify-between gap-3">
<ExternalLink
href="https://www.linkedin.com/in/shankar-k-a1b6853ba"
className="text-2xs text-sidebar-text/80 hover:text-white font-mono underline-offset-2 hover:underline transition-colors"
title="Shankar on LinkedIn — opens in a new tab"
>
Built and maintained by Shankar
</ExternalLink>
{authRequired && (
<button
onClick={logout}
className="text-xs text-sidebar-text hover:text-white transition-colors"
className="text-xs text-sidebar-text hover:text-white transition-colors shrink-0"
title="Sign out"
aria-label="Sign out"
>
+10 -3
View File
@@ -72,10 +72,17 @@ export default function CompleteStep({ onFinish, issuerName, certName }: {
Go to Dashboard
</button>
{/* Doc links updated 2026-05-14 to match the post-2026-05-04
audience-organized doc tree (getting-started/ + reference/).
Pre-fix the three links pointed at docs/quickstart.md,
docs/architecture.md, docs/connectors.md — none of those paths
exist any more; they were 404s the operator hit on every
successful onboarding completion. Verified against `ls docs/`
before writing. */}
<div className="flex justify-center gap-6 text-xs">
<a href="https://github.com/certctl-io/certctl/blob/master/docs/quickstart.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Quickstart Guide</a>
<a href="https://github.com/certctl-io/certctl/blob/master/docs/architecture.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Architecture</a>
<a href="https://github.com/certctl-io/certctl/blob/master/docs/connectors.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Connectors</a>
<a href="https://github.com/certctl-io/certctl/blob/master/docs/getting-started/quickstart.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Quickstart Guide</a>
<a href="https://github.com/certctl-io/certctl/blob/master/docs/reference/architecture.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Architecture</a>
<a href="https://github.com/certctl-io/certctl/blob/master/docs/reference/connectors/index.md" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-bright">Connectors</a>
</div>
</div>
);