<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Huy Edward Nguyen</title>
    <description>The latest articles on DEV Community by Huy Edward Nguyen (@nqhed).</description>
    <link>https://dev.to/nqhed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2907001%2Fedf3a797-e4a8-40f2-a916-9bef88fffda3.jpeg</url>
      <title>DEV Community: Huy Edward Nguyen</title>
      <link>https://dev.to/nqhed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nqhed"/>
    <language>en</language>
    <item>
      <title>Biome – A Good Tool for Linting and Formatting Code</title>
      <dc:creator>Huy Edward Nguyen</dc:creator>
      <pubDate>Sat, 19 Apr 2025 15:59:32 +0000</pubDate>
      <link>https://dev.to/nqhed/biome-a-good-tool-for-linting-and-formatting-code-4g4j</link>
      <guid>https://dev.to/nqhed/biome-a-good-tool-for-linting-and-formatting-code-4g4j</guid>
      <description>&lt;p&gt;Keeping code clean and consistent is important in any project. That’s why we use tools like linters to catch bugs and formatters to make code look nice.&lt;br&gt;
Right now, most JavaScript and TypeScript projects use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ESLint&lt;/strong&gt; for linting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prettier&lt;/strong&gt; for formatting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This combo works well, but it can feel a bit heavy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You need to set up and maintain two tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes the rules overlap or conflict.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It adds extra steps to your workflow.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where &lt;strong&gt;Biome&lt;/strong&gt; comes in — a new tool that aims to replace both &lt;strong&gt;ESLint&lt;/strong&gt; and &lt;strong&gt;Prettier&lt;/strong&gt; with a faster, simpler, all-in-one solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 What is Biome?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Biome&lt;/strong&gt; is an all-in-one toolchain for web development that replaces ESLint and Prettier with a faster, simpler, and unified solution — written in Rust.&lt;/p&gt;

&lt;p&gt;🚀** In short:**&lt;/p&gt;

&lt;p&gt;Biome = Linter + Formatter + Import sorter + JSON/CSS support, all in one fast CLI tool.&lt;/p&gt;

&lt;p&gt;🧩 &lt;strong&gt;What does Biome do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Linting&lt;/strong&gt;: Like ESLint – it checks your code for problems and bad practices.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Formatting&lt;/strong&gt;: Like Prettier – it automatically formats your code to follow a consistent style.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Import Sorting&lt;/strong&gt;: Organizes your imports neatly.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Works with&lt;/strong&gt;: JavaScript, TypeScript, JSX, TSX, JSON,...(&lt;a href="https://biomejs.dev/internals/language-support/" rel="noopener noreferrer"&gt;More&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Super fast&lt;/strong&gt;: Thanks to Rust, it can be 25x faster than the ESLint + Prettier combo.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Zero dependencies&lt;/strong&gt;: You only need Biome – not 10 different plugins/configs.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Single config file&lt;/strong&gt;: Uses &lt;code&gt;biome.json&lt;/code&gt; or &lt;code&gt;biome.jsonc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftyjkzc4lkdu2j5jmmpt8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftyjkzc4lkdu2j5jmmpt8.jpeg" alt="Image description" width="800" height="922"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📚 &lt;strong&gt;More info:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://biomejs.dev/" rel="noopener noreferrer"&gt;Biome&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Real Project Setup
&lt;/h2&gt;

&lt;p&gt;I tested Biome on a Vite + React + TypeScript project. It was super quick and simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Vite app:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add vite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: I chose React + Typescript option&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installed Biome:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add --dev --exact @biomejs/biome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Initialized config:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn biome init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Migrate from ESlint (ESLint is installed in Vite + TS by default):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn biome migrate eslint --write
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: After run &lt;code&gt;migrate&lt;/code&gt; command you can remove eslint config file and all ESLint plugin libraries&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the script in &lt;code&gt;package.json&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"lint": "biome check --write ./src"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: Just check lint and format in &lt;code&gt;./src&lt;/code&gt; folder&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;✅ Done! Linting, formatting, and import sorting were ready to go  with just one tool and one config file.&lt;/p&gt;

&lt;p&gt;No need to install ESLint, Prettier, their plugins, or manage multiple config files. Biome handled it all.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ What I liked
&lt;/h3&gt;

&lt;p&gt;🚀 Fast (Vite + Biome feels snappy!).&lt;/p&gt;

&lt;p&gt;🧩 All-in-one tool: lint + format + sort imports.&lt;/p&gt;

&lt;p&gt;💼 Single config – no &lt;code&gt;.eslintrc&lt;/code&gt;, no &lt;code&gt;.prettierrc&lt;/code&gt; and less &lt;code&gt;devDependencies&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;🔍 Clear error messages, auto-fixes on save.&lt;/p&gt;

&lt;p&gt;🎯 Great DX from the start — especially on a fresh project.&lt;/p&gt;




&lt;h2&gt;
  
  
  👇 Below is a quick comparison table between Biome, ESLint, and Prettier to give you a better overview.
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / Tool&lt;/th&gt;
&lt;th&gt;🟢 &lt;strong&gt;Biome&lt;/strong&gt;
&lt;/th&gt;
&lt;th&gt;🔵 &lt;strong&gt;ESLint&lt;/strong&gt;
&lt;/th&gt;
&lt;th&gt;🎨 &lt;strong&gt;Prettier&lt;/strong&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;✅ Linting&lt;/td&gt;
&lt;td&gt;✔️ Built-in&lt;/td&gt;
&lt;td&gt;✔️ Core feature&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ Formatting&lt;/td&gt;
&lt;td&gt;✔️ Built-in&lt;/td&gt;
&lt;td&gt;⚠️ Limited&lt;/td&gt;
&lt;td&gt;✔️ Core feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ Import sorting&lt;/td&gt;
&lt;td&gt;✔️ Built-in&lt;/td&gt;
&lt;td&gt;⚠️ Plugin needed (&lt;code&gt;plugin-import&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;⚠️ Plugin needed (&lt;code&gt;plugin-import&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugin support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🚧 Limited (still growing)&lt;/td&gt;
&lt;td&gt;✔️ Very flexible (many plugins available)&lt;/td&gt;
&lt;td&gt;✔️ Limited to language-specific plugins (for formatting only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧩 All-in-one tool&lt;/td&gt;
&lt;td&gt;✔️ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Performance&lt;/td&gt;
&lt;td&gt;🚀 Super fast (Rust)&lt;/td&gt;
&lt;td&gt;🐢 Slower (Node.js)&lt;/td&gt;
&lt;td&gt;🐢 Slower (Node.js)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦 Dependencies needed&lt;/td&gt;
&lt;td&gt;🟢 1 package&lt;/td&gt;
&lt;td&gt;🔵 5–10+ (plugins, configs...)&lt;/td&gt;
&lt;td&gt;🟠 1 core + optional plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📈 Community size&lt;/td&gt;
&lt;td&gt;🔄 Growing&lt;/td&gt;
&lt;td&gt;🧍‍♂️ Mature &amp;amp; large&lt;/td&gt;
&lt;td&gt;👥 Large &amp;amp; stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Learning curve&lt;/td&gt;
&lt;td&gt;😄 Easy&lt;/td&gt;
&lt;td&gt;⚠️ Medium to steep&lt;/td&gt;
&lt;td&gt;😄 Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✅ Pros of Biome
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🚀 Blazing fast&lt;/td&gt;
&lt;td&gt;Written in Rust – faster than ESLint + Prettier (up to &lt;strong&gt;25× faster&lt;/strong&gt;), which helps &lt;strong&gt;reduce CI/CD execution time&lt;/strong&gt; significantly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧩 All-in-one tool&lt;/td&gt;
&lt;td&gt;Linting, formatting, import sorting – no need to install multiple tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📁 Single config file&lt;/td&gt;
&lt;td&gt;Just &lt;code&gt;biome.json&lt;/code&gt; – no more juggling &lt;code&gt;.eslintrc&lt;/code&gt;, &lt;code&gt;.prettierrc&lt;/code&gt;, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧹 Built-in import sorting&lt;/td&gt;
&lt;td&gt;No need for &lt;code&gt;eslint-plugin-import&lt;/code&gt; or similar plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💬 Clear error messages&lt;/td&gt;
&lt;td&gt;Easy to understand and fix, even for beginners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧑‍💻 Great developer experience&lt;/td&gt;
&lt;td&gt;Works well with VS Code and modern editors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧 Zero-config starter&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;biome init&lt;/code&gt; sets everything up fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦 Lightweight dependency&lt;/td&gt;
&lt;td&gt;You don’t need to install 10+ ESLint/Prettier plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ⚠️ Cons of Biome
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Limitation&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔌 Plugin ecosystem is young&lt;/td&gt;
&lt;td&gt;No support (yet) for custom ESLint plugins or advanced rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧪 Still evolving&lt;/td&gt;
&lt;td&gt;Some features (like SCSS, Vue, Astro...) still in development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔍 No dynamic config&lt;/td&gt;
&lt;td&gt;Config is JSON only (no &lt;code&gt;.js&lt;/code&gt; config logic like in ESLint)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 Not as widely adopted&lt;/td&gt;
&lt;td&gt;Smaller community than ESLint/Prettier for now&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📂 &lt;strong&gt;Config file can be very large&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;If migrating from ESLint and Prettier with many plugins, the config file can become quite large&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚠️ &lt;strong&gt;Not recommended for very old existing projects&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;For very old existing projects already set up with ESLint and Prettier, switching to Biome may lead to unexpected conflicts in the project.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧾 Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Biome&lt;/strong&gt; is a powerful, modern alternative to the ESLint + Prettier combo. If you're starting a new &lt;strong&gt;JavaScript/TypeScript&lt;/strong&gt; project, especially with tools like &lt;strong&gt;Vite&lt;/strong&gt;, Biome offers a cleaner and faster experience with less setup.&lt;/p&gt;

&lt;p&gt;While it’s still maturing and missing some advanced plugin features, its performance, simplicity, and all-in-one nature make it a strong choice for most everyday frontend development needs.&lt;/p&gt;

</description>
      <category>biome</category>
      <category>eslint</category>
      <category>prettier</category>
      <category>development</category>
    </item>
    <item>
      <title>Awesome React Structure</title>
      <dc:creator>Huy Edward Nguyen</dc:creator>
      <pubDate>Sun, 23 Mar 2025 03:47:22 +0000</pubDate>
      <link>https://dev.to/nqhed/awesome-react-structure-37cp</link>
      <guid>https://dev.to/nqhed/awesome-react-structure-37cp</guid>
      <description>&lt;p&gt;Below is a structure for React applications. There may be some differences in the source code to suit the project's technology and business requirements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── public/                        # Static assets (favicons, fonts, etc.)
├── src/                           # Main source code (src directory may not exist in NextJs application)
│   ├── app/                       # Application-wide configurations and routes. It will be the App directory or Page directory of NextJs application.
│   │   ├── routes/                # Application route definitions
│   │   └── root.tsx               # Root component for the application
│   ├── assets/                    # Static assets (e.g., images, CSV files)
│   │   ├── images/                # Image assets
│   │   ├── csv-files/             # CSV data files
│   │   └── ...                    # Other static assets
│   ├── configs/                   # Configuration files (e.g., environment settings)
│   ├── e2e-tests/                  # e2e test files (e.g., playwright, cypress)
│   ├── lib/                        # Utility libraries and helpers
│   │   ├── __test__/               # Tests for utility functions
│   │   ├── constants/              # Constant values
│   │   ├── datetime/               # Date-time utilities
│   │   ├── http-client/            # API client (e.g., Axios)
│   │   ├── utils/                  # General utility functions
│   │   ├── validator/              # Data validation logic
│   │   └── index.ts                # Central export file for library modules
│   ├── presentation/               # UI and feature-related components
│   │   ├── components/             # Reusable UI components
│   │   │   ├── common/             # Common folder contains reused components
│   │   │   │   ├── auth-wrapper/   # Authentication wrappers
│   │   │   │   │   ├── protected-wrapper.tsx
│   │   │   │   │   └── public-wrapper.tsx
│   │   │   │   ├── layout/         # Layout components (e.g., header, footer)
│   │   │   │   │   ├── header.tsx
│   │   │   │   │   └── footer.tsx
│   │   │   └── ui/                 # UI-specific components (buttons, inputs, etc.). They wrap components from UI libraries like Ant Design (AntD), ShadCN-UI, MUI, etc.
│   │   │       ├── button.tsx
│   │   │       ├── input.tsx
│   │   │       └── ...
│   │   ├── hooks/                  # Global custom hooks
│   │   │   ├── __test__/            # Tests for hooks
│   │   │   ├── use-scroll.ts        # Example hook (scroll behavior)
│   │   │   └── ...
│   │   ├── stores/                  # State management (e.g., Zustand, Redux)
│   │   │   │── __tests__/            # Tests for stores
│   │   │   ├── use-user.store.ts     # Example user store
│   │   │   └── ...
│   │   ├── styles/                   # Global and custom styles
│   │   │   ├── custom-a.css
│   │   │   └── global.css
│   │   ├── views/               # view-based modular architecture
│   │   │   └── view-a/          # view A
│   │   │       ├── __tests__/      # Test the view
│   │   │       ├── components/     # Components specific to view A
│   │   │       │   └── form-a.tsx
│   │   │       ├── hooks/          # Custom hooks for view A
│   │   │       │   └── use-form-a.tsx
│   │   │       ├── styles/         # view-specific styles
│   │   │       │   └── form-a.css
│   │   │       ├── types/          # Type definitions
│   │   │       │   ├── form-a-return-type.ts
│   │   │       │   └── index.ts
│   │   │       ├── view-a-list.view.tsx   # List view for view A
│   │   │       └── view-a-detail.view.tsx # Detail view for view A
│   ├── services/                     # Business logic and API service layer
│   │   ├── _models/                   # Type models for API responses
│   │   │   ├── ...
│   │   │   └── service-a.model.ts
│   │   ├── service-a/                 # Service for Feature A
│   │   │   ├── __test__/               # Tests for services
│   │   │   ├── service-a.controller.ts # Controller logic for service A
│   │   │   ├── service-a.dto.ts        # Data Transfer Objects (DTOs)
│   │   │   ├── service-a.http.ts       # HTTP request functions
│   │   │   ├── service-a.schema.ts     # Schema validation (e.g., Zod, Yup)
│   │   │   └── index.ts
│   │   └── index.ts
│   ├── main.ts                        # Entry point for the application
│   └── vite-env.d.ts                   # Type definitions for Vite
└── ...&amp;lt;some configuration files&amp;gt;       # Various configuration files (ESLint, Prettier, etc.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔍 Which design pattern aligns with this structure?
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Match Level&lt;/th&gt;
&lt;th&gt;Why?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Layered Architecture (N-Tier)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅✅✅ High&lt;/td&gt;
&lt;td&gt;Clear separation of Presentation, Services, and Models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;View-Based Modular Architecture (VBA)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅✅✅ High&lt;/td&gt;
&lt;td&gt;View-based organization (&lt;code&gt;views/view-a/&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Feature-Sliced Design (FSD)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Low&lt;/td&gt;
&lt;td&gt;Missing feature-based layers like &lt;code&gt;shared/&lt;/code&gt;, &lt;code&gt;entities/&lt;/code&gt;, &lt;code&gt;features/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Domain-Driven Design (DDD)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Very Low&lt;/td&gt;
&lt;td&gt;No explicit domain layer or use-case separation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clean Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Low&lt;/td&gt;
&lt;td&gt;No clear &lt;strong&gt;domain layer&lt;/strong&gt;, &lt;strong&gt;use cases&lt;/strong&gt;, or &lt;strong&gt;dependency inversion&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🌟 What This Means
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ That structure is good for UI-heavy applications like Next.js, React-based dashboards, or SaaS platforms.&lt;/li&gt;
&lt;li&gt;✅ It scales well in terms of views, making it great for complex UI applications.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💅 Convention
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. Folder Naming Conventions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Folder Type&lt;/th&gt;
&lt;th&gt;Naming Convention&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Root directories&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;public/&lt;/code&gt;, &lt;code&gt;src/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Feature directories&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;services/&lt;/code&gt;, &lt;code&gt;hooks/&lt;/code&gt;, &lt;code&gt;views/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Component directories&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;common/&lt;/code&gt;, &lt;code&gt;ui/&lt;/code&gt;, &lt;code&gt;layout/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Utility directories&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;utils/&lt;/code&gt;, &lt;code&gt;lib/&lt;/code&gt;, &lt;code&gt;configs/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Test directories&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lowercase, kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;__test__/&lt;/code&gt;, &lt;code&gt;__tests__/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stores/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Style folders&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;&lt;code&gt;styles/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. File Naming Conventions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File Type&lt;/th&gt;
&lt;th&gt;Naming Convention&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Component files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;header.tsx&lt;/code&gt;, &lt;code&gt;footer.tsx&lt;/code&gt;, &lt;code&gt;auth-wrapper.tsx&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Utility files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;http-client.ts&lt;/code&gt;, &lt;code&gt;datetime-utils.ts&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hooks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, starts with &lt;code&gt;use-&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;use-scroll.ts&lt;/code&gt;, &lt;code&gt;use-auth.ts&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global styles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;global.css&lt;/code&gt;, &lt;code&gt;custom-a.css&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;View components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, ends with &lt;code&gt;.view.tsx&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;view-a-list.view.tsx&lt;/code&gt;, &lt;code&gt;view-a-detail.view.tsx&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, feature-based&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;service-a.http.ts&lt;/code&gt;, &lt;code&gt;service-a.schema.ts&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State stores&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, starts with &lt;code&gt;use-&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;use-user.store.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Types &amp;amp; Interfaces&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, ends with &lt;code&gt;.ts&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;form-a-return-type.ts&lt;/code&gt;, &lt;code&gt;index.ts&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;vite-env.d.ts&lt;/code&gt;, &lt;code&gt;config.ts&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;kebab-case, ends with &lt;code&gt;.test.ts&lt;/code&gt; or &lt;code&gt;.spec.ts&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;service-a.test.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  📌 Exception:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;My component file names and hook file names use &lt;code&gt;kebab-case&lt;/code&gt; to synchronize with ShadCN-UI. You can use &lt;code&gt;PascalCase&lt;/code&gt; for component file names and &lt;code&gt;camelCase&lt;/code&gt; for hooks that start with &lt;code&gt;use&lt;/code&gt; to match your team's codebase.&lt;/li&gt;
&lt;li&gt;You should apply the &lt;code&gt;Wrapper Pattern&lt;/code&gt; for external libraries and avoid calling them directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: If you use &lt;code&gt;Axios&lt;/code&gt;, you should wrap it in an &lt;code&gt;httpClient&lt;/code&gt; variable inside the &lt;code&gt;http-client.ts&lt;/code&gt; file and use it to call APIs. In the case of UI, you should use components from libraries like AntD, MUI, etc., &lt;strong&gt;indirectly&lt;/strong&gt;, similar to how ShadCN-UI does. This approach makes it easier to customize styles, logic, and other aspects in one place for the entire application.&lt;/p&gt;

&lt;p&gt;✅ Benefits of the Wrapper Pattern:&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Encapsulation&lt;/strong&gt; – Keep styles and behavior in one place, making updates easier.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Centralized Theming&lt;/strong&gt; – Ensure a consistent design across the app.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Maintainability&lt;/strong&gt; – Manage UI imports from a single source, reducing redundancy.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Scalability&lt;/strong&gt; – Easily add new features like logging, authentication, or permissions.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Future-Proofing&lt;/strong&gt; – Simplifies UI library migrations by wrapping external components.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Naming Conventions for Variables, Constants, Functions, and Events
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element Type&lt;/th&gt;
&lt;th&gt;Naming Convention&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local Variables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;userProfile&lt;/code&gt;, &lt;code&gt;totalCount&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Constants&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UPPER_CASE_SNAKE&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;API_BASE_URL&lt;/code&gt;, &lt;code&gt;MAX_LOGIN_ATTEMPTS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Environment Variables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UPPER*CASE_SNAKE, starts with &lt;code&gt;REACT_APP*&lt;/code&gt; (for React)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;REACT_APP_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase, should be a verb&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;fetchData()&lt;/code&gt;, &lt;code&gt;handleSubmit()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Component&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PascalCase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Button&lt;/code&gt;, &lt;code&gt;Input&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Component Props&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;isLoading&lt;/code&gt;, &lt;code&gt;userName&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Event Handlers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase, prefixed with &lt;code&gt;handle&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;handleClick()&lt;/code&gt;, &lt;code&gt;handleFormSubmit()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Booleans&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase, prefixed with &lt;code&gt;is&lt;/code&gt;, &lt;code&gt;has&lt;/code&gt;, or &lt;code&gt;can&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;isVisible&lt;/code&gt;, &lt;code&gt;hasPermission&lt;/code&gt;, &lt;code&gt;canEdit&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State Variables (useState)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase, prefixed with the state name&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;[user, setUser]&lt;/code&gt;, &lt;code&gt;[isOpen, setIsOpen]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Redux Actions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UPPER_CASE_SNAKE&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;LOGIN_SUCCESS&lt;/code&gt;, &lt;code&gt;FETCH_USER_FAILURE&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GraphQL Queries &amp;amp; Mutations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;camelCase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;getUserQuery&lt;/code&gt;, &lt;code&gt;updateProfileMutation&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enums&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PascalCase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;UserRole.Admin&lt;/code&gt;, &lt;code&gt;ButtonVariant.Primary&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  🧪 Testing Strategy
&lt;/h1&gt;

&lt;p&gt;Tests are helpful, but they can’t catch every bug. No test setup can make your app 100% bug-free. There are different ways to test, and each one covers different parts of your app. Based on my experience, here’s how I usually organize testing for a react app:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Layer&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Target&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔬 Unit Test&lt;/td&gt;
&lt;td&gt;Pure functions, Validation schemas (zod, yup, .etc)&lt;/td&gt;
&lt;td&gt;Jest, Vitest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 Integration&lt;/td&gt;
&lt;td&gt;Custom hooks, store management&lt;/td&gt;
&lt;td&gt;RTL + &lt;code&gt;renderHook&lt;/code&gt;, MSW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚀 E2E&lt;/td&gt;
&lt;td&gt;UI logic, interactions, critical flows&lt;/td&gt;
&lt;td&gt;Playwright or Cypress&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  ⁉️ Why Does It Not Fully Follow Domain-Driven Design or Clean Architecture?
&lt;/h1&gt;

&lt;p&gt;While Domain-Driven Design (DDD) and Clean Architecture (CA) work well for backend systems with complex business logic, fully applying them to a frontend app can create unnecessary complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ DDD and CA are designed for Complex Business Domains, Not UI Logic:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DDD and CA are best suited for backend systems with rich business logic, while frontend apps mainly focus on UI rendering and user interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Too Much Boilerplate for a Frontend App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Implementing full DDD and CA requires entities, aggregates, repositories, and domain services, which add overhead without clear benefits.&lt;br&gt;
💡 In frontend apps, we primarily fetch data from APIs—we don’t need to define business rules at this level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Frontend Apps Rely on API Calls, Not Repositories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DDD and CA emphasize the repository pattern for managing data access, but frontend apps mostly interact with APIs (REST or GraphQL).&lt;br&gt;
💡 Unlike backend systems, Frontend apps don’t need full repository abstractions—they simply fetch and display data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Increases Complexity Without Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most frontend apps prioritize UI/UX, performance, and maintainability over deep domain modeling.&lt;br&gt;
💡 Over-engineering frontend logic slows development without improving the user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣ Slows Down Development Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More abstraction = more boilerplate = slower development.&lt;br&gt;
💡 Adding unnecessary layers increases complexity without making the app more scalable or maintainable.&lt;/p&gt;




&lt;h1&gt;
  
  
  🤌🏼 How About Feature-Sliced Design (FSD)?
&lt;/h1&gt;

&lt;p&gt;✅ Yes, that’s a great idea if you want to organize your frontend application in more detail.&lt;/p&gt;

&lt;p&gt;😊 &lt;strong&gt;Feature-Sliced Design (FSD)&lt;/strong&gt; is a modern architecture that helps scale frontend applications, but I haven't used it because:&lt;/p&gt;

&lt;p&gt;1️⃣ FSD forces a deep folder structure, which adds unnecessary complexity if your app isn't large enough.&lt;/p&gt;

&lt;p&gt;2️⃣ Harder for new developers to learn.&lt;/p&gt;

&lt;p&gt;3️⃣ Increased file &amp;amp; folder overhead.&lt;/p&gt;

&lt;p&gt;4️⃣ Global state management becomes harder because each feature handles its own state.&lt;/p&gt;

&lt;p&gt;5️⃣ Harder to refactor shared logic.&lt;/p&gt;




&lt;h1&gt;
  
  
  🤏 What if your project is too hard to follow my structure, or you want to use a simpler one?
&lt;/h1&gt;

&lt;p&gt;Just follow this article: &lt;a href="https://dev.to/pramod_boda/recommended-folder-structure-for-react-2025-48mc"&gt;Recommended Folder Structure for React 2025&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🎯 Conclusion
&lt;/h1&gt;

&lt;p&gt;A well-organized React project structure can significantly improve &lt;strong&gt;developer experience&lt;/strong&gt;, &lt;strong&gt;maintainability&lt;/strong&gt;, and &lt;strong&gt;scalability&lt;/strong&gt;. While advanced architectures like &lt;strong&gt;Clean Architecture&lt;/strong&gt;, &lt;strong&gt;DDD&lt;/strong&gt;, or &lt;strong&gt;Feature-Sliced Design (FSD)&lt;/strong&gt; offer great ideas, they may introduce unnecessary complexity for most frontend apps — especially when the primary focus is UI, user experience, and API interaction.&lt;/p&gt;

&lt;p&gt;This structure strikes a &lt;strong&gt;practical balance&lt;/strong&gt; between flexibility and convention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗂️ Scales well for real-world React and Next.js projects
&lt;/li&gt;
&lt;li&gt;🧱 Encourages modular thinking via views, services, and reusable components
&lt;/li&gt;
&lt;li&gt;📝 Follows consistent naming and folder conventions for team collaboration
&lt;/li&gt;
&lt;li&gt;🧪 Applies smart testing layers (unit, integration, E2E) to cover functionality without over-engineering
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Keep it simple, organized, and aligned with your team’s workflow — and evolve as your project grows.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  📖 References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.meetbrackets.com/architectures-of-modern-front-end-applications-8859dfe6c12e" rel="noopener noreferrer"&gt;Architecture of modern frontend&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/m_midas/feature-sliced-design-the-best-frontend-architecture-4noj"&gt;Feature-Sliced-Design (FSD) the best frontend architecture&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.robinwieruch.de/react-folder-structure/" rel="noopener noreferrer"&gt;React Folder Structure in 5 Steps - 2025&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.highlight.io/blog/3-levels-of-data-validation-in-a-full-stack-application-with-react" rel="noopener noreferrer"&gt;3 Levels of Data Validation in a Full Stack Application With React&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/bespoyasov/clean-architecture-on-frontend-4311"&gt;Clean Architecture on Frontend&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/mohammadfaisal/story-of-a-failed-react-project-4bhp"&gt;Story of a Failed React Project&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/feature-sliced" rel="noopener noreferrer"&gt;Feature-Sliced Design document&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.hao.dev/my-struggles-with-react-testing-library" rel="noopener noreferrer"&gt;My struggles with React Testing Library&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/myth-speed-without-testing-juan-irigoyen-sak6f/" rel="noopener noreferrer"&gt;The myth of speed without testing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🗄️ Examples
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/nqhed/awesome-frontend-structure/tree/vite-react-ts-shadcn" rel="noopener noreferrer"&gt;Vite - React - Typescript - Shadcn&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/nqhed/awesome-react-structure/tree/next-appdir-ts-shadcn" rel="noopener noreferrer"&gt;Next - App router - Typescript - Shadcn&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
