Akash Tharindu · 2025-12-25
This document explains how I set up a production-grade Next.js portfolio website using modern best practices. It includes each installation question, the chosen answer, and the meaning of that choice.
npx create-next-app@latest akash-portfolio --ts --app --tailwind
This is the recommended foundation for modern, scalable Next.js applications.
During setup, Next.js asks several configuration questions. Below are the exact questions, selected answers, and why they matter.
Answer: ESLint
Answer: Yes
useMemo and useCallbacksrc/ directory?Answer: Yes
src/ folderResulting structure:
akash-portfolio/
├─ src/
│ ├─ app/
│ ├─ components/
│ ├─ lib/
│ └─ styles/
├─ public/
├─ package.json
└─ tsconfig.json
Answer: Yes
Answer: @/*
Allows absolute imports instead of relative paths.
import Navbar from '@/components/layout/Navbar';
instead of:
import Navbar from '../../../components/layout/Navbar';
@/*| Setting | Selected |
|------------------|-----------|
| TypeScript | ✅ Enabled |
| App Router | ✅ Enabled |
| Tailwind CSS | ✅ Enabled |
| ESLint | ✅ Enabled |
| React Compiler | ✅ Enabled |
| src/ directory | ✅ Enabled |
| Import alias | @/* |
This configuration represents a production-ready Next.js foundation suitable for:
After the setup completed successfully:
npm install lucide-react
npm run dev
http://localhost:3000
This setup is suitable for professional portfolios and real-world applications.
blog.example.com) using MDX| Category | Technology | |-----------------|------------------| | Framework | Next.js 15+ | | Language | TypeScript | | Styling | Tailwind CSS | | Icons | Lucide React | | Linting | ESLint | | Performance | React Compiler | | Deployment | Vercel (planned) |
akash-portfolio/
├─ src/
│ ├─ app/ # App Router pages
│ │ ├─ layout.tsx # Root layout
│ │ ├─ page.tsx # Home page
│ │ └─ globals.css # Global styles
│ ├─ components/ # React components
│ │ ├─ layout/ # Layout components
│ │ ├─ sections/ # Page sections
│ │ └─ ui/ # Reusable UI components
│ ├─ lib/ # Utilities and helpers
│ └─ styles/ # Additional styles
├─ public/ # Static assets
│ ├─ images/
│ └─ cv/
├─ .eslintrc.json # ESLint configuration
├─ tailwind.config.ts # Tailwind configuration
├─ tsconfig.json # TypeScript configuration
├─ next.config.ts # Next.js configuration
└─ package.json # Dependencies
tsconfig.json{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
This enables the @/ import alias.
next.config.tsimport type { NextConfig } from 'next';
const nextConfig: NextConfig = {
reactCompiler: true,
};
export default nextConfig;
This enables the React Compiler.
tailwind.config.tsimport type { Config } from 'tailwindcss';
const config: Config = {
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {},
},
plugins: [],
};
export default config;
This configures Tailwind to scan the src/ directory.
npm run dev
npm run build
npm start
npm run lint
Author: Akash
Date: December 26, 2025
Purpose: Personal reference & future documentation
Project: Production-grade Next.js portfolio website
MIT License – Free to use for personal and commercial projects.
src/ directory structure@/* import aliasEnd of Document
Akash Tharindu writes practical guides on frontend architecture, design systems, and modern product engineering.
A concise weekly email about web engineering, product design, and modern development workflows.
Community comments are coming soon. For now, share feedback via LinkedIn or send your thoughts through the contact page.