Source for viveksahu.com. Next.js 16 App Router, statically exported, no server at runtime.
Four routes, one codebase:
/— hero, tech stack, featured projects, latest posts, contact/projects— MDX case studies (stack used, live demo link, source link)/blog— MDX posts/about— background
next.config.ts sets output: "export". Every route is pre-rendered at build time and shipped as static HTML — no SSR, no API routes, no server to keep alive.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, static export) |
| Language | TypeScript |
| Styling | Tailwind CSS 4 |
| Components | shadcn/ui (Radix-based), lucide-react / react-icons |
| Content | MDX via @next/mdx + next-mdx-remote, parsed with gray-matter |
| Theming | next-themes (dark/light) |
| Hosting | Static CDN edge (Cloudflare-style _headers cache rules in public/) |
app/ Routes — home, about, projects, blog (App Router)
components/ Page sections + shadcn/ui primitives
content/ MDX source for projects and posts (frontmatter + body)
lib/ Build-time readers — parse content/ into sorted lists
Routes read through lib/ straight into content/ at build time — no API layer, no database.
New project or post = new .mdx file in content/projects/ or content/posts/. lib/projects.ts / lib/posts.ts read the directory, sort by date, no registration step needed.
# Clone
git clone https://github.com/vivek-src/viveksahu.com.git
cd viveksahu.com
# Install
npm install
# Run the dev server
npm run devOpen http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start the dev server (webpack mode) |
npm run build |
Build the static export (writes to out/) |
npm run start |
Start next start (production server mode) |
npm run lint |
Run ESLint |
Built by Vivek Sahu · @vivek_src