ΠΠ΅ΡΡΠΈΡ: 2.0.0
ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΡΠΊΠΈΠΌΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈ ΠΊΠ²Π΅ΡΡΠ°ΠΌΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅ Π°ΡΠΎΠΌΠ½ΡΡ Π³ΠΎΡΠΎΠ΄ΠΎΠ².
ATOM ΠΠΠΠ Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΅Π΄ΠΈΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΠΎΠ², ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΈ Π²ΡΠ΅Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π±Π»Π°Π³ΠΎΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΡΠΊΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΈ ΠΊΠ²Π΅ΡΡΠΎΠ² Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ»ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π³Π΅ΠΉΠΌΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡΠ°ΡΡΠΈΡ Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
- ΠΡΠΎΡΠΌΠΎΡΡ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΡΠΊΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ² ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
- Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ
- Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΏΠΎ Π³ΠΎΡΠΎΠ΄Π°ΠΌ, ΡΠΈΠΏΠ°ΠΌ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
- ΠΡΠΎΡΠΌΠΎΡΡ ΡΠΏΠΈΡΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ Π² ΠΏΡΠΎΡΠΈΠ»Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- ΠΠΎΠ΄Π΅ΡΠ°ΡΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΡΡΠ°
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ²Π΅ΡΡΠΎΠ² Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΠ°ΠΏΠΎΠ² ΠΊΠ²Π΅ΡΡΠ°: ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΡ, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ²Π΅ΡΡΠΎΠ²
- ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² ΠΊΠ²Π΅ΡΡΠ°Ρ
- Π‘ΠΈΡΡΠ΅ΠΌΠ° QR-ΠΊΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΡΠ°ΡΡΠΈΡ
- ΠΡΡ ΠΈΠ²Π°ΡΠΈΡ ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ²Π΅ΡΡΠΎΠ²
- ΠΡΠΎΡΠΌΠΎΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ°ΡΡΠΈΡ Π² ΠΊΠ²Π΅ΡΡΠ°Ρ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈ ΠΎΠΏΡΡΠ°
- ΠΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π°Π³ΡΠ°Π΄Ρ
- ΠΡΡΠΎΡΠΈΡ ΡΡΠ°ΡΡΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΠΊΠ²Π΅ΡΡΠ°ΠΌΠΈ
- Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
- ΠΡ ΠΎΠ΄ Π² ΡΠΈΡΡΠ΅ΠΌΡ
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ
- ΠΠ°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
- ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΈ ΠΊΠ²Π΅ΡΡΠΎΠ² Π½Π° ΠΊΠ°ΡΡΠ΅
- ΠΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
- Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ
- ΠΠ΅ΡΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΊΠ°ΡΡΠ΅
- React 19 - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- TypeScript - ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- Vite 7 - ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
- w2b-vite-filebased-routing - ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ (file-based routing)
- React Router DOM 7 - Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ
- Redux Toolkit - ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- RTK Query - ΡΠ°Π±ΠΎΡΠ° Ρ API ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
- Redux Persist - ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
- Leaflet - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΠΊΠ°ΡΡΠ°ΠΌΠΈ
- React Leaflet - React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Leaflet
- Leaflet MarkerCluster - ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΠΊΠ΅ΡΠΎΠ² Π½Π° ΠΊΠ°ΡΡΠ΅
- Tailwind CSS - ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΡΠΉ CSS-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
- Tailwind Animate CSS - Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
- React Hook Form - ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΠΌΠΈ
- Zod - ΡΡ Π΅ΠΌΠ° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
- Hookform Resolvers - ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Zod Ρ React Hook Form
- Shadcn UI - Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- Lucide React - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠΊΠΎΠ½ΠΎΠΊ
- Sonner - ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
- Emoji Picker React - Π²ΡΠ±ΠΎΡ ΡΠΌΠΎΠ΄Π·ΠΈ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΈ ΠΊΠ²Π΅ΡΡΠΎΠ²
- React Joyride - ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΡΡΡ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
- Next Themes - ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ
- Vitest - Π±ΡΡΡΡΡΠΉ unit-ΡΠ΅ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
- React Testing Library - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ React ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
- MSW (Mock Service Worker) - ΠΌΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ HTTP Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ²
- @testing-library/jest-dom - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠ΅ΡΡ Π΄Π»Ρ DOM
- Node.js Π²Π΅ΡΡΠΈΠΈ 18 ΠΈΠ»ΠΈ Π²ΡΡΠ΅
- pnpm ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
pnpm installpnpm devΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://localhost:5173
pnpm buildΠ‘ΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ΄ΡΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ dist
pnpm previewpnpm lintΠΠ°ΠΏΡΡΠΊ Π²ΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ²:
pnpm testΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ² Ρ UI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ:
pnpm test:uiΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ² Ρ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°:
pnpm test:coveragesrc/
components/ - React ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
forms/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΎΡΠΌ (ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ, Π²Ρ
ΠΎΠ΄, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ ΠΈ ΠΊΠ²Π΅ΡΡΠΎΠ²)
header/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ°ΠΏΠΊΠΈ ΡΠ°ΠΉΡΠ°
home/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ (Hero, About, Features ΠΈ Ρ.Π΄.)
manage/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ²Π΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ
map/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ°ΡΡΠΎΠΉ
profile/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
support/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ
tour/ - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ
ΡΡΡΠΎΠ²
ui/ - ΠΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ UI ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
pages/ - Π‘ΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (file-based routing)
(auth)/ - Π‘ΡΡΠ°Π½ΠΈΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
(header)/ - Π‘ΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠ°ΠΏΠΊΠΎΠΉ
(manage)/ - Π‘ΡΡΠ°Π½ΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
store/ - Redux store ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ
entities/ - RTK Query ΡΠ΅ΡΠ²ΠΈΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ API
hooks/ - Redux Ρ
ΡΠΊΠΈ
hooks/ - ΠΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ React Ρ
ΡΠΊΠΈ
contexts/ - React ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ
utils/ - Π£ΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
types/ - TypeScript ΡΠΈΠΏΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
constants/ - ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
data/ - Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ (Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ.Π΄.)
lib/ - ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
provider/ - ΠΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ (ProtectedRoute)
pwa/ - ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Progressive Web App (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ Ρ
ΡΠΊΠΈ)
styles/ - ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈ
tests/ - Π’Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
unit/ - Unit ΡΠ΅ΡΡΡ
integration/ - ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ
/- ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ/map- ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΊΠ°ΡΡΠ° Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈ ΠΊΠ²Π΅ΡΡΠ°ΠΌΠΈ/login- Π‘ΡΡΠ°Π½ΠΈΡΠ° Π²Ρ ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ/registration- Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ/forgot-password- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ/reset-password- Π‘Π±ΡΠΎΡ ΠΏΠ°ΡΠΎΠ»Ρ/profile- ΠΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ/add-organization- Π€ΠΎΡΠΌΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ/add-quest- Π€ΠΎΡΠΌΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ²Π΅ΡΡΠ°/organizations/:id/manage- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ/quests/:id/manage- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ²Π΅ΡΡΠΎΠΌ/support- Π‘ΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ REST API Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ (ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅)
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ²Π΅ΡΡΠ°ΠΌΠΈ (ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅)
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΊΠ²Π΅ΡΡΠΎΠ²
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ ΡΡΠ°ΠΏΠΎΠ² ΠΊΠ²Π΅ΡΡΠΎΠ²
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΊ API ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· RTK Query Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ .
ΠΠ²Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΈ ΡΠΈΠΏΠ° ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΠ°ΠΏΠΎΠ²:
- Π€ΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° (finance)
- ΠΠΎΠ»ΠΎΠ½ΡΠ΅ΡΡ (contributers)
- ΠΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ (material)
Π’ΠΈΠΏ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ°ΠΏΠ° ΠΊΠ²Π΅ΡΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² API ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ.
ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎ ΡΡΠ°ΡΡΡΠΎΠΌ isApproved: false Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΠ΅ Π² ΠΊΠ²Π΅ΡΡΠ°Ρ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ . Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΌ ΠΎΠΏΡΡΠ΅.
ΠΡΠΎΠ΅ΠΊΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- Unit ΡΠ΅ΡΡΡ - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΡΠΈΠ»ΠΈΡ
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ API
- MSW (Mock Service Worker) - ΠΌΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ HTTP Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²
- React Testing Library - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Ρ ΡΠΎΠΊΡΡΠΎΠΌ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ
- Vitest - Π±ΡΡΡΡΡΠΉ ΡΠ΅ΡΡ ΡΠ°Π½Π½Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ TypeScript
Π’Π΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ src/tests/ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π² CI/CD.
ΠΠ»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Docker. ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ DEPLOY.md.
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Docker ΡΠ΅ΡΠΈ
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
- Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²
- ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° reverse proxy (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ API. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
VITE_API_URL- Π±Π°Π·ΠΎΠ²ΡΠΉ URL API ΡΠ΅ΡΠ²Π΅ΡΠ°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ vite.config.ts. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΠ»ΠΈΠ°ΡΡ ΠΏΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠ² (
@/Π΄Π»Ρsrc/) - ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠ°Π½ΠΊΠΈ (vendor chunks)
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ file-based routing ΡΠ΅ΡΠ΅Π·
w2b-vite-filebased-routing - ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Vitest Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- SEO ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ sitemap ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΡΠΎΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ file-based routing - ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ src/pages/. Π ΠΎΡΡΠΈΠ½Π³ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· w2b-vite-filebased-routing.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ESLint Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π°
- TypeScript ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ
- Prettier Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½)
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ conventional commits Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² ΡΠ°ΠΌΠΊΠ°Ρ Ρ Π°ΠΊΠ°ΡΠΎΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ w2b.