Portfolio and blog built with Next.js 14 (App Router), React 18, Tailwind CSS, and TypeScript.
- Framework: Next.js 14 (App Router)
- React: 18.x
- Styling: Tailwind CSS 3
- Language: TypeScript
- Content: Markdown (
gray-matter+react-markdown) for blog posts - Package Manager: pnpm
git clone <repository-url>
cd website
pnpm installpnpm devVisit http://localhost:3000.
pnpm build| Path | Purpose |
|---|---|
.next/ |
pnpm build writes here. Compiled app, server bundles, static assets for production. This folder is not committed to git. Run pnpm start to serve it. |
public/ |
Static files you add (images, PDF, favicon.ico). Next.js serves them at the site root (e.g. public/img/x.jpg → /img/x.jpg). Build output is never written into public/. |
out/ |
Only if you enable static export (output: 'export' in next.config). Then pnpm build produces a static site in out/, still not in public/. |
So: public/ = your static assets only; .next/ = build output.
pnpm build
pnpm start├── app/
│ ├── layout.tsx # Root layout, metadata
│ ├── page.tsx # Homepage
│ ├── globals.css
│ ├── components/ # UI components
│ ├── lib/ # Profile data, blog helpers, projects
│ ├── blog/ # Blog index and post pages
│ ├── sitemap.ts
│ ├── robots.ts
│ └── not-found.tsx
├── content/blog/ # Markdown posts
└── public/ # Static assets (images, resume PDF)
Place static files directly in public/:
public/img/profile.jpg,public/img/header-bg.jpgpublic/Theenadayalan_Resume.pdfpublic/blog/[slug]/for blog post images
Profile and resume content is edited in app/lib/profile.ts.
- Push to GitHub
- Import project in Vercel
- Build command:
pnpm build - Deploy
Theenadayalan Kaliamurthy – theenadayalan.netlify.app