đ„ ïžPreview: mstack-starter.vercel.app
Projeto desenvolvido Ă fim de servir como projeto starter jĂĄ configurado para projetos Next.JS baseado em uma arquitetura de BFF (Backend For Front-End) e Atom Design System.
As dependĂȘncias do projeto foram escolhidas pensando que a alta aderĂȘncia de mercado viabiliza pesquisas de conteĂșdos, suporte a bugs e acesso a atualizaçÔes.
O projeto inicial é um overkill para aplicaçÔes simples como essa. Entretanto, o objetivo do projeto é ser um starter provendo uma estrutura de pastas, configuraçÔes iniciais e exemplos dos conceitos que serão explicados nesse README.
Clone o projeto ou rode o seguinte comando em seu terminal:
npx mstack-script
Começando pela escolha mais impactante, o uso do framework Next.JS.
Assim como a própria documentação do React recomenda, começamos com um framework para prover soluçÔes robustas e alinhadas com o mercado e ecossistema React.
A escolha do framework Next.JS foi feita pensando na estrutura do framework possibilitar a implementação da arquitetura BFF (Backend For Frontend), escolhida para estrutrara a camada de requisiçÔes da aplicação, com facilidade.
A arquitetura BFF (Backend For Frontend) Ă© uma abordagem que cria uma camada de backend especĂfica para cada frontend, permitindo que o frontend receba dados jĂĄ formatados e otimizados para suas necessidades. Isso reduz a complexidade no frontend, melhora o desempenho e facilita a manutenção, jĂĄ que o backend pode evoluir independentemente do frontend.
Tanstack Query (anteriormente conhecido como React Query) Ă© uma biblioteca para gerenciamento de estado e cache de dados em aplicaçÔes React. Ele simplifica o processo de buscar, armazenar e sincronizar dados entre o frontend e o backend, alĂ©m de oferecer recursos como refetch automĂĄtico, paginação e tratamento de erros. Isso melhora a eficiĂȘncia e a experiĂȘncia do usuĂĄrio, especialmente em aplicaçÔes que dependem de muitas requisiçÔes assĂncronas.
Radix-UI: Uma biblioteca de componentes acessĂveis e altamente customizĂĄveis, que segue as melhores prĂĄticas de acessibilidade e design. Ela permite criar interfaces consistentes e funcionais sem sacrificar a flexibilidade.
TailwindCSS: Um framework CSS utilitĂĄrio que permite criar designs responsivos e modernos de forma rĂĄpida e eficiente. Com Tailwind, Ă© possĂvel estilizar componentes diretamente no HTML, reduzindo a necessidade de escrever CSS personalizado e mantendo o cĂłdigo mais limpo.
Atom Design System: Uma abordagem de design que organiza componentes em ĂĄtomos, molĂ©culas e organismos, promovendo reutilização e consistĂȘncia na interface do usuĂĄrio. Isso facilita a criação de interfaces modulares e escalĂĄveis, alĂ©m de melhorar a colaboração entre designers e desenvolvedores.
React Toastify: Uma biblioteca para exibir notificaçÔes (toasts) de forma simples e elegante. Ela Ă© altamente customizĂĄvel e fĂĄcil de integrar, proporcionando uma experiĂȘncia de usuĂĄrio mais rica.
Spinners React: Uma coleção de componentes de spinners (indicadores de carregamento) que podem ser usados para melhorar a experiĂȘncia do usuĂĄrio durante operaçÔes assĂncronas. Esses spinners sĂŁo leves e altamente personalizĂĄveis.
-- React Hook Form: Uma biblioteca leve e eficiente para gerenciamento de formulĂĄrios em aplicaçÔes React. Ela utiliza hooks para simplificar a validação, manipulação de erros e submissĂŁo de formulĂĄrios, oferecendo uma experiĂȘncia de desenvolvimento mais fluida e menos verbosa em comparação com outras soluçÔes.
Essas dependĂȘncias sĂŁo totalmente opcionais e foram incluĂdas apenas para demonstração no projeto exemplo, mas podem ser facilmente removidas ou substituĂdas conforme necessĂĄrio.
mstack/
âââ node_modules/ # Pasta padrĂŁo de projetos JS contendo suas dependĂȘncias
âââ public/ # Pasta pĂșblica do Next.JS
âââ src/ # CĂłdigo-fonte do frontend da aplicação
â âââ app/ # Next.JS App Router
â â âââ (pages)/ # Pasta que centraliza as pĂĄginas da aplicação
â â â âââ (home)/ # Maneira simples de centralizar a pĂĄgina Home e arquivos relacionados
â â â âââ layout.tsx # Layout padrĂŁo da aplicação
â â âââ api/ # Rotas de API (BFF)
â â âââ favicon.ico # Favicon da aplicação
â â âââ globals.css # CSS Global da aplicação
â âââ common/ # Pasta de arquivos compartilhados por toda aplicação
â â âââ contexts/ # Contextos e Providers
â â âââ utils/ # utilitĂĄrios gerais
â âââ components/ # Pasta que centraliza componentes (Atom Design System)
â
âââ README.md # Documentação principal do repositĂłrio
Project developed to serve as a starter project already configured for Next.JS projects based on a BFF (Backend For Front-End) architecture and Atom Design System.
The project dependencies were chosen considering that high market adherence enables content research, bug support, and access to updates.
The initial project is an overkill for simple applications like this one. However, the project's goal is to be a starter providing a folder structure, initial configurations, and examples of the concepts that will be explained in this README.
Clone the project or run the following command in your terminal:
npx mstack-script
Starting with the most impactful choice, the use of the Next.JS framework.
As React's own documentation recommends, we start with a framework to provide robust solutions aligned with the market and React ecosystem.
The choice of the Next.JS framework was made considering the framework's structure enabling the implementation of the BFF (Backend For Frontend) architecture, chosen to structure the application's request layer with ease.
The BFF (Backend For Frontend) architecture is an approach that creates a specific backend layer for each frontend, allowing the frontend to receive data already formatted and optimized for its needs. This reduces complexity in the frontend, improves performance, and facilitates maintenance, as the backend can evolve independently of the frontend.
Tanstack Query (formerly known as React Query) is a library for state management and data caching in React applications. It simplifies the process of fetching, storing, and synchronizing data between the frontend and backend, and offers features like automatic refetching, pagination, and error handling. This improves efficiency and user experience, especially in applications that rely on many asynchronous requests.
Radix-UI: A library of accessible and highly customizable components that follows best practices in accessibility and design. It allows for the creation of consistent and functional interfaces without sacrificing flexibility.
TailwindCSS: A utility-first CSS framework that allows for the quick and efficient creation of modern, responsive designs. With Tailwind, it's possible to style components directly in the HTML, reducing the need to write custom CSS and keeping the code cleaner.
Atom Design System: A design approach that organizes components into atoms, molecules, and organisms, promoting reusability and consistency in the user interface. This facilitates the creation of modular and scalable interfaces, and improves collaboration between designers and developers.
React Toastify: A library for displaying notifications (toasts) in a simple and elegant way. It is highly customizable and easy to integrate, providing a richer user experience.
Spinners React: A collection of spinner components (loading indicators) that can be used to enhance the user experience during asynchronous operations. These spinners are lightweight and highly customizable.
React Hook Form: A lightweight and efficient library for managing forms in React applications. It leverages hooks to simplify form validation, error handling, and submission, providing a smoother and less verbose development experience compared to other solutions.
These dependencies are entirely optional and were included only for demonstration purposes in the example project, but they can be easily removed or replaced as needed.
mstack/
âââ node_modules/ # Default folder for JS projects containing their dependencies
âââ public/ # Next.JS public folder
âââ src/ # Frontend application source code
â âââ app/ # Next.JS App Router
â â âââ (pages)/ # Folder that centralizes the application's pages
â â â âââ (home)/ # Simple way to centralize the Home page and related files
â â â âââ layout.tsx # Default application layout
â â âââ api/ # API routes (BFF)
â â âââ favicon.ico # Application favicon
â â âââ globals.css # Global CSS of the application
â âââ common/ # Folder for files shared across the application
â â âââ contexts/ # Contexts and Providers
â â âââ utils/ # General utilities
â âââ components/ # Folder that centralizes components (Atom Design System)
â
âââ README.md # Main repository documentation