Themes & Styling
Launchpad Next is built as a unified design system where colors, fonts, and components all speak the same language.
At the center of it all is:
styles/globals.cssThis is where your entire visual identity begins.
Global Styling
All theme values are controlled using CSS variables inside globals.css:
:root {
--background: #0a0a0a;
--foreground: #ffffff;
--primary: #7c3aed;
--secondary: #22c55e;
--muted: #a1a1aa;
--border: #27272a;
}These variables power everything in the UI — buttons, text, borders, backgrounds, and accents.
Dark Mode
Dark mode is handled globally by toggling the .dark class:
.dark {
--background: #0a0a0a;
--foreground: #ffffff;
--primary: #8b5cf6;
--secondary: #34d399;
--muted: #71717a;
--border: #27272a;
}Switching themes is just swapping variables — no component rewrites needed.
Fonts
Typography in Launchpad Next uses Next.js built-in font optimization for speed and zero layout shift.
Google Fonts
Example using Inter:
import { Inter } from "next/font/google"
export const inter = Inter({
subsets: ["latin"],
variable: "--font-sans",
})Apply it globally:
<html lang="en" className={inter.variable}>
<body>{children}</body>
</html>Now your font is globally available through CSS variables.
Custom Fonts
You can also use your own fonts locally.
Step 1: Add your font file
public/fonts/
Satoshi.woff2
Step 2: Register the font
import localFont from "next/font/local"
export const satoshi = localFont({
src: "../public/fonts/Satoshi.woff2",
variable: "--font-sans",
})Step 3: Apply globally
<html lang="en" className={satoshi.variable}>Font Strategy
Launchpad Next uses a simple three-variable typography system:
| Variable | Usage |
| --- | --- |
| `--font-sans` | Main UI text |
| `--font-display` | Hero headings (optional) |
| `--font-mono` | Code blocks |This keeps your design scalable and consistent.
Components
Themes don't only control colors and fonts — they also define how components feel.
UI Components
Small reusable building blocks:
components/ui/button.tsx
components/ui/card.tsx
components/ui/input.tsx
Example:
export function Button({ children }: { children: React.ReactNode }) {
return (
<button className="px-4 py-2 rounded-md bg-primary text-white">
{children}
</button>
)
}These automatically inherit theme variables.
Section Components
Landing page sections:
components/sections/hero.tsx
components/sections/features.tsx
components/sections/pricing.tsx
Example:
import { heroContent } from "@/content/hero"
export function Hero() {
return (
<section className="py-24 text-center">
<h1 className="text-5xl font-bold">
{heroContent.title}
</h1>
<p className="mt-4 text-muted-foreground">
{heroContent.subtitle}
</p>
</section>
)
}UI stays clean because content is separated from structure.
Layout Components
Structure-level components:
components/layout/navbar.tsx
components/layout/footer.tsx
Example:
export function Navbar() {
return (
<nav className="flex items-center justify-between p-4 border-b">
<div className="font-bold">Launchpad Next</div>
</nav>
)
}Shared Components
Reusable utilities:
components/shared/container.tsx
Example:
export function Container({ children }: { children: React.ReactNode }) {
return <div className="mx-auto max-w-6xl px-6">{children}</div>
}Mental Model
Think of Launchpad Next as layers that work independently but form one system:
| Layer | Role |
| --- | --- |
| `globals.css` | Visual DNA — colors and mood |
| Fonts | Voice of the product |
| Components | Physical structure |
| Content | Messaging layer |Why This System Works
- One file controls the global theme
- Fonts are optimized via Next.js
- Components inherit styles automatically
- Content stays separate from UI logic
- Rebranding takes minutes, not hours
You're Ready 🚀
Now you can:
- Rebrand your SaaS instantly
- Swap fonts without breaking layout
- Build scalable UI systems
- Maintain clean separation of design and content