From afd76786e5d5c9b08a1de0abebf308a6be50ea21 Mon Sep 17 00:00:00 2001 From: gibbyb Date: Thu, 26 Mar 2026 23:13:05 -0500 Subject: [PATCH] Update stuff & add admin link in nav for admins --- apps/next/src/app/(frontend)/global-error.tsx | 2 +- apps/next/src/app/(frontend)/layout.tsx | 13 +++++--- apps/next/src/components/landing/content.ts | 2 +- .../src/components/layout/header/index.tsx | 33 +++++++++++++++---- packages/backend/convex/schema.ts | 1 + 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/apps/next/src/app/(frontend)/global-error.tsx b/apps/next/src/app/(frontend)/global-error.tsx index fae61df..b4867d0 100644 --- a/apps/next/src/app/(frontend)/global-error.tsx +++ b/apps/next/src/app/(frontend)/global-error.tsx @@ -4,7 +4,7 @@ import type { Metadata, Viewport } from 'next'; import NextError from 'next/error'; import { Geist, Geist_Mono } from 'next/font/google'; -import '@/app/styles.css'; +import '@/app/(frontend)/styles.css'; import { useEffect } from 'react'; import Footer from '@/components/layout/footer'; diff --git a/apps/next/src/app/(frontend)/layout.tsx b/apps/next/src/app/(frontend)/layout.tsx index 53f715a..dd4675b 100644 --- a/apps/next/src/app/(frontend)/layout.tsx +++ b/apps/next/src/app/(frontend)/layout.tsx @@ -1,17 +1,17 @@ import type { Metadata, Viewport } from 'next'; import { Geist, Geist_Mono } from 'next/font/google'; import { env } from '@/env'; - import '@/app/(frontend)/styles.css'; - import Footer from '@/components/layout/footer'; import Header from '@/components/layout/header'; import { ConvexClientProvider } from '@/components/providers'; import { generateMetadata } from '@/lib/metadata'; import { ConvexAuthNextjsServerProvider } from '@convex-dev/auth/nextjs/server'; import PlausibleProvider from 'next-plausible'; - import { ThemeProvider, Toaster } from '@gib/ui'; +import { preloadQuery } from 'convex/nextjs'; +import { api } from '@gib/backend/convex/_generated/api.js'; + export const metadata: Metadata = generateMetadata(); @@ -31,11 +31,12 @@ const geistMono = Geist_Mono({ variable: '--font-geist-mono', }); -const RootLayout = ({ +const RootLayout = async ({ children, }: Readonly<{ children: React.ReactNode; }>) => { + const preloadedUser = await preloadQuery(api.auth.getUser, {}); return (
-
+
{children}
diff --git a/apps/next/src/components/landing/content.ts b/apps/next/src/components/landing/content.ts index e41332f..bd691b5 100644 --- a/apps/next/src/components/landing/content.ts +++ b/apps/next/src/components/landing/content.ts @@ -58,7 +58,7 @@ export const defaultLandingPageContent: LandingPageContent = { badgeEmoji: '🚀', badgeText: 'Production-ready monorepo template', headingPrefix: 'Build Full-Stack Apps with', - headingHighlight: 'convex monorepo', + headingHighlight: 'convex-monorepo', description: 'A Turborepo starter with Next.js, Expo, and self-hosted Convex. Ship web and mobile apps faster with shared code, type-safe backend, and complete control over your infrastructure.', primaryCta: { diff --git a/apps/next/src/components/layout/header/index.tsx b/apps/next/src/components/layout/header/index.tsx index 4deb9f3..1dd653b 100644 --- a/apps/next/src/components/layout/header/index.tsx +++ b/apps/next/src/components/layout/header/index.tsx @@ -1,17 +1,26 @@ +'use client'; + import type { ComponentProps } from 'react'; +import { type Preloaded, usePreloadedQuery } from 'convex/react'; import { Kanit } from 'next/font/google'; import Image from 'next/image'; import Link from 'next/link'; -import { Coffee, Server, Wrench } from 'lucide-react'; - +import { Coffee, Server, User, Wrench } from 'lucide-react'; import { Controls } from './controls'; +import { api } from '@gib/backend/convex/_generated/api.js'; + +type HeaderProps = { + preloadedUser: Preloaded; + headerProps?: ComponentProps<'header'>; +}; const kanitSans = Kanit({ subsets: ['latin'], weight: ['400', '500', '600', '700'], }); -export default function Header(headerProps: ComponentProps<'header'>) { +export default function Header({preloadedUser, headerProps}: HeaderProps) { + const user = usePreloadedQuery(preloadedUser); return (
) { className='w-10 lg:w-15 invert dark:invert-0' /> {/* Navigation */} -