6.4 KiB
6.4 KiB
FullStackJS Development Guidelines
🧠 General Philosophy
Unified best practices for NestJS Backend, NextJS Frontend, and Bootstrap-based UI/UX development in TypeScript environments.
Focus on clarity, maintainability, consistency, and accessibility across the entire stack.
⚙️ TypeScript General Guidelines
Basic Principles
- Use English for all code and documentation.
- Explicitly type all variables, parameters, and return values.
- Avoid
any; create custom types or interfaces. - Use JSDoc for public classes and methods.
- Export only one main symbol per file.
- Avoid blank lines within functions.
Naming Conventions
| Entity | Convention | Example |
|---|---|---|
| Classes | PascalCase | UserService |
| Variables & Functions | camelCase | getUserInfo |
| Files & Folders | kebab-case | user-service.ts |
| Environment Variables | UPPERCASE | DATABASE_URL |
| Booleans | Verb + Noun | isActive, canDelete, hasPermission |
Use full words — no abbreviations — except for standard ones (API, URL, req, res, err, ctx).
🧩 Functions
- Write short, single-purpose functions (<20 lines).
- Use early returns to reduce nesting.
- Use map, filter, reduce instead of loops when suitable.
- Prefer arrow functions for short logic, named functions otherwise.
- Use default parameters over null checks.
- Group multiple parameters into a single object (RO-RO pattern).
- Return typed objects, not primitives.
- Maintain a single abstraction level per function.
🧱 Data Handling
- Encapsulate data in composite types.
- Use immutability with
readonlyandas const. - Perform validations in classes or DTOs, not within business functions.
- Always validate data using typed DTOs.
🧰 Classes
- Follow SOLID principles.
- Prefer composition over inheritance.
- Define interfaces for contracts.
- Keep classes focused and small (<200 lines, <10 methods, <10 properties).
🚨 Error Handling
- Use exceptions for unexpected errors.
- Catch only to fix or add context; otherwise, use global error handlers.
- Always provide meaningful error messages.
🧪 Testing (General)
- Use the Arrange–Act–Assert pattern.
- Use descriptive test variable names (
inputData,expectedOutput). - Write unit tests for all public methods.
- Mock external dependencies.
- Add acceptance tests per module using Given–When–Then.
🏗️ Backend (NestJS)
Principles
- Modular architecture:
- One module per domain.
- Controller → Service → Model structure.
- DTOs validated with class-validator.
- Use MikroORM or equivalent for persistence.
- Encapsulate reusable code in a common module (
@app/common):- Configs, decorators, DTOs, guards, interceptors, notifications, shared services, types, validators.
Core Functionalities
- Global filters for exception handling.
- Middlewares for request handling.
- Guards for permissions and RBAC.
- Interceptors for response transformation and logging.
Testing
- Use Jest for testing.
- Test each controller and service.
- Add
admin/testendpoint as a smoke test.
🖥️ Frontend (NextJS / React)
Developer Profile
Senior-level TypeScript + React/NextJS engineer.
Expert in TailwindCSS, Shadcn/UI, and Radix for UI development.
Code Implementation Guidelines
- Use early returns for clarity.
- Always style with TailwindCSS classes.
- Prefer
class:conditional syntax over ternary operators. - Use const arrow functions for components and handlers.
- Event handlers start with
handle...(e.g.,handleClick,handleSubmit). - Include accessibility attributes:
tabIndex="0",aria-label,onKeyDown, etc. - Ensure all code is complete, tested, and DRY.
- Always import required modules explicitly.
UI/UX with React
- Use semantic HTML.
- Apply responsive Tailwind classes.
- Maintain visual hierarchy with typography and spacing.
- Use Shadcn components for consistent UI.
- Keep components small and focused.
🎨 UI/UX (Bootstrap Integration)
Key Principles
- Use Bootstrap 5+ for responsive design and consistent UI.
- Focus on maintainability, readability, and accessibility.
- Use clear and descriptive class names.
Bootstrap Usage
- Structure layout with container, row, col.
- Use built-in components (buttons, modals, alerts, etc.) instead of custom CSS.
- Apply utility classes for quick styling (spacing, colors, text, etc.).
- Ensure ARIA compliance and semantic markup.
Form Validation & Errors
- Use Bootstrap’s built-in validation states.
- Show errors with alert components.
- Include labels, placeholders, and feedback messages.
Dependencies
- Bootstrap (latest CSS + JS)
- Optionally jQuery (for legacy interactive components)
Bootstrap-Specific Guidelines
- Customize Bootstrap via Sass variables and mixins.
- Use responsive visibility utilities.
- Avoid overriding Bootstrap; extend it.
- Follow official documentation for examples.
Performance Optimization
- Include only necessary Bootstrap modules.
- Use CDN for assets and caching.
- Optimize images and assets for mobile.
Key Conventions
- Follow Bootstrap’s naming and structure.
- Prioritize responsiveness and accessibility.
- Keep the file structure organized and modular.
🔗 Full Stack Integration Guidelines
| Aspect | Backend (NestJS) | Frontend (NextJS) | UI Layer (Bootstrap/Tailwind) |
|---|---|---|---|
| API | REST / GraphQL Controllers | API hooks via fetch/axios | Components consuming data |
| Validation | class-validator DTOs |
zod / form-level validation |
Bootstrap validation feedback |
| Auth | Guards, JWT | NextAuth / cookies | Auth UI states |
| Errors | Global filters | Toasts / modals | Alerts / feedback |
| Testing | Jest (unit/e2e) | Vitest / Playwright | Visual regression |
| Styles | Scoped modules | Tailwind / Shadcn | Bootstrap utilities |
| Accessibility | Guards + filters | ARIA attributes | Semantic HTML |
✅ Final Notes
- Use a shared types package (
@types/shared) for consistent interfaces. - Document your modules and APIs.
- Run lint, type-check, and tests before commit.
- Use Prettier + ESLint for consistent formatting.
- Prefer clarity over cleverness — readable code wins.