Skip to content

All Standards

This page provides a comprehensive overview of all frontend development standards. Each standard is designed to ensure consistency, quality, and maintainability across all frontend projects.

Quick Navigation

CategoryStandards
ArchitectureComponent Size, Logic in Hooks, TypeScript
Data ManagementData Fetching, Backend Integration
UI & DesignStyling, Accessibility, Responsive
QualityError Handling, Performance, Anti-Patterns
WorkflowGit Standards, Required Libraries, Feature Flags
Code EngineeringEngineering, AI Usage
GuidelinesLinting, Naming, URL Sync, i18n, Controlled Components

Architecture

Component Size & Single Responsibility

Components should remain small, easy to read, and focused on a single purpose. Large components are harder to maintain, test, and extend.

Logic in Hooks

Hooks are the place for business logic, side effects, async tasks, and state derivation. Keeping them small, clear, and single-purpose ensures better readability, testability, and reuse.

Use TypeScript as Intended

TypeScript was created to help developers write safer and more maintainable JavaScript. It enforces static typing, catches errors earlier, improves IDE support, and documents intent directly in code.

Data Management

Data Fetching & State Management

In client components, all data fetching must be done via useQuery from TanStack Query. Direct requests with axios inside client components are prohibited.

Backend Integration Policy

Once the UI Design is ready or agreed upon, "waiting for backend" is not an acceptable excuse. Developers must create mock requests and responses based on the agreed API design.

UI & Design

Styling & Design System

A consistent styling approach across the team is critical for maintainability and scalability. We rely on UI libraries such as Tailwind, Bootstrap, or MUI.

Accessibility

Accessibility is not optional. It ensures that applications are usable by people with disabilities, but it also improves overall usability and SEO.

Responsive Design

All UIs must be fully responsive, covering the entire device range from mobile to desktop. Responsiveness is not optional—it is a core requirement.

Quality

Error, Empty, Loading

Handling all possible states is critical for both user experience and reliability. Every asynchronous flow must clearly define what happens when data is loading, empty, successful, or has failed.

Performance

Performance should be considered from the start. Keep components small, avoid unnecessary re-renders, and load only what is needed.

React Anti-Patterns

Good React code is simple, predictable, and easy to read. Anti-patterns make components fragile, harder to maintain, and confusing for other developers.

Guidelines

Linting Standards

Linting enforces consistency and prevents common mistakes in the codebase. All developers must use the same linting configuration to ensure a unified style across the team.

Naming Conventions

Consistency in naming folders and files is critical for project readability and maintainability. All contributors must follow the same convention defined at the start of the project.

Controlled Components

All forms must use React Hook Form for state management and validation. Form fields must be implemented as reusable, controlled components that integrate seamlessly with React Hook Form's context.

URL-synced UI State

UI components like modals, side views, tabs, and filters must keep their state in sync with the URL's query parameters. This ensures that the application state is shareable, reproducible, and restorable.

Internationalization

Every project must be initialized with localization support, even if it starts with only one language. This ensures that adding new languages later is seamless and does not require refactoring.

Workflow

Git Branching & Commit Standards

A clear Git workflow keeps collaboration predictable and avoids confusion. Branch names and commit messages must be consistent, descriptive, and easy to understand.

Required Libraries

The following libraries are mandatory in the codebase unless there is a strong justification to use alternatives: TanStack React Query, React Hook Form, Zod, Material UI, Tailwind CSS, Day.js, and Material React Table.

Feature Flags

All new features should be thought of as feature flag and if it can be feature flagged or not. A feature flag allows enabling/disabling the feature at runtime without code changes or redeploys.

Code Engineering

Engineering in Frontend

Frontend code should follow proven software engineering principles to stay readable, maintainable, and scalable as the project grows. Two core principles are SOLID and DRY.

AI-Assisted Code Usage

AI tools can speed up development, but they must be used responsibly. AI output is never a substitute for developer understanding or proper review.

Remember: These standards are not optional. They are the foundation of our frontend development practice and should be followed consistently across all projects.