# 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 `readonly` and `as 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/test` endpoint 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 1. Follow Bootstrap’s naming and structure. 2. Prioritize **responsiveness** and **accessibility**. 3. 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.