LogoShip Superfast

Overview

The Next.js 16 web app — how it's built and how the pieces fit together.

What's in apps/web/

The web app is a Next.js 16 website with:

  • A public landing page
  • A sign-in page (Google OAuth)
  • A protected dashboard with profile, team management, and billing pages
  • shadcn/ui components (55 installed)
  • Tailwind v4 for styling
  • Light and dark themes

Pages

RouteWhat it shows
/Landing page — hero section, feature cards, animated logos
/sign-inGoogle OAuth sign-in
/dashboardDashboard overview (protected — must be signed in)
/dashboard/profileUser profile — avatar, name, email, role
/dashboard/teamTeam management — members, invites, role assignment
/dashboard/billingBilling — subscription status, payment history, upgrade

Provider stack

The root layout (app/layout.tsx) wraps the entire app in providers. Here's the order, from outermost to innermost:

ConvexClientProvider     ← Connects to Convex backend
  └─ SessionProvider     ← Provides current user, auth state, signOut
      └─ ThemeProvider   ← Light/dark mode via next-themes
          └─ {children}  ← Your pages

Every page in the app can use these hooks:

  • useSession() — get the current user, check if signed in, sign out
  • useQuery() / useMutation() — read and write data through Convex
  • useTheme() — toggle light/dark mode

Dashboard pages share a sidebar layout defined in app/dashboard/layout.tsx. The sidebar items are configured in lib/config.ts:

export const NAV_ITEMS = [
  { title: "Dashboard", href: "/dashboard" },
  { title: "Team", href: "/dashboard/team" },
  { title: "Billing", href: "/dashboard/billing" },
  { title: "Account", href: "/dashboard/profile" },
];

To add a new dashboard page, create a folder in app/dashboard/ with a page.tsx and add an entry to NAV_ITEMS.

Fonts

The app loads four Google Fonts in the root layout:

FontCSS VariableUsage
Inter--font-sansDefault body text
Inria Serif--font-serifSerif accent text
Instrument Serif--font-instrument-serifLanding page headings
Geist Mono--font-monoCode blocks

Key files

FileWhat it does
app/layout.tsxRoot layout — fonts, providers, toaster
app/page.tsxLanding page
app/sign-in/page.tsxSign-in page
app/dashboard/layout.tsxDashboard layout — auth guard + sidebar
lib/config.tsApp name, navigation items
lib/utils.tscn() helper for merging class names
app/globals.cssTheme colors
components/providers/Convex, session, team, and theme providers
components/ui/All shadcn/ui components

Next steps

Continue with Authentication to see how sign-in works.

On this page