
Pages
Includes the top-level components defined by the application routes. They import more low-level components from the modules folder (more details below).Modules
Each module represents a feature or a group of feature, comprising its specific components, states, and operational logic. They should all follow the structure below. You can nest modules within modules (referred to as submodules) and the same rules will apply.Contexts
A context is a way to pass data through the component tree without having to pass props down manually at every level. See React Context for more details.GraphQL
Includes fragments, queries, and mutations. See GraphQL for more details.- Fragments
- Queries
- Mutations
Hooks
See Hooks for more details.States
Contains the state management logic. RecoilJS handles this.- Selectors: See RecoilJS Selectors for more details.
Utils
Should just contain reusable pure functions. Otherwise, create custom hooks in thehooks folder.
UI
Contains all the reusable UI components used in the application. This folder can contain sub-folders, likedata, display, feedback, and input for specific types of components. Each component should be self-contained and reusable, so that you can use it in different parts of the application.
By separating the UI components from the other components in the modules folder, it’s easier to maintain a consistent design and to make changes to the UI without affecting other parts (business logic) of the codebase.
Interface and dependencies
You can import other module code from any module except for theui folder. This will keep its code easy to test.
Internal
Each part (hooks, states, …) of a module can have aninternal folder, which contains parts that are just used within the module.