Next.js Project Structure
Top-level ফোল্ডার-ফাইল, special routing files, route groups, metadata conventions ও project organize করার কৌশল — Next.js-এর সম্পূর্ণ গঠন বাংলায়।
Next.js-এ file-system routing — ফোল্ডার ও ফাইল দিয়ে route তৈরি হয়। project-এর মৌলিক গঠন জানা গুরুত্বপূর্ণ; এই অধ্যায়ে ফোল্ডার, ফাইল convention ও project organize করার কৌশল একসাথে দেখা যাবে।
Top-level ফোল্ডার
উপরের স্তরের ফোল্ডার অ্যাপের কোড ও static asset আলাদা করে রাখে।
| ফোল্ডার | কাজ |
|---|---|
| app/ | App Router — routes, layouts, pages |
| pages/ | Pages Router (পুরোনো, App Router-এ ব্যবহার হয় না) |
| public/ | Static assets (ছবি, font ইত্যাদি) সার্ভ করতে |
| src/ | Optional — application code আলাদা রাখতে |
Top-level ফাইল
উপরের স্তরের ফাইলগুলো configure, dependency, proxy, monitoring ও environment variable সামলায়।
| ফাইল | কাজ |
|---|---|
| next.config.ts | Next.js configuration |
| package.json | Dependencies ও scripts |
| instrumentation.ts | OpenTelemetry ও instrumentation |
| proxy.ts | Next.js request proxy |
| .env / .env.local | Environment variables (VCS-এ track করা যায় না) |
| .env.production / .env.development | Production/development environment variables |
| eslint.config.mjs | ESLint configuration |
| .gitignore | Git-এ ignore করার ফাইল-ফোল্ডার |
| next-env.d.ts | Next.js TypeScript declaration (track করা যায় না) |
| tsconfig.json | TypeScript configuration |
| jsconfig.json | JavaScript configuration (TS না থাকলে) |
Routing Files (Special Files)
app/ ফোল্ডারের ভেতরে এই নামের ফাইলগুলো Next.js নিজেই বুঝে নেয়। page দিলে route public, route দিলে API endpoint।
| ফাইল | এক্সটেনশন | কাজ |
|---|---|---|
| layout | .js .jsx .tsx | Shared UI — navbar, footer ইত্যাদি |
| page | .js .jsx .tsx | Route-এর UI (public page) |
| loading | .js .jsx .tsx | Loading/Skeleton UI |
| not-found | .js .jsx .tsx | 404 UI |
| error | .js .jsx .tsx | Error boundary UI |
| global-error | .js .jsx .tsx | Root layout-এর error boundary |
| route | .js .ts | API endpoint |
| template | .js .jsx .tsx | Re-rendered layout |
| default | .js .jsx .tsx | Parallel route fallback page |
Nested Routes
ফোল্ডার হলো URL segment — nesting করলেই URL nesting হয়। যেকোনো লেভেলের layout তার child segment-কে মোড়ায়, আর page বা route ফাইল থাকলে তবেই route public হয়।
| Path | URL | নোট |
|---|---|---|
| app/layout.tsx | — | Root layout — সব route মোড়ায় |
| app/blog/layout.tsx | — | /blog ও তার descendant মোড়ায় |
| app/page.tsx | / | Public route |
| app/blog/page.tsx | /blog | Public route |
| app/blog/authors/page.tsx | /blog/authors | Public route |
Dynamic Routes
বর্গাকার bracket দিয়ে segment parameterize করা হয়:
| Path | URL pattern |
|---|---|
| app/blog/[slug]/page.tsx | /blog/my-first-post |
| app/shop/[...slug]/page.tsx | /shop/clothing, /shop/clothing/shirts |
| app/docs/[[...slug]]/page.tsx | /docs, /docs/layouts-and-pages |
[segment] = single param, [...segment] = catch-all, [[...segment]] = optional catch-all। params prop থেকে value আসে। বিস্তারিত পরবর্তী অধ্যায়ে।
Route Groups ও Private Folders
URL না বদলেই কোড organize করা যায়:
| Path | URL | নোট |
|---|---|---|
| app/(marketing)/page.tsx | / | Group URL-এ আসে না |
| app/(shop)/cart/page.tsx | /cart | (shop)-এর ভেতরেই layout ভাগ হয় |
| app/blog/_components/Post.tsx | — | Private — routable নয়, UI রাখতে |
| app/blog/_lib/data.ts | — | Private — routable নয়, util রাখতে |
(group)— parenthesis দিয়ে route group; URL-এ আসে না, তবে নিজস্ব layout দেওয়া যায়_folder— underscore দিয়ে private folder; ফোল্ডার ও তার সব subfolder routing-এর বাইরে
Parallel ও Intercepted Routes
এই দুটো feature নির্দিষ্ট UI pattern-এর জন্য — slot-based layout ও modal routing।
| Pattern | কাজ | ব্যবহার |
|---|---|---|
| @folder | Named slot | Sidebar + main content |
| (.)folder | Same level intercept | Sibling route modal-এ দেখানো |
| (..)folder | Parent intercept | Parent-এর child overlay হিসেবে |
| (..)(..)folder | Two levels intercept | Deeply nested overlay |
| (...)folder | Root থেকে intercept | Arbitrary route current view-এ |
Metadata File Conventions
নির্দিষ্ট নামের ফাইল auto-detect করে Next.js metadata তৈরি করে — separate config লাগে না।
App Icons
| ফাইল | এক্সটেনশন | কাজ |
|---|---|---|
| favicon | .ico | Favicon file |
| icon | .ico .jpg .jpeg .png .svg | App icon |
| icon | .js .ts .tsx | Code দিয়ে generated icon |
| apple-icon | .jpg .jpeg .png | Apple app icon |
| apple-icon | .js .ts .tsx | Code দিয়ে generated Apple icon |
Open Graph ও Twitter Images
| ফাইল | এক্সটেনশন | কাজ |
|---|---|---|
| opengraph-image | .jpg .jpeg .png .gif | Open Graph image |
| opengraph-image | .js .ts .tsx | Generated OG image |
| twitter-image | .jpg .jpeg .png .gif | Twitter image |
| twitter-image | .js .ts .tsx | Generated Twitter image |
SEO
| ফাইল | এক্সটেনশন | কাজ |
|---|---|---|
| sitemap | .xml | Sitemap file |
| sitemap | .js .ts | Generated sitemap |
| robots | .txt | Robots file |
| robots | .js .ts | Generated robots |
Component Hierarchy
Special files একটি নির্দিষ্ট ক্রমানুসারে render হয়:
layout— shared UItemplate— re-rendered layouterror— React error boundaryloading— React suspense boundarynot-found— not-found error boundarypageবা nestedlayout
RootLayout
└── Template
└── ErrorBoundary
└── LoadingBoundary
└── NotFoundBoundary
└── Pageএই hierarchy প্রতিটি segment-এ recursively আবার আবার চলে — nested route-এ parent segment-এর component-এর ভেতরে child segment-এর component nest হয়।
Colocation
app ফোল্ডারের ভেতরে nested folder route structure ধরে, তবে page.tsx বা route.ts না থাকলে route public হয় না। তাই project file — component, utility — সব কিছু route segment-এর পাশেই রাখা নিরাপদ।
app ফোল্ডারের ভেতরে যেকোনো ফাইল রাখা যায় — যতক্ষণ না page.tsx বা route.ts থাকে, ততক্ষণ route হয়ে যায় না। অর্থাৎ component, utility — সব কিছু route-এর পাশেই রাখা যায়।
Private Folders ও Route Groups দিয়ে Organize
- Private folder (
_folderName) — routing system এই ফোল্ডার বাদ দেয়; UI logic আলাদা করা, editor-এ grouping, ভবিষ্যতের file convention-এর সাথে নামের conflict এড়াতে কাজে লাগে - Route group (
(folderName)) — URL path-এ যোগ হয় না; section অনুযায়ী route organize, একই segment-এ আলাদা nested layout, নির্দিষ্ট route-এ loading skeleton দিতে ব্যবহার হয়
src ফোল্ডার
চাইলে application code (যেমন app) একটি optional `src/` ফোল্ডারের ভেতরে রাখা যায় — ফলে project root-এর configuration file থেকে application code আলাদা থাকে।
সাধারণ Project Structure
my-app/
├── app/
│ ├── layout.tsx → রুট লেআউট — <html> ও <body>
│ ├── page.tsx → হোম পেজ (/)
│ ├── globals.css → global styles
│ └── favicon.ico
├── public/
│ └── (static assets)
├── next.config.ts → Next.js configuration
├── tsconfig.json → TypeScript configuration
├── eslint.config.mjs → ESLint configuration
└── package.jsonProject Organize করার কৌশল
Next.js file organize নিয়ে unopinionated — যেটি টিমের সাথে মেলে সেটি ধরুন, শুধু project-জুড়ে consistent রাখুন:
app-এর বাইরে রাখা — সব application code root-এর shared folder-এ (components/,lib/),appশুধু routing-এর জন্য বিশুদ্ধ রাখাapp-এর ভেতরে top-level folder — shared codeapproot-এর ভেতরের folder-এ রাখা- Feature/route অনুযায়ী ভাগ — globally shared code
approot-এ, নির্দিষ্ট route যে code ব্যবহার করে তার ভেতরেই রাখা
উপরের ফোল্ডার-ফাইল configure করে, app-এর special file route চালায়, folder বানায় URL segment। page/route না থাকলে route নয় — তাই colocation নিরাপদ; (group) ও _folder দিয়ে URL না বদলে organize করুন।