diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index 9baf3f7..ea00be0 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -5,6 +5,7 @@ const withMDX = createMDX(); /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, + typedRoutes: true, images: { remotePatterns: [ { protocol: "https", hostname: "pbs.twimg.com" }, diff --git a/apps/web/package.json b/apps/web/package.json index a53b736..605e64c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -18,27 +18,27 @@ "@better-t-stack/backend": "workspace:*", "@erquhart/convex-oss-stats": "^0.8.1", "@number-flow/react": "^0.5.10", - "@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", + "@opennextjs/cloudflare": "^1.6.5", + "@orama/orama": "^3.1.12", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "babel-plugin-react-compiler": "^19.1.0-rc.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "convex": "^1.25.4", + "convex": "^1.26.2", "convex-helpers": "^0.1.104", "date-fns": "^4.1.0", - "fumadocs-core": "15.6.7", - "fumadocs-mdx": "11.7.3", - "fumadocs-ui": "15.6.7", - "lucide-react": "^0.536.0", + "fumadocs-core": "15.7.5", + "fumadocs-mdx": "11.8.1", + "fumadocs-ui": "15.7.5", + "lucide-react": "^0.542.0", "motion": "^12.23.12", - "next": "15.3.5", + "next": "15.5.2", "next-themes": "^0.4.6", - "nuqs": "^2.4.3", + "nuqs": "^2.5.1", "papaparse": "^5.5.3", - "posthog-js": "^1.258.5", - "radix-ui": "^1.4.2", + "posthog-js": "^1.261.0", + "radix-ui": "^1.4.3", "react": "^19.1.1", "react-dom": "^19.1.1", "react-tweet": "^3.2.2", @@ -46,23 +46,23 @@ "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-mdx": "^3.1.0", - "shiki": "^3.9.1", - "sonner": "^2.0.6", + "shiki": "^3.12.0", + "sonner": "^2.0.7", "tailwind-merge": "^3.3.1" }, "devDependencies": { - "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/postcss": "^4.1.12", "@types/mdx": "^2.0.13", - "@types/node": "24.1.0", + "@types/node": "24.3.0", "@types/papaparse": "^5.3.16", - "@types/react": "^19.1.9", - "@types/react-dom": "^19.1.7", - "eslint": "^9.32.0", - "eslint-config-next": "15.4.5", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "eslint": "^9.34.0", + "eslint-config-next": "15.5.2", "postcss": "^8.5.6", - "tailwindcss": "^4.1.11", - "tw-animate-css": "^1.3.6", + "tailwindcss": "^4.1.12", + "tw-animate-css": "^1.3.7", "typescript": "^5.9.2", - "wrangler": "^4.27.0" + "wrangler": "^4.33.1" } } diff --git a/apps/web/src/app/(home)/_components/navbar.tsx b/apps/web/src/app/(home)/_components/navbar.tsx deleted file mode 100644 index a5199e2..0000000 --- a/apps/web/src/app/(home)/_components/navbar.tsx +++ /dev/null @@ -1,261 +0,0 @@ -"use client"; -import { Github, Heart, Maximize2, Menu, X } from "lucide-react"; -import { AnimatePresence, motion } from "motion/react"; -import Image from "next/image"; -import Link from "next/link"; -import { useEffect, useState } from "react"; -import { ThemeToggle } from "@/components/theme-toggle"; -import { cn } from "@/lib/utils"; -import PackageIcon from "./icons"; - -export default function Navbar() { - const [scrolled, setScrolled] = useState(false); - const [mobileMenuOpen, setMobileMenuOpen] = useState(false); - - useEffect(() => { - const handleScroll = () => { - setScrolled(window.scrollY > 10); - }; - - window.addEventListener("scroll", handleScroll); - handleScroll(); - - return () => window.removeEventListener("scroll", handleScroll); - }, []); - - useEffect(() => { - if (mobileMenuOpen) { - document.body.style.overflow = "hidden"; - } else { - document.body.style.overflow = ""; - } - return () => { - document.body.style.overflow = ""; - }; - }, [mobileMenuOpen]); - - const closeMobileMenu = () => setMobileMenuOpen(false); - - const desktopNavLinks = [ - { - href: "/", - label: "Home", - icon: ~/, - }, - { - href: "https://my-better-t-app-client.pages.dev/", - label: "Demo", - target: "_blank", - }, - { href: "/showcase", label: "Showcase" }, - { - href: "/analytics", - label: "Analytics", - }, - { href: "/docs", label: "Docs" }, - { - href: "https://www.npmjs.com/package/create-better-t-stack", - label: "NPM", - icon: , - target: "_blank", - }, - ]; - - const mobileNavLinks = [ - { - href: "/", - label: "Home", - icon: ~/, - }, - { - href: "https://my-better-t-app-client.pages.dev/", - label: "Demo", - target: "_blank", - }, - { href: "/showcase", label: "Showcase" }, - { - href: "/analytics", - label: "Analytics", - }, - { href: "/docs", label: "Docs" }, - { - href: "https://www.npmjs.com/package/create-better-t-stack", - label: "NPM", - icon: , - target: "_blank", - }, - { - href: "https://www.github.com/AmanVarshney01/create-better-t-stack", - label: "GitHub", - icon: , - target: "_blank", - }, - ]; - - return ( - <> - - - - {mobileMenuOpen && ( - <> - - - ); -} diff --git a/apps/web/src/app/(home)/page.tsx b/apps/web/src/app/(home)/page.tsx index 92859b1..3b9abb8 100644 --- a/apps/web/src/app/(home)/page.tsx +++ b/apps/web/src/app/(home)/page.tsx @@ -1,3 +1,5 @@ +export const dynamic = "force-static"; + import { api } from "@better-t-stack/backend/convex/_generated/api"; import { fetchQuery } from "convex/nextjs"; import CommandSection from "./_components/command-section"; diff --git a/apps/web/src/app/(home)/showcase/_components/ShowcaseItem.tsx b/apps/web/src/app/(home)/showcase/_components/ShowcaseItem.tsx index 6c8bc59..d6ad0e9 100644 --- a/apps/web/src/app/(home)/showcase/_components/ShowcaseItem.tsx +++ b/apps/web/src/app/(home)/showcase/_components/ShowcaseItem.tsx @@ -1,19 +1,10 @@ "use client"; import { ExternalLink, File, Github, Monitor } from "lucide-react"; +import type { Route } from "next"; import Image from "next/image"; import Link from "next/link"; -export interface ShowcaseItemProps { - title: string; - description: string; - imageUrl: string; - liveUrl?: string; - sourceUrl?: string; - tags: string[]; - index?: number; -} - export default function ShowcaseItem({ title, description, @@ -22,7 +13,15 @@ export default function ShowcaseItem({ sourceUrl, tags, index = 0, -}: ShowcaseItemProps) { +}: { + title: string; + description: string; + imageUrl: string; + liveUrl?: string; + sourceUrl?: string; + tags: string[]; + index?: number; +}) { const projectId = `PROJECT_${String(index + 1).padStart(3, "0")}`; return ( @@ -78,7 +77,7 @@ export default function ShowcaseItem({
{liveUrl && ( & - VariantProps & { - asChild?: boolean; - }) { +const Button = React.forwardRef< + HTMLButtonElement, + React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean; + } +>(({ className, variant, size, asChild = false, ...props }, ref) => { const Comp = asChild ? SlotPrimitive.Slot : "button"; return ( ); -} +}); + +Button.displayName = "Button"; export { Button, buttonVariants }; diff --git a/apps/web/src/components/ui/chart.tsx b/apps/web/src/components/ui/chart.tsx index a0f3cd4..bba98ee 100644 --- a/apps/web/src/components/ui/chart.tsx +++ b/apps/web/src/components/ui/chart.tsx @@ -80,7 +80,7 @@ const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => { return (