Description
The eslint.config.mjs exists but is at the default Next.js configuration with no custom rules. The tsconfig.json has strict: true enabled, which is good, but there are no project-specific type safety patterns. Error-prone patterns like any, // @ts-ignore, and unsafe type assertions are not caught.
Code quality gaps:
- No ESLint rules for import ordering
- No naming conventions enforcement (camelCase for functions, PascalCase for components)
- No React-specific rules (hooks dependency array, JSX key)
- No TypeScript strictness beyond basic strict mode
- No barrel file linting (index.ts with many re-exports)
- No unused imports/variables enforcement
- No complexity limits (max lines per function, max params)
- No Prettier configuration for consistent formatting
- No Husky/lint-staged for pre-commit checks
Technical Context & Impact
- Affected Components/Files:
eslint.config.mjs, tsconfig.json, .prettierrc (missing)
- Impact: Inconsistent code quality; preventable bugs reach production
Step-by-Step Implementation Guide
- Enhance ESLint config: Update
eslint.config.mjs with:
import/order - enforce import groups (external, internal, relative)
@typescript-eslint/no-unused-vars - error on unused variables
@typescript-eslint/no-explicit-any - warn on any usage
react-hooks/rules-of-hooks - error on hooks rule violations
react-hooks/exhaustive-deps - error on missing deps
no-console - warn on console.log in production
max-lines-per-function - warn over 100 lines
max-params - warn over 4 params
- Add Prettier: Create
.prettierrc with:
semi: true, singleQuote: true, trailingComma: 'es5'
printWidth: 100, tabWidth: 2
- Organize imports on save:
plugins: ['@trivago/prettier-plugin-sort-imports']
- Install and configure Husky:
npm install husky lint-staged:
pre-commit hook: lint-staged runs ESLint and Prettier on staged files
pre-push hook: npm run build and npm test
- Add commitlint:
commitlint.config.js enforcing Conventional Commits (feat, fix, chore, docs, refactor, test)
- Configure TypeScript strictly: Add
noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride
- Create VS Code workspace settings:
.vscode/settings.json with format-on-save, default formatter
- Add editorconfig:
.editorconfig for cross-editor consistency
- Fix all existing lint issues: Run
npm run lint -- --fix and address remaining warnings
Verification & Testing Steps
- Run
npm run lint -> zero errors, zero warnings
- Verify commit hook: commit with
console.log -> hook blocks commit
- Verify Prettier: save file -> automatically formatted
- Test Conventional Commits: commit message
fixed bug -> commitlint rejects
- Run
npx tsc --noEmit -> zero errors
- Run full build:
npm run build -> success
Description
The
eslint.config.mjsexists but is at the default Next.js configuration with no custom rules. Thetsconfig.jsonhasstrict: trueenabled, which is good, but there are no project-specific type safety patterns. Error-prone patterns likeany,// @ts-ignore, and unsafe type assertions are not caught.Code quality gaps:
Technical Context & Impact
eslint.config.mjs,tsconfig.json,.prettierrc(missing)Step-by-Step Implementation Guide
eslint.config.mjswith:import/order- enforce import groups (external, internal, relative)@typescript-eslint/no-unused-vars- error on unused variables@typescript-eslint/no-explicit-any- warn onanyusagereact-hooks/rules-of-hooks- error on hooks rule violationsreact-hooks/exhaustive-deps- error on missing depsno-console- warn on console.log in productionmax-lines-per-function- warn over 100 linesmax-params- warn over 4 params.prettierrcwith:semi: true,singleQuote: true,trailingComma: 'es5'printWidth: 100,tabWidth: 2plugins: ['@trivago/prettier-plugin-sort-imports']npm install husky lint-staged:pre-commithook:lint-stagedruns ESLint and Prettier on staged filespre-pushhook:npm run buildandnpm testcommitlint.config.jsenforcing Conventional Commits (feat, fix, chore, docs, refactor, test)noUncheckedIndexedAccess,exactOptionalPropertyTypes,noImplicitOverride.vscode/settings.jsonwith format-on-save, default formatter.editorconfigfor cross-editor consistencynpm run lint -- --fixand address remaining warningsVerification & Testing Steps
npm run lint-> zero errors, zero warningsconsole.log-> hook blocks commitfixed bug-> commitlint rejectsnpx tsc --noEmit-> zero errorsnpm run build-> success