Next.js Pages Router (Legacy)
Priority: P0 (CRITICAL)
[!IMPORTANT] The project uses Next.js Pages Router (
pages/directory). Do NOT use App Router features.
Workflow: Add a Server-Rendered Page
- Create page file — Add
pages/posts/[id].tsx. - Add data fetching — Export
getServerSidePropsorgetStaticProps+getStaticPaths. - Import service directly — Never fetch your own
/apiroutes from server-side hooks. - Type the props — Use
InferGetServerSidePropsType<typeof getServerSideProps>.
getServerSideProps Example
Implementation Guidelines
- Routing Architecture: Use the
pages/directory. Use_app.tsxfor global state/layouts and_document.tsxfor custom HTML attributes. Define dynamic routes using brackets[id].tsxor catch-all[...slug].tsx. - Data Fetching (SSR/SSG): Use
getServerSideProps(for every request) orgetStaticProps(at build time) withgetStaticPathsfor dynamic routes. Export these as standaloneasyncfunctions. - Logic Isolation: Never
fetchyour own/apiendpoints from Server-Side hooks. Import the service layer or DB logic directly. - Client Hooks: Use
useRouter()fromnext/routerfor navigation and access to query params. Userouter.push()or<Link>for client-side routing. - APIs: Implement API Routes in
pages/api/for server-only logic or webhooks. Standardize responses with appropriate HTTP status codes. - Next.js 15+ Compatibility: Be cautious of Next.js 15 upgrades; ensure all
getServerSidePropsreturn objects that match the expectedPageProps. - Styling: Standardize via CSS Modules (
*.module.css) or Tailwind CSS. Avoid global CSS unless imported in_app.tsx.
Anti-Patterns
- No fetching own /api routes from SSR: Import the service layer directly.
- No global CSS outside _app.tsx: Use CSS Modules or Tailwind for scoped styles.
- No App Router features in Pages Router projects: Avoid
app/directory patterns.