mirror of
https://github.com/shankar0123/certctl.git
synced 2026-06-07 12:21:31 +00:00
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:
@@ -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"
|
||||
>
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user