# Gasket Next.js Pages Template A modern TypeScript web application template built with Gasket, Next.js Pages Router, HTTPS proxy, and internationalization support. ## Overview This template provides a production-ready starting point for building web applications using: - **Next.js 15** with Pages Router - React framework with file-based routing - **HTTPS Proxy** - Secure development environment with proxy server - **TypeScript** - Type-safe development with modern JavaScript features - **Gasket** - Plugin architecture for extensible applications - **React Intl** - Internationalization with multi-language support - **Vitest** - Lightning-fast unit testing with React Testing Library ## Features - ✅ **Next.js Pages Router** with TypeScript support - ✅ **HTTPS development proxy** for secure local testing - ✅ **Internationalization** pre-configured with English and French - ✅ **Server-side rendering** with Gasket data injection - ✅ **API routes** support via Next.js API directory - ✅ **Testing setup** with Vitest, React Testing Library, and JSDOM - ✅ **ESLint configuration** with React and Next.js rules - ✅ **Development tools** with hot reloading and TypeScript watching - ✅ **Production build** optimization ## Quick Start Create a new Next.js Pages Router project: ```bash npx create-gasket-app@latest my-app --template @gasket/template-nextjs-pages ``` ## Project Structure ``` my-app/ ├── pages/ # Next.js Pages Router │ ├── _app.tsx # App component wrapper │ ├── _document.ts # Document component │ └── index.tsx # Home page component ├── components/ # React components │ └── head.tsx # Reusable head component ├── locales/ # Internationalization files │ ├── en-US.json # English translations │ └── fr-FR.json # French translations ├── test/ # Test files ├── gasket.ts # Gasket configuration ├── server.ts # HTTPS proxy server ├── intl.ts # Internationalization manager ├── next.config.js # Next.js configuration ├── tsconfig.json # TypeScript configuration └── dist/ # Built server files ``` ## Available Scripts | Script | Description | |--------|-------------| | `npm run local` | Start development with HTTPS proxy, TypeScript watch, and Next.js dev server | | `npm run build` | Build TypeScript proxy server and Next.js application | | `npm run start` | Start production servers (HTTPS proxy + Next.js) | | `npm run preview` | Build and start production servers | | `npm run test` | Run unit tests | | `npm run test:watch` | Run tests in watch mode | | `npm run test:coverage` | Run tests with coverage report | | `npm run docs` | Generate and serve documentation | | `npm run lint` | Check code style and quality | ## Development ### HTTPS Development Proxy The template includes an HTTPS proxy server that runs alongside Next.js during development: - **HTTPS Proxy**: `https://localhost:80` - **Next.js Dev Server**: `http://localhost:3000` - **Proxy Target**: Routes HTTPS traffic to the Next.js dev server This allows you to: - **Test HTTPS features** locally (secure cookies, service workers, etc.) - **Simulate production environment** with secure connections - **Debug SSL/TLS issues** during development - **Test PWA features** that require HTTPS ### Development Setup Three concurrent processes run during development: 1. **TypeScript Watch** - Compiles server TypeScript files on change 2. **HTTPS Proxy Server** - Provides secure development environment 3. **Next.js Dev Server** - Hot reloads React components and pages ### Pages Router Architecture This template uses Next.js Pages Router, which provides: - **File-based routing** in the `pages/` directory - **`_app.tsx`** for global app wrapper and providers - **`_document.ts`** for HTML document structure - **Data fetching** with `getServerSideProps`, `getStaticProps`, and `getInitialProps` - **API routes** in `pages/api/` directory - **Automatic code splitting** per page ## Internationalization The template includes full i18n support with React Intl and `@gasket/react-intl`. ## Pages and Components ### App Component (`pages/_app.tsx`) The app component wraps all pages and includes: - **IntlProvider** for internationalization - **Router-based locale detection** - **Global providers** and context ### Document Component (`pages/_document.ts`) Enhanced with Gasket data injection using `withGasketData`: ```tsx import Document from 'next/document'; import { withGasketData } from '@gasket/nextjs/document'; import gasket from '@/gasket'; export default withGasketData(gasket)(Document); ``` ### Adding New Pages Create new pages in the `pages/` directory: ```tsx // pages/about.tsx import Head from '../components/head'; import { FormattedMessage } from 'react-intl'; export default function AboutPage() { return (