# Enterprise Mode - Next.js + Full Tooling ## Mode Overview **Purpose**: Production-ready web applications with comprehensive tooling and testing **Target Users**: - Building SaaS products - Enterprise dashboards and admin panels - Content-heavy websites with SEO needs - Applications requiring server-side rendering - Teams needing consistent standards **Setup Time**: ~60 seconds (after npm install) **Philosophy**: Production-ready from day one. Industry-standard tooling with Connor's quality standards built in. --- ## Tech Stack ```yaml Framework: - Next.js 14+ (App Router, React Server Components) - React 18+ - TypeScript 5+ (strict mode) Testing: - Vitest (Testing Trophy approach) - React Testing Library - jsdom (DOM simulation) - 80% coverage threshold Code Quality: - ESLint (Next.js config + strict rules) - Prettier (consistent formatting) - Husky (pre-commit hooks) - lint-staged (staged files only) CI/CD: - GitHub Actions - Automated testing on PR - Build validation - Type checking Standards: - Conventional Commits - Branch naming conventions - Comprehensive documentation ``` --- ## Workflow ### Step 1: Validate Prerequisites ```bash # Check Node.js version (>= 18) node --version # Check npm version (>= 9) npm --version # Check git is installed git --version ``` **If validation fails**: Provide clear upgrade instructions with links ### Step 2: Ask Configuration Questions Only ask essential questions with smart defaults: **Question 1: Project Name** - "What should I name your project?" - Validation: kebab-case, 3-50 chars, no existing directory - Example: my-awesome-app **Question 2: Testing Setup** - "Include testing infrastructure? (Vitest + React Testing Library)" - Default: YES - Explain: "Recommended for production apps. Adds ~30s to setup." **Question 3: CI/CD Workflows** - "Include GitHub Actions CI/CD?" - Default: YES - Explain: "Automated testing on every PR. Requires GitHub repository." **Question 4: Source Directory** - "Use src/ directory for better organization?" - Default: YES - Explain: "Keeps root clean. Next.js best practice." ### Step 3: Scaffold with Next.js ```bash npx create-next-app@latest {project-name} \ --typescript \ --eslint \ --app \ --src-dir \ --import-alias "@/*" \ --no-tailwind cd {project-name} ``` **Why these flags?** - `--typescript`: Connor requires TypeScript - `--eslint`: Linting from start - `--app`: Use App Router (modern approach) - `--src-dir`: Clean project structure - `--import-alias`: Absolute imports with @/ - `--no-tailwind`: Let user choose styling (can add later) ### Step 4: Apply Connor's TypeScript Standards Update `tsconfig.json`: ```json { "compilerOptions": { "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, "noEmit": true, "esModuleInterop": true, "module": "esnext", "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, "plugins": [ { "name": "next" } ], "paths": { "@/*": ["./src/*"] }, /* Connor's Strict Mode Additions */ "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, "noImplicitReturns": true, "noImplicitOverride": true, "forceConsistentCasingInFileNames": true }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } ``` ### Step 5: Set Up Testing (if selected) **5.1 Install Dependencies** ```bash npm install -D vitest @vitejs/plugin-react jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event @vitest/coverage-v8 ``` **5.2 Create `vitest.config.ts`** ```typescript import { defineConfig } from 'vitest/config'; import react from '@vitejs/plugin-react'; import path from 'path'; export default defineConfig({ plugins: [react()], test: { environment: 'jsdom', globals: true, setupFiles: './src/__tests__/setup.ts', coverage: { provider: 'v8', reporter: ['text', 'json', 'html'], exclude: [ 'node_modules/', 'src/__tests__/', '**/*.config.ts', '**/*.config.js', '.next/', ], // Connor's 80% threshold lines: 80, functions: 80, branches: 80, statements: 80, }, }, resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, }); ``` **5.3 Create Test Setup File** `src/__tests__/setup.ts`: ```typescript import '@testing-library/jest-dom'; import { cleanup } from '@testing-library/react'; import { afterEach } from 'vitest'; // Cleanup after each test afterEach(() => { cleanup(); }); ``` **5.4 Create Example Test** `src/__tests__/page.test.tsx`: ```typescript import { describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import Page from '@/app/page'; describe('Home Page', () => { it('should render welcome message when page loads', () => { render(); // Testing Trophy approach: Test user-visible behavior const heading = screen.getByRole('heading', { level: 1 }); expect(heading).toBeInTheDocument(); }); it('should have semantic HTML structure for accessibility', () => { const { container } = render(); // Check for main landmark const main = container.querySelector('main'); expect(main).toBeInTheDocument(); }); }); ``` **5.5 Update package.json Scripts** Add to `scripts`: ```json { "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", "type-check": "tsc --noEmit", "test": "vitest --run", "test:watch": "vitest", "test:coverage": "vitest --coverage", "test:low": "vitest --maxWorkers=2 --run", "test:ui": "vitest --ui" } } ``` ### Step 6: Configure Code Quality Tools **6.1 Extend ESLint Configuration** Update `.eslintrc.json`: ```json { "extends": [ "next/core-web-vitals", "plugin:@typescript-eslint/recommended" ], "rules": { "no-console": "warn", "no-var": "error", "eqeqeq": ["error", "always"], "prefer-const": "error", "@typescript-eslint/no-unused-vars": [ "error", { "argsIgnorePattern": "^_" } ], "@typescript-eslint/no-explicit-any": "error" } } ``` **6.2 Add Prettier** Create `.prettierrc`: ```json { "semi": true, "trailingComma": "es5", "singleQuote": true, "printWidth": 80, "tabWidth": 2, "useTabs": false } ``` Create `.prettierignore`: ``` node_modules .next out build dist coverage *.lock ``` Install Prettier: ```bash npm install -D prettier eslint-config-prettier ``` Update `.eslintrc.json` to include Prettier: ```json { "extends": [ "next/core-web-vitals", "plugin:@typescript-eslint/recommended", "prettier" ] } ``` **6.3 Set Up Husky + lint-staged** ```bash npx husky-init && npm install npm install -D lint-staged ``` Update `.husky/pre-commit`: ```bash #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx lint-staged ``` Create `.lintstagedrc.js`: ```javascript module.exports = { '*.{ts,tsx}': [ 'eslint --fix', 'prettier --write', () => 'tsc --noEmit', // Type check ], '*.{json,md}': ['prettier --write'], }; ``` Update `package.json`: ```json { "scripts": { "prepare": "husky install" } } ``` ### Step 7: Set Up CI/CD (if selected) Create `.github/workflows/ci.yml`: ```yaml name: CI on: pull_request: branches: [main, develop] push: branches: [main] jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x, 20.x] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - name: Install dependencies run: npm ci - name: Run linter run: npm run lint - name: Type check run: npm run type-check - name: Run tests run: npm run test:coverage - name: Upload coverage uses: codecov/codecov-action@v3 if: matrix.node-version == '20.x' with: file: ./coverage/coverage-final.json flags: unittests - name: Build project run: npm run build env: NODE_ENV: production ``` ### Step 8: Create Project Documentation **8.1 Update README.md** ```markdown # {project-name} Production-ready Next.js application with comprehensive testing and tooling. ## Features - โšก Next.js 14+ with App Router - ๐Ÿ”ท TypeScript (strict mode) - ๐Ÿงช Testing Trophy approach (Vitest + RTL) - โœ… 80% test coverage threshold - ๐ŸŽจ ESLint + Prettier - ๐Ÿช Husky pre-commit hooks - ๐Ÿ”„ GitHub Actions CI/CD - ๐Ÿ“ Conventional Commits ## Getting Started ### Prerequisites - Node.js 18+ - npm 9+ ### Installation \`\`\`bash npm install \`\`\` ### Development \`\`\`bash npm run dev \`\`\` Visit [http://localhost:3000](http://localhost:3000) ## Project Structure \`\`\` src/ โ”œโ”€โ”€ app/ # Next.js App Router โ”‚ โ”œโ”€โ”€ page.tsx # Home page โ”‚ โ”œโ”€โ”€ layout.tsx # Root layout โ”‚ โ””โ”€โ”€ globals.css # Global styles โ”œโ”€โ”€ components/ # React components โ”‚ โ”œโ”€โ”€ ui/ # UI components โ”‚ โ””โ”€โ”€ features/ # Feature components โ”œโ”€โ”€ lib/ # Utility functions โ”‚ โ””โ”€โ”€ utils.ts โ””โ”€โ”€ __tests__/ # Test files โ”œโ”€โ”€ setup.ts # Test configuration โ””โ”€โ”€ page.test.tsx # Example test \`\`\` ## Available Commands ### Development - \`npm run dev\` - Start dev server (http://localhost:3000) - \`npm run build\` - Build for production - \`npm run start\` - Start production server ### Code Quality - \`npm run lint\` - Lint code with ESLint - \`npm run type-check\` - Check TypeScript types ### Testing - \`npm run test\` - Run all tests - \`npm run test:watch\` - Run tests in watch mode - \`npm run test:coverage\` - Run tests with coverage report - \`npm run test:low\` - Run tests (low CPU usage) ## Testing Strategy This project follows the **Testing Trophy** approach: - **70% Integration Tests**: User workflows and component interactions - **20% Unit Tests**: Complex business logic - **10% E2E Tests**: Critical user journeys ### Writing Tests Test file naming: \`[component-name].test.tsx\` Test structure: \`\`\`typescript describe('Component Name', () => { it('should [behavior] when [condition]', () => { // Arrange, Act, Assert }); }); \`\`\` Use semantic queries (React Testing Library): 1. \`getByRole()\` - Most preferred 2. \`getByLabelText()\` - Form elements 3. \`getByText()\` - User-visible content 4. \`getByTestId()\` - Last resort only ### Coverage Requirements Minimum 80% coverage for: - Lines - Functions - Branches - Statements ## Git Workflow ### Branch Naming - \`feature/description\` - New features - \`bugfix/description\` - Bug fixes - \`chore/description\` - Maintenance tasks ### Commit Messages Follow [Conventional Commits](https://www.conventionalcommits.org/): \`\`\` feat: add user authentication fix: resolve login redirect issue test: add tests for auth flow docs: update API documentation chore: update dependencies \`\`\` ### Pre-commit Checks Husky automatically runs before each commit: - ESLint (auto-fix enabled) - Prettier (auto-format) - TypeScript type checking - Staged files only (fast) ## Deployment ### Vercel (Recommended) \`\`\`bash npm install -g vercel vercel \`\`\` ### Docker \`\`\`bash docker build -t {project-name} . docker run -p 3000:3000 {project-name} \`\`\` ## Environment Variables Create \`.env.local\`: \`\`\`env # Example variables NEXT_PUBLIC_API_URL=https://api.example.com DATABASE_URL=postgresql://... \`\`\` ## CI/CD GitHub Actions runs on every PR: 1. Install dependencies 2. Lint code 3. Type check 4. Run tests with coverage 5. Build project ## Tech Stack Details ### Why Next.js? - Server-side rendering for SEO - API routes for backend logic - Optimized image handling - Industry standard (Netflix, TikTok) ### Why Vitest? - 10x faster than Jest - Compatible with Vite - Great TypeScript support - Modern testing features ## Contributing 1. Create a feature branch 2. Make changes with tests 3. Ensure all checks pass 4. Submit PR with description ## License MIT --- Built with [react-project-scaffolder](https://github.com/yourusername/react-project-scaffolder) ``` **8.2 Create CONTRIBUTING.md** ```markdown # Contributing Guidelines ## Development Standards ### Code Quality - TypeScript strict mode (all flags enabled) - No \`console.log\` in production code - No \`any\` types - Explicit return types for functions ### Testing - Write tests for new features - Maintain 80% coverage minimum - Follow Testing Trophy approach - Use semantic queries in tests ### Commits - Follow Conventional Commits format - Keep commits atomic and focused - Write descriptive commit messages ## Development Workflow 1. **Create branch**: \`git checkout -b feature/your-feature\` 2. **Make changes**: Edit code + add tests 3. **Run checks**: \`npm run lint && npm run test\` 4. **Commit**: \`git commit -m "feat: your feature"\` 5. **Push**: \`git push origin feature/your-feature\` 6. **Create PR**: Submit for review ## Pre-commit Checks Husky runs these automatically: - ESLint (fixes issues automatically) - Prettier (formats code) - TypeScript (type checking) If checks fail, fix issues before committing. ## Testing Guidelines ### What to Test - User-visible behavior - Business logic - Error handling - Edge cases ### What NOT to Test - Implementation details - External libraries - Trivial functions ### Example Test \`\`\`typescript import { describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { LoginForm } from './LoginForm'; describe('LoginForm', () => { it('should submit form when user enters valid credentials', async () => { const user = userEvent.setup(); const onSubmit = vi.fn(); render(); await user.type(screen.getByLabelText(/email/i), 'test@example.com'); await user.type(screen.getByLabelText(/password/i), 'password123'); await user.click(screen.getByRole('button', { name: /submit/i })); expect(onSubmit).toHaveBeenCalledWith({ email: 'test@example.com', password: 'password123', }); }); }); \`\`\` ## Questions? Open an issue or reach out to the maintainers. ``` ### Step 9: Initialize Git ```bash git init git add . git commit -m "feat: initial Next.js enterprise setup with testing and CI/CD - Next.js 14 with App Router - TypeScript strict mode - Vitest + React Testing Library (80% coverage) - ESLint + Prettier + Husky - GitHub Actions CI/CD - Comprehensive documentation" ``` ### Step 10: Verify Setup ```bash # Verify all files ls -la # Check dependencies installed npm list --depth=0 # Verify TypeScript config cat tsconfig.json | grep "strict" # Verify tests can run npm run test # Verify build works npm run build ``` ### Step 11: Provide User Instructions **Display to user**: ```markdown โœ… Enterprise project "{project-name}" created successfully! ๐Ÿ“ Location: ./{project-name} ๐Ÿš€ Next steps: 1. cd {project-name} 2. npm install 3. npm run dev Your dev server will start at http://localhost:3000 ๐Ÿ“š What you have: โœ“ Next.js 14 with App Router โœ“ TypeScript strict mode โœ“ Vitest + React Testing Library (80% coverage) โœ“ ESLint + Prettier + Husky โœ“ GitHub Actions CI/CD โœ“ Testing Trophy approach โœ“ Comprehensive documentation ๐Ÿงช Test your setup: npm run test # Run all tests npm run lint # Check code quality npm run type-check # Verify types ๐Ÿ“‹ Pre-commit hooks active: - Linting (auto-fix) - Formatting (auto-format) - Type checking ๐Ÿ”„ CI/CD ready: - Push to GitHub to activate workflows - Automated testing on every PR ๐Ÿ’ก Tips: - Follow Testing Trophy: 70% integration, 20% unit, 10% e2e - Use semantic queries: getByRole() > getByLabelText() > getByText() - Write tests alongside features (TDD approach) - Keep commits following Conventional Commits format ๐Ÿ“– Documentation: - README.md - Project overview and commands - CONTRIBUTING.md - Development guidelines ๐ŸŽฏ Production-ready from day one! ``` --- ## File Structure Output ``` {project-name}/ โ”œโ”€โ”€ .github/ โ”‚ โ””โ”€โ”€ workflows/ โ”‚ โ””โ”€โ”€ ci.yml # GitHub Actions CI/CD โ”œโ”€โ”€ .husky/ โ”‚ โ””โ”€โ”€ pre-commit # Pre-commit hooks โ”œโ”€โ”€ .vscode/ (optional) โ”‚ โ””โ”€โ”€ settings.json # Editor config โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ app/ โ”‚ โ”‚ โ”œโ”€โ”€ page.tsx # Home page โ”‚ โ”‚ โ”œโ”€โ”€ layout.tsx # Root layout โ”‚ โ”‚ โ”œโ”€โ”€ globals.css # Global styles โ”‚ โ”‚ โ””โ”€โ”€ favicon.ico # Favicon โ”‚ โ”œโ”€โ”€ components/ โ”‚ โ”‚ โ”œโ”€โ”€ ui/ # UI components โ”‚ โ”‚ โ””โ”€โ”€ features/ # Feature components โ”‚ โ”œโ”€โ”€ lib/ โ”‚ โ”‚ โ””โ”€โ”€ utils.ts # Utilities โ”‚ โ””โ”€โ”€ __tests__/ โ”‚ โ”œโ”€โ”€ setup.ts # Test setup โ”‚ โ””โ”€โ”€ page.test.tsx # Example test โ”œโ”€โ”€ public/ # Static files โ”œโ”€โ”€ .eslintrc.json # ESLint config โ”œโ”€โ”€ .prettierrc # Prettier config โ”œโ”€โ”€ .prettierignore # Prettier ignore โ”œโ”€โ”€ .gitignore # Git ignore โ”œโ”€โ”€ .lintstagedrc.js # lint-staged config โ”œโ”€โ”€ vitest.config.ts # Vitest config โ”œโ”€โ”€ tsconfig.json # TypeScript config โ”œโ”€โ”€ next.config.js # Next.js config โ”œโ”€โ”€ package.json # Dependencies โ”œโ”€โ”€ README.md # Documentation โ””โ”€โ”€ CONTRIBUTING.md # Guidelines ``` --- ## Success Criteria - [ ] Next.js project scaffolded with App Router - [ ] TypeScript strict mode enabled (all flags) - [ ] Vitest + RTL configured with 80% threshold - [ ] Example test passes - [ ] ESLint + Prettier configured - [ ] Husky pre-commit hooks working - [ ] GitHub Actions workflow created - [ ] README and CONTRIBUTING.md generated - [ ] Git initialized with commit - [ ] `npm run dev` starts successfully - [ ] `npm run test` passes - [ ] `npm run build` completes - [ ] Setup time < 90 seconds (excluding npm install) --- ## Troubleshooting **Issue**: Husky pre-commit hook fails **Solution**: Run `npm run lint -- --fix` to auto-fix issues **Issue**: Tests fail with module resolution errors **Solution**: Check vitest.config.ts has correct path aliases **Issue**: Type errors in strict mode **Solution**: This shouldn't happen - review generated code **Issue**: Build fails **Solution**: Run `npm run type-check` to see TypeScript errors **Issue**: Coverage below 80% **Solution**: Add more tests or adjust threshold temporarily --- ## Why This Tech Stack? **Next.js over Vite**: - Server-side rendering for SEO - Built-in routing - API routes for backend - Image optimization - Battle-tested at scale (Netflix, Uber) **Vitest over Jest**: - 10x faster test execution - Better TypeScript support - Modern ESM support - Compatible with Vite ecosystem **Husky + lint-staged**: - Catch issues before commit - Fast (only staged files) - Team consistency - Industry standard **GitHub Actions**: - Free for public repos - Integrated with GitHub - Easy to configure - Extensive marketplace --- **Remember**: This mode is production-ready. Every tool included is standard in industry and aligned with Connor's "production-ready from day one" philosophy.