diff --git a/apps/web/package.json b/apps/web/package.json
index f462d54..87ded92 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -21,6 +21,7 @@
"@opennextjs/cloudflare": "^1.6.3",
"@orama/orama": "^3.1.11",
"@radix-ui/react-dropdown-menu": "^2.1.15",
+ "@radix-ui/react-hover-card": "^1.1.14",
"babel-plugin-react-compiler": "^19.1.0-rc.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
diff --git a/apps/web/src/app/docs/layout.tsx b/apps/web/src/app/docs/layout.tsx
index 6f9c84c..72266ae 100644
--- a/apps/web/src/app/docs/layout.tsx
+++ b/apps/web/src/app/docs/layout.tsx
@@ -7,7 +7,7 @@ import { source } from "@/lib/source";
const docsOptions: DocsLayoutProps = {
...baseOptions,
tree: source.pageTree,
- links: [],
+ // links: [],
sidebar: {
banner: ,
},
diff --git a/apps/web/src/app/global.css b/apps/web/src/app/global.css
index 2ffa297..6241f9e 100644
--- a/apps/web/src/app/global.css
+++ b/apps/web/src/app/global.css
@@ -162,6 +162,8 @@
}
:root {
+ --color-fd-primary: #8839ef;
+ --color-fd-primary-foreground: #ffffff;
--background: oklch(1 0 0);
--foreground: oklch(0.44 0.04 279.33);
--card: oklch(1 0 0);
@@ -227,6 +229,8 @@
}
.dark {
+ --color-fd-primary: #cba6f7;
+ --color-fd-primary-foreground: #11111b;
--background: #11111b;
--foreground: #cdd6f4;
--card: #11111b;
diff --git a/apps/web/src/app/layout.config.tsx b/apps/web/src/app/layout.config.tsx
index bde5f7d..1ef14ae 100644
--- a/apps/web/src/app/layout.config.tsx
+++ b/apps/web/src/app/layout.config.tsx
@@ -20,7 +20,7 @@ export const links: LinkItemType[] = [
{
text: "Docs",
url: "/docs",
- active: "nested-url" as const,
+ active: "nested-url",
},
{
text: "Builder",
diff --git a/apps/web/src/components/special-sponsor-banner.tsx b/apps/web/src/components/special-sponsor-banner.tsx
index c029b21..1459cc1 100644
--- a/apps/web/src/components/special-sponsor-banner.tsx
+++ b/apps/web/src/components/special-sponsor-banner.tsx
@@ -1,9 +1,17 @@
"use client";
+import { Github, Globe, Star } from "lucide-react";
import Image from "next/image";
import { useEffect, useState } from "react";
+import {
+ HoverCard,
+ HoverCardContent,
+ HoverCardTrigger,
+} from "@/components/ui/hover-card";
import {
filterCurrentSponsors,
filterSpecialSponsors,
+ formatSponsorUrl,
+ getSponsorUrl,
sortSpecialSponsors,
} from "@/lib/sponsor-utils";
import type { Sponsor } from "@/lib/types";
@@ -34,12 +42,14 @@ export function SpecialSponsorBanner() {
if (loading) {
return (
-
-
-
-
+
+
+ {["s1", "s2", "s3", "s4"].map((key) => (
+
+ ))}
);
@@ -50,31 +60,107 @@ export function SpecialSponsorBanner() {
}
return (
-
-
- {specialSponsors.map((sponsor) => (
-
-
-
-
- {sponsor.sponsor.name || sponsor.sponsor.login}
-
-
-
- ))}
+
+
+ {specialSponsors.map((entry) => {
+ const displayName = entry.sponsor.name || entry.sponsor.login;
+ const imgSrc = entry.sponsor.customLogoUrl || entry.sponsor.avatarUrl;
+ const since = new Date(entry.createdAt).toLocaleDateString(
+ undefined,
+ {
+ year: "numeric",
+ month: "short",
+ },
+ );
+ const sponsorUrl = getSponsorUrl(entry);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ SPECIAL
+ •
+ SINCE {since.toUpperCase()}
+
+
+
+
+
+
+
+ {displayName}
+
+ {entry.tierName ? (
+
+ {entry.tierName}
+
+ ) : null}
+
+
+
+
+
+
+
+ );
+ })}
);
diff --git a/apps/web/src/components/ui/hover-card.tsx b/apps/web/src/components/ui/hover-card.tsx
new file mode 100644
index 0000000..8951788
--- /dev/null
+++ b/apps/web/src/components/ui/hover-card.tsx
@@ -0,0 +1,44 @@
+"use client";
+
+import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
+import type * as React from "react";
+
+import { cn } from "@/lib/utils";
+
+function HoverCard({
+ ...props
+}: React.ComponentProps
) {
+ return ;
+}
+
+function HoverCardTrigger({
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function HoverCardContent({
+ className,
+ align = "center",
+ sideOffset = 4,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+
+
+ );
+}
+
+export { HoverCard, HoverCardTrigger, HoverCardContent };
diff --git a/bun.lock b/bun.lock
index d4278b0..9e0cd4e 100644
--- a/bun.lock
+++ b/bun.lock
@@ -14,7 +14,7 @@
},
"apps/cli": {
"name": "create-better-t-stack",
- "version": "2.29.3",
+ "version": "2.30.0",
"bin": {
"create-better-t-stack": "dist/index.js",
},
@@ -49,6 +49,7 @@
"@opennextjs/cloudflare": "^1.6.3",
"@orama/orama": "^3.1.11",
"@radix-ui/react-dropdown-menu": "^2.1.15",
+ "@radix-ui/react-hover-card": "^1.1.14",
"babel-plugin-react-compiler": "^19.1.0-rc.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",