diff --git a/web/components/Hero.tsx b/web/components/Hero.tsx index 129cee7..f02cbf3 100644 --- a/web/components/Hero.tsx +++ b/web/components/Hero.tsx @@ -42,7 +42,7 @@ export default function Hero() { return (
@@ -55,7 +55,7 @@ export default function Hero() { > - v0.10 · MCP-native · AGPL-3.0 + v0.11 · MCP-native · AGPL-3.0 @@ -163,9 +163,9 @@ export default function Hero() {
-
+
scroll - +
); diff --git a/web/components/Nav.tsx b/web/components/Nav.tsx index 788d6e8..fb19732 100644 --- a/web/components/Nav.tsx +++ b/web/components/Nav.tsx @@ -71,7 +71,7 @@ export default function Nav() { className="bg-bg-deep/85 backdrop-blur-xl backdrop-saturate-[1.2] border-b border-border" > - + - - {NAV_ITEMS.map((item) => ( - - {item.label} - - ))} - + + {NAV_ITEMS.map((item) => { + const isCurrent = item.href.startsWith("/") + ? pathname === item.href || pathname?.startsWith(`${item.href}/`) + : false; + return ( + + {item.label} + + ); + })} + GitHub diff --git a/web/components/TrustStrip.tsx b/web/components/TrustStrip.tsx index 9e4deae..72172ef 100644 --- a/web/components/TrustStrip.tsx +++ b/web/components/TrustStrip.tsx @@ -1,6 +1,6 @@ "use client"; -import { KPI, KPIGroup } from "@heroui-pro/react"; +import { KPI } from "@heroui-pro/react"; import { Code2, Layers, Plug, Sparkles } from "lucide-react"; const STATS = [ @@ -51,48 +51,46 @@ export default function TrustStrip() { -
- - {STATS.map((stat, idx) => ( - + {/* + KPIGroup forces flex-1 equal columns which clips long labels at narrow + widths. Use a custom grid that stacks 2x2 on small screens and flips + to 1x4 on lg+ instead, with manual divider borders. + */} +
+
+ {STATS.map((stat) => ( + ))} - +
); } -function Stat({ - stat, - isLast, -}: { - stat: (typeof STATS)[number]; - isLast: boolean; -}) { +function Stat({ stat }: { stat: (typeof STATS)[number] }) { const { title, value, Icon, status, trend, trendLabel } = stat; return ( - <> - - - - - - - {title} - - - - - {trendLabel} - - - {!isLast ? : null} - + + + + + + + {title} + + + + + + {trendLabel} + + + ); } diff --git a/web/lib/data/changelog.ts b/web/lib/data/changelog.ts index 985229a..2efdf56 100644 --- a/web/lib/data/changelog.ts +++ b/web/lib/data/changelog.ts @@ -13,9 +13,11 @@ export type ChangelogEntry = { export const CHANGELOG: ChangelogEntry[] = [ { - version: "Unreleased", - date: "", + version: "0.11.0", + date: "2026-04-25", highlights: [ + { type: "changed", text: "Marketing site overhauled — the `web/` landing, docs, and changelog were rebuilt on HeroUI v3 + HeroUI Pro with Tailwind v4 and `lucide-react`. New surfaces include a hero with the social-card art and install picker, locale-stable TrustStrip KPIs, the WhyQRing comparison, IntegrationsCarousel, LiveDemo terminal, a global ⌘K command palette, AgentMode, the CursorPlugin showcase, FAQ, FreeCallout, and FinalCta" }, + { type: "changed", text: "Docs page gains a pinned floating table of contents with manual scroll-spy and a copy-to-clipboard MCP prompt cookbook; navbar contrast was lifted and same-page hash navigation + home-link scroll-to-top now work correctly under the App Router" }, { type: "changed", text: "Status dashboard rebuilt — `qring status` now serves a denser page with a KPI strip (secrets, env, protected, approvals, hooks, 24h reads/writes, denied actions, anomalies), a sortable + searchable secrets table, and dedicated panels for manifest gaps, governance policy, active approvals (with tamper / expiry state), registered hooks, and agent memory" }, { type: "changed", text: "Audit feed gained action chips (read/write/delete/export), source chips (cli/mcp/hook/agent), and a free-text filter; top bar adds pause / refresh / JSON controls plus a relative `updated Ns ago` timestamp that keeps ticking while paused" }, { type: "changed", text: "Snapshot payload (`/api/status` + SSE) now also includes version, projectPath, scopes, protectedCount, manifest, policy, approvals, hooks, memoryKeys, and auditMetrics (action / source counts, top read keys, total events in the last 24h)" },