An open source frontend application built using the React ⚛️ and Feature-Sliced Design 🍰.
This app is a work in progress. See the roadmap below.
- React, Redux Toolkit, React Hook Form, Zod
- Vite, TypeScript, PostCSS
- Architecture based on Feature-Sliced Design
Right now, I'm using this project as an experiment polygon to try modern technologies and see how a can see frontend application in {{CURRENT_YEAR}}. This project structure combines two methodology: Clean Architecture and Feature-Sliced Design.
- Fully Typed (API adapters, catched error with type guards, form and env variables validators by
zod
) - Developing by Feature Sliced Design (Layers isolation and composition, Public API, DDD)
- Fully API emulation with
mswjs
(all enpoints with JWT authorization) - Storybook stories
- Best practice comments in code ✅
App business logic:
- Product page
- Confirm modals
- Wishlist page or modal
- Product's sorting feature
- Feature toggle
- E-commerce bag logic
- E-commerce order logic
- Stock logic (available of products)
- Product details sizes
- Private routes
Other:
- Move colors to css vars
- Fix FSD errors
- Add Dark theme
- Add FSD public API pattern
- Turn on stylelint on commit
- Fix TODO into code
- Write storybook stories
- Write article to my blog about main concepts
- Add I18n
- Write screenshot tests for stories
- Write integration tests for user's use cases
Note: You can use
npm
oryarn
as package manager instead ofpnpm
, just removenpx only-allow pnpm
frompackage.json
.
- Install dependencies
pnpm install
- Copy
.env.example
to.env.local
cp .env.example .env.local
- Start Vite development server
pnpm start
or start Storybook stand
pnpm storybook
- If you use VSCode, you can set custom settings for auto fix on save (provided by antfu/eslint-config)
- Package
@mswjs/data
can not sync data inlocalStorage
. With the current implementation (without synchronization), after updating the page, the state (cart, wishlist) is lost. I made a pull request with this feature (mswjs/data#277), but it has not merged yet. So I use forked version (you can see path in package.json). - Package
@feature-sliced/eslint-config
don't work on eslint 9 with flat config. That's why it's turned off now.
Licensed under the MIT license.