A standard template used by everyone at Fanth for building web apps. Built with Next.js, Tailwind CSS, shadcn/ui, Lucide icons, Framer Motion, and multiple deployment options.
- Framework: Next.js 15 with Turbopack
- React: v19
- Styling: Tailwind CSS 4
- Components: shadcn/ui (New York style)
- Icons: Lucide React
- Animations: Framer Motion
- Package Manager: pnpm
- Language: TypeScript
- Server Components (RSC) ready
- Cloudflare Pages deployment via OpenNext
- Docker support with GitHub Container Registry
- GitHub Actions CI/CD
- Prettier with Tailwind CSS plugin
- Renovate for automated dependency updates
# Install dependencies
pnpm install
# Run development server with Turbopack
pnpm devOpen http://localhost:3000 to see the result.
| Command | Description |
|---|---|
pnpm dev |
Start dev server with Turbopack |
pnpm build |
Build for production |
pnpm start |
Start production server |
pnpm lint |
Run ESLint |
pnpm preview |
Build and preview Cloudflare deployment |
pnpm deploy |
Deploy to Cloudflare Pages |
pnpm dlx shadcn@latest add buttonThis template works great with Lucide React icons (recommended for shadcn/ui) or Phosphor Icons.
pnpm add lucide-reactimport { Search, Menu, X } from "lucide-react";
export function Header() {
return (
<header>
<button><Menu className="h-5 w-5" /></button>
<button><Search className="h-5 w-5" /></button>
</header>
);
}For animations we use Framer Motion.
pnpm add framer-motionimport { motion } from "framer-motion";
export function FadeInBox() {
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.3 }}
>
Hello!
</motion.div>
);
}pnpm deployThe included Dockerfile is automatically built and pushed to GHCR via GitHub Actions on push to master.