diff --git a/.gitignore b/.gitignore
index 31214249b..de705e5a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,7 +26,7 @@ dist-ssr
*.njsproj
*.sln
*.sw?
-src/__tests__/visualTesting/results
-src/__tests__/visualTesting/report
+src/shared/__tests__/visualTesting/results
+src/shared/__tests__/visualTesting/report
/blob-report/
/playwright/.cache/
diff --git a/eslint.config.js b/eslint.config.js
index 790467d9c..a5a20186a 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -19,7 +19,7 @@ export default [
'build/',
'coverage/',
'optimizeImages/',
- 'src/__tests__/',
+ 'src/shared/__tests__/',
'vite.config.ts',
'vitest.config.ts',
'eslint.config.js',
diff --git a/package.json b/package.json
index ca67dd4a1..2f8ac6c88 100644
--- a/package.json
+++ b/package.json
@@ -71,4 +71,4 @@
"vite": "^5.2.12",
"vitest": "^1.5.0"
}
-}
+}
\ No newline at end of file
diff --git a/playwright.config.ts b/playwright.config.ts
index 4a64be604..73a777bdc 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -1,19 +1,19 @@
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
- testDir: 'src/__tests__/visualTesting',
+ testDir: 'src/shared/__tests__/visualTesting',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: process.env.CI
? 'dot'
- : [['html', { outputFolder: 'src/__tests__/visualTesting/report' }]],
+ : [['html', { outputFolder: 'src/shared/__tests__/visualTesting/report' }]],
use: {
baseURL: 'http://localhost:5173',
trace: 'off',
},
- outputDir: 'src/__tests__/visualTesting/results',
+ outputDir: 'src/shared/__tests__/visualTesting/results',
projects: [
{
name: 'Mobile Chrome',
diff --git a/readme/end-to-end-testing.md b/readme/end-to-end-testing.md
index fbd30d2cd..d743cbd16 100644
--- a/readme/end-to-end-testing.md
+++ b/readme/end-to-end-testing.md
@@ -46,7 +46,7 @@ npx playwright test --ui
-- if there are any problems whith screenshots comparison, go to `src/__tests__/visualTesting/results` and watch the results like this:
+- if there are any problems whith screenshots comparison, go to `src/shared/__tests__/visualTesting/results` and watch the results like this:
@@ -58,7 +58,7 @@ npx playwright test --ui
npx playwright test
```
-- if there are any problems whith screenshots comparison, go to `src/__tests__/visualTesting/results` and watch the results.
+- if there are any problems whith screenshots comparison, go to `src/shared/__tests__/visualTesting/results` and watch the results.
### 🔁Update Screenshots
@@ -70,7 +70,7 @@ When intentional design changes cause test failures, to create new references us
npx playwright test --update-snapshots
```
-- to update one or several screenshots only, please delete outdated reference images from the according folder (`src/__tests__/visualTesting/[NAME_OF_THE_TEST].spec.ts-snapshots`) and rerun tests again. On testing without samples, Playwright firstly will create them from your code.
+- to update one or several screenshots only, please delete outdated reference images from the according folder (`src/shared/__tests__/visualTesting/[NAME_OF_THE_TEST].spec.ts-snapshots`) and rerun tests again. On testing without samples, Playwright firstly will create them from your code.
### 👀 Real-time Browsing via Specified Engine
@@ -96,7 +96,7 @@ If intentional changes affect the site's appearance, update the reference images
### 🗐 Screenshot Comparison Failed
-When tests fail, review the error messages and comparison images in the `src/__tests__/visualTesting/results` folder to understand what went wrong. Common issues include layout shifts, missing elements, or unintended changes in styling.
+When tests fail, review the error messages and comparison images in the `src/shared/__tests__/visualTesting/results` folder to understand what went wrong. Common issues include layout shifts, missing elements, or unintended changes in styling.
### ⏳Timeout Error
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png b/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png
deleted file mode 100644
index d777f8b9b..000000000
Binary files a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png b/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png
deleted file mode 100644
index d376960b5..000000000
Binary files a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png b/src/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png
deleted file mode 100644
index c9a9b7e6d..000000000
Binary files a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png b/src/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png
deleted file mode 100644
index 0e4b55d72..000000000
Binary files a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png b/src/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png
deleted file mode 100644
index 81ce34c77..000000000
Binary files a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png b/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png
deleted file mode 100644
index 897286917..000000000
Binary files a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png b/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png
deleted file mode 100644
index 911391707..000000000
Binary files a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png b/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png
deleted file mode 100644
index bdeda4619..000000000
Binary files a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png b/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png
deleted file mode 100644
index 2b6df69cc..000000000
Binary files a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png b/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png
deleted file mode 100644
index 2f9513e3f..000000000
Binary files a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png b/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png
deleted file mode 100644
index 8cc5e1500..000000000
Binary files a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png b/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png
deleted file mode 100644
index eec0cf447..000000000
Binary files a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png b/src/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png
deleted file mode 100644
index 258fe8268..000000000
Binary files a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png b/src/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png
deleted file mode 100644
index 1e67438ef..000000000
Binary files a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png and /dev/null differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png b/src/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png
deleted file mode 100644
index 981e844c7..000000000
Binary files a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png and /dev/null differ
diff --git a/src/app/components/breadcrumbs/index.ts b/src/app/components/breadcrumbs/index.ts
deleted file mode 100644
index 7f24f4c22..000000000
--- a/src/app/components/breadcrumbs/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Breadcrumbs } from './breadcrumbs';
diff --git a/src/app/components/course-card/index.ts b/src/app/components/course-card/index.ts
deleted file mode 100644
index 930bfa22d..000000000
--- a/src/app/components/course-card/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { CourseCard } from './course-card';
diff --git a/src/app/components/event-card/index.ts b/src/app/components/event-card/index.ts
deleted file mode 100644
index f481bce4d..000000000
--- a/src/app/components/event-card/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { EventCard, type EventCardProps } from './event-card';
diff --git a/src/app/components/index.ts b/src/app/components/index.ts
deleted file mode 100644
index 38817d9e9..000000000
--- a/src/app/components/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-export { Actions } from './actions';
-export { Breadcrumbs } from './breadcrumbs';
-export { CourseCard } from './course-card';
-export { DateLang } from './date-lang';
-export { EventCard, type EventCardProps } from './event-card';
-export { LinkCustom } from './link-custom';
-export { LogoWrapper } from './logo-wrapper';
-export { MobileView } from './mobile-view';
-export { OptionItem, type OptionItemProps } from './option-item';
-export { Paragraph } from './paragraph';
-export { Places } from './places';
-export { PrincipleCard, type PrincipleCardProps } from './principle-card';
-export { SchoolMenu } from './school-menu';
-export { SectionLabel } from './section-label';
-export { SocialMedia, type SocialMediaProps } from './social-media';
-export { Subtitle } from './subtitle';
-export { TextWithLink } from './text-with-link';
-export { Title, TitleType } from './title';
diff --git a/src/app/components/mobile-view/index.ts b/src/app/components/mobile-view/index.ts
deleted file mode 100644
index 3877a7a57..000000000
--- a/src/app/components/mobile-view/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { MobileView } from './mobile-view';
diff --git a/src/app/components/option-item/index.ts b/src/app/components/option-item/index.ts
deleted file mode 100644
index 091a40dc5..000000000
--- a/src/app/components/option-item/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { OptionItem, type OptionItemProps } from './option-item';
diff --git a/src/app/components/places/index.ts b/src/app/components/places/index.ts
deleted file mode 100644
index efc6c34a2..000000000
--- a/src/app/components/places/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Places } from './places';
diff --git a/src/app/components/principle-card/index.ts b/src/app/components/principle-card/index.ts
deleted file mode 100644
index 6d55e87cb..000000000
--- a/src/app/components/principle-card/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { PrincipleCard, type PrincipleCardProps } from './principle-card';
diff --git a/src/app/components/school-menu/index.ts b/src/app/components/school-menu/index.ts
deleted file mode 100644
index c13857628..000000000
--- a/src/app/components/school-menu/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { SchoolMenu } from './school-menu';
diff --git a/src/app/hooks/index.ts b/src/app/hooks/index.ts
deleted file mode 100644
index 318e21664..000000000
--- a/src/app/hooks/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { useCourseByTitle } from './use-course-by-title';
-export { useDataByName } from './use-data-by-name';
-export { useNearestCourse } from './use-nearest-course';
-export { usePositionDropdown } from './use-position-dropdown';
-export { useTitle } from './use-title';
-export { useWindowSize } from './use-window-size';
diff --git a/src/app/hooks/use-nearest-course/index.ts b/src/app/hooks/use-nearest-course/index.ts
deleted file mode 100644
index faaece58f..000000000
--- a/src/app/hooks/use-nearest-course/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { finedNearestCourse } from './utils/fined-nearest-course';
-export { useNearestCourse } from './use-nearest-course';
diff --git a/src/app/hooks/use-nearest-course/use-nearest-course.test.tsx b/src/app/hooks/use-nearest-course/use-nearest-course.test.tsx
deleted file mode 100644
index e9375e95f..000000000
--- a/src/app/hooks/use-nearest-course/use-nearest-course.test.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import { renderHook } from '@testing-library/react';
-import { Mock, afterAll, describe, expect, it, vi } from 'vitest';
-import { useNearestCourse } from './use-nearest-course';
-import { useDataByName } from '../use-data-by-name';
-
-const originalDateNow = Date.now;
-const mockData = [
- {
- id: 1,
- title: 'React JS course',
- startDate: 'Apr 5, 2024',
- },
- {
- id: 2,
- title: 'JavaScript / Front-end',
- startDate: 'May 29, 2024',
- },
- {
- id: 3,
- title: 'Some course title',
- startDate: 'May 20, 2024',
- },
-];
-
-vi.mock('../use-data-by-name', () => ({ useDataByName: vi.fn() }));
-
-describe('useNearestCourse', () => {
- afterAll(() => {
- Date.now = originalDateNow;
- });
-
- it('returns the nearest course', () => {
- const bufferPeriod = 14;
- const date1 = Date.parse(mockData[0].startDate) + (bufferPeriod - 1) * 24 * 60 * 60 * 1000;
- const date2 = Date.parse(mockData[0].startDate) + bufferPeriod * 24 * 60 * 60 * 1000;
-
- (useDataByName as Mock).mockReturnValue({
- data: mockData,
- loading: false,
- error: null,
- });
- Date.now = vi.fn(() => date1);
- const { result: res1 } = renderHook(() => useNearestCourse(bufferPeriod));
-
- expect(res1.current.course).toEqual(mockData[0]);
- expect(res1.current.loading).toBeFalsy();
- expect(res1.current.error).toBeNull();
-
- Date.now = vi.fn(() => date2);
- const { result: res2 } = renderHook(() => useNearestCourse(bufferPeriod));
-
- expect(res2.current.course).toEqual(mockData[2]);
- expect(res2.current.loading).toBeFalsy();
- expect(res2.current.error).toBeNull();
- });
-
- it('always returns the next course', () => {
- const bufferPeriod = 0;
-
- (useDataByName as Mock).mockReturnValue({
- data: mockData,
- loading: false,
- error: null,
- });
- Date.now = vi.fn(() => Date.parse(mockData[0].startDate) + 1);
-
- const { result } = renderHook(() => useNearestCourse(bufferPeriod));
-
- expect(result.current.course).toEqual(mockData[2]);
-
- expect(result.current.loading).toBeFalsy();
- expect(result.current.error).toBeNull();
- });
-
- it('returns next course when there are no previous courses', () => {
- (useDataByName as Mock).mockReturnValue({
- data: mockData,
- loading: false,
- error: null,
- });
- Date.now = vi.fn(() => Date.parse('Apr 1, 2024'));
-
- const { result } = renderHook(() => useNearestCourse());
-
- expect(result.current.course).toEqual(mockData[0]);
-
- expect(result.current.loading).toBeFalsy();
- expect(result.current.error).toBeNull();
- });
-
- it('returns next course when there are no next courses', () => {
- (useDataByName as Mock).mockReturnValue({
- data: mockData,
- loading: false,
- error: null,
- });
- Date.now = vi.fn(() => Date.parse('May 30, 2024'));
-
- const { result } = renderHook(() => useNearestCourse());
-
- expect(result.current.course).toEqual(mockData[1]);
-
- expect(result.current.loading).toBeFalsy();
- expect(result.current.error).toBeNull();
- });
-
- it('returns null as course and error message if there are no courses available', () => {
- (useDataByName as Mock).mockReturnValue({
- data: [],
- loading: false,
- error: new Error('No courses data available.'),
- });
-
- const { result } = renderHook(() => useNearestCourse());
-
- expect(result.current.course).toBeNull();
- expect(result.current.hasError).toBe(true);
- expect(result.current.error).toBeInstanceOf(Error);
- expect(result.current.error?.message).toBe('No courses data available.');
- });
-
- it('keeps the state of loading and error from useNearestCourse', () => {
- (useDataByName as Mock).mockReturnValue({
- data: null,
- loading: true,
- error: null,
- });
-
- const { result } = renderHook(() => useNearestCourse());
-
- expect(result.current.loading).toBeTruthy();
- expect(result.current.error).toBeNull();
- });
-});
diff --git a/src/app/hooks/use-nearest-course/use-nearest-course.ts b/src/app/hooks/use-nearest-course/use-nearest-course.ts
deleted file mode 100644
index b873129e0..000000000
--- a/src/app/hooks/use-nearest-course/use-nearest-course.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { BUFFER_PERIOD } from './constants';
-import { finedNearestCourse } from './utils/fined-nearest-course';
-import { useDataByName } from '../use-data-by-name';
-
-type Day = number;
-
-export const useNearestCourse = (bufferPeriod: Day = BUFFER_PERIOD) => {
- const { data: coursesData, error, loading } = useDataByName('courses');
-
- if (loading) {
- return {
- course: null,
- loading,
- hasError: false,
- error: null,
- };
- }
- if (!coursesData || coursesData.length === 0) {
- return {
- course: null,
- loading: false,
- hasError: true,
- error: new Error('No courses data available.'),
- };
- }
-
- const course = finedNearestCourse(coursesData, bufferPeriod);
- const hasError = !!error || (!loading && !course);
-
- return {
- course,
- loading,
- error,
- hasError,
- };
-};
diff --git a/src/features/base-layout/base-layout.test.tsx b/src/app/layouts/base-layout/base-layout.test.tsx
similarity index 100%
rename from src/features/base-layout/base-layout.test.tsx
rename to src/app/layouts/base-layout/base-layout.test.tsx
diff --git a/src/features/base-layout/base-layout.tsx b/src/app/layouts/base-layout/base-layout.tsx
similarity index 100%
rename from src/features/base-layout/base-layout.tsx
rename to src/app/layouts/base-layout/base-layout.tsx
diff --git a/src/features/base-layout/components/footer/about-list.tsx b/src/app/layouts/base-layout/components/footer/about-list.tsx
similarity index 92%
rename from src/features/base-layout/components/footer/about-list.tsx
rename to src/app/layouts/base-layout/components/footer/about-list.tsx
index 4fe76821d..bc7d45eb0 100644
--- a/src/features/base-layout/components/footer/about-list.tsx
+++ b/src/app/layouts/base-layout/components/footer/about-list.tsx
@@ -1,6 +1,6 @@
import { Link } from 'react-router-dom';
-import { LogoWrapper } from '@/app/components';
import { buildUrl } from '@/app/services/platform';
+import { LogoWrapper } from '@/shared/ui/logo-wrapper';
const aboutList = [
{
diff --git a/src/features/base-layout/components/footer/copyright.tsx b/src/app/layouts/base-layout/components/footer/copyright.tsx
similarity index 100%
rename from src/features/base-layout/components/footer/copyright.tsx
rename to src/app/layouts/base-layout/components/footer/copyright.tsx
diff --git a/src/features/base-layout/components/footer/desktop-view.tsx b/src/app/layouts/base-layout/components/footer/desktop-view.tsx
similarity index 87%
rename from src/features/base-layout/components/footer/desktop-view.tsx
rename to src/app/layouts/base-layout/components/footer/desktop-view.tsx
index 1883ec121..f706e4ef5 100644
--- a/src/features/base-layout/components/footer/desktop-view.tsx
+++ b/src/app/layouts/base-layout/components/footer/desktop-view.tsx
@@ -1,5 +1,5 @@
import { AboutList } from './about-list';
-import { SchoolMenu } from '@/app/components';
+import { SchoolMenu } from '@/widgets/school-menu';
export const DesktopView = () => {
return (
diff --git a/src/features/base-layout/components/footer/footer.scss b/src/app/layouts/base-layout/components/footer/footer.scss
similarity index 100%
rename from src/features/base-layout/components/footer/footer.scss
rename to src/app/layouts/base-layout/components/footer/footer.scss
diff --git a/src/features/base-layout/components/footer/footer.test.tsx b/src/app/layouts/base-layout/components/footer/footer.test.tsx
similarity index 82%
rename from src/features/base-layout/components/footer/footer.test.tsx
rename to src/app/layouts/base-layout/components/footer/footer.test.tsx
index 62801755d..9e0db7800 100644
--- a/src/features/base-layout/components/footer/footer.test.tsx
+++ b/src/app/layouts/base-layout/components/footer/footer.test.tsx
@@ -1,12 +1,10 @@
import { type Mock, describe, expect, it } from 'vitest';
import { Footer } from './footer';
-import { renderWithRouter } from '@/__tests__/utils';
-import { useWindowSize } from '@/app/hooks';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+import { useWindowSize } from '@/shared/hooks/use-window-size';
-vi.mock('@/app/hooks', () => ({
- useWindowSize: vi.fn().mockImplementation(() => ({ width: 1200 })),
- useDataByName: vi.fn().mockImplementation(() => ({ data: [] })),
-}));
+vi.mock('@/shared/hooks/use-window-size', () => ({ useWindowSize: vi.fn().mockImplementation(() => ({ width: 1200 })) }));
+vi.mock('@/shared/hooks/use-data-by-name', () => ({ useDataByName: vi.fn().mockImplementation(() => ({ data: [] })) }));
describe('Footer', () => {
it('should render without crashing', () => {
diff --git a/src/features/base-layout/components/footer/footer.tsx b/src/app/layouts/base-layout/components/footer/footer.tsx
similarity index 79%
rename from src/features/base-layout/components/footer/footer.tsx
rename to src/app/layouts/base-layout/components/footer/footer.tsx
index e0e11c0f1..d5b86245b 100644
--- a/src/features/base-layout/components/footer/footer.tsx
+++ b/src/app/layouts/base-layout/components/footer/footer.tsx
@@ -1,7 +1,8 @@
import { Copyright } from './copyright';
import { DesktopView } from './desktop-view';
-import { MobileView } from '@/app/components';
-import { useWindowSize } from '@/app/hooks';
+
+import { useWindowSize } from '@/shared/hooks/use-window-size';
+import { MobileView } from '@/widgets/mobile-view';
import './footer.scss';
diff --git a/src/features/base-layout/components/footer/index.ts b/src/app/layouts/base-layout/components/footer/index.ts
similarity index 100%
rename from src/features/base-layout/components/footer/index.ts
rename to src/app/layouts/base-layout/components/footer/index.ts
diff --git a/src/features/base-layout/components/header/burger/burger.module.scss b/src/app/layouts/base-layout/components/header/burger/burger.module.scss
similarity index 100%
rename from src/features/base-layout/components/header/burger/burger.module.scss
rename to src/app/layouts/base-layout/components/header/burger/burger.module.scss
diff --git a/src/features/base-layout/components/header/burger/burger.tsx b/src/app/layouts/base-layout/components/header/burger/burger.tsx
similarity index 100%
rename from src/features/base-layout/components/header/burger/burger.tsx
rename to src/app/layouts/base-layout/components/header/burger/burger.tsx
diff --git a/src/features/base-layout/components/header/dropdown/dropdown-wrapper.module.scss b/src/app/layouts/base-layout/components/header/dropdown/dropdown-wrapper.module.scss
similarity index 100%
rename from src/features/base-layout/components/header/dropdown/dropdown-wrapper.module.scss
rename to src/app/layouts/base-layout/components/header/dropdown/dropdown-wrapper.module.scss
diff --git a/src/features/base-layout/components/header/dropdown/dropdown-wrapper.tsx b/src/app/layouts/base-layout/components/header/dropdown/dropdown-wrapper.tsx
similarity index 90%
rename from src/features/base-layout/components/header/dropdown/dropdown-wrapper.tsx
rename to src/app/layouts/base-layout/components/header/dropdown/dropdown-wrapper.tsx
index 1ef6479bc..7ad40afae 100644
--- a/src/features/base-layout/components/header/dropdown/dropdown-wrapper.tsx
+++ b/src/app/layouts/base-layout/components/header/dropdown/dropdown-wrapper.tsx
@@ -1,6 +1,7 @@
import { ReactNode } from 'react';
import classNames from 'classnames/bind';
-import { usePositionDropdown } from '@/app/hooks';
+
+import { usePositionDropdown } from '@/shared/hooks/use-position-dropdown';
import styles from './dropdown-wrapper.module.scss';
diff --git a/src/features/base-layout/components/header/header.module.scss b/src/app/layouts/base-layout/components/header/header.module.scss
similarity index 100%
rename from src/features/base-layout/components/header/header.module.scss
rename to src/app/layouts/base-layout/components/header/header.module.scss
diff --git a/src/features/base-layout/components/header/header.test.tsx b/src/app/layouts/base-layout/components/header/header.test.tsx
similarity index 89%
rename from src/features/base-layout/components/header/header.test.tsx
rename to src/app/layouts/base-layout/components/header/header.test.tsx
index ebfd950ce..e474e72af 100644
--- a/src/features/base-layout/components/header/header.test.tsx
+++ b/src/app/layouts/base-layout/components/header/header.test.tsx
@@ -4,8 +4,9 @@ import classNames from 'classnames/bind';
import { Mock, beforeEach, vi } from 'vitest';
import { DropdownWrapper } from './dropdown/dropdown-wrapper';
import { Header } from './header';
-import { renderWithRouter } from '@/__tests__/utils';
-import { useWindowSize } from '@/app/hooks';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+
+import { useWindowSize } from '@/shared/hooks/use-window-size';
import stylesDropdown from './dropdown/dropdown-wrapper.module.scss';
import stylesHeader from './header.module.scss';
@@ -15,8 +16,8 @@ const cxDropdown = classNames.bind(stylesDropdown);
const cxHeader = classNames.bind(stylesHeader);
const cxNavItem = classNames.bind(stylesNavItem);
-vi.mock('@/app/hooks', async (importOriginal) => {
- const originalModule = await importOriginal();
+vi.mock('@/shared/hooks/use-window-size', async (importOriginal) => {
+ const originalModule = await importOriginal();
return {
...originalModule,
@@ -112,7 +113,7 @@ describe('Header', () => {
it('should be open when isDropdownOpen is true', async () => {
await act(async () =>
renderWithRouter(
- {}} onMouseLeave={() => {}} isOpen={true}>
+ { }} onMouseLeave={() => { }} isOpen={true}>
TEST
,
),
diff --git a/src/features/base-layout/components/header/header.tsx b/src/app/layouts/base-layout/components/header/header.tsx
similarity index 92%
rename from src/features/base-layout/components/header/header.tsx
rename to src/app/layouts/base-layout/components/header/header.tsx
index 7e4fe0434..88bb31340 100644
--- a/src/features/base-layout/components/header/header.tsx
+++ b/src/app/layouts/base-layout/components/header/header.tsx
@@ -3,8 +3,10 @@ import classNames from 'classnames/bind';
import { Link, useLocation } from 'react-router-dom';
import { BurgerMenu } from './burger/burger';
import { NavItem } from './nav-item/nav-item';
-import { LogoWrapper, MobileView, SchoolMenu } from '@/app/components';
-import { useWindowSize } from '@/app/hooks';
+import { useWindowSize } from '@/shared/hooks/use-window-size';
+import { LogoWrapper } from '@/shared/ui/logo-wrapper';
+import { MobileView } from '@/widgets/mobile-view';
+import { SchoolMenu } from '@/widgets/school-menu';
import styles from './header.module.scss';
diff --git a/src/features/base-layout/components/header/index.ts b/src/app/layouts/base-layout/components/header/index.ts
similarity index 100%
rename from src/features/base-layout/components/header/index.ts
rename to src/app/layouts/base-layout/components/header/index.ts
diff --git a/src/features/base-layout/components/header/nav-item/nav-item.module.scss b/src/app/layouts/base-layout/components/header/nav-item/nav-item.module.scss
similarity index 100%
rename from src/features/base-layout/components/header/nav-item/nav-item.module.scss
rename to src/app/layouts/base-layout/components/header/nav-item/nav-item.module.scss
diff --git a/src/features/base-layout/components/header/nav-item/nav-item.tsx b/src/app/layouts/base-layout/components/header/nav-item/nav-item.tsx
similarity index 95%
rename from src/features/base-layout/components/header/nav-item/nav-item.tsx
rename to src/app/layouts/base-layout/components/header/nav-item/nav-item.tsx
index 0b43a4b44..be1f27562 100644
--- a/src/features/base-layout/components/header/nav-item/nav-item.tsx
+++ b/src/app/layouts/base-layout/components/header/nav-item/nav-item.tsx
@@ -2,7 +2,7 @@ import { ReactNode, useState } from 'react';
import classNames from 'classnames/bind';
import { NavLink } from 'react-router-dom';
import { DropdownWrapper } from '../dropdown/dropdown-wrapper';
-import { DropdownArrow } from '@/icons/dropdown-arrow';
+import { DropdownArrow } from '@/shared/icons/dropdown-arrow';
import styles from './nav-item.module.scss';
diff --git a/src/features/base-layout/components/index.ts b/src/app/layouts/base-layout/components/index.ts
similarity index 100%
rename from src/features/base-layout/components/index.ts
rename to src/app/layouts/base-layout/components/index.ts
diff --git a/src/features/base-layout/components/partnered/index.ts b/src/app/layouts/base-layout/components/partnered/index.ts
similarity index 100%
rename from src/features/base-layout/components/partnered/index.ts
rename to src/app/layouts/base-layout/components/partnered/index.ts
diff --git a/src/features/base-layout/components/partnered/partnered.scss b/src/app/layouts/base-layout/components/partnered/partnered.scss
similarity index 100%
rename from src/features/base-layout/components/partnered/partnered.scss
rename to src/app/layouts/base-layout/components/partnered/partnered.scss
diff --git a/src/features/base-layout/components/partnered/partnered.test.tsx b/src/app/layouts/base-layout/components/partnered/partnered.test.tsx
similarity index 100%
rename from src/features/base-layout/components/partnered/partnered.test.tsx
rename to src/app/layouts/base-layout/components/partnered/partnered.test.tsx
diff --git a/src/features/base-layout/components/partnered/partnered.tsx b/src/app/layouts/base-layout/components/partnered/partnered.tsx
similarity index 96%
rename from src/features/base-layout/components/partnered/partnered.tsx
rename to src/app/layouts/base-layout/components/partnered/partnered.tsx
index 32100a282..8d7cb0c7d 100644
--- a/src/features/base-layout/components/partnered/partnered.tsx
+++ b/src/app/layouts/base-layout/components/partnered/partnered.tsx
@@ -1,4 +1,4 @@
-import { AwsLogo, EpamLogo, GithubLogo, JetBrainsLogo } from '@/icons';
+import { AwsLogo, EpamLogo, GithubLogo, JetBrainsLogo } from '@/shared/icons';
import './partnered.scss';
diff --git a/src/features/base-layout/components/scroll-to-hash/index.ts b/src/app/layouts/base-layout/components/scroll-to-hash/index.ts
similarity index 100%
rename from src/features/base-layout/components/scroll-to-hash/index.ts
rename to src/app/layouts/base-layout/components/scroll-to-hash/index.ts
diff --git a/src/features/base-layout/components/scroll-to-hash/scroll-to-hash.test.tsx b/src/app/layouts/base-layout/components/scroll-to-hash/scroll-to-hash.test.tsx
similarity index 100%
rename from src/features/base-layout/components/scroll-to-hash/scroll-to-hash.test.tsx
rename to src/app/layouts/base-layout/components/scroll-to-hash/scroll-to-hash.test.tsx
diff --git a/src/features/base-layout/components/scroll-to-hash/scroll-to-hash.tsx b/src/app/layouts/base-layout/components/scroll-to-hash/scroll-to-hash.tsx
similarity index 100%
rename from src/features/base-layout/components/scroll-to-hash/scroll-to-hash.tsx
rename to src/app/layouts/base-layout/components/scroll-to-hash/scroll-to-hash.tsx
diff --git a/src/features/base-layout/index.ts b/src/app/layouts/base-layout/index.ts
similarity index 100%
rename from src/features/base-layout/index.ts
rename to src/app/layouts/base-layout/index.ts
diff --git a/src/app/routes.tsx b/src/app/routes.tsx
index 695000e53..89282f488 100644
--- a/src/app/routes.tsx
+++ b/src/app/routes.tsx
@@ -1,7 +1,7 @@
import { RouteObject } from 'react-router-dom';
import { ROUTES } from '@/app/const';
import { config } from '@/config';
-import { courseLoader } from '@/features/course-main/courseLoader.ts';
+import { courseLoader } from '@/widgets/course-main/courseLoader.ts';
const coursesRoute: RouteObject = {
path: ROUTES.COURSES,
@@ -103,7 +103,7 @@ export const routes: RouteObject[] = config.isRollingScopesLanding
{
path: ROUTES.HOME,
lazy: async () => {
- const { BaseLayout } = await import('../features/base-layout/base-layout.tsx');
+ const { BaseLayout } = await import('./layouts/base-layout/base-layout.tsx');
return { Component: BaseLayout };
},
@@ -125,7 +125,7 @@ export const routes: RouteObject[] = config.isRollingScopesLanding
{
path: ROUTES.HOME,
lazy: async () => {
- const { BaseLayout } = await import('../features/base-layout/base-layout.tsx');
+ const { BaseLayout } = await import('./layouts/base-layout/base-layout.tsx');
return { Component: BaseLayout };
},
diff --git a/src/app/services/data/courses-path.data.ts b/src/app/services/data/courses-path.data.ts
index b3d3d4385..49112808e 100644
--- a/src/app/services/data/courses-path.data.ts
+++ b/src/app/services/data/courses-path.data.ts
@@ -1,12 +1,12 @@
import { type CoursesPath } from './courses-data.types';
import { ROUTES } from '@/app/const';
import { buildUrl } from '@/app/services/platform';
-import AWSDeveloperIcon from '@/assets/icons/aws-developer.webp';
-import AWSFundamentalsIcon from '@/assets/icons/aws-fundamentals.webp';
-import HTMLIcon from '@/assets/icons/html.webp';
-import JSIcon from '@/assets/icons/javascript.webp';
-import NodeJSIcon from '@/assets/icons/nodejs.webp';
-import ReactAngIcon from '@/assets/icons/react-angular.svg';
+import AWSDeveloperIcon from '@/shared/assets/icons/aws-developer.webp';
+import AWSFundamentalsIcon from '@/shared/assets/icons/aws-fundamentals.webp';
+import HTMLIcon from '@/shared/assets/icons/html.webp';
+import JSIcon from '@/shared/assets/icons/javascript.webp';
+import NodeJSIcon from '@/shared/assets/icons/nodejs.webp';
+import ReactAngIcon from '@/shared/assets/icons/react-angular.svg';
export const coursesPath: CoursesPath[] = [
{
diff --git a/src/app/services/data/courses.data.ts b/src/app/services/data/courses.data.ts
index 5798cc171..b19ecd634 100644
--- a/src/app/services/data/courses.data.ts
+++ b/src/app/services/data/courses.data.ts
@@ -1,24 +1,24 @@
import { buildUrl } from '../platform';
import { ROUTES } from '@/app/const';
import { type Course } from '@/app/types';
-import angularSecondary from '@/assets/icons/angular-secondary.webp';
-import angular from '@/assets/icons/angular.svg';
-import awsSecondary from '@/assets/icons/aws-secondary.webp';
-import aws from '@/assets/icons/aws.svg';
-import angularSmall from '@/assets/icons/footer/angular.webp';
-import awsDevSmall from '@/assets/icons/footer/aws-dev.webp';
-import awsFundSmall from '@/assets/icons/footer/aws-fundamentals.webp';
-import htmlSmall from '@/assets/icons/footer/html.webp';
-import jsSmall from '@/assets/icons/footer/javascript.webp';
-import nodejsSmall from '@/assets/icons/footer/nodejs.webp';
-import reactSmall from '@/assets/icons/footer/react.webp';
-import javascript from '@/assets/icons/javascript.webp';
-import jsSecondary from '@/assets/icons/js-secondary.webp';
-import nodejs from '@/assets/icons/node.svg';
-import nodejsSecondary from '@/assets/icons/nodejs-secondary.webp';
-import reactSecondary from '@/assets/icons/react-secondary.webp';
-import react from '@/assets/icons/react.svg';
-import { COURSE_TITLES } from '@/data/courseTitles.data';
+import angularSecondary from '@/shared/assets/icons/angular-secondary.webp';
+import angular from '@/shared/assets/icons/angular.svg';
+import awsSecondary from '@/shared/assets/icons/aws-secondary.webp';
+import aws from '@/shared/assets/icons/aws.svg';
+import angularSmall from '@/shared/assets/icons/footer/angular.webp';
+import awsDevSmall from '@/shared/assets/icons/footer/aws-dev.webp';
+import awsFundSmall from '@/shared/assets/icons/footer/aws-fundamentals.webp';
+import htmlSmall from '@/shared/assets/icons/footer/html.webp';
+import jsSmall from '@/shared/assets/icons/footer/javascript.webp';
+import nodejsSmall from '@/shared/assets/icons/footer/nodejs.webp';
+import reactSmall from '@/shared/assets/icons/footer/react.webp';
+import javascript from '@/shared/assets/icons/javascript.webp';
+import jsSecondary from '@/shared/assets/icons/js-secondary.webp';
+import nodejs from '@/shared/assets/icons/node.svg';
+import nodejsSecondary from '@/shared/assets/icons/nodejs-secondary.webp';
+import reactSecondary from '@/shared/assets/icons/react-secondary.webp';
+import react from '@/shared/assets/icons/react.svg';
+import { COURSE_TITLES } from '@/shared/data/courseTitles.data';
export const courses: Course[] = [
{
diff --git a/src/app/services/data/js-path.data.ts b/src/app/services/data/js-path.data.ts
index ffe080824..90c448628 100644
--- a/src/app/services/data/js-path.data.ts
+++ b/src/app/services/data/js-path.data.ts
@@ -1,7 +1,7 @@
import { type JSPath } from './courses-data.types';
-import stage1 from '@/assets/stages/stage-1.webp';
-import stage2 from '@/assets/stages/stage-2.webp';
-import stage3 from '@/assets/stages/stage-3.webp';
+import stage1 from '@/shared/assets/stages/stage-1.webp';
+import stage2 from '@/shared/assets/stages/stage-2.webp';
+import stage3 from '@/shared/assets/stages/stage-3.webp';
export const jsPath: JSPath[] = [
{
diff --git a/src/app/services/data/js-ru-path.data.ts b/src/app/services/data/js-ru-path.data.ts
index 2239ea50d..a4cbefd01 100644
--- a/src/app/services/data/js-ru-path.data.ts
+++ b/src/app/services/data/js-ru-path.data.ts
@@ -1,7 +1,7 @@
import { type JSPath } from './courses-data.types';
-import stage1 from '@/assets/stages/stage-1.webp';
-import stage2 from '@/assets/stages/stage-2.webp';
-import stage3 from '@/assets/stages/stage-3.webp';
+import stage1 from '@/shared/assets/stages/stage-1.webp';
+import stage2 from '@/shared/assets/stages/stage-2.webp';
+import stage3 from '@/shared/assets/stages/stage-3.webp';
export const jsPathRu: JSPath[] = [
{
diff --git a/src/styles/_constants.scss b/src/app/styles/_constants.scss
similarity index 100%
rename from src/styles/_constants.scss
rename to src/app/styles/_constants.scss
diff --git a/src/styles/_mixins.scss b/src/app/styles/_mixins.scss
similarity index 100%
rename from src/styles/_mixins.scss
rename to src/app/styles/_mixins.scss
diff --git a/src/styles/normalize.scss b/src/app/styles/_normalize.scss
similarity index 100%
rename from src/styles/normalize.scss
rename to src/app/styles/_normalize.scss
diff --git a/src/styles/_placeholders.scss b/src/app/styles/_placeholders.scss
similarity index 100%
rename from src/styles/_placeholders.scss
rename to src/app/styles/_placeholders.scss
diff --git a/src/styles/index.scss b/src/app/styles/index.scss
similarity index 94%
rename from src/styles/index.scss
rename to src/app/styles/index.scss
index bf506e0d1..ab1831493 100644
--- a/src/styles/index.scss
+++ b/src/app/styles/index.scss
@@ -1,5 +1,3 @@
-@import './normalize';
-
html {
scroll-behavior: smooth;
}
@@ -38,9 +36,7 @@ figure {
display: flex;
align-items: center;
justify-content: center;
-
width: 100%;
-
text-align: left;
}
@@ -55,7 +51,7 @@ figure {
width: 100%;
max-width: 1440px;
- padding: 80px 120px 40px 120px;
+ padding: 80px 120px 40px;
}
.column-2 {
diff --git a/src/app/hooks/use-nearest-course/constants.ts b/src/entities/courses/constants.ts
similarity index 100%
rename from src/app/hooks/use-nearest-course/constants.ts
rename to src/entities/courses/constants.ts
diff --git a/src/app/hooks/use-nearest-course/utils/choose-nearest-course.ts b/src/entities/courses/helpers/choose-nearest-course.ts
similarity index 100%
rename from src/app/hooks/use-nearest-course/utils/choose-nearest-course.ts
rename to src/entities/courses/helpers/choose-nearest-course.ts
diff --git a/src/features/courses/courses/utils/compare-courses.ts b/src/entities/courses/helpers/compare-courses.ts
similarity index 100%
rename from src/features/courses/courses/utils/compare-courses.ts
rename to src/entities/courses/helpers/compare-courses.ts
diff --git a/src/app/hooks/use-nearest-course/utils/define-prev-next.ts b/src/entities/courses/helpers/define-prev-next.ts
similarity index 100%
rename from src/app/hooks/use-nearest-course/utils/define-prev-next.ts
rename to src/entities/courses/helpers/define-prev-next.ts
diff --git a/src/app/hooks/use-nearest-course/utils/fined-nearest-course.ts b/src/entities/courses/helpers/fined-nearest-course.ts
similarity index 100%
rename from src/app/hooks/use-nearest-course/utils/fined-nearest-course.ts
rename to src/entities/courses/helpers/fined-nearest-course.ts
diff --git a/src/features/courses/courses/utils/is-course.ts b/src/entities/courses/helpers/is-course.ts
similarity index 100%
rename from src/features/courses/courses/utils/is-course.ts
rename to src/entities/courses/helpers/is-course.ts
diff --git a/src/entities/courses/index.ts b/src/entities/courses/index.ts
new file mode 100644
index 000000000..e84f8757a
--- /dev/null
+++ b/src/entities/courses/index.ts
@@ -0,0 +1,4 @@
+export { CourseCard } from './ui/course-card/course-card';
+export { Main as CoursesMain } from './ui/main/main';
+export { General } from './ui/general/general';
+export { finedNearestCourse } from './helpers/fined-nearest-course';
diff --git a/src/app/hooks/use-nearest-course/types.ts b/src/entities/courses/types.ts
similarity index 100%
rename from src/app/hooks/use-nearest-course/types.ts
rename to src/entities/courses/types.ts
diff --git a/src/app/components/course-card/course-card.scss b/src/entities/courses/ui/course-card/course-card.scss
similarity index 100%
rename from src/app/components/course-card/course-card.scss
rename to src/entities/courses/ui/course-card/course-card.scss
diff --git a/src/app/components/course-card/course-card.test.tsx b/src/entities/courses/ui/course-card/course-card.test.tsx
similarity index 95%
rename from src/app/components/course-card/course-card.test.tsx
rename to src/entities/courses/ui/course-card/course-card.test.tsx
index 6c8ad0b66..9a84a85b9 100644
--- a/src/app/components/course-card/course-card.test.tsx
+++ b/src/entities/courses/ui/course-card/course-card.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
import { CourseCard, type CourseCardProps } from './course-card';
-import { renderWithRouter } from '@/__tests__/utils';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('CourseCard', () => {
const mockProps: CourseCardProps = {
diff --git a/src/app/components/course-card/course-card.tsx b/src/entities/courses/ui/course-card/course-card.tsx
similarity index 87%
rename from src/app/components/course-card/course-card.tsx
rename to src/entities/courses/ui/course-card/course-card.tsx
index 6a090317e..510bf63ae 100644
--- a/src/app/components/course-card/course-card.tsx
+++ b/src/entities/courses/ui/course-card/course-card.tsx
@@ -1,10 +1,10 @@
/* eslint-disable @stylistic/jsx-one-expression-per-line */
-import { LinkCustom } from '@/app/components';
import { type Course } from '@/app/types';
-import micIcon from '@/assets/icons/mic.svg';
-import noteIcon from '@/assets/icons/note-icon.svg';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import micIcon from '@/shared/assets/icons/mic.svg';
+import noteIcon from '@/shared/assets/icons/note-icon.svg';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
import './course-card.scss';
diff --git a/src/features/courses/general/general.scss b/src/entities/courses/ui/general/general.scss
similarity index 100%
rename from src/features/courses/general/general.scss
rename to src/entities/courses/ui/general/general.scss
diff --git a/src/features/courses/general/general.test.tsx b/src/entities/courses/ui/general/general.test.tsx
similarity index 92%
rename from src/features/courses/general/general.test.tsx
rename to src/entities/courses/ui/general/general.test.tsx
index 176d1e592..5c2390ee9 100644
--- a/src/features/courses/general/general.test.tsx
+++ b/src/entities/courses/ui/general/general.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
import { General } from './general';
-import { renderWithRouter } from '@/__tests__/utils';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('General', () => {
beforeEach(() => {
diff --git a/src/features/courses/general/general.tsx b/src/entities/courses/ui/general/general.tsx
similarity index 97%
rename from src/features/courses/general/general.tsx
rename to src/entities/courses/ui/general/general.tsx
index 0226592d6..3719f2570 100644
--- a/src/features/courses/general/general.tsx
+++ b/src/entities/courses/ui/general/general.tsx
@@ -1,5 +1,5 @@
import { Link } from 'react-router-dom';
-import { Title } from '@/app/components';
+import { Title } from '@/shared/ui/title';
import './general.scss';
diff --git a/src/features/courses/main/main.scss b/src/entities/courses/ui/main/main.scss
similarity index 100%
rename from src/features/courses/main/main.scss
rename to src/entities/courses/ui/main/main.scss
diff --git a/src/features/courses/main/main.test.tsx b/src/entities/courses/ui/main/main.test.tsx
similarity index 84%
rename from src/features/courses/main/main.test.tsx
rename to src/entities/courses/ui/main/main.test.tsx
index 45b9783ff..724ddd128 100644
--- a/src/features/courses/main/main.test.tsx
+++ b/src/entities/courses/ui/main/main.test.tsx
@@ -1,8 +1,8 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
import { Main } from './main';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Main', () => {
beforeEach(() => {
diff --git a/src/features/courses/main/main.tsx b/src/entities/courses/ui/main/main.tsx
similarity index 76%
rename from src/features/courses/main/main.tsx
rename to src/entities/courses/ui/main/main.tsx
index a1959eada..31d69ddeb 100644
--- a/src/features/courses/main/main.tsx
+++ b/src/entities/courses/ui/main/main.tsx
@@ -1,6 +1,6 @@
-import { Title, TitleType } from '@/app/components';
-import mentors from '@/assets/mentor-with-his-students.webp';
-import Image from '@/features/image';
+import mentors from '@/shared/assets/mentor-with-his-students.webp';
+import Image from '@/shared/ui/image';
+import { Title, TitleType } from '@/shared/ui/title';
import './main.scss';
diff --git a/src/entities/events/index.ts b/src/entities/events/index.ts
new file mode 100644
index 000000000..1f3a5093a
--- /dev/null
+++ b/src/entities/events/index.ts
@@ -0,0 +1 @@
+export { EventCard, type EventCardProps } from './ui/event-card/event-card';
diff --git a/src/app/components/event-card/event-card.module.scss b/src/entities/events/ui/event-card/event-card.module.scss
similarity index 100%
rename from src/app/components/event-card/event-card.module.scss
rename to src/entities/events/ui/event-card/event-card.module.scss
diff --git a/src/app/components/event-card/event-card.test.tsx b/src/entities/events/ui/event-card/event-card.test.tsx
similarity index 96%
rename from src/app/components/event-card/event-card.test.tsx
rename to src/entities/events/ui/event-card/event-card.test.tsx
index 6a4c866c3..c040bd52b 100644
--- a/src/app/components/event-card/event-card.test.tsx
+++ b/src/entities/events/ui/event-card/event-card.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { EventCard } from './event-card';
-import { renderWithRouter } from '@/__tests__/utils';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('EventCard', () => {
const mockProps = {
diff --git a/src/app/components/event-card/event-card.tsx b/src/entities/events/ui/event-card/event-card.tsx
similarity index 97%
rename from src/app/components/event-card/event-card.tsx
rename to src/entities/events/ui/event-card/event-card.tsx
index 1c9f65b1d..7df4459d2 100644
--- a/src/app/components/event-card/event-card.tsx
+++ b/src/entities/events/ui/event-card/event-card.tsx
@@ -1,5 +1,5 @@
import classNames from 'classnames/bind';
-import { LinkCustom } from '@/app/components';
+import { LinkCustom } from '@/shared/ui/link-custom';
import styles from './event-card.module.scss';
diff --git a/src/features/about-video/index.ts b/src/features/about-video/index.ts
deleted file mode 100644
index 9a895e299..000000000
--- a/src/features/about-video/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { AboutVideo } from './about-video';
diff --git a/src/features/about/components/index.ts b/src/features/about/components/index.ts
deleted file mode 100644
index 396d6907c..000000000
--- a/src/features/about/components/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { InfoGrid } from './info-grid';
diff --git a/src/features/about/components/info-grid/index.ts b/src/features/about/components/info-grid/index.ts
deleted file mode 100644
index 396d6907c..000000000
--- a/src/features/about/components/info-grid/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { InfoGrid } from './info-grid';
diff --git a/src/features/about/index.ts b/src/features/about/index.ts
deleted file mode 100644
index 46296378d..000000000
--- a/src/features/about/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { About } from './about';
diff --git a/src/features/angular-topics/index.ts b/src/features/angular-topics/index.ts
deleted file mode 100644
index 07a0b7a97..000000000
--- a/src/features/angular-topics/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { AngularTopics } from './angular-topics';
diff --git a/src/features/certification/index.tsx b/src/features/certification/index.tsx
deleted file mode 100644
index 17ef40573..000000000
--- a/src/features/certification/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { Certification } from './certification';
diff --git a/src/features/communication/index.tsx b/src/features/communication/index.tsx
deleted file mode 100644
index cc8a8798d..000000000
--- a/src/features/communication/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { Communication } from './communication';
diff --git a/src/features/course-main/utils/index.ts b/src/features/course-main/utils/index.ts
deleted file mode 100644
index 9e15e9751..000000000
--- a/src/features/course-main/utils/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { getCourseStatus } from './get-course-status';
-export { hasDayInDate } from './has-day';
diff --git a/src/features/courses/courses/index.ts b/src/features/courses/courses/index.ts
deleted file mode 100644
index 2006e5801..000000000
--- a/src/features/courses/courses/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Courses } from './courses';
diff --git a/src/features/courses/general/index.ts b/src/features/courses/general/index.ts
deleted file mode 100644
index 7c24a8986..000000000
--- a/src/features/courses/general/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { General } from './general';
diff --git a/src/features/courses/index.ts b/src/features/courses/index.ts
deleted file mode 100644
index afb4d8360..000000000
--- a/src/features/courses/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export { Courses } from './courses';
-export { General } from './general';
-export { Main } from './main';
diff --git a/src/features/courses/main/index.ts b/src/features/courses/main/index.ts
deleted file mode 100644
index 68710baa1..000000000
--- a/src/features/courses/main/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Main } from './main';
diff --git a/src/features/faq/index.tsx b/src/features/faq/index.tsx
deleted file mode 100644
index d42318267..000000000
--- a/src/features/faq/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { Faq } from './faq';
diff --git a/src/features/home/about/index.ts b/src/features/home/about/index.ts
deleted file mode 100644
index 46296378d..000000000
--- a/src/features/home/about/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { About } from './about';
diff --git a/src/features/home/community/index.ts b/src/features/home/community/index.ts
deleted file mode 100644
index 61dd1a6a5..000000000
--- a/src/features/home/community/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Community } from './community';
diff --git a/src/features/home/contribute/index.ts b/src/features/home/contribute/index.ts
deleted file mode 100644
index 4cf7ad265..000000000
--- a/src/features/home/contribute/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Contribute } from './contribute';
diff --git a/src/features/home/events/index.ts b/src/features/home/events/index.ts
deleted file mode 100644
index 84a3fd5d4..000000000
--- a/src/features/home/events/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Events } from './events';
diff --git a/src/features/home/hero/index.ts b/src/features/home/hero/index.ts
deleted file mode 100644
index 1e9ccae06..000000000
--- a/src/features/home/hero/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Hero } from './hero';
diff --git a/src/features/home/index.ts b/src/features/home/index.ts
deleted file mode 100644
index af3c0dff1..000000000
--- a/src/features/home/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export { About } from './about';
-export { Community } from './community';
-export { Contribute } from './contribute';
-export { Events } from './events';
-export { Hero } from './hero';
-export { Merch } from './merch';
-export { Numbers } from './numbers';
-export { Pictures } from './pictures';
-export { Speakers } from './speakers';
-export { Support } from './support';
diff --git a/src/features/home/merch/index.ts b/src/features/home/merch/index.ts
deleted file mode 100644
index e383b3205..000000000
--- a/src/features/home/merch/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Merch } from './merch';
diff --git a/src/features/home/numbers/index.ts b/src/features/home/numbers/index.ts
deleted file mode 100644
index ad006b54f..000000000
--- a/src/features/home/numbers/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Numbers } from './numbers';
diff --git a/src/features/home/pictures/index.ts b/src/features/home/pictures/index.ts
deleted file mode 100644
index fcf9ac1ae..000000000
--- a/src/features/home/pictures/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Pictures } from './pictures';
diff --git a/src/features/home/speakers/index.ts b/src/features/home/speakers/index.ts
deleted file mode 100644
index 7b934677b..000000000
--- a/src/features/home/speakers/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Speakers } from './speakers';
diff --git a/src/features/home/support/index.ts b/src/features/home/support/index.ts
deleted file mode 100644
index 87c79ab06..000000000
--- a/src/features/home/support/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Support } from './support';
diff --git a/src/features/mentors-wanted/index.ts b/src/features/mentors-wanted/index.ts
deleted file mode 100644
index 75dc4c27f..000000000
--- a/src/features/mentors-wanted/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { MentorsWanted } from './mentors-wanted';
diff --git a/src/features/not-found/index.ts b/src/features/not-found/index.ts
deleted file mode 100644
index 4324bddd0..000000000
--- a/src/features/not-found/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { NotFound } from './not-found';
diff --git a/src/features/principles/index.ts b/src/features/principles/index.ts
deleted file mode 100644
index e65bdfb9c..000000000
--- a/src/features/principles/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Principles } from './principles';
diff --git a/src/features/required/index.ts b/src/features/required/index.ts
deleted file mode 100644
index 0202ae296..000000000
--- a/src/features/required/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Required } from './required';
diff --git a/src/features/school/about/index.ts b/src/features/school/about/index.ts
deleted file mode 100644
index 46296378d..000000000
--- a/src/features/school/about/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { About } from './about';
diff --git a/src/features/school/alumni/constants.ts b/src/features/school/alumni/constants.ts
deleted file mode 100644
index 404f27084..000000000
--- a/src/features/school/alumni/constants.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { AlumniProps } from './alumni';
-import aesoft from '@/assets/alumni/aesoft.svg';
-import andersen from '@/assets/alumni/andersen.svg';
-import coherent from '@/assets/alumni/coherent.svg';
-import dataart from '@/assets/alumni/dataart.svg';
-import dott from '@/assets/alumni/dott.svg';
-import elinext from '@/assets/alumni/elinext.svg';
-import epam from '@/assets/alumni/epam.svg';
-import godel from '@/assets/alumni/godel.svg';
-import itechart from '@/assets/alumni/itechart.svg';
-import miro from '@/assets/alumni/miro.svg';
-import nanosoft from '@/assets/alumni/nanosoft.svg';
-import oxagile from '@/assets/alumni/oxagile.svg';
-import pandadoc from '@/assets/alumni/pandadoc.svg';
-import qulix from '@/assets/alumni/qulix.svg';
-import satellite from '@/assets/alumni/satellite.svg';
-import sberbank from '@/assets/alumni/sberbank.svg';
-import toptal from '@/assets/alumni/toptal.svg';
-import visualfabriq from '@/assets/alumni/visualfabriq.svg';
-
-export const alumni: AlumniProps[] = [
- {
- id: 'epam',
- image: epam,
- },
- {
- id: 'toptal',
- image: toptal,
- },
- {
- id: 'oxagile',
- image: oxagile,
- },
- {
- id: 'dott',
- image: dott,
- },
- {
- id: 'andersen',
- image: andersen,
- },
- {
- id: 'godel',
- image: godel,
- },
- {
- id: 'satellite',
- image: satellite,
- },
- {
- id: 'itechart',
- image: itechart,
- },
- {
- id: 'pandadoc',
- image: pandadoc,
- },
- {
- id: 'dataart',
- image: dataart,
- },
- {
- id: 'coherent',
- image: coherent,
- },
- {
- id: 'elinext',
- image: elinext,
- },
- {
- id: 'miro',
- image: miro,
- },
- {
- id: 'qulix',
- image: qulix,
- },
- {
- id: 'visualfabriq',
- image: visualfabriq,
- },
- {
- id: 'sberbank',
- image: sberbank,
- },
- {
- id: 'nanosoft',
- image: nanosoft,
- },
- {
- id: 'aesoft',
- image: aesoft,
- },
-];
diff --git a/src/features/school/alumni/index.ts b/src/features/school/alumni/index.ts
deleted file mode 100644
index 5a0c9df3b..000000000
--- a/src/features/school/alumni/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Alumni } from './alumni';
diff --git a/src/features/school/courses/index.ts b/src/features/school/courses/index.ts
deleted file mode 100644
index 2006e5801..000000000
--- a/src/features/school/courses/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Courses } from './courses';
diff --git a/src/features/school/index.ts b/src/features/school/index.ts
deleted file mode 100644
index e22af58c0..000000000
--- a/src/features/school/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export { About } from './about';
-export { Alumni } from './alumni';
-export { Courses } from './courses';
-export { Main } from './main';
-export { Mentoring } from './mentoring';
-export { Mentors } from './mentors';
-export { Requirements } from './requirements';
-export { StudyWithUs } from './study-with-us';
diff --git a/src/features/school/main/index.ts b/src/features/school/main/index.ts
deleted file mode 100644
index 68710baa1..000000000
--- a/src/features/school/main/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Main } from './main';
diff --git a/src/features/school/mentoring/index.ts b/src/features/school/mentoring/index.ts
deleted file mode 100644
index 5a1b88195..000000000
--- a/src/features/school/mentoring/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Mentoring } from './mentoring';
diff --git a/src/features/school/mentors/index.ts b/src/features/school/mentors/index.ts
deleted file mode 100644
index 06a8abf87..000000000
--- a/src/features/school/mentors/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Mentors } from './mentors';
diff --git a/src/features/school/requirements/index.ts b/src/features/school/requirements/index.ts
deleted file mode 100644
index f3b53801e..000000000
--- a/src/features/school/requirements/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Requirements } from './requirements';
diff --git a/src/features/school/study-with-us/index.ts b/src/features/school/study-with-us/index.ts
deleted file mode 100644
index 8a580bf93..000000000
--- a/src/features/school/study-with-us/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { StudyWithUs } from './study-with-us';
diff --git a/src/features/study-path/components/stage-card/actions/index.ts b/src/features/study-path/components/stage-card/actions/index.ts
deleted file mode 100644
index c87fdc560..000000000
--- a/src/features/study-path/components/stage-card/actions/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Actions } from './actions';
diff --git a/src/features/study-path/components/stages/index.ts b/src/features/study-path/components/stages/index.ts
deleted file mode 100644
index dead0ab8a..000000000
--- a/src/features/study-path/components/stages/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Stages } from './stages';
diff --git a/src/features/study-path/index.ts b/src/features/study-path/index.ts
deleted file mode 100644
index f7fea1059..000000000
--- a/src/features/study-path/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { StudyPath } from './study-path';
diff --git a/src/features/trainers/index.ts b/src/features/trainers/index.ts
deleted file mode 100644
index f7669c9ba..000000000
--- a/src/features/trainers/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { Trainers } from './trainers';
diff --git a/src/features/training-program/index.ts b/src/features/training-program/index.ts
deleted file mode 100644
index 284fdcf83..000000000
--- a/src/features/training-program/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { TrainingProgram } from './training-program';
diff --git a/src/icons/angular-icon.tsx b/src/icons/angular-icon.tsx
deleted file mode 100644
index f6ce7b677..000000000
--- a/src/icons/angular-icon.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import angular from '@/assets/svg/angular-icon.svg';
-import Image from '@/features/image';
-
-export const AngularIcon = () => {
- return ;
-};
diff --git a/src/icons/aws.tsx b/src/icons/aws.tsx
deleted file mode 100644
index 258590638..000000000
--- a/src/icons/aws.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import aws from '@/assets/svg/aws.svg';
-import Image from '@/features/image';
-
-export const AwsLogo = () => {
- return ;
-};
diff --git a/src/icons/discord-logo.tsx b/src/icons/discord-logo.tsx
deleted file mode 100644
index 6e1a73879..000000000
--- a/src/icons/discord-logo.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import discordLogo from '@/assets/svg/discord-logo.svg';
-import Image from '@/features/image/image';
-
-export const DiscordLogo = () => {
- return ;
-};
diff --git a/src/icons/email.tsx b/src/icons/email.tsx
deleted file mode 100644
index 6c72cfa23..000000000
--- a/src/icons/email.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import email from '@/assets/svg/email.svg';
-import Image from '@/features/image';
-
-export const EmailIcon = () => {
- return ;
-};
diff --git a/src/icons/epam.tsx b/src/icons/epam.tsx
deleted file mode 100644
index 543b5f54e..000000000
--- a/src/icons/epam.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import epam from '@/assets/svg/epam.svg';
-import Image from '@/features/image';
-
-export const EpamLogo = () => {
- return ;
-};
diff --git a/src/icons/github.tsx b/src/icons/github.tsx
deleted file mode 100644
index ed1796fa3..000000000
--- a/src/icons/github.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import github from '@/assets/svg/github.svg';
-import Image from '@/features/image';
-
-export const GithubLogo = () => {
- return ;
-};
diff --git a/src/icons/html-icon.tsx b/src/icons/html-icon.tsx
deleted file mode 100644
index e39cff5b5..000000000
--- a/src/icons/html-icon.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import html from '@/assets/svg/html.svg';
-import Image from '@/features/image';
-
-export const HtmlIcon = () => {
- return ;
-};
diff --git a/src/icons/javascript-icon.tsx b/src/icons/javascript-icon.tsx
deleted file mode 100644
index 00744e29d..000000000
--- a/src/icons/javascript-icon.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import javascript from '@/assets/icons/js-secondary.webp';
-import Image from '@/features/image';
-
-export const JavascriptIcon = () => {
- return ;
-};
diff --git a/src/icons/nodejs-icon.tsx b/src/icons/nodejs-icon.tsx
deleted file mode 100644
index 62e4bf7ea..000000000
--- a/src/icons/nodejs-icon.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import nodeJS from '@/assets/svg/nodeJS.svg';
-import Image from '@/features/image';
-
-export const NodeJsIcon = () => {
- return ;
-};
diff --git a/src/icons/react-icon.tsx b/src/icons/react-icon.tsx
deleted file mode 100644
index cef1245f8..000000000
--- a/src/icons/react-icon.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import react from '@/assets/svg/react.svg';
-import Image from '@/features/image';
-
-export const ReactIcon = () => {
- return ;
-};
diff --git a/src/main.tsx b/src/main.tsx
index fbd25c249..dea5ec4a3 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -3,7 +3,7 @@ import ReactDOM from 'react-dom/client';
import App from './app/app';
import '@/app/services/dayjs';
-import '@/styles/index.scss';
+import '@/app/styles/index.scss';
ReactDOM.createRoot(document.getElementById('root')!).render(
diff --git a/src/pages/angular.tsx b/src/pages/angular.tsx
index 8aae28dff..b2d73f97d 100644
--- a/src/pages/angular.tsx
+++ b/src/pages/angular.tsx
@@ -1,15 +1,15 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { AngularTopics } from '@/features/angular-topics';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { MentorsWanted } from '@/features/mentors-wanted';
-import { Required } from '@/features/required';
-import { StudyPath } from '@/features/study-path';
-import { Trainers } from '@/features/trainers';
-import { angular } from '@/features/trainers/angular.data';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { AngularTopics } from '@/widgets/angular-topics';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { MentorsWanted } from '@/widgets/mentors-wanted';
+import { Required } from '@/widgets/required';
+import { StudyPath } from '@/widgets/study-path';
+import { Trainers } from '@/widgets/trainers';
+import { angular } from '@/widgets/trainers/angular.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'angular';
diff --git a/src/pages/aws-developer.tsx b/src/pages/aws-developer.tsx
index f7981ea50..2abde3173 100644
--- a/src/pages/aws-developer.tsx
+++ b/src/pages/aws-developer.tsx
@@ -1,13 +1,13 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Required } from '@/features/required';
-import { StudyPath } from '@/features/study-path';
-import { Trainers } from '@/features/trainers';
-import { awsDev } from '@/features/trainers/awsDev.data.ts';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Required } from '@/widgets/required';
+import { StudyPath } from '@/widgets/study-path';
+import { Trainers } from '@/widgets/trainers';
+import { awsDev } from '@/widgets/trainers/awsDev.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'aws cloud dev';
diff --git a/src/pages/aws-fundamentals.tsx b/src/pages/aws-fundamentals.tsx
index 85e6438f5..b594e7ba7 100644
--- a/src/pages/aws-fundamentals.tsx
+++ b/src/pages/aws-fundamentals.tsx
@@ -1,12 +1,12 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Required } from '@/features/required';
-import { Trainers } from '@/features/trainers';
-import { awsFundamentals } from '@/features/trainers/awsFundamentals.data.ts';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Required } from '@/widgets/required';
+import { Trainers } from '@/widgets/trainers';
+import { awsFundamentals } from '@/widgets/trainers/awsFundamentals.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'aws fundamentals';
diff --git a/src/pages/courses.tsx b/src/pages/courses.tsx
index ee48d29a9..2282a7b82 100644
--- a/src/pages/courses.tsx
+++ b/src/pages/courses.tsx
@@ -1,15 +1,16 @@
import { FC } from 'react';
-import { Breadcrumbs } from '@/app/components';
-import { useTitle } from '@/app/hooks';
-import { General, Main, Courses as RSCourses } from '@/features/courses';
-import { StudyPath } from '@/features/study-path';
+import { CoursesMain, General } from '@/entities/courses';
+import { useTitle } from '@/shared/hooks/use-title';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { RSCourses } from '@/widgets/courses';
+import { StudyPath } from '@/widgets/study-path';
export const Courses: FC = () => {
useTitle('Courses · The Rolling Scopes School');
return (
<>
-
+
diff --git a/src/pages/home.tsx b/src/pages/home.tsx
index 1b45b2d38..2b3caf8ef 100644
--- a/src/pages/home.tsx
+++ b/src/pages/home.tsx
@@ -1,19 +1,18 @@
import { FC } from 'react';
-import { Breadcrumbs, Places } from '@/app/components';
-import { useTitle } from '@/app/hooks/use-title/use-title';
import { config } from '@/config';
-import {
- About,
- Community,
- Contribute,
- Events,
- Hero,
- Merch,
- Numbers,
- Pictures,
- Speakers,
- Support,
-} from '@/features/home';
+import { useTitle } from '@/shared/hooks/use-title';
+import { About } from '@/widgets/about-home';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Community } from '@/widgets/community';
+import { Contribute } from '@/widgets/contribute';
+import { Events } from '@/widgets/events';
+import { Hero } from '@/widgets/hero';
+import { Merch } from '@/widgets/merch';
+import { Numbers } from '@/widgets/numbers';
+import { Pictures } from '@/widgets/pictures';
+import { Places } from '@/widgets/places';
+import { Speakers } from '@/widgets/speakers';
+import { Support } from '@/widgets/support';
export const Home: FC = () => {
useTitle(`Home · ${config.title}`);
diff --git a/src/pages/index.ts b/src/pages/index.ts
deleted file mode 100644
index c20e5354d..000000000
--- a/src/pages/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export { Courses } from './courses';
-export { Home } from './home';
-export { Nodejs } from './nodejs';
diff --git a/src/pages/javascript-en.tsx b/src/pages/javascript-en.tsx
index cd04851bb..018cf37ab 100644
--- a/src/pages/javascript-en.tsx
+++ b/src/pages/javascript-en.tsx
@@ -1,12 +1,12 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { AboutVideo } from '@/features/about-video';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Required } from '@/features/required';
-import { StudyPath } from '@/features/study-path';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { AboutVideo } from '@/widgets/about-video';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Required } from '@/widgets/required';
+import { StudyPath } from '@/widgets/study-path';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'js / front-end en';
diff --git a/src/pages/javascript-preschool-ru.tsx b/src/pages/javascript-preschool-ru.tsx
index d9bba4464..6c7e8f688 100644
--- a/src/pages/javascript-preschool-ru.tsx
+++ b/src/pages/javascript-preschool-ru.tsx
@@ -1,13 +1,13 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Faq } from '@/features/faq';
-import { Required } from '@/features/required';
-import { Trainers } from '@/features/trainers';
-import { preSchoolRu } from '@/features/trainers/preSchool.data.ts';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Faq } from '@/widgets/faq';
+import { Required } from '@/widgets/required';
+import { Trainers } from '@/widgets/trainers';
+import { preSchoolRu } from '@/widgets/trainers/preSchool.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'js / front-end pre-school ru';
diff --git a/src/pages/javascript-ru.tsx b/src/pages/javascript-ru.tsx
index 05fee0857..59f97f9da 100644
--- a/src/pages/javascript-ru.tsx
+++ b/src/pages/javascript-ru.tsx
@@ -1,12 +1,12 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { AboutVideo } from '@/features/about-video';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Required } from '@/features/required';
-import { StudyPath } from '@/features/study-path';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { AboutVideo } from '@/widgets/about-video';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Required } from '@/widgets/required';
+import { StudyPath } from '@/widgets/study-path';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'js / front-end ru';
diff --git a/src/pages/nodejs.tsx b/src/pages/nodejs.tsx
index e54118310..454ea9cc4 100644
--- a/src/pages/nodejs.tsx
+++ b/src/pages/nodejs.tsx
@@ -1,13 +1,13 @@
import { FC } from 'react';
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Required } from '@/features/required';
-import { Trainers } from '@/features/trainers';
-import { nodejs } from '@/features/trainers/nodejs.data.ts';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Required } from '@/widgets/required';
+import { Trainers } from '@/widgets/trainers';
+import { nodejs } from '@/widgets/trainers/nodejs.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'node.js';
diff --git a/src/pages/not-found.tsx b/src/pages/not-found.tsx
index ae9a29535..8e230e0f4 100644
--- a/src/pages/not-found.tsx
+++ b/src/pages/not-found.tsx
@@ -1,3 +1,3 @@
-import { NotFound as NotFoundEl } from '@/features/not-found';
+import { NotFound as NotFoundEl } from '@/widgets/not-found';
export const NotFound = () => ;
diff --git a/src/pages/react.tsx b/src/pages/react.tsx
index 1aef593ec..6080b43bc 100644
--- a/src/pages/react.tsx
+++ b/src/pages/react.tsx
@@ -1,11 +1,11 @@
-import { Breadcrumbs } from '@/app/components';
-import { About } from '@/features/about';
-import { Certification } from '@/features/certification';
-import { Communication } from '@/features/communication';
-import { CourseMain } from '@/features/course-main';
-import { Trainers } from '@/features/trainers';
-import { reactEn } from '@/features/trainers/react-en.data.ts';
-import { TrainingProgram } from '@/features/training-program';
+import { About } from '@/widgets/about';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Certification } from '@/widgets/certification';
+import { Communication } from '@/widgets/communication';
+import { CourseMain } from '@/widgets/course-main';
+import { Trainers } from '@/widgets/trainers';
+import { reactEn } from '@/widgets/trainers/react-en.data';
+import { TrainingProgram } from '@/widgets/training-program';
const COURSE_NAME = 'react';
diff --git a/src/pages/school.tsx b/src/pages/school.tsx
index 1d2cc9595..a3948c006 100644
--- a/src/pages/school.tsx
+++ b/src/pages/school.tsx
@@ -1,17 +1,15 @@
import { FC } from 'react';
-import { Breadcrumbs } from '@/app/components';
-import { useTitle } from '@/app/hooks';
-import { Principles } from '@/features/principles';
-import {
- About,
- Alumni,
- Courses,
- Main,
- Mentoring,
- Mentors,
- Requirements,
- StudyWithUs,
-} from '@/features/school';
+import { useTitle } from '@/shared/hooks/use-title';
+import { About } from '@/widgets/about-school';
+import { Alumni } from '@/widgets/alumni';
+import { Breadcrumbs } from '@/widgets/breadcrumbs';
+import { Courses } from '@/widgets/courses-school';
+import { Main } from '@/widgets/main';
+import { Mentoring } from '@/widgets/mentoring';
+import { Mentors } from '@/widgets/mentors';
+import { Principles } from '@/widgets/principles';
+import { Requirements } from '@/widgets/requirements';
+import { StudyWithUs } from '@/widgets/study-with-us';
export const School: FC = () => {
useTitle('The Rolling Scopes School');
diff --git a/src/__tests__/constants.ts b/src/shared/__tests__/constants.ts
similarity index 89%
rename from src/__tests__/constants.ts
rename to src/shared/__tests__/constants.ts
index 87ac49467..bac6a92eb 100644
--- a/src/__tests__/constants.ts
+++ b/src/shared/__tests__/constants.ts
@@ -1,5 +1,5 @@
-import nodejsImg1 from '@/assets/mentors/m-shylau.webp';
-import { Trainer } from '@/features/trainers/trainers.types.ts';
+import nodejsImg1 from '@/shared/assets/mentors/m-shylau.webp';
+import { Trainer } from '@/widgets/trainers/trainers.types';
export const MOCKED_IMAGE_PATH = 'mocked-image-path.webp';
const MOCKED_TRAINER = {
diff --git a/src/__tests__/setup-tests.ts b/src/shared/__tests__/setup-tests.ts
similarity index 100%
rename from src/__tests__/setup-tests.ts
rename to src/shared/__tests__/setup-tests.ts
diff --git a/src/__tests__/utils/index.ts b/src/shared/__tests__/utils/index.ts
similarity index 100%
rename from src/__tests__/utils/index.ts
rename to src/shared/__tests__/utils/index.ts
diff --git a/src/__tests__/utils/render-with-router/index.ts b/src/shared/__tests__/utils/render-with-router/index.ts
similarity index 100%
rename from src/__tests__/utils/render-with-router/index.ts
rename to src/shared/__tests__/utils/render-with-router/index.ts
diff --git a/src/__tests__/utils/render-with-router/render-with-router.tsx b/src/shared/__tests__/utils/render-with-router/render-with-router.tsx
similarity index 100%
rename from src/__tests__/utils/render-with-router/render-with-router.tsx
rename to src/shared/__tests__/utils/render-with-router/render-with-router.tsx
diff --git a/src/__tests__/visualTesting/community.spec.ts b/src/shared/__tests__/visualTesting/community.spec.ts
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts
rename to src/shared/__tests__/visualTesting/community.spec.ts
diff --git a/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png
new file mode 100644
index 000000000..652f352b0
Binary files /dev/null and b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-darwin.png differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-win32.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-win32.png
rename to src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Chrome-win32.png
diff --git a/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png
new file mode 100644
index 000000000..5ebc11e8e
Binary files /dev/null and b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-darwin.png differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-win32.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-win32.png
rename to src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-Mobile-Safari-win32.png
diff --git a/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png
new file mode 100644
index 000000000..d3b21ae8c
Binary files /dev/null and b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-darwin.png differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-win32.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-win32.png
rename to src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-chromium-win32.png
diff --git a/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png
new file mode 100644
index 000000000..7b48a5c72
Binary files /dev/null and b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-darwin.png differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-win32.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-win32.png
rename to src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-firefox-win32.png
diff --git a/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png
new file mode 100644
index 000000000..d041266e9
Binary files /dev/null and b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-darwin.png differ
diff --git a/src/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-win32.png b/src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-win32.png
rename to src/shared/__tests__/visualTesting/community.spec.ts-snapshots/community-webkit-win32.png
diff --git a/src/__tests__/visualTesting/courses.spec.ts b/src/shared/__tests__/visualTesting/courses.spec.ts
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts
rename to src/shared/__tests__/visualTesting/courses.spec.ts
diff --git a/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png
new file mode 100644
index 000000000..fdaed6b3f
Binary files /dev/null and b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-darwin.png differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-win32.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-win32.png
rename to src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Chrome-win32.png
diff --git a/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png
new file mode 100644
index 000000000..c96920bcf
Binary files /dev/null and b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-darwin.png differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-win32.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-win32.png
rename to src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-Mobile-Safari-win32.png
diff --git a/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png
new file mode 100644
index 000000000..24c2aca30
Binary files /dev/null and b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-darwin.png differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-win32.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-win32.png
rename to src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-chromium-win32.png
diff --git a/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png
new file mode 100644
index 000000000..935dde598
Binary files /dev/null and b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-darwin.png differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-win32.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-win32.png
rename to src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-firefox-win32.png
diff --git a/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png
new file mode 100644
index 000000000..4bf7659c4
Binary files /dev/null and b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-darwin.png differ
diff --git a/src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-win32.png b/src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-win32.png
rename to src/shared/__tests__/visualTesting/courses.spec.ts-snapshots/courses-webkit-win32.png
diff --git a/src/__tests__/visualTesting/main.spec.ts b/src/shared/__tests__/visualTesting/main.spec.ts
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts
rename to src/shared/__tests__/visualTesting/main.spec.ts
diff --git a/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png
new file mode 100644
index 000000000..17bf7f652
Binary files /dev/null and b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-darwin.png differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-win32.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-win32.png
rename to src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Chrome-win32.png
diff --git a/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png
new file mode 100644
index 000000000..87b9bcd79
Binary files /dev/null and b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-darwin.png differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-win32.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-win32.png
rename to src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-Mobile-Safari-win32.png
diff --git a/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png
new file mode 100644
index 000000000..26ce9b13e
Binary files /dev/null and b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-darwin.png differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-win32.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-win32.png
rename to src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-chromium-win32.png
diff --git a/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png
new file mode 100644
index 000000000..fd0293276
Binary files /dev/null and b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-darwin.png differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-win32.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-win32.png
rename to src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-firefox-win32.png
diff --git a/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png
new file mode 100644
index 000000000..c763a1bf2
Binary files /dev/null and b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-darwin.png differ
diff --git a/src/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-win32.png b/src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-win32.png
similarity index 100%
rename from src/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-win32.png
rename to src/shared/__tests__/visualTesting/main.spec.ts-snapshots/main-webkit-win32.png
diff --git a/src/shared/__tests__/visualTesting/report/index.html b/src/shared/__tests__/visualTesting/report/index.html
new file mode 100644
index 000000000..148e84daf
--- /dev/null
+++ b/src/shared/__tests__/visualTesting/report/index.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+ Playwright Test Report
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/__tests__/visualTesting/results/.last-run.json b/src/shared/__tests__/visualTesting/results/.last-run.json
new file mode 100644
index 000000000..cbcc1fbac
--- /dev/null
+++ b/src/shared/__tests__/visualTesting/results/.last-run.json
@@ -0,0 +1,4 @@
+{
+ "status": "passed",
+ "failedTests": []
+}
\ No newline at end of file
diff --git a/src/assets/404.webp b/src/shared/assets/404.webp
similarity index 100%
rename from src/assets/404.webp
rename to src/shared/assets/404.webp
diff --git a/src/assets/about.webp b/src/shared/assets/about.webp
similarity index 100%
rename from src/assets/about.webp
rename to src/shared/assets/about.webp
diff --git a/src/assets/alumni/aesoft.svg b/src/shared/assets/alumni/aesoft.svg
similarity index 100%
rename from src/assets/alumni/aesoft.svg
rename to src/shared/assets/alumni/aesoft.svg
diff --git a/src/assets/alumni/andersen.svg b/src/shared/assets/alumni/andersen.svg
similarity index 100%
rename from src/assets/alumni/andersen.svg
rename to src/shared/assets/alumni/andersen.svg
diff --git a/src/assets/alumni/coherent.svg b/src/shared/assets/alumni/coherent.svg
similarity index 100%
rename from src/assets/alumni/coherent.svg
rename to src/shared/assets/alumni/coherent.svg
diff --git a/src/assets/alumni/dataart.svg b/src/shared/assets/alumni/dataart.svg
similarity index 100%
rename from src/assets/alumni/dataart.svg
rename to src/shared/assets/alumni/dataart.svg
diff --git a/src/assets/alumni/dott.svg b/src/shared/assets/alumni/dott.svg
similarity index 100%
rename from src/assets/alumni/dott.svg
rename to src/shared/assets/alumni/dott.svg
diff --git a/src/assets/alumni/elinext.svg b/src/shared/assets/alumni/elinext.svg
similarity index 100%
rename from src/assets/alumni/elinext.svg
rename to src/shared/assets/alumni/elinext.svg
diff --git a/src/assets/alumni/epam.svg b/src/shared/assets/alumni/epam.svg
similarity index 100%
rename from src/assets/alumni/epam.svg
rename to src/shared/assets/alumni/epam.svg
diff --git a/src/assets/alumni/godel.svg b/src/shared/assets/alumni/godel.svg
similarity index 100%
rename from src/assets/alumni/godel.svg
rename to src/shared/assets/alumni/godel.svg
diff --git a/src/assets/alumni/itechart.svg b/src/shared/assets/alumni/itechart.svg
similarity index 100%
rename from src/assets/alumni/itechart.svg
rename to src/shared/assets/alumni/itechart.svg
diff --git a/src/assets/alumni/miro.svg b/src/shared/assets/alumni/miro.svg
similarity index 100%
rename from src/assets/alumni/miro.svg
rename to src/shared/assets/alumni/miro.svg
diff --git a/src/assets/alumni/nanosoft.svg b/src/shared/assets/alumni/nanosoft.svg
similarity index 100%
rename from src/assets/alumni/nanosoft.svg
rename to src/shared/assets/alumni/nanosoft.svg
diff --git a/src/assets/alumni/oxagile.svg b/src/shared/assets/alumni/oxagile.svg
similarity index 100%
rename from src/assets/alumni/oxagile.svg
rename to src/shared/assets/alumni/oxagile.svg
diff --git a/src/assets/alumni/pandadoc.svg b/src/shared/assets/alumni/pandadoc.svg
similarity index 100%
rename from src/assets/alumni/pandadoc.svg
rename to src/shared/assets/alumni/pandadoc.svg
diff --git a/src/assets/alumni/qulix.svg b/src/shared/assets/alumni/qulix.svg
similarity index 100%
rename from src/assets/alumni/qulix.svg
rename to src/shared/assets/alumni/qulix.svg
diff --git a/src/assets/alumni/satellite.svg b/src/shared/assets/alumni/satellite.svg
similarity index 100%
rename from src/assets/alumni/satellite.svg
rename to src/shared/assets/alumni/satellite.svg
diff --git a/src/assets/alumni/sberbank.svg b/src/shared/assets/alumni/sberbank.svg
similarity index 100%
rename from src/assets/alumni/sberbank.svg
rename to src/shared/assets/alumni/sberbank.svg
diff --git a/src/assets/alumni/toptal.svg b/src/shared/assets/alumni/toptal.svg
similarity index 100%
rename from src/assets/alumni/toptal.svg
rename to src/shared/assets/alumni/toptal.svg
diff --git a/src/assets/alumni/visualfabriq.svg b/src/shared/assets/alumni/visualfabriq.svg
similarity index 100%
rename from src/assets/alumni/visualfabriq.svg
rename to src/shared/assets/alumni/visualfabriq.svg
diff --git a/src/assets/aws-cloud-pract-badge.webp b/src/shared/assets/aws-cloud-pract-badge.webp
similarity index 100%
rename from src/assets/aws-cloud-pract-badge.webp
rename to src/shared/assets/aws-cloud-pract-badge.webp
diff --git a/src/assets/contribute.webp b/src/shared/assets/contribute.webp
similarity index 100%
rename from src/assets/contribute.webp
rename to src/shared/assets/contribute.webp
diff --git a/src/assets/icons/angular-secondary.webp b/src/shared/assets/icons/angular-secondary.webp
similarity index 100%
rename from src/assets/icons/angular-secondary.webp
rename to src/shared/assets/icons/angular-secondary.webp
diff --git a/src/assets/icons/angular.svg b/src/shared/assets/icons/angular.svg
similarity index 100%
rename from src/assets/icons/angular.svg
rename to src/shared/assets/icons/angular.svg
diff --git a/src/assets/icons/award-icon.webp b/src/shared/assets/icons/award-icon.webp
similarity index 100%
rename from src/assets/icons/award-icon.webp
rename to src/shared/assets/icons/award-icon.webp
diff --git a/src/assets/icons/aws-developer.webp b/src/shared/assets/icons/aws-developer.webp
similarity index 100%
rename from src/assets/icons/aws-developer.webp
rename to src/shared/assets/icons/aws-developer.webp
diff --git a/src/assets/icons/aws-fundamentals.webp b/src/shared/assets/icons/aws-fundamentals.webp
similarity index 100%
rename from src/assets/icons/aws-fundamentals.webp
rename to src/shared/assets/icons/aws-fundamentals.webp
diff --git a/src/assets/icons/aws-secondary.webp b/src/shared/assets/icons/aws-secondary.webp
similarity index 100%
rename from src/assets/icons/aws-secondary.webp
rename to src/shared/assets/icons/aws-secondary.webp
diff --git a/src/assets/icons/aws.svg b/src/shared/assets/icons/aws.svg
similarity index 100%
rename from src/assets/icons/aws.svg
rename to src/shared/assets/icons/aws.svg
diff --git a/src/assets/icons/chat-icon.webp b/src/shared/assets/icons/chat-icon.webp
similarity index 100%
rename from src/assets/icons/chat-icon.webp
rename to src/shared/assets/icons/chat-icon.webp
diff --git a/src/assets/icons/facebook.svg b/src/shared/assets/icons/facebook.svg
similarity index 100%
rename from src/assets/icons/facebook.svg
rename to src/shared/assets/icons/facebook.svg
diff --git a/src/assets/icons/footer/angular.webp b/src/shared/assets/icons/footer/angular.webp
similarity index 100%
rename from src/assets/icons/footer/angular.webp
rename to src/shared/assets/icons/footer/angular.webp
diff --git a/src/assets/icons/footer/aws-dev.webp b/src/shared/assets/icons/footer/aws-dev.webp
similarity index 100%
rename from src/assets/icons/footer/aws-dev.webp
rename to src/shared/assets/icons/footer/aws-dev.webp
diff --git a/src/assets/icons/footer/aws-fundamentals.webp b/src/shared/assets/icons/footer/aws-fundamentals.webp
similarity index 100%
rename from src/assets/icons/footer/aws-fundamentals.webp
rename to src/shared/assets/icons/footer/aws-fundamentals.webp
diff --git a/src/assets/icons/footer/html.webp b/src/shared/assets/icons/footer/html.webp
similarity index 100%
rename from src/assets/icons/footer/html.webp
rename to src/shared/assets/icons/footer/html.webp
diff --git a/src/assets/icons/footer/javascript.webp b/src/shared/assets/icons/footer/javascript.webp
similarity index 100%
rename from src/assets/icons/footer/javascript.webp
rename to src/shared/assets/icons/footer/javascript.webp
diff --git a/src/assets/icons/footer/nodejs.webp b/src/shared/assets/icons/footer/nodejs.webp
similarity index 100%
rename from src/assets/icons/footer/nodejs.webp
rename to src/shared/assets/icons/footer/nodejs.webp
diff --git a/src/assets/icons/footer/react.webp b/src/shared/assets/icons/footer/react.webp
similarity index 100%
rename from src/assets/icons/footer/react.webp
rename to src/shared/assets/icons/footer/react.webp
diff --git a/src/assets/icons/gift.webp b/src/shared/assets/icons/gift.webp
similarity index 100%
rename from src/assets/icons/gift.webp
rename to src/shared/assets/icons/gift.webp
diff --git a/src/assets/icons/html.webp b/src/shared/assets/icons/html.webp
similarity index 100%
rename from src/assets/icons/html.webp
rename to src/shared/assets/icons/html.webp
diff --git a/src/assets/icons/instagram.svg b/src/shared/assets/icons/instagram.svg
similarity index 100%
rename from src/assets/icons/instagram.svg
rename to src/shared/assets/icons/instagram.svg
diff --git a/src/assets/icons/javascript.webp b/src/shared/assets/icons/javascript.webp
similarity index 100%
rename from src/assets/icons/javascript.webp
rename to src/shared/assets/icons/javascript.webp
diff --git a/src/assets/icons/js-secondary.webp b/src/shared/assets/icons/js-secondary.webp
similarity index 100%
rename from src/assets/icons/js-secondary.webp
rename to src/shared/assets/icons/js-secondary.webp
diff --git a/src/assets/icons/mic.svg b/src/shared/assets/icons/mic.svg
similarity index 100%
rename from src/assets/icons/mic.svg
rename to src/shared/assets/icons/mic.svg
diff --git a/src/assets/icons/node.svg b/src/shared/assets/icons/node.svg
similarity index 100%
rename from src/assets/icons/node.svg
rename to src/shared/assets/icons/node.svg
diff --git a/src/assets/icons/nodejs-secondary.webp b/src/shared/assets/icons/nodejs-secondary.webp
similarity index 100%
rename from src/assets/icons/nodejs-secondary.webp
rename to src/shared/assets/icons/nodejs-secondary.webp
diff --git a/src/assets/icons/nodejs.webp b/src/shared/assets/icons/nodejs.webp
similarity index 100%
rename from src/assets/icons/nodejs.webp
rename to src/shared/assets/icons/nodejs.webp
diff --git a/src/assets/icons/note-icon.svg b/src/shared/assets/icons/note-icon.svg
similarity index 100%
rename from src/assets/icons/note-icon.svg
rename to src/shared/assets/icons/note-icon.svg
diff --git a/src/assets/icons/note-icon.webp b/src/shared/assets/icons/note-icon.webp
similarity index 100%
rename from src/assets/icons/note-icon.webp
rename to src/shared/assets/icons/note-icon.webp
diff --git a/src/assets/icons/paper-icon.webp b/src/shared/assets/icons/paper-icon.webp
similarity index 100%
rename from src/assets/icons/paper-icon.webp
rename to src/shared/assets/icons/paper-icon.webp
diff --git a/src/assets/icons/person-icon.webp b/src/shared/assets/icons/person-icon.webp
similarity index 100%
rename from src/assets/icons/person-icon.webp
rename to src/shared/assets/icons/person-icon.webp
diff --git a/src/assets/icons/planet.webp b/src/shared/assets/icons/planet.webp
similarity index 100%
rename from src/assets/icons/planet.webp
rename to src/shared/assets/icons/planet.webp
diff --git a/src/assets/icons/react-angular.svg b/src/shared/assets/icons/react-angular.svg
similarity index 100%
rename from src/assets/icons/react-angular.svg
rename to src/shared/assets/icons/react-angular.svg
diff --git a/src/assets/icons/react-secondary.webp b/src/shared/assets/icons/react-secondary.webp
similarity index 100%
rename from src/assets/icons/react-secondary.webp
rename to src/shared/assets/icons/react-secondary.webp
diff --git a/src/assets/icons/react.svg b/src/shared/assets/icons/react.svg
similarity index 100%
rename from src/assets/icons/react.svg
rename to src/shared/assets/icons/react.svg
diff --git a/src/assets/map.webp b/src/shared/assets/map.webp
similarity index 100%
rename from src/assets/map.webp
rename to src/shared/assets/map.webp
diff --git a/src/assets/mentor-with-his-students.webp b/src/shared/assets/mentor-with-his-students.webp
similarity index 100%
rename from src/assets/mentor-with-his-students.webp
rename to src/shared/assets/mentor-with-his-students.webp
diff --git a/src/assets/mentors-wanted-poster.webp b/src/shared/assets/mentors-wanted-poster.webp
similarity index 100%
rename from src/assets/mentors-wanted-poster.webp
rename to src/shared/assets/mentors-wanted-poster.webp
diff --git a/src/assets/mentors-wanted.webp b/src/shared/assets/mentors-wanted.webp
similarity index 100%
rename from src/assets/mentors-wanted.webp
rename to src/shared/assets/mentors-wanted.webp
diff --git a/src/assets/mentors/a-auchynikau.webp b/src/shared/assets/mentors/a-auchynikau.webp
similarity index 100%
rename from src/assets/mentors/a-auchynikau.webp
rename to src/shared/assets/mentors/a-auchynikau.webp
diff --git a/src/assets/mentors/a-musikhina.webp b/src/shared/assets/mentors/a-musikhina.webp
similarity index 100%
rename from src/assets/mentors/a-musikhina.webp
rename to src/shared/assets/mentors/a-musikhina.webp
diff --git a/src/assets/mentors/a-parfianenkau.webp b/src/shared/assets/mentors/a-parfianenkau.webp
similarity index 100%
rename from src/assets/mentors/a-parfianenkau.webp
rename to src/shared/assets/mentors/a-parfianenkau.webp
diff --git a/src/assets/mentors/a-podlubnyj.webp b/src/shared/assets/mentors/a-podlubnyj.webp
similarity index 100%
rename from src/assets/mentors/a-podlubnyj.webp
rename to src/shared/assets/mentors/a-podlubnyj.webp
diff --git a/src/assets/mentors/a-sacca.webp b/src/shared/assets/mentors/a-sacca.webp
similarity index 100%
rename from src/assets/mentors/a-sacca.webp
rename to src/shared/assets/mentors/a-sacca.webp
diff --git a/src/assets/mentors/a-serhiyenia.webp b/src/shared/assets/mentors/a-serhiyenia.webp
similarity index 100%
rename from src/assets/mentors/a-serhiyenia.webp
rename to src/shared/assets/mentors/a-serhiyenia.webp
diff --git a/src/assets/mentors/a-vera.webp b/src/shared/assets/mentors/a-vera.webp
similarity index 100%
rename from src/assets/mentors/a-vera.webp
rename to src/shared/assets/mentors/a-vera.webp
diff --git a/src/assets/mentors/ac-akbarov.webp b/src/shared/assets/mentors/ac-akbarov.webp
similarity index 100%
rename from src/assets/mentors/ac-akbarov.webp
rename to src/shared/assets/mentors/ac-akbarov.webp
diff --git a/src/assets/mentors/ac-danilov.webp b/src/shared/assets/mentors/ac-danilov.webp
similarity index 100%
rename from src/assets/mentors/ac-danilov.webp
rename to src/shared/assets/mentors/ac-danilov.webp
diff --git a/src/assets/mentors/ac-konyakhin.webp b/src/shared/assets/mentors/ac-konyakhin.webp
similarity index 100%
rename from src/assets/mentors/ac-konyakhin.webp
rename to src/shared/assets/mentors/ac-konyakhin.webp
diff --git a/src/assets/mentors/ac-kustikov.webp b/src/shared/assets/mentors/ac-kustikov.webp
similarity index 100%
rename from src/assets/mentors/ac-kustikov.webp
rename to src/shared/assets/mentors/ac-kustikov.webp
diff --git a/src/assets/mentors/d-cebruk.webp b/src/shared/assets/mentors/d-cebruk.webp
similarity index 100%
rename from src/assets/mentors/d-cebruk.webp
rename to src/shared/assets/mentors/d-cebruk.webp
diff --git a/src/assets/mentors/d-kohut.webp b/src/shared/assets/mentors/d-kohut.webp
similarity index 100%
rename from src/assets/mentors/d-kohut.webp
rename to src/shared/assets/mentors/d-kohut.webp
diff --git a/src/assets/mentors/d-struneuski.webp b/src/shared/assets/mentors/d-struneuski.webp
similarity index 100%
rename from src/assets/mentors/d-struneuski.webp
rename to src/shared/assets/mentors/d-struneuski.webp
diff --git a/src/assets/mentors/d-yarmoshkin.png b/src/shared/assets/mentors/d-yarmoshkin.png
similarity index 100%
rename from src/assets/mentors/d-yarmoshkin.png
rename to src/shared/assets/mentors/d-yarmoshkin.png
diff --git a/src/assets/mentors/e-garipov.webp b/src/shared/assets/mentors/e-garipov.webp
similarity index 100%
rename from src/assets/mentors/e-garipov.webp
rename to src/shared/assets/mentors/e-garipov.webp
diff --git a/src/assets/mentors/i-krasiuk.webp b/src/shared/assets/mentors/i-krasiuk.webp
similarity index 100%
rename from src/assets/mentors/i-krasiuk.webp
rename to src/shared/assets/mentors/i-krasiuk.webp
diff --git a/src/assets/mentors/k-britsyn.webp b/src/shared/assets/mentors/k-britsyn.webp
similarity index 100%
rename from src/assets/mentors/k-britsyn.webp
rename to src/shared/assets/mentors/k-britsyn.webp
diff --git a/src/assets/mentors/m-malets.webp b/src/shared/assets/mentors/m-malets.webp
similarity index 100%
rename from src/assets/mentors/m-malets.webp
rename to src/shared/assets/mentors/m-malets.webp
diff --git a/src/assets/mentors/m-shylau.webp b/src/shared/assets/mentors/m-shylau.webp
similarity index 100%
rename from src/assets/mentors/m-shylau.webp
rename to src/shared/assets/mentors/m-shylau.webp
diff --git a/src/assets/mentors/n-loginova.webp b/src/shared/assets/mentors/n-loginova.webp
similarity index 100%
rename from src/assets/mentors/n-loginova.webp
rename to src/shared/assets/mentors/n-loginova.webp
diff --git a/src/assets/mentors/o-duleba.webp b/src/shared/assets/mentors/o-duleba.webp
similarity index 100%
rename from src/assets/mentors/o-duleba.webp
rename to src/shared/assets/mentors/o-duleba.webp
diff --git a/src/assets/mentors/p-razuvalov.webp b/src/shared/assets/mentors/p-razuvalov.webp
similarity index 100%
rename from src/assets/mentors/p-razuvalov.webp
rename to src/shared/assets/mentors/p-razuvalov.webp
diff --git a/src/assets/mentors/r-saltykov.webp b/src/shared/assets/mentors/r-saltykov.webp
similarity index 100%
rename from src/assets/mentors/r-saltykov.webp
rename to src/shared/assets/mentors/r-saltykov.webp
diff --git a/src/assets/mentors/s-castellanos.webp b/src/shared/assets/mentors/s-castellanos.webp
similarity index 100%
rename from src/assets/mentors/s-castellanos.webp
rename to src/shared/assets/mentors/s-castellanos.webp
diff --git a/src/assets/mentors/s-shalyapin.webp b/src/shared/assets/mentors/s-shalyapin.webp
similarity index 100%
rename from src/assets/mentors/s-shalyapin.webp
rename to src/shared/assets/mentors/s-shalyapin.webp
diff --git a/src/assets/mentors/v-antonau.webp b/src/shared/assets/mentors/v-antonau.webp
similarity index 100%
rename from src/assets/mentors/v-antonau.webp
rename to src/shared/assets/mentors/v-antonau.webp
diff --git a/src/assets/mentors/v-dluski.webp b/src/shared/assets/mentors/v-dluski.webp
similarity index 100%
rename from src/assets/mentors/v-dluski.webp
rename to src/shared/assets/mentors/v-dluski.webp
diff --git a/src/assets/mentors/v-kavaliou.webp b/src/shared/assets/mentors/v-kavaliou.webp
similarity index 100%
rename from src/assets/mentors/v-kavaliou.webp
rename to src/shared/assets/mentors/v-kavaliou.webp
diff --git a/src/assets/mentors/v-kovalev.webp b/src/shared/assets/mentors/v-kovalev.webp
similarity index 100%
rename from src/assets/mentors/v-kovalev.webp
rename to src/shared/assets/mentors/v-kovalev.webp
diff --git a/src/assets/merch.webp b/src/shared/assets/merch.webp
similarity index 100%
rename from src/assets/merch.webp
rename to src/shared/assets/merch.webp
diff --git a/src/assets/nodejs-audience.webp b/src/shared/assets/nodejs-audience.webp
similarity index 100%
rename from src/assets/nodejs-audience.webp
rename to src/shared/assets/nodejs-audience.webp
diff --git a/src/assets/nodejs-trainer.webp b/src/shared/assets/nodejs-trainer.webp
similarity index 100%
rename from src/assets/nodejs-trainer.webp
rename to src/shared/assets/nodejs-trainer.webp
diff --git a/src/assets/photo-1.webp b/src/shared/assets/photo-1.webp
similarity index 100%
rename from src/assets/photo-1.webp
rename to src/shared/assets/photo-1.webp
diff --git a/src/assets/photo-2.webp b/src/shared/assets/photo-2.webp
similarity index 100%
rename from src/assets/photo-2.webp
rename to src/shared/assets/photo-2.webp
diff --git a/src/assets/photo-3.webp b/src/shared/assets/photo-3.webp
similarity index 100%
rename from src/assets/photo-3.webp
rename to src/shared/assets/photo-3.webp
diff --git a/src/assets/photo-4.webp b/src/shared/assets/photo-4.webp
similarity index 100%
rename from src/assets/photo-4.webp
rename to src/shared/assets/photo-4.webp
diff --git a/src/assets/photo-5.webp b/src/shared/assets/photo-5.webp
similarity index 100%
rename from src/assets/photo-5.webp
rename to src/shared/assets/photo-5.webp
diff --git a/src/assets/photo-6.webp b/src/shared/assets/photo-6.webp
similarity index 100%
rename from src/assets/photo-6.webp
rename to src/shared/assets/photo-6.webp
diff --git a/src/assets/photo-7.webp b/src/shared/assets/photo-7.webp
similarity index 100%
rename from src/assets/photo-7.webp
rename to src/shared/assets/photo-7.webp
diff --git a/src/assets/photo-8.webp b/src/shared/assets/photo-8.webp
similarity index 100%
rename from src/assets/photo-8.webp
rename to src/shared/assets/photo-8.webp
diff --git a/src/assets/photo-9.webp b/src/shared/assets/photo-9.webp
similarity index 100%
rename from src/assets/photo-9.webp
rename to src/shared/assets/photo-9.webp
diff --git a/src/assets/rs-git.webp b/src/shared/assets/rs-git.webp
similarity index 100%
rename from src/assets/rs-git.webp
rename to src/shared/assets/rs-git.webp
diff --git a/src/assets/rs-school-svg.svg b/src/shared/assets/rs-school-svg.svg
similarity index 100%
rename from src/assets/rs-school-svg.svg
rename to src/shared/assets/rs-school-svg.svg
diff --git a/src/assets/rs-school.webp b/src/shared/assets/rs-school.webp
similarity index 100%
rename from src/assets/rs-school.webp
rename to src/shared/assets/rs-school.webp
diff --git a/src/assets/rs-slope-angular.webp b/src/shared/assets/rs-slope-angular.webp
similarity index 100%
rename from src/assets/rs-slope-angular.webp
rename to src/shared/assets/rs-slope-angular.webp
diff --git a/src/assets/rs-slope-aws-dev.webp b/src/shared/assets/rs-slope-aws-dev.webp
similarity index 100%
rename from src/assets/rs-slope-aws-dev.webp
rename to src/shared/assets/rs-slope-aws-dev.webp
diff --git a/src/assets/rs-slope-aws-fundamentals.webp b/src/shared/assets/rs-slope-aws-fundamentals.webp
similarity index 100%
rename from src/assets/rs-slope-aws-fundamentals.webp
rename to src/shared/assets/rs-slope-aws-fundamentals.webp
diff --git a/src/assets/rs-slope-js.webp b/src/shared/assets/rs-slope-js.webp
similarity index 100%
rename from src/assets/rs-slope-js.webp
rename to src/shared/assets/rs-slope-js.webp
diff --git a/src/assets/rs-slope-nodejs.webp b/src/shared/assets/rs-slope-nodejs.webp
similarity index 100%
rename from src/assets/rs-slope-nodejs.webp
rename to src/shared/assets/rs-slope-nodejs.webp
diff --git a/src/assets/rs-slope-react-en.webp b/src/shared/assets/rs-slope-react-en.webp
similarity index 100%
rename from src/assets/rs-slope-react-en.webp
rename to src/shared/assets/rs-slope-react-en.webp
diff --git a/src/assets/rs-slope-react-ru.webp b/src/shared/assets/rs-slope-react-ru.webp
similarity index 100%
rename from src/assets/rs-slope-react-ru.webp
rename to src/shared/assets/rs-slope-react-ru.webp
diff --git a/src/assets/speakers-wanted.webp b/src/shared/assets/speakers-wanted.webp
similarity index 100%
rename from src/assets/speakers-wanted.webp
rename to src/shared/assets/speakers-wanted.webp
diff --git a/src/assets/stages/stage-1.webp b/src/shared/assets/stages/stage-1.webp
similarity index 100%
rename from src/assets/stages/stage-1.webp
rename to src/shared/assets/stages/stage-1.webp
diff --git a/src/assets/stages/stage-2.webp b/src/shared/assets/stages/stage-2.webp
similarity index 100%
rename from src/assets/stages/stage-2.webp
rename to src/shared/assets/stages/stage-2.webp
diff --git a/src/assets/stages/stage-3.webp b/src/shared/assets/stages/stage-3.webp
similarity index 100%
rename from src/assets/stages/stage-3.webp
rename to src/shared/assets/stages/stage-3.webp
diff --git a/src/assets/support.webp b/src/shared/assets/support.webp
similarity index 100%
rename from src/assets/support.webp
rename to src/shared/assets/support.webp
diff --git a/src/assets/svg/RsBanner.svg b/src/shared/assets/svg/RsBanner.svg
similarity index 100%
rename from src/assets/svg/RsBanner.svg
rename to src/shared/assets/svg/RsBanner.svg
diff --git a/src/assets/svg/angular-icon.svg b/src/shared/assets/svg/angular-icon.svg
similarity index 100%
rename from src/assets/svg/angular-icon.svg
rename to src/shared/assets/svg/angular-icon.svg
diff --git a/src/assets/svg/arrow.svg b/src/shared/assets/svg/arrow.svg
similarity index 100%
rename from src/assets/svg/arrow.svg
rename to src/shared/assets/svg/arrow.svg
diff --git a/src/assets/svg/aws.svg b/src/shared/assets/svg/aws.svg
similarity index 100%
rename from src/assets/svg/aws.svg
rename to src/shared/assets/svg/aws.svg
diff --git a/src/assets/svg/discord-logo.svg b/src/shared/assets/svg/discord-logo.svg
similarity index 100%
rename from src/assets/svg/discord-logo.svg
rename to src/shared/assets/svg/discord-logo.svg
diff --git a/src/assets/svg/dropdown-arrow.svg b/src/shared/assets/svg/dropdown-arrow.svg
similarity index 100%
rename from src/assets/svg/dropdown-arrow.svg
rename to src/shared/assets/svg/dropdown-arrow.svg
diff --git a/src/assets/svg/email.svg b/src/shared/assets/svg/email.svg
similarity index 100%
rename from src/assets/svg/email.svg
rename to src/shared/assets/svg/email.svg
diff --git a/src/assets/svg/epam.svg b/src/shared/assets/svg/epam.svg
similarity index 100%
rename from src/assets/svg/epam.svg
rename to src/shared/assets/svg/epam.svg
diff --git a/src/assets/svg/facebook.svg b/src/shared/assets/svg/facebook.svg
similarity index 100%
rename from src/assets/svg/facebook.svg
rename to src/shared/assets/svg/facebook.svg
diff --git a/src/assets/svg/github.svg b/src/shared/assets/svg/github.svg
similarity index 100%
rename from src/assets/svg/github.svg
rename to src/shared/assets/svg/github.svg
diff --git a/src/assets/svg/html.svg b/src/shared/assets/svg/html.svg
similarity index 100%
rename from src/assets/svg/html.svg
rename to src/shared/assets/svg/html.svg
diff --git a/src/assets/svg/instagram.svg b/src/shared/assets/svg/instagram.svg
similarity index 100%
rename from src/assets/svg/instagram.svg
rename to src/shared/assets/svg/instagram.svg
diff --git a/src/assets/svg/jetbrains.svg b/src/shared/assets/svg/jetbrains.svg
similarity index 100%
rename from src/assets/svg/jetbrains.svg
rename to src/shared/assets/svg/jetbrains.svg
diff --git a/src/assets/svg/linkedIn.svg b/src/shared/assets/svg/linkedIn.svg
similarity index 100%
rename from src/assets/svg/linkedIn.svg
rename to src/shared/assets/svg/linkedIn.svg
diff --git a/src/assets/svg/nodeJS.svg b/src/shared/assets/svg/nodeJS.svg
similarity index 100%
rename from src/assets/svg/nodeJS.svg
rename to src/shared/assets/svg/nodeJS.svg
diff --git a/src/assets/svg/openSourcePhilosophyIcon.svg b/src/shared/assets/svg/openSourcePhilosophyIcon.svg
similarity index 100%
rename from src/assets/svg/openSourcePhilosophyIcon.svg
rename to src/shared/assets/svg/openSourcePhilosophyIcon.svg
diff --git a/src/assets/svg/openToEveryoneIcon.svg b/src/shared/assets/svg/openToEveryoneIcon.svg
similarity index 100%
rename from src/assets/svg/openToEveryoneIcon.svg
rename to src/shared/assets/svg/openToEveryoneIcon.svg
diff --git a/src/assets/svg/react.svg b/src/shared/assets/svg/react.svg
similarity index 100%
rename from src/assets/svg/react.svg
rename to src/shared/assets/svg/react.svg
diff --git a/src/assets/svg/rss-logo.svg b/src/shared/assets/svg/rss-logo.svg
similarity index 100%
rename from src/assets/svg/rss-logo.svg
rename to src/shared/assets/svg/rss-logo.svg
diff --git a/src/assets/svg/teachItForwardIcon.svg b/src/shared/assets/svg/teachItForwardIcon.svg
similarity index 100%
rename from src/assets/svg/teachItForwardIcon.svg
rename to src/shared/assets/svg/teachItForwardIcon.svg
diff --git a/src/assets/svg/telegram.svg b/src/shared/assets/svg/telegram.svg
similarity index 100%
rename from src/assets/svg/telegram.svg
rename to src/shared/assets/svg/telegram.svg
diff --git a/src/assets/svg/text-link.svg b/src/shared/assets/svg/text-link.svg
similarity index 100%
rename from src/assets/svg/text-link.svg
rename to src/shared/assets/svg/text-link.svg
diff --git a/src/assets/svg/youtube.svg b/src/shared/assets/svg/youtube.svg
similarity index 100%
rename from src/assets/svg/youtube.svg
rename to src/shared/assets/svg/youtube.svg
diff --git a/src/assets/welcome.webp b/src/shared/assets/welcome.webp
similarity index 100%
rename from src/assets/welcome.webp
rename to src/shared/assets/welcome.webp
diff --git a/src/data/communication.data.ts b/src/shared/data/communication.data.ts
similarity index 100%
rename from src/data/communication.data.ts
rename to src/shared/data/communication.data.ts
diff --git a/src/data/courseTitles.data.ts b/src/shared/data/courseTitles.data.ts
similarity index 100%
rename from src/data/courseTitles.data.ts
rename to src/shared/data/courseTitles.data.ts
diff --git a/src/utils/getActualDataList.ts b/src/shared/helpers/getActualDataList.ts
similarity index 100%
rename from src/utils/getActualDataList.ts
rename to src/shared/helpers/getActualDataList.ts
diff --git a/src/app/hooks/use-course-by-title/index.ts b/src/shared/hooks/use-course-by-title/index.ts
similarity index 100%
rename from src/app/hooks/use-course-by-title/index.ts
rename to src/shared/hooks/use-course-by-title/index.ts
diff --git a/src/app/hooks/use-course-by-title/use-course-by-title.test.tsx b/src/shared/hooks/use-course-by-title/use-course-by-title.test.tsx
similarity index 100%
rename from src/app/hooks/use-course-by-title/use-course-by-title.test.tsx
rename to src/shared/hooks/use-course-by-title/use-course-by-title.test.tsx
diff --git a/src/app/hooks/use-course-by-title/use-course-by-title.ts b/src/shared/hooks/use-course-by-title/use-course-by-title.ts
similarity index 89%
rename from src/app/hooks/use-course-by-title/use-course-by-title.ts
rename to src/shared/hooks/use-course-by-title/use-course-by-title.ts
index 1560f46d8..dfe89bc4a 100644
--- a/src/app/hooks/use-course-by-title/use-course-by-title.ts
+++ b/src/shared/hooks/use-course-by-title/use-course-by-title.ts
@@ -1,5 +1,6 @@
+import { selectCourse } from './utils/select-course';
import { useDataByName } from '../use-data-by-name';
-import { selectCourse } from '@/app/hooks/use-course-by-title/utils/select-course.ts';
+
import { Course } from '@/app/types';
export const useCourseByTitle = (titleStartsWith: string) => {
diff --git a/src/app/hooks/use-course-by-title/utils/is-course.ts b/src/shared/hooks/use-course-by-title/utils/is-course.ts
similarity index 100%
rename from src/app/hooks/use-course-by-title/utils/is-course.ts
rename to src/shared/hooks/use-course-by-title/utils/is-course.ts
diff --git a/src/app/hooks/use-course-by-title/utils/select-course.ts b/src/shared/hooks/use-course-by-title/utils/select-course.ts
similarity index 86%
rename from src/app/hooks/use-course-by-title/utils/select-course.ts
rename to src/shared/hooks/use-course-by-title/utils/select-course.ts
index 8d1463a50..eea7e9898 100644
--- a/src/app/hooks/use-course-by-title/utils/select-course.ts
+++ b/src/shared/hooks/use-course-by-title/utils/select-course.ts
@@ -1,4 +1,4 @@
-import isCourse from '@/app/hooks/use-course-by-title/utils/is-course.ts';
+import isCourse from './is-course';
import { Course } from '@/app/types';
export const selectCourse = (coursesData: Course[], titleStartsWith: string) => {
diff --git a/src/app/hooks/use-data-by-name/index.ts b/src/shared/hooks/use-data-by-name/index.ts
similarity index 100%
rename from src/app/hooks/use-data-by-name/index.ts
rename to src/shared/hooks/use-data-by-name/index.ts
diff --git a/src/app/hooks/use-data-by-name/use-data-by-name.test.ts b/src/shared/hooks/use-data-by-name/use-data-by-name.test.ts
similarity index 98%
rename from src/app/hooks/use-data-by-name/use-data-by-name.test.ts
rename to src/shared/hooks/use-data-by-name/use-data-by-name.test.ts
index d62623b2b..e027f9b97 100644
--- a/src/app/hooks/use-data-by-name/use-data-by-name.test.ts
+++ b/src/shared/hooks/use-data-by-name/use-data-by-name.test.ts
@@ -1,10 +1,10 @@
import { renderHook, waitFor } from '@testing-library/react';
import { MockedFunction, describe, expect, it, vi } from 'vitest';
import { useDataByName } from './use-data-by-name';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
import { ROUTES } from '@/app/const';
import { fetchDataByName } from '@/app/services/api';
import { DataMap } from '@/app/services/data/courses-data.types';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
const courses: DataMap['courses'] = [
{
diff --git a/src/app/hooks/use-data-by-name/use-data-by-name.ts b/src/shared/hooks/use-data-by-name/use-data-by-name.ts
similarity index 100%
rename from src/app/hooks/use-data-by-name/use-data-by-name.ts
rename to src/shared/hooks/use-data-by-name/use-data-by-name.ts
diff --git a/src/app/hooks/use-position-dropdown/index.ts b/src/shared/hooks/use-position-dropdown/index.ts
similarity index 100%
rename from src/app/hooks/use-position-dropdown/index.ts
rename to src/shared/hooks/use-position-dropdown/index.ts
diff --git a/src/app/hooks/use-position-dropdown/use-position-dropdown.ts b/src/shared/hooks/use-position-dropdown/use-position-dropdown.ts
similarity index 100%
rename from src/app/hooks/use-position-dropdown/use-position-dropdown.ts
rename to src/shared/hooks/use-position-dropdown/use-position-dropdown.ts
diff --git a/src/app/hooks/use-title/index.ts b/src/shared/hooks/use-title/index.ts
similarity index 100%
rename from src/app/hooks/use-title/index.ts
rename to src/shared/hooks/use-title/index.ts
diff --git a/src/app/hooks/use-title/use-title.test.tsx b/src/shared/hooks/use-title/use-title.test.tsx
similarity index 100%
rename from src/app/hooks/use-title/use-title.test.tsx
rename to src/shared/hooks/use-title/use-title.test.tsx
diff --git a/src/app/hooks/use-title/use-title.ts b/src/shared/hooks/use-title/use-title.ts
similarity index 100%
rename from src/app/hooks/use-title/use-title.ts
rename to src/shared/hooks/use-title/use-title.ts
diff --git a/src/app/hooks/use-window-size/index.ts b/src/shared/hooks/use-window-size/index.ts
similarity index 100%
rename from src/app/hooks/use-window-size/index.ts
rename to src/shared/hooks/use-window-size/index.ts
diff --git a/src/app/hooks/use-window-size/use-window-size.test.tsx b/src/shared/hooks/use-window-size/use-window-size.test.tsx
similarity index 100%
rename from src/app/hooks/use-window-size/use-window-size.test.tsx
rename to src/shared/hooks/use-window-size/use-window-size.test.tsx
diff --git a/src/app/hooks/use-window-size/use-window-size.ts b/src/shared/hooks/use-window-size/use-window-size.ts
similarity index 100%
rename from src/app/hooks/use-window-size/use-window-size.ts
rename to src/shared/hooks/use-window-size/use-window-size.ts
diff --git a/src/shared/icons/angular-icon.tsx b/src/shared/icons/angular-icon.tsx
new file mode 100644
index 000000000..c1b6c07af
--- /dev/null
+++ b/src/shared/icons/angular-icon.tsx
@@ -0,0 +1,6 @@
+import angular from '@/shared/assets/svg/angular-icon.svg';
+import Image from '@/shared/ui/image';
+
+export const AngularIcon = () => {
+ return ;
+};
diff --git a/src/icons/arrow-icon.tsx b/src/shared/icons/arrow-icon.tsx
similarity index 60%
rename from src/icons/arrow-icon.tsx
rename to src/shared/icons/arrow-icon.tsx
index 697d875a2..99a35636c 100644
--- a/src/icons/arrow-icon.tsx
+++ b/src/shared/icons/arrow-icon.tsx
@@ -1,5 +1,5 @@
-import arrow from '@/assets/svg/arrow.svg';
-import Image from '@/features/image';
+import arrow from '@/shared/assets/svg/arrow.svg';
+import Image from '@/shared/ui/image';
export const ArrowIcon = ({ size = '24px' }: { size?: string }) => {
return ;
diff --git a/src/shared/icons/aws.tsx b/src/shared/icons/aws.tsx
new file mode 100644
index 000000000..04142e652
--- /dev/null
+++ b/src/shared/icons/aws.tsx
@@ -0,0 +1,6 @@
+import aws from '@/shared/assets/svg/aws.svg';
+import Image from '@/shared/ui/image';
+
+export const AwsLogo = () => {
+ return ;
+};
diff --git a/src/shared/icons/discord-logo.tsx b/src/shared/icons/discord-logo.tsx
new file mode 100644
index 000000000..0eeb0d638
--- /dev/null
+++ b/src/shared/icons/discord-logo.tsx
@@ -0,0 +1,6 @@
+import discordLogo from '@/shared/assets/svg/discord-logo.svg';
+import Image from '@/shared/ui/image';
+
+export const DiscordLogo = () => {
+ return ;
+};
diff --git a/src/icons/dropdown-arrow.tsx b/src/shared/icons/dropdown-arrow.tsx
similarity index 55%
rename from src/icons/dropdown-arrow.tsx
rename to src/shared/icons/dropdown-arrow.tsx
index 843ee1cad..011e801f1 100644
--- a/src/icons/dropdown-arrow.tsx
+++ b/src/shared/icons/dropdown-arrow.tsx
@@ -1,5 +1,5 @@
-import arrow from '@/assets/svg/dropdown-arrow.svg';
-import Image from '@/features/image';
+import arrow from '@/shared/assets/svg/dropdown-arrow.svg';
+import Image from '@/shared/ui/image';
export const DropdownArrow = () => {
return ;
diff --git a/src/shared/icons/email.tsx b/src/shared/icons/email.tsx
new file mode 100644
index 000000000..677eed12f
--- /dev/null
+++ b/src/shared/icons/email.tsx
@@ -0,0 +1,6 @@
+import email from '@/shared/assets/svg/email.svg';
+import Image from '@/shared/ui/image';
+
+export const EmailIcon = () => {
+ return ;
+};
diff --git a/src/shared/icons/epam.tsx b/src/shared/icons/epam.tsx
new file mode 100644
index 000000000..7d5b6a2a3
--- /dev/null
+++ b/src/shared/icons/epam.tsx
@@ -0,0 +1,6 @@
+import epam from '@/shared/assets/svg/epam.svg';
+import Image from '@/shared/ui/image';
+
+export const EpamLogo = () => {
+ return ;
+};
diff --git a/src/icons/facebook.tsx b/src/shared/icons/facebook.tsx
similarity index 62%
rename from src/icons/facebook.tsx
rename to src/shared/icons/facebook.tsx
index 4ecb2708e..9ecbb1e18 100644
--- a/src/icons/facebook.tsx
+++ b/src/shared/icons/facebook.tsx
@@ -1,5 +1,5 @@
-import facebook from '@/assets/svg/facebook.svg';
-import Image from '@/features/image';
+import facebook from '@/shared/assets/svg/facebook.svg';
+import Image from '@/shared/ui/image';
export const FacebookIcon = () => {
return (
diff --git a/src/shared/icons/github.tsx b/src/shared/icons/github.tsx
new file mode 100644
index 000000000..c71d2e68d
--- /dev/null
+++ b/src/shared/icons/github.tsx
@@ -0,0 +1,6 @@
+import github from '@/shared/assets/svg/github.svg';
+import Image from '@/shared/ui/image';
+
+export const GithubLogo = () => {
+ return ;
+};
diff --git a/src/shared/icons/html-icon.tsx b/src/shared/icons/html-icon.tsx
new file mode 100644
index 000000000..727a765b9
--- /dev/null
+++ b/src/shared/icons/html-icon.tsx
@@ -0,0 +1,6 @@
+import html from '@/shared/assets/svg/html.svg';
+import Image from '@/shared/ui/image';
+
+export const HtmlIcon = () => {
+ return ;
+};
diff --git a/src/icons/index.tsx b/src/shared/icons/index.tsx
similarity index 100%
rename from src/icons/index.tsx
rename to src/shared/icons/index.tsx
diff --git a/src/icons/instagram.tsx b/src/shared/icons/instagram.tsx
similarity index 62%
rename from src/icons/instagram.tsx
rename to src/shared/icons/instagram.tsx
index 9e8322ead..254e75d18 100644
--- a/src/icons/instagram.tsx
+++ b/src/shared/icons/instagram.tsx
@@ -1,5 +1,5 @@
-import instagram from '@/assets/svg/instagram.svg';
-import Image from '@/features/image';
+import instagram from '@/shared/assets/svg/instagram.svg';
+import Image from '@/shared/ui/image';
export const InstagramIcon = () => {
return (
diff --git a/src/shared/icons/javascript-icon.tsx b/src/shared/icons/javascript-icon.tsx
new file mode 100644
index 000000000..6cdad69d2
--- /dev/null
+++ b/src/shared/icons/javascript-icon.tsx
@@ -0,0 +1,6 @@
+import javascript from '@/shared/assets/icons/js-secondary.webp';
+import Image from '@/shared/ui/image';
+
+export const JavascriptIcon = () => {
+ return ;
+};
diff --git a/src/icons/jetbrains.tsx b/src/shared/icons/jetbrains.tsx
similarity index 50%
rename from src/icons/jetbrains.tsx
rename to src/shared/icons/jetbrains.tsx
index 88df12e4c..1cad68f1a 100644
--- a/src/icons/jetbrains.tsx
+++ b/src/shared/icons/jetbrains.tsx
@@ -1,5 +1,5 @@
-import jetbrains from '@/assets/svg/jetbrains.svg';
-import Image from '@/features/image';
+import jetbrains from '@/shared/assets/svg/jetbrains.svg';
+import Image from '@/shared/ui/image';
export const JetBrainsLogo = () => {
return ;
diff --git a/src/icons/linkedIn.tsx b/src/shared/icons/linkedIn.tsx
similarity index 62%
rename from src/icons/linkedIn.tsx
rename to src/shared/icons/linkedIn.tsx
index 1b7880e78..d2b77af2c 100644
--- a/src/icons/linkedIn.tsx
+++ b/src/shared/icons/linkedIn.tsx
@@ -1,5 +1,5 @@
-import linkedIn from '@/assets/svg/linkedIn.svg';
-import Image from '@/features/image';
+import linkedIn from '@/shared/assets/svg/linkedIn.svg';
+import Image from '@/shared/ui/image';
export const LinkedInIcon = () => {
return (
diff --git a/src/icons/logo.tsx b/src/shared/icons/logo.tsx
similarity index 73%
rename from src/icons/logo.tsx
rename to src/shared/icons/logo.tsx
index 88c50ebcb..11b146a9b 100644
--- a/src/icons/logo.tsx
+++ b/src/shared/icons/logo.tsx
@@ -1,6 +1,6 @@
import cn from 'classnames';
-import logo from '@/assets/svg/rss-logo.svg';
-import Image from '@/features/image';
+import logo from '@/shared/assets/svg/rss-logo.svg';
+import Image from '@/shared/ui/image';
interface LogoProps {
type: 'header' | 'footer';
diff --git a/src/shared/icons/nodejs-icon.tsx b/src/shared/icons/nodejs-icon.tsx
new file mode 100644
index 000000000..fffb6b974
--- /dev/null
+++ b/src/shared/icons/nodejs-icon.tsx
@@ -0,0 +1,6 @@
+import nodeJS from '@/shared/assets/svg/nodeJS.svg';
+import Image from '@/shared/ui/image';
+
+export const NodeJsIcon = () => {
+ return ;
+};
diff --git a/src/icons/open-source-philosophy-icon.tsx b/src/shared/icons/open-source-philosophy-icon.tsx
similarity index 51%
rename from src/icons/open-source-philosophy-icon.tsx
rename to src/shared/icons/open-source-philosophy-icon.tsx
index 3385e0766..371423ce0 100644
--- a/src/icons/open-source-philosophy-icon.tsx
+++ b/src/shared/icons/open-source-philosophy-icon.tsx
@@ -1,5 +1,5 @@
-import openSourcePhilosophyIcon from '@/assets/svg/openSourcePhilosophyIcon.svg';
-import Image from '@/features/image';
+import openSourcePhilosophyIcon from '@/shared/assets/svg/openSourcePhilosophyIcon.svg';
+import Image from '@/shared/ui/image';
export const OpenSourcePhilosophyIcon = () => {
return ;
diff --git a/src/icons/open-to-everyone-icon.tsx b/src/shared/icons/open-to-everyone-icon.tsx
similarity index 50%
rename from src/icons/open-to-everyone-icon.tsx
rename to src/shared/icons/open-to-everyone-icon.tsx
index cfcc72653..4628c95f3 100644
--- a/src/icons/open-to-everyone-icon.tsx
+++ b/src/shared/icons/open-to-everyone-icon.tsx
@@ -1,5 +1,5 @@
-import openToEveryoneIcon from '@/assets/svg/openToEveryoneIcon.svg';
-import Image from '@/features/image';
+import openToEveryoneIcon from '@/shared/assets/svg/openToEveryoneIcon.svg';
+import Image from '@/shared/ui/image';
export const OpenToEveryoneIcon = () => {
return ;
diff --git a/src/shared/icons/react-icon.tsx b/src/shared/icons/react-icon.tsx
new file mode 100644
index 000000000..fd777bd69
--- /dev/null
+++ b/src/shared/icons/react-icon.tsx
@@ -0,0 +1,6 @@
+import react from '@/shared/assets/svg/react.svg';
+import Image from '@/shared/ui/image';
+
+export const ReactIcon = () => {
+ return ;
+};
diff --git a/src/icons/rs-banner.tsx b/src/shared/icons/rs-banner.tsx
similarity index 54%
rename from src/icons/rs-banner.tsx
rename to src/shared/icons/rs-banner.tsx
index 3bce7e0de..7ca533c0f 100644
--- a/src/icons/rs-banner.tsx
+++ b/src/shared/icons/rs-banner.tsx
@@ -1,5 +1,5 @@
-import banner from '@/assets/svg/RsBanner.svg';
-import Image from '@/features/image';
+import banner from '@/shared/assets/svg/RsBanner.svg';
+import Image from '@/shared/ui/image';
export const RsBanner = () => {
return ;
diff --git a/src/icons/teach-It-forward-icon.tsx b/src/shared/icons/teach-It-forward-icon.tsx
similarity index 50%
rename from src/icons/teach-It-forward-icon.tsx
rename to src/shared/icons/teach-It-forward-icon.tsx
index 4c8388a3c..bbe1538fe 100644
--- a/src/icons/teach-It-forward-icon.tsx
+++ b/src/shared/icons/teach-It-forward-icon.tsx
@@ -1,5 +1,5 @@
-import teachItForwardIcon from '@/assets/svg/teachItForwardIcon.svg';
-import Image from '@/features/image';
+import teachItForwardIcon from '@/shared/assets/svg/teachItForwardIcon.svg';
+import Image from '@/shared/ui/image';
export const TeachItForwardIcon = () => {
return ;
diff --git a/src/icons/telegram.tsx b/src/shared/icons/telegram.tsx
similarity index 62%
rename from src/icons/telegram.tsx
rename to src/shared/icons/telegram.tsx
index 7bd64108b..077693ab0 100644
--- a/src/icons/telegram.tsx
+++ b/src/shared/icons/telegram.tsx
@@ -1,5 +1,5 @@
-import telegram from '@/assets/svg/telegram.svg';
-import Image from '@/features/image';
+import telegram from '@/shared/assets/svg/telegram.svg';
+import Image from '@/shared/ui/image';
export const TelegramIcon = () => {
return (
diff --git a/src/icons/text-link-icon.tsx b/src/shared/icons/text-link-icon.tsx
similarity index 56%
rename from src/icons/text-link-icon.tsx
rename to src/shared/icons/text-link-icon.tsx
index 08ac13398..e288cd1b8 100644
--- a/src/icons/text-link-icon.tsx
+++ b/src/shared/icons/text-link-icon.tsx
@@ -1,5 +1,5 @@
-import textLinkIcon from '@/assets/svg/text-link.svg';
-import Image from '@/features/image';
+import textLinkIcon from '@/shared/assets/svg/text-link.svg';
+import Image from '@/shared/ui/image';
export const TextLinkIcon = () => {
return ;
diff --git a/src/icons/youtube.tsx b/src/shared/icons/youtube.tsx
similarity index 62%
rename from src/icons/youtube.tsx
rename to src/shared/icons/youtube.tsx
index 8d1f21af3..e2681c575 100644
--- a/src/icons/youtube.tsx
+++ b/src/shared/icons/youtube.tsx
@@ -1,5 +1,5 @@
-import youtube from '@/assets/svg/youtube.svg';
-import Image from '@/features/image';
+import youtube from '@/shared/assets/svg/youtube.svg';
+import Image from '@/shared/ui/image';
export const YouTubeIcon = () => {
return (
diff --git a/src/app/components/actions/actions.scss b/src/shared/ui/actions/actions.scss
similarity index 100%
rename from src/app/components/actions/actions.scss
rename to src/shared/ui/actions/actions.scss
diff --git a/src/app/components/actions/actions.test.tsx b/src/shared/ui/actions/actions.test.tsx
similarity index 100%
rename from src/app/components/actions/actions.test.tsx
rename to src/shared/ui/actions/actions.test.tsx
diff --git a/src/app/components/actions/actions.tsx b/src/shared/ui/actions/actions.tsx
similarity index 87%
rename from src/app/components/actions/actions.tsx
rename to src/shared/ui/actions/actions.tsx
index f0da38bd2..7a1e2a74c 100644
--- a/src/app/components/actions/actions.tsx
+++ b/src/shared/ui/actions/actions.tsx
@@ -1,5 +1,6 @@
+// todo delete TextWithLink
import { TextWithLink } from '../text-with-link';
-import { Description } from '@/features/required/required.types';
+import { Description } from '@/widgets/required/required.types';
import './actions.scss';
diff --git a/src/app/components/breadcrumbs/breadcrumbs.scss b/src/shared/ui/breadcrumbs/breadcrumbs.scss
similarity index 94%
rename from src/app/components/breadcrumbs/breadcrumbs.scss
rename to src/shared/ui/breadcrumbs/breadcrumbs.scss
index e414ead47..8b2049e22 100644
--- a/src/app/components/breadcrumbs/breadcrumbs.scss
+++ b/src/shared/ui/breadcrumbs/breadcrumbs.scss
@@ -8,7 +8,7 @@
padding: 24px 15px 10px;
}
- padding: 24px 120px 10px 120px;
+ padding: 24px 120px 10px;
ul {
display: flex;
diff --git a/src/app/components/breadcrumbs/breadcrumbs.test.tsx b/src/shared/ui/breadcrumbs/breadcrumbs.test.tsx
similarity index 91%
rename from src/app/components/breadcrumbs/breadcrumbs.test.tsx
rename to src/shared/ui/breadcrumbs/breadcrumbs.test.tsx
index ae7263c87..bbdc6f190 100644
--- a/src/app/components/breadcrumbs/breadcrumbs.test.tsx
+++ b/src/shared/ui/breadcrumbs/breadcrumbs.test.tsx
@@ -1,8 +1,8 @@
import { screen } from '@testing-library/react';
import { Breadcrumbs } from './breadcrumbs';
-import { renderWithRouter } from '@/__tests__/utils';
-import { breadcrumbNameMap } from '@/app/components/breadcrumbs/constants.ts';
+import { breadcrumbNameMap } from './constants';
import { ROUTES } from '@/app/const';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Breadcrumbs', () => {
it('renders "Home"', async () => {
diff --git a/src/app/components/breadcrumbs/breadcrumbs.tsx b/src/shared/ui/breadcrumbs/breadcrumbs.tsx
similarity index 100%
rename from src/app/components/breadcrumbs/breadcrumbs.tsx
rename to src/shared/ui/breadcrumbs/breadcrumbs.tsx
diff --git a/src/app/components/breadcrumbs/breadcrumbs.types.ts b/src/shared/ui/breadcrumbs/breadcrumbs.types.ts
similarity index 100%
rename from src/app/components/breadcrumbs/breadcrumbs.types.ts
rename to src/shared/ui/breadcrumbs/breadcrumbs.types.ts
diff --git a/src/app/components/breadcrumbs/constants.ts b/src/shared/ui/breadcrumbs/constants.ts
similarity index 84%
rename from src/app/components/breadcrumbs/constants.ts
rename to src/shared/ui/breadcrumbs/constants.ts
index f3c22ce6e..3104f33cf 100644
--- a/src/app/components/breadcrumbs/constants.ts
+++ b/src/shared/ui/breadcrumbs/constants.ts
@@ -1,4 +1,4 @@
-import { BreadcrumbNameMap } from '@/app/components/breadcrumbs/breadcrumbs.types.ts';
+import { BreadcrumbNameMap } from './breadcrumbs.types';
export const breadcrumbNameMap: BreadcrumbNameMap = {
courses: 'Courses',
diff --git a/src/app/components/date-lang/date-lang.module.scss b/src/shared/ui/date-lang/date-lang.module.scss
similarity index 100%
rename from src/app/components/date-lang/date-lang.module.scss
rename to src/shared/ui/date-lang/date-lang.module.scss
diff --git a/src/app/components/date-lang/date-lang.test.tsx b/src/shared/ui/date-lang/date-lang.test.tsx
similarity index 95%
rename from src/app/components/date-lang/date-lang.test.tsx
rename to src/shared/ui/date-lang/date-lang.test.tsx
index 76e6fb1f1..f51750683 100644
--- a/src/app/components/date-lang/date-lang.test.tsx
+++ b/src/shared/ui/date-lang/date-lang.test.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { DateLang } from './date-lang';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('DateLang', () => {
it('renders the start date correctly', () => {
diff --git a/src/app/components/date-lang/date-lang.tsx b/src/shared/ui/date-lang/date-lang.tsx
similarity index 85%
rename from src/app/components/date-lang/date-lang.tsx
rename to src/shared/ui/date-lang/date-lang.tsx
index 09158ef85..74a955ed3 100644
--- a/src/app/components/date-lang/date-lang.tsx
+++ b/src/shared/ui/date-lang/date-lang.tsx
@@ -1,7 +1,7 @@
/* eslint-disable @stylistic/jsx-one-expression-per-line */
-import micIcon from '@/assets/icons/mic.svg';
-import noteIcon from '@/assets/icons/note-icon.svg';
-import Image from '@/features/image';
+import micIcon from '@/shared/assets/icons/mic.svg';
+import noteIcon from '@/shared/assets/icons/note-icon.svg';
+import Image from '@/shared/ui/image';
import styles from './date-lang.module.scss';
diff --git a/src/app/components/date-lang/index.ts b/src/shared/ui/date-lang/index.ts
similarity index 100%
rename from src/app/components/date-lang/index.ts
rename to src/shared/ui/date-lang/index.ts
diff --git a/src/features/image/constants.ts b/src/shared/ui/image/constants.ts
similarity index 100%
rename from src/features/image/constants.ts
rename to src/shared/ui/image/constants.ts
diff --git a/src/features/image/image.tsx b/src/shared/ui/image/image.tsx
similarity index 80%
rename from src/features/image/image.tsx
rename to src/shared/ui/image/image.tsx
index 9f83e4e73..acfd4096b 100644
--- a/src/features/image/image.tsx
+++ b/src/shared/ui/image/image.tsx
@@ -1,15 +1,10 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { FC, useState } from 'react';
-import { IS_DEV } from '@/features/image/constants.ts';
-import {
- DecodingAttr,
- FetchPriorityAttr,
- ImageProps,
- LoadingAttr,
-} from '@/features/image/types.ts';
-import convertToWebp from '@/features/image/utils/convertToWebp.ts';
-import generateSizes from '@/features/image/utils/generateSizes.ts';
-import generateSrcSet from '@/features/image/utils/generateSrcSet.ts';
+import { IS_DEV } from './constants';
+import { DecodingAttr, FetchPriorityAttr, ImageProps, LoadingAttr } from './types';
+import convertToWebp from './utils/convertToWebp';
+import generateSizes from './utils/generateSizes';
+import generateSrcSet from './utils/generateSrcSet';
const Image: FC = ({ alt, src = '', lazy = 'true', ...props }) => {
const srcWebp = convertToWebp(src);
diff --git a/src/features/image/index.ts b/src/shared/ui/image/index.ts
similarity index 100%
rename from src/features/image/index.ts
rename to src/shared/ui/image/index.ts
diff --git a/src/features/image/types.ts b/src/shared/ui/image/types.ts
similarity index 100%
rename from src/features/image/types.ts
rename to src/shared/ui/image/types.ts
diff --git a/src/features/image/utils/convertToWebp.ts b/src/shared/ui/image/utils/convertToWebp.ts
similarity index 100%
rename from src/features/image/utils/convertToWebp.ts
rename to src/shared/ui/image/utils/convertToWebp.ts
diff --git a/src/features/image/utils/generateSizes.ts b/src/shared/ui/image/utils/generateSizes.ts
similarity index 79%
rename from src/features/image/utils/generateSizes.ts
rename to src/shared/ui/image/utils/generateSizes.ts
index fe390215a..682596d7d 100644
--- a/src/features/image/utils/generateSizes.ts
+++ b/src/shared/ui/image/utils/generateSizes.ts
@@ -1,4 +1,4 @@
-import { DESKTOP_W, MOBILE_W, TABLET_W } from '@/features/image/constants.ts';
+import { DESKTOP_W, MOBILE_W, TABLET_W } from '../constants';
/**
* Generates responsive sizes for Img element, based on the env breakpoints
diff --git a/src/features/image/utils/generateSrcSet.ts b/src/shared/ui/image/utils/generateSrcSet.ts
similarity index 86%
rename from src/features/image/utils/generateSrcSet.ts
rename to src/shared/ui/image/utils/generateSrcSet.ts
index ad8c48ce1..6465385a5 100644
--- a/src/features/image/utils/generateSrcSet.ts
+++ b/src/shared/ui/image/utils/generateSrcSet.ts
@@ -1,4 +1,4 @@
-import { DESKTOP_W, MOBILE_W, TABLET_W } from '@/features/image/constants.ts';
+import { DESKTOP_W, MOBILE_W, TABLET_W } from '../constants';
/**
* Generates the srcset for the given src image, based on the env breakpoints
diff --git a/src/app/components/link-custom/index.ts b/src/shared/ui/link-custom/index.ts
similarity index 100%
rename from src/app/components/link-custom/index.ts
rename to src/shared/ui/link-custom/index.ts
diff --git a/src/app/components/link-custom/link-custom.module.scss b/src/shared/ui/link-custom/link-custom.module.scss
similarity index 100%
rename from src/app/components/link-custom/link-custom.module.scss
rename to src/shared/ui/link-custom/link-custom.module.scss
diff --git a/src/app/components/link-custom/link-custom.test.tsx b/src/shared/ui/link-custom/link-custom.test.tsx
similarity index 95%
rename from src/app/components/link-custom/link-custom.test.tsx
rename to src/shared/ui/link-custom/link-custom.test.tsx
index 3a57712c2..35f00b633 100644
--- a/src/app/components/link-custom/link-custom.test.tsx
+++ b/src/shared/ui/link-custom/link-custom.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { LinkCustom } from './link-custom';
-import { renderWithRouter } from '@/__tests__/utils';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('LinkCustom', () => {
const label = 'Click me';
diff --git a/src/app/components/link-custom/link-custom.tsx b/src/shared/ui/link-custom/link-custom.tsx
similarity index 100%
rename from src/app/components/link-custom/link-custom.tsx
rename to src/shared/ui/link-custom/link-custom.tsx
diff --git a/src/app/components/logo-wrapper/index.ts b/src/shared/ui/logo-wrapper/index.ts
similarity index 100%
rename from src/app/components/logo-wrapper/index.ts
rename to src/shared/ui/logo-wrapper/index.ts
diff --git a/src/app/components/logo-wrapper/logo-wrapper.scss b/src/shared/ui/logo-wrapper/logo-wrapper.scss
similarity index 100%
rename from src/app/components/logo-wrapper/logo-wrapper.scss
rename to src/shared/ui/logo-wrapper/logo-wrapper.scss
diff --git a/src/app/components/logo-wrapper/logo-wrapper.tsx b/src/shared/ui/logo-wrapper/logo-wrapper.tsx
similarity index 87%
rename from src/app/components/logo-wrapper/logo-wrapper.tsx
rename to src/shared/ui/logo-wrapper/logo-wrapper.tsx
index e9b142069..8811755d6 100644
--- a/src/app/components/logo-wrapper/logo-wrapper.tsx
+++ b/src/shared/ui/logo-wrapper/logo-wrapper.tsx
@@ -1,4 +1,4 @@
-import { Logo } from '../../../icons';
+import { Logo } from '../../icons';
import './logo-wrapper.scss';
diff --git a/src/app/components/paragraph/index.ts b/src/shared/ui/paragraph/index.ts
similarity index 100%
rename from src/app/components/paragraph/index.ts
rename to src/shared/ui/paragraph/index.ts
diff --git a/src/app/components/paragraph/paragraph.scss b/src/shared/ui/paragraph/paragraph.scss
similarity index 100%
rename from src/app/components/paragraph/paragraph.scss
rename to src/shared/ui/paragraph/paragraph.scss
diff --git a/src/app/components/paragraph/paragraph.test.tsx b/src/shared/ui/paragraph/paragraph.test.tsx
similarity index 100%
rename from src/app/components/paragraph/paragraph.test.tsx
rename to src/shared/ui/paragraph/paragraph.test.tsx
diff --git a/src/app/components/paragraph/paragraph.tsx b/src/shared/ui/paragraph/paragraph.tsx
similarity index 100%
rename from src/app/components/paragraph/paragraph.tsx
rename to src/shared/ui/paragraph/paragraph.tsx
diff --git a/src/app/components/section-label/index.ts b/src/shared/ui/section-label/index.ts
similarity index 100%
rename from src/app/components/section-label/index.ts
rename to src/shared/ui/section-label/index.ts
diff --git a/src/app/components/section-label/section-label.scss b/src/shared/ui/section-label/section-label.scss
similarity index 100%
rename from src/app/components/section-label/section-label.scss
rename to src/shared/ui/section-label/section-label.scss
diff --git a/src/app/components/section-label/section-label.test.tsx b/src/shared/ui/section-label/section-label.test.tsx
similarity index 100%
rename from src/app/components/section-label/section-label.test.tsx
rename to src/shared/ui/section-label/section-label.test.tsx
diff --git a/src/app/components/section-label/section-label.tsx b/src/shared/ui/section-label/section-label.tsx
similarity index 100%
rename from src/app/components/section-label/section-label.tsx
rename to src/shared/ui/section-label/section-label.tsx
diff --git a/src/app/components/social-media/index.ts b/src/shared/ui/social-media/index.ts
similarity index 100%
rename from src/app/components/social-media/index.ts
rename to src/shared/ui/social-media/index.ts
diff --git a/src/app/components/social-media/social-media.scss b/src/shared/ui/social-media/social-media.scss
similarity index 100%
rename from src/app/components/social-media/social-media.scss
rename to src/shared/ui/social-media/social-media.scss
diff --git a/src/app/components/social-media/social-media.test.tsx b/src/shared/ui/social-media/social-media.test.tsx
similarity index 100%
rename from src/app/components/social-media/social-media.test.tsx
rename to src/shared/ui/social-media/social-media.test.tsx
diff --git a/src/app/components/social-media/social-media.tsx b/src/shared/ui/social-media/social-media.tsx
similarity index 100%
rename from src/app/components/social-media/social-media.tsx
rename to src/shared/ui/social-media/social-media.tsx
diff --git a/src/app/components/subtitle/index.ts b/src/shared/ui/subtitle/index.ts
similarity index 100%
rename from src/app/components/subtitle/index.ts
rename to src/shared/ui/subtitle/index.ts
diff --git a/src/app/components/subtitle/subtitle.scss b/src/shared/ui/subtitle/subtitle.scss
similarity index 100%
rename from src/app/components/subtitle/subtitle.scss
rename to src/shared/ui/subtitle/subtitle.scss
diff --git a/src/app/components/subtitle/subtitle.test.tsx b/src/shared/ui/subtitle/subtitle.test.tsx
similarity index 100%
rename from src/app/components/subtitle/subtitle.test.tsx
rename to src/shared/ui/subtitle/subtitle.test.tsx
diff --git a/src/app/components/subtitle/subtitle.tsx b/src/shared/ui/subtitle/subtitle.tsx
similarity index 100%
rename from src/app/components/subtitle/subtitle.tsx
rename to src/shared/ui/subtitle/subtitle.tsx
diff --git a/src/app/components/text-with-link/index.ts b/src/shared/ui/text-with-link/index.ts
similarity index 100%
rename from src/app/components/text-with-link/index.ts
rename to src/shared/ui/text-with-link/index.ts
diff --git a/src/app/components/text-with-link/text-with-link.scss b/src/shared/ui/text-with-link/text-with-link.scss
similarity index 100%
rename from src/app/components/text-with-link/text-with-link.scss
rename to src/shared/ui/text-with-link/text-with-link.scss
diff --git a/src/app/components/text-with-link/text-with-link.tsx b/src/shared/ui/text-with-link/text-with-link.tsx
similarity index 87%
rename from src/app/components/text-with-link/text-with-link.tsx
rename to src/shared/ui/text-with-link/text-with-link.tsx
index 614e63ba9..b8cb752b5 100644
--- a/src/app/components/text-with-link/text-with-link.tsx
+++ b/src/shared/ui/text-with-link/text-with-link.tsx
@@ -1,6 +1,6 @@
import { Fragment } from 'react/jsx-runtime';
import { Link } from 'react-router-dom';
-import { LinkList } from '@/features/required/required.types';
+import { LinkList } from '@/widgets/required/required.types';
import './text-with-link.scss';
diff --git a/src/app/components/title/index.ts b/src/shared/ui/title/index.ts
similarity index 100%
rename from src/app/components/title/index.ts
rename to src/shared/ui/title/index.ts
diff --git a/src/app/components/title/title.scss b/src/shared/ui/title/title.scss
similarity index 100%
rename from src/app/components/title/title.scss
rename to src/shared/ui/title/title.scss
diff --git a/src/app/components/title/title.test.tsx b/src/shared/ui/title/title.test.tsx
similarity index 100%
rename from src/app/components/title/title.test.tsx
rename to src/shared/ui/title/title.test.tsx
diff --git a/src/app/components/title/title.tsx b/src/shared/ui/title/title.tsx
similarity index 100%
rename from src/app/components/title/title.tsx
rename to src/shared/ui/title/title.tsx
diff --git a/src/app/components/title/types.ts b/src/shared/ui/title/types.ts
similarity index 100%
rename from src/app/components/title/types.ts
rename to src/shared/ui/title/types.ts
diff --git a/src/utils/index.ts b/src/utils/index.ts
deleted file mode 100644
index 1c230436a..000000000
--- a/src/utils/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { type ActualDataListProps, getActualDataList } from './getActualDataList';
-
-export { type ActualDataListProps, getActualDataList };
diff --git a/src/features/home/about/about.test.tsx b/src/widgets/about-home/about.test.tsx
similarity index 91%
rename from src/features/home/about/about.test.tsx
rename to src/widgets/about-home/about.test.tsx
index fbe4fd33f..f253f4652 100644
--- a/src/features/home/about/about.test.tsx
+++ b/src/widgets/about-home/about.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { About } from './about';
-import { renderWithRouter } from '@/__tests__/utils';
+import { About } from './ui/about';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('About', () => {
beforeEach(() => {
diff --git a/src/widgets/about-home/index.ts b/src/widgets/about-home/index.ts
new file mode 100644
index 000000000..34ee01e22
--- /dev/null
+++ b/src/widgets/about-home/index.ts
@@ -0,0 +1 @@
+export { About } from './ui/about';
diff --git a/src/features/home/about/about.scss b/src/widgets/about-home/ui/about.scss
similarity index 100%
rename from src/features/home/about/about.scss
rename to src/widgets/about-home/ui/about.scss
diff --git a/src/features/home/about/about.tsx b/src/widgets/about-home/ui/about.tsx
similarity index 83%
rename from src/features/home/about/about.tsx
rename to src/widgets/about-home/ui/about.tsx
index eae3b24dc..37bca8a25 100644
--- a/src/features/home/about/about.tsx
+++ b/src/widgets/about-home/ui/about.tsx
@@ -1,7 +1,8 @@
-import { Paragraph, Subtitle, Title } from '@/app/components';
-
-import image from '@/assets/about.webp';
-import Image from '@/features/image';
+import image from '@/shared/assets/about.webp';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './about.scss';
diff --git a/src/widgets/about-school/index.ts b/src/widgets/about-school/index.ts
new file mode 100644
index 000000000..34ee01e22
--- /dev/null
+++ b/src/widgets/about-school/index.ts
@@ -0,0 +1 @@
+export { About } from './ui/about';
diff --git a/src/features/school/about/about.scss b/src/widgets/about-school/ui/about.scss
similarity index 100%
rename from src/features/school/about/about.scss
rename to src/widgets/about-school/ui/about.scss
diff --git a/src/features/school/about/about.tsx b/src/widgets/about-school/ui/about.tsx
similarity index 85%
rename from src/features/school/about/about.tsx
rename to src/widgets/about-school/ui/about.tsx
index 104d19fe0..bab123508 100644
--- a/src/features/school/about/about.tsx
+++ b/src/widgets/about-school/ui/about.tsx
@@ -1,4 +1,6 @@
-import { Paragraph, Subtitle, Title } from '@/app/components';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './about.scss';
diff --git a/src/features/about-video/about-video.test.tsx b/src/widgets/about-video/about-video.test.tsx
similarity index 90%
rename from src/features/about-video/about-video.test.tsx
rename to src/widgets/about-video/about-video.test.tsx
index dcb208b21..6a4bfd989 100644
--- a/src/features/about-video/about-video.test.tsx
+++ b/src/widgets/about-video/about-video.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '@testing-library/react';
-import { AboutVideo } from './about-video';
+import { AboutVideo } from './ui/about-video';
describe('AboutVideo', () => {
it('renders the title correctly', () => {
diff --git a/src/widgets/about-video/index.ts b/src/widgets/about-video/index.ts
new file mode 100644
index 000000000..b3991d44f
--- /dev/null
+++ b/src/widgets/about-video/index.ts
@@ -0,0 +1 @@
+export { AboutVideo } from './ui/about-video';
diff --git a/src/features/about-video/about-video.scss b/src/widgets/about-video/ui/about-video.scss
similarity index 100%
rename from src/features/about-video/about-video.scss
rename to src/widgets/about-video/ui/about-video.scss
diff --git a/src/features/about-video/about-video.tsx b/src/widgets/about-video/ui/about-video.tsx
similarity index 95%
rename from src/features/about-video/about-video.tsx
rename to src/widgets/about-video/ui/about-video.tsx
index e4a3892af..e11ff2199 100644
--- a/src/features/about-video/about-video.tsx
+++ b/src/widgets/about-video/ui/about-video.tsx
@@ -1,4 +1,4 @@
-import { Title } from '@/app/components';
+import { Title } from '@/shared/ui/title';
import './about-video.scss';
diff --git a/src/features/about/about.data.ts b/src/widgets/about/about.data.ts
similarity index 94%
rename from src/features/about/about.data.ts
rename to src/widgets/about/about.data.ts
index 26bb7d005..3ad1db779 100644
--- a/src/features/about/about.data.ts
+++ b/src/widgets/about/about.data.ts
@@ -1,11 +1,11 @@
-import awardIcon from '@/assets/icons/award-icon.webp';
-import giftIcon from '@/assets/icons/gift.webp';
-import noteIcon from '@/assets/icons/note-icon.webp';
-import paperIcon from '@/assets/icons/paper-icon.webp';
-import personIcon from '@/assets/icons/person-icon.webp';
-import planetIcon from '@/assets/icons/planet.webp';
-import type { CourseNames } from '@/data/communication.data';
-import { DISCORD_LINKS } from '@/data/communication.data';
+import awardIcon from '@/shared/assets/icons/award-icon.webp';
+import giftIcon from '@/shared/assets/icons/gift.webp';
+import noteIcon from '@/shared/assets/icons/note-icon.webp';
+import paperIcon from '@/shared/assets/icons/paper-icon.webp';
+import personIcon from '@/shared/assets/icons/person-icon.webp';
+import planetIcon from '@/shared/assets/icons/planet.webp';
+import type { CourseNames } from '@/shared/data/communication.data';
+import { DISCORD_LINKS } from '@/shared/data/communication.data';
type AboutInfo = {
id: number;
diff --git a/src/features/about/about.test.tsx b/src/widgets/about/about.test.tsx
similarity index 86%
rename from src/features/about/about.test.tsx
rename to src/widgets/about/about.test.tsx
index 5b27443e6..a716c5b49 100644
--- a/src/features/about/about.test.tsx
+++ b/src/widgets/about/about.test.tsx
@@ -1,11 +1,11 @@
import { screen } from '@testing-library/react';
import { type Mock, beforeEach } from 'vitest';
-import { About } from './about';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
-import { useCourseByTitle } from '@/app/hooks';
+import { About } from './ui/about';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+import { useCourseByTitle } from '@/shared/hooks/use-course-by-title';
-vi.mock('@/app/hooks');
+vi.mock('@/shared/hooks/use-course-by-title');
describe('About', () => {
describe('with "react" props', () => {
diff --git a/src/widgets/about/index.ts b/src/widgets/about/index.ts
new file mode 100644
index 000000000..34ee01e22
--- /dev/null
+++ b/src/widgets/about/index.ts
@@ -0,0 +1 @@
+export { About } from './ui/about';
diff --git a/src/features/about/about.scss b/src/widgets/about/ui/about.scss
similarity index 100%
rename from src/features/about/about.scss
rename to src/widgets/about/ui/about.scss
diff --git a/src/features/about/about.tsx b/src/widgets/about/ui/about.tsx
similarity index 85%
rename from src/features/about/about.tsx
rename to src/widgets/about/ui/about.tsx
index 5812f69eb..6c8cde3e0 100644
--- a/src/features/about/about.tsx
+++ b/src/widgets/about/ui/about.tsx
@@ -1,10 +1,13 @@
/* eslint-disable @stylistic/jsx-one-expression-per-line */
-import { contentMap } from './about.data';
-import { InfoGrid } from './components';
-import { LinkCustom, Paragraph, Title } from '@/app/components';
-import { useCourseByTitle } from '@/app/hooks';
+import { InfoGrid } from './info-grid/info-grid';
+import { contentMap } from '../about.data';
+
import { type Course } from '@/app/types';
-import { ArrowIcon } from '@/icons';
+import { useCourseByTitle } from '@/shared/hooks/use-course-by-title';
+import { ArrowIcon } from '@/shared/icons';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Title } from '@/shared/ui/title';
import './about.scss';
diff --git a/src/features/about/components/info-grid/info-grid.scss b/src/widgets/about/ui/info-grid/info-grid.scss
similarity index 100%
rename from src/features/about/components/info-grid/info-grid.scss
rename to src/widgets/about/ui/info-grid/info-grid.scss
diff --git a/src/features/about/components/info-grid/info-grid.test.tsx b/src/widgets/about/ui/info-grid/info-grid.test.tsx
similarity index 94%
rename from src/features/about/components/info-grid/info-grid.test.tsx
rename to src/widgets/about/ui/info-grid/info-grid.test.tsx
index 6521df5a2..a4da66fcb 100644
--- a/src/features/about/components/info-grid/info-grid.test.tsx
+++ b/src/widgets/about/ui/info-grid/info-grid.test.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { InfoGrid } from './info-grid';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('InfoGrid component', () => {
const dummyData = [
diff --git a/src/features/about/components/info-grid/info-grid.tsx b/src/widgets/about/ui/info-grid/info-grid.tsx
similarity index 94%
rename from src/features/about/components/info-grid/info-grid.tsx
rename to src/widgets/about/ui/info-grid/info-grid.tsx
index ccac2129c..8eb113f92 100644
--- a/src/features/about/components/info-grid/info-grid.tsx
+++ b/src/widgets/about/ui/info-grid/info-grid.tsx
@@ -1,4 +1,4 @@
-import Image from '@/features/image';
+import Image from '@/shared/ui/image';
import './info-grid.scss';
diff --git a/src/features/school/alumni/alumni.test.tsx b/src/widgets/alumni/alumni.test.tsx
similarity index 81%
rename from src/features/school/alumni/alumni.test.tsx
rename to src/widgets/alumni/alumni.test.tsx
index c2257bcdf..49b312ddc 100644
--- a/src/features/school/alumni/alumni.test.tsx
+++ b/src/widgets/alumni/alumni.test.tsx
@@ -1,16 +1,15 @@
import { render, screen } from '@testing-library/react';
import { Mock, describe, expect, it, vi } from 'vitest';
-import { Alumni } from './alumni';
-import { useWindowSize } from '@/app/hooks';
+import { Alumni } from './ui/alumni';
+import { useWindowSize } from '@/shared/hooks/use-window-size';
-vi.mock('@/app/hooks', () => {
- return {
- useWindowSize: vi.fn().mockReturnValue({
- width: 2000,
- height: 2000,
- }),
- };
-});
+vi.mock('@/shared/hooks/use-window-size', () => ({
+ useWindowSize: vi.fn().mockReturnValue({
+ width: 2000,
+ height: 2000,
+ }),
+}),
+);
describe('Alumni', () => {
it('renders the title correctly', () => {
@@ -28,6 +27,7 @@ describe('Alumni', () => {
});
it('renders six images for small screens', () => {
+ // vi.mockImplementation(() => ({ width: 800, height: 600 }));
(useWindowSize as Mock).mockReturnValue({
width: 800,
height: 600,
diff --git a/src/widgets/alumni/constants.ts b/src/widgets/alumni/constants.ts
new file mode 100644
index 000000000..7052ceac6
--- /dev/null
+++ b/src/widgets/alumni/constants.ts
@@ -0,0 +1,94 @@
+import { AlumniProps } from './ui/alumni';
+import aesoft from '@/shared/assets/alumni/aesoft.svg';
+import andersen from '@/shared/assets/alumni/andersen.svg';
+import coherent from '@/shared/assets/alumni/coherent.svg';
+import dataart from '@/shared/assets/alumni/dataart.svg';
+import dott from '@/shared/assets/alumni/dott.svg';
+import elinext from '@/shared/assets/alumni/elinext.svg';
+import epam from '@/shared/assets/alumni/epam.svg';
+import godel from '@/shared/assets/alumni/godel.svg';
+import itechart from '@/shared/assets/alumni/itechart.svg';
+import miro from '@/shared/assets/alumni/miro.svg';
+import nanosoft from '@/shared/assets/alumni/nanosoft.svg';
+import oxagile from '@/shared/assets/alumni/oxagile.svg';
+import pandadoc from '@/shared/assets/alumni/pandadoc.svg';
+import qulix from '@/shared/assets/alumni/qulix.svg';
+import satellite from '@/shared/assets/alumni/satellite.svg';
+import sberbank from '@/shared/assets/alumni/sberbank.svg';
+import toptal from '@/shared/assets/alumni/toptal.svg';
+import visualfabriq from '@/shared/assets/alumni/visualfabriq.svg';
+
+export const alumni: AlumniProps[] = [
+ {
+ id: 'epam',
+ image: epam,
+ },
+ {
+ id: 'toptal',
+ image: toptal,
+ },
+ {
+ id: 'oxagile',
+ image: oxagile,
+ },
+ {
+ id: 'dott',
+ image: dott,
+ },
+ {
+ id: 'andersen',
+ image: andersen,
+ },
+ {
+ id: 'godel',
+ image: godel,
+ },
+ {
+ id: 'satellite',
+ image: satellite,
+ },
+ {
+ id: 'itechart',
+ image: itechart,
+ },
+ {
+ id: 'pandadoc',
+ image: pandadoc,
+ },
+ {
+ id: 'dataart',
+ image: dataart,
+ },
+ {
+ id: 'coherent',
+ image: coherent,
+ },
+ {
+ id: 'elinext',
+ image: elinext,
+ },
+ {
+ id: 'miro',
+ image: miro,
+ },
+ {
+ id: 'qulix',
+ image: qulix,
+ },
+ {
+ id: 'visualfabriq',
+ image: visualfabriq,
+ },
+ {
+ id: 'sberbank',
+ image: sberbank,
+ },
+ {
+ id: 'nanosoft',
+ image: nanosoft,
+ },
+ {
+ id: 'aesoft',
+ image: aesoft,
+ },
+];
diff --git a/src/widgets/alumni/index.ts b/src/widgets/alumni/index.ts
new file mode 100644
index 000000000..5a6cd867a
--- /dev/null
+++ b/src/widgets/alumni/index.ts
@@ -0,0 +1 @@
+export { Alumni } from './ui/alumni';
diff --git a/src/features/school/alumni/alumni.scss b/src/widgets/alumni/ui/alumni.scss
similarity index 100%
rename from src/features/school/alumni/alumni.scss
rename to src/widgets/alumni/ui/alumni.scss
diff --git a/src/features/school/alumni/alumni.tsx b/src/widgets/alumni/ui/alumni.tsx
similarity index 80%
rename from src/features/school/alumni/alumni.tsx
rename to src/widgets/alumni/ui/alumni.tsx
index 6bd9d8e49..6e6a8e044 100644
--- a/src/features/school/alumni/alumni.tsx
+++ b/src/widgets/alumni/ui/alumni.tsx
@@ -1,7 +1,9 @@
-import { alumni } from './constants';
-import { Paragraph, Title } from '@/app/components';
-import { useWindowSize } from '@/app/hooks';
-import Image from '@/features/image';
+import { alumni } from '../constants';
+
+import { useWindowSize } from '@/shared/hooks/use-window-size';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Title } from '@/shared/ui/title';
import './alumni.scss';
diff --git a/src/widgets/angular-topics/index.ts b/src/widgets/angular-topics/index.ts
new file mode 100644
index 000000000..b995276a1
--- /dev/null
+++ b/src/widgets/angular-topics/index.ts
@@ -0,0 +1 @@
+export { AngularTopics } from './ui/angular-topics';
diff --git a/src/features/angular-topics/angular-topics.module.scss b/src/widgets/angular-topics/ui/angular-topics.module.scss
similarity index 100%
rename from src/features/angular-topics/angular-topics.module.scss
rename to src/widgets/angular-topics/ui/angular-topics.module.scss
diff --git a/src/features/angular-topics/angular-topics.tsx b/src/widgets/angular-topics/ui/angular-topics.tsx
similarity index 87%
rename from src/features/angular-topics/angular-topics.tsx
rename to src/widgets/angular-topics/ui/angular-topics.tsx
index 13eee17cb..a8fbdf2a1 100644
--- a/src/features/angular-topics/angular-topics.tsx
+++ b/src/widgets/angular-topics/ui/angular-topics.tsx
@@ -1,5 +1,7 @@
import classNames from 'classnames/bind';
-import { Actions, Title } from '@/app/components';
+
+import { Actions } from '@/shared/ui/actions/actions';
+import { Title } from '@/shared/ui/title';
import styles from './angular-topics.module.scss';
diff --git a/src/widgets/breadcrumbs/breadcrumbs.scss b/src/widgets/breadcrumbs/breadcrumbs.scss
new file mode 100644
index 000000000..8b2049e22
--- /dev/null
+++ b/src/widgets/breadcrumbs/breadcrumbs.scss
@@ -0,0 +1,39 @@
+.breadcrumbs {
+ &.content {
+ @include media-laptop {
+ padding: 24px 40px 10px;
+ }
+
+ @include media-tablet {
+ padding: 24px 15px 10px;
+ }
+
+ padding: 24px 120px 10px;
+
+ ul {
+ display: flex;
+ align-items: flex-start;
+ font-size: 14px;
+ list-style: none;
+ }
+
+ & .separator {
+ padding: 0 8px;
+ }
+
+ & .link {
+ @extend %transition-all;
+
+ color: $color-gray-500;
+
+ &.disabled {
+ color: $color-gray-600;
+ text-decoration: underline;
+ }
+
+ &:hover {
+ color: $color-gray-600;
+ }
+ }
+ }
+}
diff --git a/src/widgets/breadcrumbs/breadcrumbs.test.tsx b/src/widgets/breadcrumbs/breadcrumbs.test.tsx
new file mode 100644
index 000000000..544b2ae41
--- /dev/null
+++ b/src/widgets/breadcrumbs/breadcrumbs.test.tsx
@@ -0,0 +1,38 @@
+import { screen } from '@testing-library/react';
+import { Breadcrumbs, breadcrumbNameMap } from './';
+import { ROUTES } from '@/app/const';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+
+describe('Breadcrumbs', () => {
+ it('renders "Home"', async () => {
+ renderWithRouter(, { route: ROUTES.HOME });
+ const homeLink = await screen.findByText(/Home/i);
+
+ expect(homeLink).toBeInTheDocument();
+ });
+
+ Object.entries(breadcrumbNameMap).forEach(([route, breadcrumb]) => {
+ it(`renders mapped Breadcrumb for /${route}`, () => {
+ renderWithRouter(, { route: `/${route}` });
+ const breadcrumbLink = screen.getByText(breadcrumb);
+
+ expect(breadcrumbLink).toBeInTheDocument();
+ });
+ });
+
+ test('renders un-mapped Breadcrumbs', () => {
+ renderWithRouter(, { route: '/unmapped-route' });
+ const unmappedBreadcrumb = screen.getByText(/unmapped-route/i);
+
+ expect(unmappedBreadcrumb).toBeInTheDocument();
+ });
+
+ test('renders Breadcrumbs for nested route', () => {
+ renderWithRouter(, { route: `/${ROUTES.COURSES}/${ROUTES.NODE_JS}` });
+ const parentBreadcrumb = screen.getByText(breadcrumbNameMap[ROUTES.COURSES]);
+ const childBreadcrumb = screen.getByText(breadcrumbNameMap[ROUTES.NODE_JS]);
+
+ expect(parentBreadcrumb).toBeInTheDocument();
+ expect(childBreadcrumb).toBeInTheDocument();
+ });
+});
diff --git a/src/widgets/breadcrumbs/breadcrumbs.tsx b/src/widgets/breadcrumbs/breadcrumbs.tsx
new file mode 100644
index 000000000..6120c5ad0
--- /dev/null
+++ b/src/widgets/breadcrumbs/breadcrumbs.tsx
@@ -0,0 +1,50 @@
+import { Link, useLocation } from 'react-router-dom';
+import { breadcrumbNameMap } from './constants';
+import { buildUrl } from '@/app/services/platform';
+import { RouteValues } from '@/app/types/route.types.ts';
+
+import './breadcrumbs.scss';
+
+export const Breadcrumbs = () => {
+ const location = useLocation();
+
+ const crumbs = location.pathname.split('/').filter(Boolean) as RouteValues[];
+
+ const transformedCrumbs = crumbs.map((crumb) => breadcrumbNameMap[crumb] || crumb);
+
+ return (
+
+ );
+};
diff --git a/src/widgets/breadcrumbs/breadcrumbs.types.ts b/src/widgets/breadcrumbs/breadcrumbs.types.ts
new file mode 100644
index 000000000..def8b6a0a
--- /dev/null
+++ b/src/widgets/breadcrumbs/breadcrumbs.types.ts
@@ -0,0 +1,3 @@
+import { RouteValues } from '@/app/types/route.types.ts';
+
+export type BreadcrumbNameMap = Record;
diff --git a/src/widgets/breadcrumbs/constants.ts b/src/widgets/breadcrumbs/constants.ts
new file mode 100644
index 000000000..3104f33cf
--- /dev/null
+++ b/src/widgets/breadcrumbs/constants.ts
@@ -0,0 +1,14 @@
+import { BreadcrumbNameMap } from './breadcrumbs.types';
+
+export const breadcrumbNameMap: BreadcrumbNameMap = {
+ courses: 'Courses',
+ nodejs: 'Node.js Course',
+ javascript: 'JavaScript Mentoring Program',
+ 'javascript-ru': 'JavaScript Mentoring Program RU',
+ 'javascript-preschool-ru': 'JavaScript Pre-school RU',
+ angular: 'Angular Course',
+ 'aws-cloud-developer': 'AWS Cloud Developer Course',
+ 'aws-fundamentals': 'AWS Fundamentals Course',
+ reactjs: 'React course',
+ community: 'Community',
+} as const;
diff --git a/src/widgets/breadcrumbs/index.ts b/src/widgets/breadcrumbs/index.ts
new file mode 100644
index 000000000..f4691ed45
--- /dev/null
+++ b/src/widgets/breadcrumbs/index.ts
@@ -0,0 +1,2 @@
+export { Breadcrumbs } from './breadcrumbs';
+export { breadcrumbNameMap } from './constants';
diff --git a/src/widgets/certification/index.tsx b/src/widgets/certification/index.tsx
new file mode 100644
index 000000000..3536ff69c
--- /dev/null
+++ b/src/widgets/certification/index.tsx
@@ -0,0 +1 @@
+export { Certification } from './ui/certification';
diff --git a/src/features/certification/certification.module.scss b/src/widgets/certification/ui/certification.module.scss
similarity index 100%
rename from src/features/certification/certification.module.scss
rename to src/widgets/certification/ui/certification.module.scss
diff --git a/src/features/certification/certification.tsx b/src/widgets/certification/ui/certification.tsx
similarity index 94%
rename from src/features/certification/certification.tsx
rename to src/widgets/certification/ui/certification.tsx
index 059ec4916..c077538bc 100644
--- a/src/features/certification/certification.tsx
+++ b/src/widgets/certification/ui/certification.tsx
@@ -1,6 +1,7 @@
import classNames from 'classnames/bind';
-import { Paragraph, Title } from '@/app/components';
-import { CourseNames } from '@/data/communication.data';
+import { CourseNames } from '@/shared/data/communication.data';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Title } from '@/shared/ui/title';
import styles from './certification.module.scss';
diff --git a/src/features/communication/communication.test.tsx b/src/widgets/communication/communication.test.tsx
similarity index 92%
rename from src/features/communication/communication.test.tsx
rename to src/widgets/communication/communication.test.tsx
index 88bd0787f..611d7c91a 100644
--- a/src/features/communication/communication.test.tsx
+++ b/src/widgets/communication/communication.test.tsx
@@ -1,6 +1,6 @@
import { screen } from '@testing-library/react';
-import { Communication } from './communication';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Communication } from './ui/communication';
+import { renderWithRouter } from '@/shared/__tests__/utils';
const jsCourseName = 'js / front-end en';
const nodeCourseName = 'node.js';
diff --git a/src/widgets/communication/index.tsx b/src/widgets/communication/index.tsx
new file mode 100644
index 000000000..4d549f5a9
--- /dev/null
+++ b/src/widgets/communication/index.tsx
@@ -0,0 +1 @@
+export { Communication } from './ui/communication';
diff --git a/src/features/communication/communication.scss b/src/widgets/communication/ui/communication.scss
similarity index 100%
rename from src/features/communication/communication.scss
rename to src/widgets/communication/ui/communication.scss
diff --git a/src/features/communication/communication.tsx b/src/widgets/communication/ui/communication.tsx
similarity index 91%
rename from src/features/communication/communication.tsx
rename to src/widgets/communication/ui/communication.tsx
index 4d36e3eed..09461a969 100644
--- a/src/features/communication/communication.tsx
+++ b/src/widgets/communication/ui/communication.tsx
@@ -1,13 +1,16 @@
/* eslint-disable @stylistic/jsx-one-expression-per-line */
-import { LinkCustom, Paragraph, Subtitle, Title } from '@/app/components';
import {
CourseNames,
DISCORD_LINKS,
RS_DOCS_COMMUNICATION_LINK,
RS_DOCS_TELEGRAM_CHATS_LINK,
-} from '@/data/communication.data';
-import { TextLinkIcon } from '@/icons';
-import { DiscordLogo } from '@/icons/discord-logo';
+} from '@/shared/data/communication.data';
+import { TextLinkIcon } from '@/shared/icons';
+import { DiscordLogo } from '@/shared/icons/discord-logo';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './communication.scss';
diff --git a/src/features/home/community/community.test.tsx b/src/widgets/community/community.test.tsx
similarity index 89%
rename from src/features/home/community/community.test.tsx
rename to src/widgets/community/community.test.tsx
index 96d5f818b..0ed26eb42 100644
--- a/src/features/home/community/community.test.tsx
+++ b/src/widgets/community/community.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Community } from './community';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Community } from './ui/community';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Community', () => {
beforeEach(() => {
diff --git a/src/widgets/community/index.ts b/src/widgets/community/index.ts
new file mode 100644
index 000000000..84bf19dc7
--- /dev/null
+++ b/src/widgets/community/index.ts
@@ -0,0 +1 @@
+export { Community } from './ui/community';
diff --git a/src/features/home/community/community.scss b/src/widgets/community/ui/community.scss
similarity index 100%
rename from src/features/home/community/community.scss
rename to src/widgets/community/ui/community.scss
diff --git a/src/features/home/community/community.tsx b/src/widgets/community/ui/community.tsx
similarity index 87%
rename from src/features/home/community/community.tsx
rename to src/widgets/community/ui/community.tsx
index 7cd3f8242..05e0f3212 100644
--- a/src/features/home/community/community.tsx
+++ b/src/widgets/community/ui/community.tsx
@@ -1,8 +1,9 @@
-import { SocialMedia, type SocialMediaProps, Subtitle, Title, TitleType } from '@/app/components';
-
-import image from '@/assets/welcome.webp';
-import Image from '@/features/image';
-import { FacebookIcon, InstagramIcon, LinkedInIcon, TelegramIcon, YouTubeIcon } from '@/icons';
+import image from '@/shared/assets/welcome.webp';
+import { FacebookIcon, InstagramIcon, LinkedInIcon, TelegramIcon, YouTubeIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { SocialMedia, SocialMediaProps } from '@/shared/ui/social-media';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title, TitleType } from '@/shared/ui/title';
import './community.scss';
diff --git a/src/features/home/contribute/contribute.test.tsx b/src/widgets/contribute/contribute.test.tsx
similarity index 92%
rename from src/features/home/contribute/contribute.test.tsx
rename to src/widgets/contribute/contribute.test.tsx
index 4b64b5426..e25cc6448 100644
--- a/src/features/home/contribute/contribute.test.tsx
+++ b/src/widgets/contribute/contribute.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Contribute } from './contribute';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Contribute } from './ui/contribute';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Contribute', () => {
beforeEach(() => {
diff --git a/src/widgets/contribute/index.ts b/src/widgets/contribute/index.ts
new file mode 100644
index 000000000..3f672c986
--- /dev/null
+++ b/src/widgets/contribute/index.ts
@@ -0,0 +1 @@
+export { Contribute } from './ui/contribute';
diff --git a/src/features/home/contribute/contribute.scss b/src/widgets/contribute/ui/contribute.scss
similarity index 100%
rename from src/features/home/contribute/contribute.scss
rename to src/widgets/contribute/ui/contribute.scss
diff --git a/src/features/home/contribute/contribute.tsx b/src/widgets/contribute/ui/contribute.tsx
similarity index 86%
rename from src/features/home/contribute/contribute.tsx
rename to src/widgets/contribute/ui/contribute.tsx
index dc250cb42..4ae343064 100644
--- a/src/features/home/contribute/contribute.tsx
+++ b/src/widgets/contribute/ui/contribute.tsx
@@ -1,7 +1,9 @@
-import { OptionItem, type OptionItemProps, Paragraph, Subtitle, Title } from '@/app/components';
-
-import image from '@/assets/contribute.webp';
-import Image from '@/features/image';
+import image from '@/shared/assets/contribute.webp';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
+import { OptionItem, OptionItemProps } from '@/widgets/option-item';
import './contribute.scss';
diff --git a/src/features/course-main/course-main.module.scss b/src/widgets/course-main/course-main.module.scss
similarity index 100%
rename from src/features/course-main/course-main.module.scss
rename to src/widgets/course-main/course-main.module.scss
diff --git a/src/features/course-main/course-main.test.tsx b/src/widgets/course-main/course-main.test.tsx
similarity index 93%
rename from src/features/course-main/course-main.test.tsx
rename to src/widgets/course-main/course-main.test.tsx
index 7b880e58c..602dbacae 100644
--- a/src/features/course-main/course-main.test.tsx
+++ b/src/widgets/course-main/course-main.test.tsx
@@ -1,11 +1,11 @@
import { screen } from '@testing-library/react';
import { CourseMain } from './course-main';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
import { dayJS } from '@/app/services/dayjs';
import { CourseStatus } from '@/app/types';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
-vi.mock('@/app/hooks');
+vi.mock('@/app/hooks/use-course-by-title');
vi.mock('react-router-dom', async (importOriginal) => {
const actual = await importOriginal();
diff --git a/src/features/course-main/course-main.tsx b/src/widgets/course-main/course-main.tsx
similarity index 75%
rename from src/features/course-main/course-main.tsx
rename to src/widgets/course-main/course-main.tsx
index 07868c802..a5ec2f32f 100644
--- a/src/features/course-main/course-main.tsx
+++ b/src/widgets/course-main/course-main.tsx
@@ -1,11 +1,15 @@
import { useLoaderData } from 'react-router-dom';
-import { getCourseStatus } from './utils';
-import { DateLang, LinkCustom, SectionLabel, Subtitle, Title } from '@/app/components';
-import { useTitle } from '@/app/hooks';
-import { selectCourse } from '@/app/hooks/use-course-by-title/utils/select-course.ts';
+import { getCourseStatus } from './utils/get-course-status';
import { Course } from '@/app/types';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import { selectCourse } from '@/shared/hooks/use-course-by-title/utils/select-course';
+import { useTitle } from '@/shared/hooks/use-title';
+import { ArrowIcon } from '@/shared/icons';
+import { DateLang } from '@/shared/ui/date-lang';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { SectionLabel } from '@/shared/ui/section-label';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import styles from './course-main.module.scss';
diff --git a/src/features/course-main/courseLoader.ts b/src/widgets/course-main/courseLoader.ts
similarity index 100%
rename from src/features/course-main/courseLoader.ts
rename to src/widgets/course-main/courseLoader.ts
diff --git a/src/features/course-main/index.ts b/src/widgets/course-main/index.ts
similarity index 100%
rename from src/features/course-main/index.ts
rename to src/widgets/course-main/index.ts
diff --git a/src/features/course-main/utils/get-course-status.ts b/src/widgets/course-main/utils/get-course-status.ts
similarity index 94%
rename from src/features/course-main/utils/get-course-status.ts
rename to src/widgets/course-main/utils/get-course-status.ts
index 467414c9e..cf87df676 100644
--- a/src/features/course-main/utils/get-course-status.ts
+++ b/src/widgets/course-main/utils/get-course-status.ts
@@ -1,5 +1,5 @@
import dayjs from 'dayjs';
-import { hasDayInDate } from '.';
+import { hasDayInDate } from './has-day';
import { CourseStatus } from '@/app/types';
export function getCourseStatus(courseStartDate: string): CourseStatus {
diff --git a/src/features/course-main/utils/has-day.ts b/src/widgets/course-main/utils/has-day.ts
similarity index 100%
rename from src/features/course-main/utils/has-day.ts
rename to src/widgets/course-main/utils/has-day.ts
diff --git a/src/features/school/courses/courses.test.tsx b/src/widgets/courses-school/courses.test.tsx
similarity index 90%
rename from src/features/school/courses/courses.test.tsx
rename to src/widgets/courses-school/courses.test.tsx
index 41e134b65..8399f707e 100644
--- a/src/features/school/courses/courses.test.tsx
+++ b/src/widgets/courses-school/courses.test.tsx
@@ -1,10 +1,11 @@
import { screen } from '@testing-library/react';
import { Mock, beforeEach, describe, expect, it, vi } from 'vitest';
-import { Courses } from './courses';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Courses } from './ui/courses';
import { ROUTES } from '@/app/const';
-import { useWindowSize } from '@/app/hooks';
+
import { buildUrl } from '@/app/services/platform';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+import { useWindowSize } from '@/shared/hooks/use-window-size';
const mockedData = [
{
@@ -44,13 +45,19 @@ const mockedData = [
},
];
-vi.mock('@/app/hooks', () => {
+vi.mock('@/app/hooks/use-data-by-name', () => {
return {
useDataByName: vi.fn().mockImplementation(() => ({
data: mockedData,
error: null,
loading: false,
})),
+
+ };
+});
+
+vi.mock('@/shared/hooks/use-window-size', () => {
+ return {
useWindowSize: vi.fn().mockReturnValue({
width: 1440,
height: 900,
diff --git a/src/widgets/courses-school/index.ts b/src/widgets/courses-school/index.ts
new file mode 100644
index 000000000..8baffcdc2
--- /dev/null
+++ b/src/widgets/courses-school/index.ts
@@ -0,0 +1 @@
+export { Courses } from './ui/courses';
diff --git a/src/features/school/courses/lib/getCourseIcon.tsx b/src/widgets/courses-school/lib/getCourseIcon.tsx
similarity index 100%
rename from src/features/school/courses/lib/getCourseIcon.tsx
rename to src/widgets/courses-school/lib/getCourseIcon.tsx
diff --git a/src/features/school/courses/lib/icons.data.tsx b/src/widgets/courses-school/lib/icons.data.tsx
similarity index 82%
rename from src/features/school/courses/lib/icons.data.tsx
rename to src/widgets/courses-school/lib/icons.data.tsx
index 81e3f63de..43925b38a 100644
--- a/src/features/school/courses/lib/icons.data.tsx
+++ b/src/widgets/courses-school/lib/icons.data.tsx
@@ -1,5 +1,5 @@
-import { COURSE_TITLES } from '@/data/courseTitles.data';
-import { AngularIcon, AwsLogo, HtmlIcon, JavascriptIcon, NodeJsIcon, ReactIcon } from '@/icons';
+import { COURSE_TITLES } from '@/shared/data/courseTitles.data';
+import { AngularIcon, AwsLogo, HtmlIcon, JavascriptIcon, NodeJsIcon, ReactIcon } from '@/shared/icons';
export const icons = {
[COURSE_TITLES.JS_PRESCHOOL_RU]: ,
diff --git a/src/features/school/courses/lib/selectCourses.ts b/src/widgets/courses-school/lib/selectCourses.ts
similarity index 100%
rename from src/features/school/courses/lib/selectCourses.ts
rename to src/widgets/courses-school/lib/selectCourses.ts
diff --git a/src/features/school/courses/ui/CourseCard.tsx b/src/widgets/courses-school/ui/CourseCard.tsx
similarity index 90%
rename from src/features/school/courses/ui/CourseCard.tsx
rename to src/widgets/courses-school/ui/CourseCard.tsx
index 65f1add27..aca550bba 100644
--- a/src/features/school/courses/ui/CourseCard.tsx
+++ b/src/widgets/courses-school/ui/CourseCard.tsx
@@ -1,6 +1,6 @@
-import { LinkCustom } from '@/app/components';
import { Course } from '@/app/types';
-import { ArrowIcon } from '@/icons';
+import { ArrowIcon } from '@/shared/icons';
+import { LinkCustom } from '@/shared/ui/link-custom';
type addFields = {
buttonText: string;
diff --git a/src/features/school/courses/courses.scss b/src/widgets/courses-school/ui/courses.scss
similarity index 100%
rename from src/features/school/courses/courses.scss
rename to src/widgets/courses-school/ui/courses.scss
diff --git a/src/features/school/courses/courses.tsx b/src/widgets/courses-school/ui/courses.tsx
similarity index 79%
rename from src/features/school/courses/courses.tsx
rename to src/widgets/courses-school/ui/courses.tsx
index 2cabe15b8..2eb9da4f8 100644
--- a/src/features/school/courses/courses.tsx
+++ b/src/widgets/courses-school/ui/courses.tsx
@@ -1,12 +1,13 @@
-import { getCourseIcon } from './lib/getCourseIcon';
-import { IconsTitle } from './lib/icons.data';
-import { selectCourses } from './lib/selectCourses';
-import { CourseCard } from './ui/CourseCard';
-import { LinkCustom } from '@/app/components';
+import { CourseCard } from './CourseCard';
+import { getCourseIcon } from '../lib/getCourseIcon';
+import { IconsTitle } from '../lib/icons.data';
+import { selectCourses } from '../lib/selectCourses';
import { ROUTES } from '@/app/const';
-import { useWindowSize } from '@/app/hooks';
+
import { courses } from '@/app/services/data';
-import { ArrowIcon, RsBanner } from '@/icons';
+import { useWindowSize } from '@/shared/hooks/use-window-size';
+import { ArrowIcon, RsBanner } from '@/shared/icons';
+import { LinkCustom } from '@/shared/ui/link-custom';
import './courses.scss';
diff --git a/src/widgets/courses/index.ts b/src/widgets/courses/index.ts
new file mode 100644
index 000000000..89575c4db
--- /dev/null
+++ b/src/widgets/courses/index.ts
@@ -0,0 +1 @@
+export { Courses as RSCourses } from './ui/courses';
diff --git a/src/features/courses/courses/other-courses.test.tsx b/src/widgets/courses/other-courses.test.tsx
similarity index 79%
rename from src/features/courses/courses/other-courses.test.tsx
rename to src/widgets/courses/other-courses.test.tsx
index 36f217326..a40e73808 100644
--- a/src/features/courses/courses/other-courses.test.tsx
+++ b/src/widgets/courses/other-courses.test.tsx
@@ -1,23 +1,17 @@
import { screen } from '@testing-library/react';
import { Mock, describe, expect, it, vi } from 'vitest';
-import { Courses } from './courses';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
-import { useDataByName } from '@/app/hooks';
+import { Courses } from './ui/courses';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+import { useDataByName } from '@/shared/hooks/use-data-by-name';
-vi.mock('@/app/hooks', () => {
+vi.mock('@/shared/hooks/use-data-by-name', () => {
return {
useDataByName: vi.fn(() => ({
data: undefined,
loading: false,
error: undefined,
})),
- useNearestCourse: vi.fn().mockImplementation(() => ({
- course: undefined,
- loading: false,
- error: undefined,
- hasError: false,
- })),
};
});
diff --git a/src/features/courses/courses/courses.scss b/src/widgets/courses/ui/courses.scss
similarity index 100%
rename from src/features/courses/courses/courses.scss
rename to src/widgets/courses/ui/courses.scss
diff --git a/src/features/courses/courses/courses.tsx b/src/widgets/courses/ui/courses.tsx
similarity index 77%
rename from src/features/courses/courses/courses.tsx
rename to src/widgets/courses/ui/courses.tsx
index 5fe60e746..b899c9fcc 100644
--- a/src/features/courses/courses/courses.tsx
+++ b/src/widgets/courses/ui/courses.tsx
@@ -1,8 +1,8 @@
-import { compareNumbers } from './utils/compare-courses';
-import { isCourse } from './utils/is-course';
-import { CourseCard, Title, TitleType } from '@/app/components';
-import { useDataByName } from '@/app/hooks';
-import { finedNearestCourse } from '@/app/hooks/use-nearest-course';
+import { CourseCard, finedNearestCourse } from '@/entities/courses';
+import { compareNumbers } from '@/entities/courses/helpers/compare-courses';
+import { isCourse } from '@/entities/courses/helpers/is-course';
+import { useDataByName } from '@/shared/hooks/use-data-by-name';
+import { Title, TitleType } from '@/shared/ui/title';
import './courses.scss';
diff --git a/src/features/home/events/events.data.ts b/src/widgets/events/events.data.ts
similarity index 96%
rename from src/features/home/events/events.data.ts
rename to src/widgets/events/events.data.ts
index 4cd25c5fe..22002d794 100644
--- a/src/features/home/events/events.data.ts
+++ b/src/widgets/events/events.data.ts
@@ -1,4 +1,4 @@
-import { EventCardProps } from '@/app/components';
+import { EventCardProps } from '@/entities/events';
export const events: EventCardProps[] = [
{
diff --git a/src/features/home/events/events.test.tsx b/src/widgets/events/events.test.tsx
similarity index 94%
rename from src/features/home/events/events.test.tsx
rename to src/widgets/events/events.test.tsx
index a17ef9899..5679c41f1 100644
--- a/src/features/home/events/events.test.tsx
+++ b/src/widgets/events/events.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
-import { Events } from './events';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Events } from './ui/events';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Events', () => {
it('renders the title "Meet us at events"', () => {
diff --git a/src/widgets/events/index.ts b/src/widgets/events/index.ts
new file mode 100644
index 000000000..05cf7e145
--- /dev/null
+++ b/src/widgets/events/index.ts
@@ -0,0 +1 @@
+export { Events } from './ui/events';
diff --git a/src/features/home/events/events.module.scss b/src/widgets/events/ui/events.module.scss
similarity index 100%
rename from src/features/home/events/events.module.scss
rename to src/widgets/events/ui/events.module.scss
diff --git a/src/features/home/events/events.tsx b/src/widgets/events/ui/events.tsx
similarity index 77%
rename from src/features/home/events/events.tsx
rename to src/widgets/events/ui/events.tsx
index 588742bd7..39b167142 100644
--- a/src/features/home/events/events.tsx
+++ b/src/widgets/events/ui/events.tsx
@@ -1,18 +1,15 @@
import cn from 'classnames';
import classNames from 'classnames/bind';
import dayjs from 'dayjs';
-import { events } from './events.data';
-import {
- EventCard,
- EventCardProps,
- Paragraph,
- SectionLabel,
- Subtitle,
- Title,
-} from '@/app/components';
-import photo3 from '@/assets/photo-3.webp';
-import Image from '@/features/image';
-import { getActualDataList } from '@/utils';
+import { events } from '../events.data';
+import { EventCard, EventCardProps } from '@/entities/events';
+import photo3 from '@/shared/assets/photo-3.webp';
+import { getActualDataList } from '@/shared/helpers/getActualDataList';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { SectionLabel } from '@/shared/ui/section-label';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import styles from './events.module.scss';
diff --git a/src/features/faq/faq.data.ts b/src/widgets/faq/faq.data.ts
similarity index 100%
rename from src/features/faq/faq.data.ts
rename to src/widgets/faq/faq.data.ts
diff --git a/src/widgets/faq/index.tsx b/src/widgets/faq/index.tsx
new file mode 100644
index 000000000..045b19ece
--- /dev/null
+++ b/src/widgets/faq/index.tsx
@@ -0,0 +1 @@
+export { Faq } from './ui/faq';
diff --git a/src/features/faq/faq.module.scss b/src/widgets/faq/ui/faq.module.scss
similarity index 100%
rename from src/features/faq/faq.module.scss
rename to src/widgets/faq/ui/faq.module.scss
diff --git a/src/features/faq/faq.tsx b/src/widgets/faq/ui/faq.tsx
similarity index 85%
rename from src/features/faq/faq.tsx
rename to src/widgets/faq/ui/faq.tsx
index 3deb6871e..8139b268d 100644
--- a/src/features/faq/faq.tsx
+++ b/src/widgets/faq/ui/faq.tsx
@@ -1,7 +1,8 @@
/* eslint-disable @stylistic/jsx-one-expression-per-line */
import classNames from 'classnames/bind';
-import { faqData } from './faq.data';
-import { TextWithLink, Title } from '@/app/components';
+import { faqData } from '../faq.data';
+import { TextWithLink } from '@/shared/ui/text-with-link';
+import { Title } from '@/shared/ui/title';
import styles from './faq.module.scss';
diff --git a/src/features/home/hero/hero.test.tsx b/src/widgets/hero/hero.test.tsx
similarity index 88%
rename from src/features/home/hero/hero.test.tsx
rename to src/widgets/hero/hero.test.tsx
index 21fa5ed59..5f5b64129 100644
--- a/src/features/home/hero/hero.test.tsx
+++ b/src/widgets/hero/hero.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
-import { Hero } from './hero';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Hero } from './ui/hero';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Hero', () => {
it('renders the title correctly', () => {
diff --git a/src/widgets/hero/index.ts b/src/widgets/hero/index.ts
new file mode 100644
index 000000000..f07269924
--- /dev/null
+++ b/src/widgets/hero/index.ts
@@ -0,0 +1 @@
+export { Hero } from './ui/hero';
diff --git a/src/features/home/hero/hero.scss b/src/widgets/hero/ui/hero.scss
similarity index 100%
rename from src/features/home/hero/hero.scss
rename to src/widgets/hero/ui/hero.scss
diff --git a/src/features/home/hero/hero.tsx b/src/widgets/hero/ui/hero.tsx
similarity index 100%
rename from src/features/home/hero/hero.tsx
rename to src/widgets/hero/ui/hero.tsx
diff --git a/src/widgets/main/index.ts b/src/widgets/main/index.ts
new file mode 100644
index 000000000..0574b925c
--- /dev/null
+++ b/src/widgets/main/index.ts
@@ -0,0 +1 @@
+export { Main } from './ui/main';
diff --git a/src/features/school/main/main.test.tsx b/src/widgets/main/main.test.tsx
similarity index 86%
rename from src/features/school/main/main.test.tsx
rename to src/widgets/main/main.test.tsx
index ccf3449af..301d5018c 100644
--- a/src/features/school/main/main.test.tsx
+++ b/src/widgets/main/main.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Main } from './main';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Main } from './ui/main';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Main', () => {
beforeEach(() => {
diff --git a/src/features/school/main/main.scss b/src/widgets/main/ui/main.scss
similarity index 100%
rename from src/features/school/main/main.scss
rename to src/widgets/main/ui/main.scss
diff --git a/src/features/school/main/main.tsx b/src/widgets/main/ui/main.tsx
similarity index 83%
rename from src/features/school/main/main.tsx
rename to src/widgets/main/ui/main.tsx
index b6c0c4496..cf6e493bc 100644
--- a/src/features/school/main/main.tsx
+++ b/src/widgets/main/ui/main.tsx
@@ -1,4 +1,5 @@
-import { Subtitle, Title, TitleType } from '@/app/components';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title, TitleType } from '@/shared/ui/title';
import './main.scss';
diff --git a/src/widgets/mentoring/index.ts b/src/widgets/mentoring/index.ts
new file mode 100644
index 000000000..b613f7185
--- /dev/null
+++ b/src/widgets/mentoring/index.ts
@@ -0,0 +1 @@
+export { Mentoring } from './ui/mentoring';
diff --git a/src/features/school/mentoring/mentoring.test.tsx b/src/widgets/mentoring/mentoring.test.tsx
similarity index 92%
rename from src/features/school/mentoring/mentoring.test.tsx
rename to src/widgets/mentoring/mentoring.test.tsx
index f4ff091c8..ae21cb35b 100644
--- a/src/features/school/mentoring/mentoring.test.tsx
+++ b/src/widgets/mentoring/mentoring.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Mentoring } from './mentoring';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Mentoring } from './ui/mentoring';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Mentoring', () => {
beforeEach(() => {
diff --git a/src/features/school/mentoring/mentoring.scss b/src/widgets/mentoring/ui/mentoring.scss
similarity index 100%
rename from src/features/school/mentoring/mentoring.scss
rename to src/widgets/mentoring/ui/mentoring.scss
diff --git a/src/features/school/mentoring/mentoring.tsx b/src/widgets/mentoring/ui/mentoring.tsx
similarity index 100%
rename from src/features/school/mentoring/mentoring.tsx
rename to src/widgets/mentoring/ui/mentoring.tsx
diff --git a/src/widgets/mentors-wanted/index.ts b/src/widgets/mentors-wanted/index.ts
new file mode 100644
index 000000000..d6620dc63
--- /dev/null
+++ b/src/widgets/mentors-wanted/index.ts
@@ -0,0 +1 @@
+export { MentorsWanted } from './ui/mentors-wanted';
diff --git a/src/features/mentors-wanted/mentors-wanted.module.scss b/src/widgets/mentors-wanted/ui/mentors-wanted.module.scss
similarity index 100%
rename from src/features/mentors-wanted/mentors-wanted.module.scss
rename to src/widgets/mentors-wanted/ui/mentors-wanted.module.scss
diff --git a/src/features/mentors-wanted/mentors-wanted.tsx b/src/widgets/mentors-wanted/ui/mentors-wanted.tsx
similarity index 85%
rename from src/features/mentors-wanted/mentors-wanted.tsx
rename to src/widgets/mentors-wanted/ui/mentors-wanted.tsx
index aa63246fa..35faf39b1 100644
--- a/src/features/mentors-wanted/mentors-wanted.tsx
+++ b/src/widgets/mentors-wanted/ui/mentors-wanted.tsx
@@ -1,9 +1,10 @@
import classNames from 'classnames';
import classNamesBind from 'classnames/bind';
import { Link } from 'react-router-dom';
-import { Paragraph, Title } from '@/app/components';
-import mentorImg from '@/assets/mentors-wanted-poster.webp';
-import Image from '@/features/image';
+import mentorImg from '@/shared/assets/mentors-wanted-poster.webp';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Title } from '@/shared/ui/title';
import styles from './mentors-wanted.module.scss';
diff --git a/src/widgets/mentors/index.ts b/src/widgets/mentors/index.ts
new file mode 100644
index 000000000..b4a4f9dc3
--- /dev/null
+++ b/src/widgets/mentors/index.ts
@@ -0,0 +1 @@
+export { Mentors } from './ui/mentors';
diff --git a/src/features/school/mentors/mentors.test.tsx b/src/widgets/mentors/mentors.test.tsx
similarity index 87%
rename from src/features/school/mentors/mentors.test.tsx
rename to src/widgets/mentors/mentors.test.tsx
index c953f8fe1..c85b6d2b2 100644
--- a/src/features/school/mentors/mentors.test.tsx
+++ b/src/widgets/mentors/mentors.test.tsx
@@ -1,8 +1,8 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Mentors } from './mentors';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Mentors } from './ui/mentors';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Mentors', () => {
beforeEach(() => {
diff --git a/src/features/school/mentors/mentors.scss b/src/widgets/mentors/ui/mentors.scss
similarity index 100%
rename from src/features/school/mentors/mentors.scss
rename to src/widgets/mentors/ui/mentors.scss
diff --git a/src/features/school/mentors/mentors.tsx b/src/widgets/mentors/ui/mentors.tsx
similarity index 78%
rename from src/features/school/mentors/mentors.tsx
rename to src/widgets/mentors/ui/mentors.tsx
index 2741dc925..ca7ae33ef 100644
--- a/src/features/school/mentors/mentors.tsx
+++ b/src/widgets/mentors/ui/mentors.tsx
@@ -1,8 +1,10 @@
-import { LinkCustom, Subtitle, Title, TitleType } from '@/app/components';
import { LINKS } from '@/app/const';
-import mentorImg from '@/assets/mentors-wanted.webp';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import mentorImg from '@/shared/assets/mentors-wanted.webp';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title, TitleType } from '@/shared/ui/title';
import './mentors.scss';
diff --git a/src/widgets/merch/index.ts b/src/widgets/merch/index.ts
new file mode 100644
index 000000000..e6c6ce945
--- /dev/null
+++ b/src/widgets/merch/index.ts
@@ -0,0 +1 @@
+export { Merch } from './ui/merch';
diff --git a/src/features/home/merch/merch.test.tsx b/src/widgets/merch/merch.test.tsx
similarity index 92%
rename from src/features/home/merch/merch.test.tsx
rename to src/widgets/merch/merch.test.tsx
index 1764bbb3b..721911fcd 100644
--- a/src/features/home/merch/merch.test.tsx
+++ b/src/widgets/merch/merch.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Merch } from './merch';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Merch } from './ui/merch';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Merch', () => {
beforeEach(() => {
diff --git a/src/features/home/merch/merch.scss b/src/widgets/merch/ui/merch.scss
similarity index 100%
rename from src/features/home/merch/merch.scss
rename to src/widgets/merch/ui/merch.scss
diff --git a/src/features/home/merch/merch.tsx b/src/widgets/merch/ui/merch.tsx
similarity index 71%
rename from src/features/home/merch/merch.tsx
rename to src/widgets/merch/ui/merch.tsx
index ee9d4d941..8db834ffb 100644
--- a/src/features/home/merch/merch.tsx
+++ b/src/widgets/merch/ui/merch.tsx
@@ -1,9 +1,12 @@
-import { LinkCustom, Paragraph, SectionLabel, Subtitle, Title } from '@/app/components';
-
import { LINKS } from '@/app/const';
-import image from '@/assets/merch.webp';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import image from '@/shared/assets/merch.webp';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { SectionLabel } from '@/shared/ui/section-label';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './merch.scss';
diff --git a/src/widgets/mobile-view/index.ts b/src/widgets/mobile-view/index.ts
new file mode 100644
index 000000000..05640e796
--- /dev/null
+++ b/src/widgets/mobile-view/index.ts
@@ -0,0 +1 @@
+export { MobileView } from './ui/mobile-view';
diff --git a/src/app/components/mobile-view/mobile-view.scss b/src/widgets/mobile-view/ui/mobile-view.scss
similarity index 100%
rename from src/app/components/mobile-view/mobile-view.scss
rename to src/widgets/mobile-view/ui/mobile-view.scss
diff --git a/src/app/components/mobile-view/mobile-view.tsx b/src/widgets/mobile-view/ui/mobile-view.tsx
similarity index 91%
rename from src/app/components/mobile-view/mobile-view.tsx
rename to src/widgets/mobile-view/ui/mobile-view.tsx
index 813a320e1..46f49c7ff 100644
--- a/src/app/components/mobile-view/mobile-view.tsx
+++ b/src/widgets/mobile-view/ui/mobile-view.tsx
@@ -1,6 +1,8 @@
+// todo it not widget
import { Link } from 'react-router-dom';
-import { LogoWrapper, SchoolMenu } from '@/app/components';
import { buildUrl } from '@/app/services/platform';
+import { LogoWrapper } from '@/shared/ui/logo-wrapper';
+import { SchoolMenu } from '@/widgets/school-menu';
import './mobile-view.scss';
diff --git a/src/widgets/not-found/index.ts b/src/widgets/not-found/index.ts
new file mode 100644
index 000000000..4e3913d3b
--- /dev/null
+++ b/src/widgets/not-found/index.ts
@@ -0,0 +1 @@
+export { NotFound } from './ui/not-found';
diff --git a/src/features/not-found/not-found.scss b/src/widgets/not-found/ui/not-found.scss
similarity index 100%
rename from src/features/not-found/not-found.scss
rename to src/widgets/not-found/ui/not-found.scss
diff --git a/src/features/not-found/not-found.tsx b/src/widgets/not-found/ui/not-found.tsx
similarity index 64%
rename from src/features/not-found/not-found.tsx
rename to src/widgets/not-found/ui/not-found.tsx
index 71cc8b643..539bd1bb7 100644
--- a/src/features/not-found/not-found.tsx
+++ b/src/widgets/not-found/ui/not-found.tsx
@@ -1,8 +1,9 @@
-import { LinkCustom, Paragraph } from '@/app/components';
-import { useTitle } from '@/app/hooks';
-import notFoundImg from '@/assets/404.webp';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import notFoundImg from '@/shared/assets/404.webp';
+import { useTitle } from '@/shared/hooks/use-title';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Paragraph } from '@/shared/ui/paragraph';
import './not-found.scss';
diff --git a/src/widgets/numbers/index.ts b/src/widgets/numbers/index.ts
new file mode 100644
index 000000000..a1f8c4cc0
--- /dev/null
+++ b/src/widgets/numbers/index.ts
@@ -0,0 +1 @@
+export { Numbers } from './ui/numbers';
diff --git a/src/features/home/numbers/numbers.test.tsx b/src/widgets/numbers/numbers.test.tsx
similarity index 95%
rename from src/features/home/numbers/numbers.test.tsx
rename to src/widgets/numbers/numbers.test.tsx
index 99bc37c4a..88c522331 100644
--- a/src/features/home/numbers/numbers.test.tsx
+++ b/src/widgets/numbers/numbers.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Numbers } from './numbers';
+import { Numbers } from './ui/numbers';
describe('Numbers', () => {
beforeEach(() => {
diff --git a/src/features/home/numbers/numbers.scss b/src/widgets/numbers/ui/numbers.scss
similarity index 100%
rename from src/features/home/numbers/numbers.scss
rename to src/widgets/numbers/ui/numbers.scss
diff --git a/src/features/home/numbers/numbers.tsx b/src/widgets/numbers/ui/numbers.tsx
similarity index 87%
rename from src/features/home/numbers/numbers.tsx
rename to src/widgets/numbers/ui/numbers.tsx
index d14bdddc8..80210efcd 100644
--- a/src/features/home/numbers/numbers.tsx
+++ b/src/widgets/numbers/ui/numbers.tsx
@@ -1,7 +1,8 @@
-import { Paragraph, Subtitle, Title } from '@/app/components';
-
-import image from '@/assets/map.webp';
-import Image from '@/features/image';
+import image from '@/shared/assets/map.webp';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './numbers.scss';
diff --git a/src/widgets/option-item/index.ts b/src/widgets/option-item/index.ts
new file mode 100644
index 000000000..81b2653e3
--- /dev/null
+++ b/src/widgets/option-item/index.ts
@@ -0,0 +1 @@
+export { OptionItem, type OptionItemProps } from './ui/option-item';
diff --git a/src/app/components/option-item/option-item.test.tsx b/src/widgets/option-item/option-item.test.tsx
similarity index 91%
rename from src/app/components/option-item/option-item.test.tsx
rename to src/widgets/option-item/option-item.test.tsx
index 701901d16..e0b69ec16 100644
--- a/src/app/components/option-item/option-item.test.tsx
+++ b/src/widgets/option-item/option-item.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
-import { OptionItem } from './option-item';
-import { renderWithRouter } from '@/__tests__/utils';
+import { OptionItem } from './ui/option-item';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('OptionItem component', () => {
it('renders title and description', () => {
diff --git a/src/app/components/option-item/option-item.scss b/src/widgets/option-item/ui/option-item.scss
similarity index 100%
rename from src/app/components/option-item/option-item.scss
rename to src/widgets/option-item/ui/option-item.scss
diff --git a/src/app/components/option-item/option-item.tsx b/src/widgets/option-item/ui/option-item.tsx
similarity index 84%
rename from src/app/components/option-item/option-item.tsx
rename to src/widgets/option-item/ui/option-item.tsx
index 753321883..0176c0aaf 100644
--- a/src/app/components/option-item/option-item.tsx
+++ b/src/widgets/option-item/ui/option-item.tsx
@@ -1,5 +1,6 @@
-import { LinkCustom } from '@/app/components';
-import { ArrowIcon } from '@/icons';
+// todo it not widget
+import { ArrowIcon } from '@/shared/icons';
+import { LinkCustom } from '@/shared/ui/link-custom';
import './option-item.scss';
diff --git a/src/widgets/pictures/index.ts b/src/widgets/pictures/index.ts
new file mode 100644
index 000000000..03ab70f7e
--- /dev/null
+++ b/src/widgets/pictures/index.ts
@@ -0,0 +1 @@
+export { Pictures } from './ui/pictures';
diff --git a/src/features/home/pictures/pictures.test.tsx b/src/widgets/pictures/pictures.test.tsx
similarity index 95%
rename from src/features/home/pictures/pictures.test.tsx
rename to src/widgets/pictures/pictures.test.tsx
index 3dd43b60b..a193c195b 100644
--- a/src/features/home/pictures/pictures.test.tsx
+++ b/src/widgets/pictures/pictures.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Pictures } from './pictures';
+import { Pictures } from './ui/pictures';
describe('Pictures', () => {
beforeEach(() => {
diff --git a/src/features/home/pictures/pictures.scss b/src/widgets/pictures/ui/pictures.scss
similarity index 100%
rename from src/features/home/pictures/pictures.scss
rename to src/widgets/pictures/ui/pictures.scss
diff --git a/src/features/home/pictures/pictures.tsx b/src/widgets/pictures/ui/pictures.tsx
similarity index 69%
rename from src/features/home/pictures/pictures.tsx
rename to src/widgets/pictures/ui/pictures.tsx
index c41393e8a..974ba82af 100644
--- a/src/features/home/pictures/pictures.tsx
+++ b/src/widgets/pictures/ui/pictures.tsx
@@ -1,18 +1,19 @@
// requires a loader
import { Carousel } from 'react-responsive-carousel';
-import { Paragraph, SocialMedia, SocialMediaProps, Title } from '@/app/components';
-
-import photo1 from '@/assets/photo-1.webp';
-import photo2 from '@/assets/photo-2.webp';
-import photo3 from '@/assets/photo-3.webp';
-import photo4 from '@/assets/photo-4.webp';
-import photo5 from '@/assets/photo-5.webp';
-import photo6 from '@/assets/photo-6.webp';
-import photo7 from '@/assets/photo-7.webp';
-import photo8 from '@/assets/photo-8.webp';
-import photo9 from '@/assets/photo-9.webp';
-import Image from '@/features/image';
-import { FacebookIcon, InstagramIcon } from '@/icons';
+import photo1 from '@/shared/assets/photo-1.webp';
+import photo2 from '@/shared/assets/photo-2.webp';
+import photo3 from '@/shared/assets/photo-3.webp';
+import photo4 from '@/shared/assets/photo-4.webp';
+import photo5 from '@/shared/assets/photo-5.webp';
+import photo6 from '@/shared/assets/photo-6.webp';
+import photo7 from '@/shared/assets/photo-7.webp';
+import photo8 from '@/shared/assets/photo-8.webp';
+import photo9 from '@/shared/assets/photo-9.webp';
+import { FacebookIcon, InstagramIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { SocialMedia, SocialMediaProps } from '@/shared/ui/social-media';
+import { Title } from '@/shared/ui/title';
import 'react-responsive-carousel/lib/styles/carousel.min.css';
import './pictures.scss';
diff --git a/src/widgets/places/index.ts b/src/widgets/places/index.ts
new file mode 100644
index 000000000..22f757a36
--- /dev/null
+++ b/src/widgets/places/index.ts
@@ -0,0 +1 @@
+export { Places } from './ui/places';
diff --git a/src/app/components/places/places.test.tsx b/src/widgets/places/places.test.tsx
similarity index 95%
rename from src/app/components/places/places.test.tsx
rename to src/widgets/places/places.test.tsx
index febf42a2a..96fa9fb71 100644
--- a/src/app/components/places/places.test.tsx
+++ b/src/widgets/places/places.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
-import { Places } from './places';
+import { Places } from './ui/places';
describe('Places component', () => {
const places = [
diff --git a/src/app/components/places/places.scss b/src/widgets/places/ui/places.scss
similarity index 100%
rename from src/app/components/places/places.scss
rename to src/widgets/places/ui/places.scss
diff --git a/src/app/components/places/places.tsx b/src/widgets/places/ui/places.tsx
similarity index 100%
rename from src/app/components/places/places.tsx
rename to src/widgets/places/ui/places.tsx
diff --git a/src/features/principles/constants.tsx b/src/widgets/principles/constants.tsx
similarity index 88%
rename from src/features/principles/constants.tsx
rename to src/widgets/principles/constants.tsx
index a360170f0..0a0f9be1c 100644
--- a/src/features/principles/constants.tsx
+++ b/src/widgets/principles/constants.tsx
@@ -1,5 +1,5 @@
-import { PrincipleCardProps } from '@/app/components';
-import { OpenSourcePhilosophyIcon, OpenToEveryoneIcon, TeachItForwardIcon } from '@/icons';
+import { PrincipleCardProps } from './ui/principle-card/principle-card';
+import { OpenSourcePhilosophyIcon, OpenToEveryoneIcon, TeachItForwardIcon } from '@/shared/icons';
export const cards: PrincipleCardProps[] = [
{
diff --git a/src/widgets/principles/index.ts b/src/widgets/principles/index.ts
new file mode 100644
index 000000000..24b4a7c05
--- /dev/null
+++ b/src/widgets/principles/index.ts
@@ -0,0 +1 @@
+export { Principles } from './ui/principle-card/principles';
diff --git a/src/features/principles/principles.test.tsx b/src/widgets/principles/principles.test.tsx
similarity index 94%
rename from src/features/principles/principles.test.tsx
rename to src/widgets/principles/principles.test.tsx
index fbd339d82..3599d7274 100644
--- a/src/features/principles/principles.test.tsx
+++ b/src/widgets/principles/principles.test.tsx
@@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
import { cards } from './constants';
-import { Principles } from './principles';
+import { Principles } from './ui/principle-card/principles';
describe('Principles', () => {
beforeEach(() => {
diff --git a/src/app/components/principle-card/principle-card.scss b/src/widgets/principles/ui/principle-card/principle-card.scss
similarity index 100%
rename from src/app/components/principle-card/principle-card.scss
rename to src/widgets/principles/ui/principle-card/principle-card.scss
diff --git a/src/app/components/principle-card/principle-card.test.tsx b/src/widgets/principles/ui/principle-card/principle-card.test.tsx
similarity index 100%
rename from src/app/components/principle-card/principle-card.test.tsx
rename to src/widgets/principles/ui/principle-card/principle-card.test.tsx
diff --git a/src/app/components/principle-card/principle-card.tsx b/src/widgets/principles/ui/principle-card/principle-card.tsx
similarity index 100%
rename from src/app/components/principle-card/principle-card.tsx
rename to src/widgets/principles/ui/principle-card/principle-card.tsx
diff --git a/src/features/principles/principles.scss b/src/widgets/principles/ui/principle-card/principles.scss
similarity index 100%
rename from src/features/principles/principles.scss
rename to src/widgets/principles/ui/principle-card/principles.scss
diff --git a/src/features/principles/principles.tsx b/src/widgets/principles/ui/principle-card/principles.tsx
similarity index 79%
rename from src/features/principles/principles.tsx
rename to src/widgets/principles/ui/principle-card/principles.tsx
index 41138b6aa..4b6cc7cfb 100644
--- a/src/features/principles/principles.tsx
+++ b/src/widgets/principles/ui/principle-card/principles.tsx
@@ -1,5 +1,6 @@
-import { cards } from './constants';
-import { PrincipleCard, Title, TitleType } from '@/app/components';
+import { PrincipleCard } from './principle-card';
+import { cards } from '../../constants';
+import { Title, TitleType } from '@/shared/ui/title';
import './principles.scss';
diff --git a/src/widgets/required/index.ts b/src/widgets/required/index.ts
new file mode 100644
index 000000000..ea126bd05
--- /dev/null
+++ b/src/widgets/required/index.ts
@@ -0,0 +1 @@
+export { Required } from './ui/required';
diff --git a/src/features/required/required.data.ts b/src/widgets/required/required.data.ts
similarity index 100%
rename from src/features/required/required.data.ts
rename to src/widgets/required/required.data.ts
diff --git a/src/features/required/required.test.tsx b/src/widgets/required/required.test.tsx
similarity index 98%
rename from src/features/required/required.test.tsx
rename to src/widgets/required/required.test.tsx
index 7ed4efbcd..8924149b0 100644
--- a/src/features/required/required.test.tsx
+++ b/src/widgets/required/required.test.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
-import { Required } from './required';
+import { Required } from './ui/required';
describe('Required', () => {
it('renders the title and subtitle correctly', () => {
diff --git a/src/features/required/required.types.ts b/src/widgets/required/required.types.ts
similarity index 100%
rename from src/features/required/required.types.ts
rename to src/widgets/required/required.types.ts
diff --git a/src/features/required/required.scss b/src/widgets/required/ui/required.scss
similarity index 100%
rename from src/features/required/required.scss
rename to src/widgets/required/ui/required.scss
diff --git a/src/features/required/required.tsx b/src/widgets/required/ui/required.tsx
similarity index 85%
rename from src/features/required/required.tsx
rename to src/widgets/required/ui/required.tsx
index c4662bc2e..67751fccf 100644
--- a/src/features/required/required.tsx
+++ b/src/widgets/required/ui/required.tsx
@@ -1,6 +1,9 @@
-import { courseDataMap } from './required.data';
-import type { CourseName } from './required.types';
-import { Actions, Subtitle, Title } from '@/app/components';
+import { courseDataMap } from '../required.data';
+import type { CourseName } from '../required.types';
+
+import { Actions } from '@/shared/ui/actions/actions';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
import './required.scss';
diff --git a/src/widgets/requirements/index.ts b/src/widgets/requirements/index.ts
new file mode 100644
index 000000000..43293ba85
--- /dev/null
+++ b/src/widgets/requirements/index.ts
@@ -0,0 +1 @@
+export { Requirements } from './ui/requirements';
diff --git a/src/features/school/requirements/requirements.test.tsx b/src/widgets/requirements/requirements.test.tsx
similarity index 93%
rename from src/features/school/requirements/requirements.test.tsx
rename to src/widgets/requirements/requirements.test.tsx
index b44bc9dc2..6699c9fa5 100644
--- a/src/features/school/requirements/requirements.test.tsx
+++ b/src/widgets/requirements/requirements.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Requirements } from './requirements';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Requirements } from './ui/requirements';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Requirements', () => {
beforeEach(() => {
diff --git a/src/features/school/requirements/requirements.scss b/src/widgets/requirements/ui/requirements.scss
similarity index 100%
rename from src/features/school/requirements/requirements.scss
rename to src/widgets/requirements/ui/requirements.scss
diff --git a/src/features/school/requirements/requirements.tsx b/src/widgets/requirements/ui/requirements.tsx
similarity index 93%
rename from src/features/school/requirements/requirements.tsx
rename to src/widgets/requirements/ui/requirements.tsx
index f38c707f4..e8c4762fb 100644
--- a/src/features/school/requirements/requirements.tsx
+++ b/src/widgets/requirements/ui/requirements.tsx
@@ -1,6 +1,6 @@
-import { LinkCustom } from '@/app/components';
import { LINKS } from '@/app/const';
-import { ArrowIcon } from '@/icons';
+import { ArrowIcon } from '@/shared/icons';
+import { LinkCustom } from '@/shared/ui/link-custom';
import './requirements.scss';
diff --git a/src/widgets/school-menu/index.ts b/src/widgets/school-menu/index.ts
new file mode 100644
index 000000000..d88ff088d
--- /dev/null
+++ b/src/widgets/school-menu/index.ts
@@ -0,0 +1 @@
+export { SchoolMenu } from './ui/school-menu';
diff --git a/src/app/components/school-menu/school-menu.test.tsx b/src/widgets/school-menu/school-menu.test.tsx
similarity index 93%
rename from src/app/components/school-menu/school-menu.test.tsx
rename to src/widgets/school-menu/school-menu.test.tsx
index a06e1e874..83decddfd 100644
--- a/src/app/components/school-menu/school-menu.test.tsx
+++ b/src/widgets/school-menu/school-menu.test.tsx
@@ -1,8 +1,8 @@
import { screen } from '@testing-library/react';
import { vi } from 'vitest';
-import { SchoolMenu } from './school-menu';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
-import { renderWithRouter } from '@/__tests__/utils';
+import { SchoolMenu } from './ui/school-menu';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
+import { renderWithRouter } from '@/shared/__tests__/utils';
const testCourses = [
{
@@ -37,7 +37,7 @@ const testCourses = [
},
];
-vi.mock('@/app/hooks', () => {
+vi.mock('@/shared/hooks/use-data-by-name', () => {
return { useDataByName: vi.fn().mockImplementation(() => ({ data: testCourses })) };
});
diff --git a/src/app/components/school-menu/school-item.tsx b/src/widgets/school-menu/ui/school-item/school-item.tsx
similarity index 92%
rename from src/app/components/school-menu/school-item.tsx
rename to src/widgets/school-menu/ui/school-item/school-item.tsx
index 6bb1ae8cd..ee4da755c 100644
--- a/src/app/components/school-menu/school-item.tsx
+++ b/src/widgets/school-menu/ui/school-item/school-item.tsx
@@ -1,7 +1,7 @@
import { Link } from 'react-router-dom';
-import { type GenericItemProps } from './school-list';
+import { GenericItemProps } from '../school-list/school-list';
import { type Course } from '@/app/types';
-import Image from '@/features/image';
+import Image from '@/shared/ui/image';
interface SchoolItemProps {
item: Course | GenericItemProps;
diff --git a/src/app/components/school-menu/school-list.tsx b/src/widgets/school-menu/ui/school-list/school-list.tsx
similarity index 91%
rename from src/app/components/school-menu/school-list.tsx
rename to src/widgets/school-menu/ui/school-list/school-list.tsx
index f7de3a81d..8a5988d65 100644
--- a/src/app/components/school-menu/school-list.tsx
+++ b/src/widgets/school-menu/ui/school-list/school-list.tsx
@@ -1,4 +1,4 @@
-import { SchoolItem } from './school-item';
+import { SchoolItem } from '../school-item/school-item';
import { Course } from '@/app/types';
export interface GenericItemProps {
diff --git a/src/app/components/school-menu/school-menu.scss b/src/widgets/school-menu/ui/school-menu.scss
similarity index 100%
rename from src/app/components/school-menu/school-menu.scss
rename to src/widgets/school-menu/ui/school-menu.scss
diff --git a/src/app/components/school-menu/school-menu.tsx b/src/widgets/school-menu/ui/school-menu.tsx
similarity index 92%
rename from src/app/components/school-menu/school-menu.tsx
rename to src/widgets/school-menu/ui/school-menu.tsx
index 2d6cba09e..e546ed004 100644
--- a/src/app/components/school-menu/school-menu.tsx
+++ b/src/widgets/school-menu/ui/school-menu.tsx
@@ -1,6 +1,7 @@
-import { GenericItemProps, SchoolList } from './school-list';
-import { useDataByName } from '@/app/hooks';
+import { GenericItemProps, SchoolList } from './school-list/school-list';
+
import { type Course } from '@/app/types';
+import { useDataByName } from '@/shared/hooks/use-data-by-name';
import './school-menu.scss';
diff --git a/src/widgets/speakers/index.ts b/src/widgets/speakers/index.ts
new file mode 100644
index 000000000..60b979e53
--- /dev/null
+++ b/src/widgets/speakers/index.ts
@@ -0,0 +1 @@
+export { Speakers } from './ui/speakers';
diff --git a/src/features/home/speakers/speakers.test.tsx b/src/widgets/speakers/speakers.test.tsx
similarity index 96%
rename from src/features/home/speakers/speakers.test.tsx
rename to src/widgets/speakers/speakers.test.tsx
index bd3423ca2..fbb9652e3 100644
--- a/src/features/home/speakers/speakers.test.tsx
+++ b/src/widgets/speakers/speakers.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Speakers } from './speakers';
+import { Speakers } from './ui/speakers';
describe('Speakers', () => {
beforeEach(() => {
diff --git a/src/features/home/speakers/speakers.scss b/src/widgets/speakers/ui/speakers.scss
similarity index 100%
rename from src/features/home/speakers/speakers.scss
rename to src/widgets/speakers/ui/speakers.scss
diff --git a/src/features/home/speakers/speakers.tsx b/src/widgets/speakers/ui/speakers.tsx
similarity index 78%
rename from src/features/home/speakers/speakers.tsx
rename to src/widgets/speakers/ui/speakers.tsx
index d4aaea7f4..4392a976b 100644
--- a/src/features/home/speakers/speakers.tsx
+++ b/src/widgets/speakers/ui/speakers.tsx
@@ -1,8 +1,8 @@
-import { Subtitle, Title, TitleType } from '@/app/components';
-
-import image from '@/assets/speakers-wanted.webp';
-import Image from '@/features/image';
-import { EmailIcon } from '@/icons';
+import image from '@/shared/assets/speakers-wanted.webp';
+import { EmailIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title, TitleType } from '@/shared/ui/title';
import './speakers.scss';
diff --git a/src/widgets/study-path/index.ts b/src/widgets/study-path/index.ts
new file mode 100644
index 000000000..b9ed683ac
--- /dev/null
+++ b/src/widgets/study-path/index.ts
@@ -0,0 +1 @@
+export { StudyPath } from './ui/study-path';
diff --git a/src/features/study-path/study-path.test.tsx b/src/widgets/study-path/study-path.test.tsx
similarity index 89%
rename from src/features/study-path/study-path.test.tsx
rename to src/widgets/study-path/study-path.test.tsx
index 14b1d5aef..828962e49 100644
--- a/src/features/study-path/study-path.test.tsx
+++ b/src/widgets/study-path/study-path.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
-import { StudyPath } from './study-path';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { StudyPath } from './ui/study-path';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
const testStages = [
{
@@ -19,7 +19,7 @@ const testStages = [
},
];
-vi.mock('@/app/hooks', () => ({ useDataByName: vi.fn().mockImplementation(() => ({ data: testStages })) }));
+vi.mock('@/shared/hooks/use-data-by-name', () => ({ useDataByName: vi.fn().mockImplementation(() => ({ data: testStages })) }));
describe('StudyPath Component', () => {
it('renders the title and paragraph text correctly for angularPath', () => {
diff --git a/src/features/study-path/components/stage-card/actions/actions.scss b/src/widgets/study-path/ui/stage-card/actions/actions.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/actions/actions.scss
rename to src/widgets/study-path/ui/stage-card/actions/actions.scss
diff --git a/src/features/study-path/components/stage-card/actions/actions.test.tsx b/src/widgets/study-path/ui/stage-card/actions/actions.test.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/actions/actions.test.tsx
rename to src/widgets/study-path/ui/stage-card/actions/actions.test.tsx
diff --git a/src/features/study-path/components/stage-card/actions/actions.tsx b/src/widgets/study-path/ui/stage-card/actions/actions.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/actions/actions.tsx
rename to src/widgets/study-path/ui/stage-card/actions/actions.tsx
diff --git a/src/app/components/actions/index.ts b/src/widgets/study-path/ui/stage-card/actions/index.ts
similarity index 100%
rename from src/app/components/actions/index.ts
rename to src/widgets/study-path/ui/stage-card/actions/index.ts
diff --git a/src/features/study-path/components/stage-card/image/image.scss b/src/widgets/study-path/ui/stage-card/image/image.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/image/image.scss
rename to src/widgets/study-path/ui/stage-card/image/image.scss
diff --git a/src/features/study-path/components/stage-card/image/image.test.tsx b/src/widgets/study-path/ui/stage-card/image/image.test.tsx
similarity index 91%
rename from src/features/study-path/components/stage-card/image/image.test.tsx
rename to src/widgets/study-path/ui/stage-card/image/image.test.tsx
index 3fc861e8e..5f07575da 100644
--- a/src/features/study-path/components/stage-card/image/image.test.tsx
+++ b/src/widgets/study-path/ui/stage-card/image/image.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { Image } from './image';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('Actions Component', () => {
it('renders image correctly', () => {
diff --git a/src/features/study-path/components/stage-card/image/image.tsx b/src/widgets/study-path/ui/stage-card/image/image.tsx
similarity index 86%
rename from src/features/study-path/components/stage-card/image/image.tsx
rename to src/widgets/study-path/ui/stage-card/image/image.tsx
index ff0297209..429507563 100644
--- a/src/features/study-path/components/stage-card/image/image.tsx
+++ b/src/widgets/study-path/ui/stage-card/image/image.tsx
@@ -1,4 +1,4 @@
-import LazyImage from '@/features/image';
+import LazyImage from '@/shared/ui/image';
import './image.scss';
diff --git a/src/features/study-path/components/stage-card/image/index.ts b/src/widgets/study-path/ui/stage-card/image/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/image/index.ts
rename to src/widgets/study-path/ui/stage-card/image/index.ts
diff --git a/src/features/study-path/components/stage-card/index.ts b/src/widgets/study-path/ui/stage-card/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/index.ts
rename to src/widgets/study-path/ui/stage-card/index.ts
diff --git a/src/features/study-path/components/stage-card/links/index.ts b/src/widgets/study-path/ui/stage-card/links/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/links/index.ts
rename to src/widgets/study-path/ui/stage-card/links/index.ts
diff --git a/src/features/study-path/components/stage-card/links/links.scss b/src/widgets/study-path/ui/stage-card/links/links.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/links/links.scss
rename to src/widgets/study-path/ui/stage-card/links/links.scss
diff --git a/src/features/study-path/components/stage-card/links/links.test.tsx b/src/widgets/study-path/ui/stage-card/links/links.test.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/links/links.test.tsx
rename to src/widgets/study-path/ui/stage-card/links/links.test.tsx
diff --git a/src/features/study-path/components/stage-card/links/links.tsx b/src/widgets/study-path/ui/stage-card/links/links.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/links/links.tsx
rename to src/widgets/study-path/ui/stage-card/links/links.tsx
diff --git a/src/features/study-path/components/stage-card/logo-icon/index.ts b/src/widgets/study-path/ui/stage-card/logo-icon/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/logo-icon/index.ts
rename to src/widgets/study-path/ui/stage-card/logo-icon/index.ts
diff --git a/src/features/study-path/components/stage-card/logo-icon/logo-icon.scss b/src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/logo-icon/logo-icon.scss
rename to src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.scss
diff --git a/src/features/study-path/components/stage-card/logo-icon/logo-icon.test.tsx b/src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.test.tsx
similarity index 88%
rename from src/features/study-path/components/stage-card/logo-icon/logo-icon.test.tsx
rename to src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.test.tsx
index 6d3348739..fc3a40ca2 100644
--- a/src/features/study-path/components/stage-card/logo-icon/logo-icon.test.tsx
+++ b/src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { LogoIcon } from './logo-icon';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('LogoIcon Component', () => {
it('renders logo image with correct src and alt text', () => {
diff --git a/src/features/study-path/components/stage-card/logo-icon/logo-icon.tsx b/src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.tsx
similarity index 86%
rename from src/features/study-path/components/stage-card/logo-icon/logo-icon.tsx
rename to src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.tsx
index 60bd382dd..d3ce7ce43 100644
--- a/src/features/study-path/components/stage-card/logo-icon/logo-icon.tsx
+++ b/src/widgets/study-path/ui/stage-card/logo-icon/logo-icon.tsx
@@ -1,4 +1,4 @@
-import Image from '@/features/image';
+import Image from '@/shared/ui/image';
import './logo-icon.scss';
diff --git a/src/features/study-path/components/stage-card/stage-card.scss b/src/widgets/study-path/ui/stage-card/stage-card.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/stage-card.scss
rename to src/widgets/study-path/ui/stage-card/stage-card.scss
diff --git a/src/features/study-path/components/stage-card/stage-card.test.tsx b/src/widgets/study-path/ui/stage-card/stage-card.test.tsx
similarity index 97%
rename from src/features/study-path/components/stage-card/stage-card.test.tsx
rename to src/widgets/study-path/ui/stage-card/stage-card.test.tsx
index 0b5569f0d..f051437d1 100644
--- a/src/features/study-path/components/stage-card/stage-card.test.tsx
+++ b/src/widgets/study-path/ui/stage-card/stage-card.test.tsx
@@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { StageCard } from './stage-card';
import { type StageCardProps } from './stage-card.types';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('StageCard component', () => {
const props: StageCardProps = {
diff --git a/src/features/study-path/components/stage-card/stage-card.tsx b/src/widgets/study-path/ui/stage-card/stage-card.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/stage-card.tsx
rename to src/widgets/study-path/ui/stage-card/stage-card.tsx
diff --git a/src/features/study-path/components/stage-card/stage-card.types.ts b/src/widgets/study-path/ui/stage-card/stage-card.types.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/stage-card.types.ts
rename to src/widgets/study-path/ui/stage-card/stage-card.types.ts
diff --git a/src/features/study-path/components/stage-card/step/index.ts b/src/widgets/study-path/ui/stage-card/step/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/step/index.ts
rename to src/widgets/study-path/ui/stage-card/step/index.ts
diff --git a/src/features/study-path/components/stage-card/step/step.scss b/src/widgets/study-path/ui/stage-card/step/step.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/step/step.scss
rename to src/widgets/study-path/ui/stage-card/step/step.scss
diff --git a/src/features/study-path/components/stage-card/step/step.test.tsx b/src/widgets/study-path/ui/stage-card/step/step.test.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/step/step.test.tsx
rename to src/widgets/study-path/ui/stage-card/step/step.test.tsx
diff --git a/src/features/study-path/components/stage-card/step/step.tsx b/src/widgets/study-path/ui/stage-card/step/step.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/step/step.tsx
rename to src/widgets/study-path/ui/stage-card/step/step.tsx
diff --git a/src/features/study-path/components/stage-card/topics/index.ts b/src/widgets/study-path/ui/stage-card/topics/index.ts
similarity index 100%
rename from src/features/study-path/components/stage-card/topics/index.ts
rename to src/widgets/study-path/ui/stage-card/topics/index.ts
diff --git a/src/features/study-path/components/stage-card/topics/topics.scss b/src/widgets/study-path/ui/stage-card/topics/topics.scss
similarity index 100%
rename from src/features/study-path/components/stage-card/topics/topics.scss
rename to src/widgets/study-path/ui/stage-card/topics/topics.scss
diff --git a/src/features/study-path/components/stage-card/topics/topics.test.tsx b/src/widgets/study-path/ui/stage-card/topics/topics.test.tsx
similarity index 100%
rename from src/features/study-path/components/stage-card/topics/topics.test.tsx
rename to src/widgets/study-path/ui/stage-card/topics/topics.test.tsx
diff --git a/src/features/study-path/components/stage-card/topics/topics.tsx b/src/widgets/study-path/ui/stage-card/topics/topics.tsx
similarity index 89%
rename from src/features/study-path/components/stage-card/topics/topics.tsx
rename to src/widgets/study-path/ui/stage-card/topics/topics.tsx
index baab963ef..387cf3d9b 100644
--- a/src/features/study-path/components/stage-card/topics/topics.tsx
+++ b/src/widgets/study-path/ui/stage-card/topics/topics.tsx
@@ -1,5 +1,5 @@
import { useContext } from 'react';
-import { LangContext } from '@/features/study-path/study-path';
+import { LangContext } from '../../study-path';
import './topics.scss';
diff --git a/src/features/study-path/components/index.ts b/src/widgets/study-path/ui/stages/index.ts
similarity index 100%
rename from src/features/study-path/components/index.ts
rename to src/widgets/study-path/ui/stages/index.ts
diff --git a/src/features/study-path/components/stages/stages.scss b/src/widgets/study-path/ui/stages/stages.scss
similarity index 100%
rename from src/features/study-path/components/stages/stages.scss
rename to src/widgets/study-path/ui/stages/stages.scss
diff --git a/src/features/study-path/components/stages/stages.test.tsx b/src/widgets/study-path/ui/stages/stages.test.tsx
similarity index 95%
rename from src/features/study-path/components/stages/stages.test.tsx
rename to src/widgets/study-path/ui/stages/stages.test.tsx
index 554c78519..deadad743 100644
--- a/src/features/study-path/components/stages/stages.test.tsx
+++ b/src/widgets/study-path/ui/stages/stages.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
import { Stages, StagesProps } from './stages';
-import { MOCKED_IMAGE_PATH } from '@/__tests__/constants';
+import { MOCKED_IMAGE_PATH } from '@/shared/__tests__/constants';
describe('Stages Component', () => {
const testStages: StagesProps['stages'] = [
diff --git a/src/features/study-path/components/stages/stages.tsx b/src/widgets/study-path/ui/stages/stages.tsx
similarity index 100%
rename from src/features/study-path/components/stages/stages.tsx
rename to src/widgets/study-path/ui/stages/stages.tsx
diff --git a/src/features/study-path/study-path.scss b/src/widgets/study-path/ui/study-path.scss
similarity index 100%
rename from src/features/study-path/study-path.scss
rename to src/widgets/study-path/ui/study-path.scss
diff --git a/src/features/study-path/study-path.tsx b/src/widgets/study-path/ui/study-path.tsx
similarity index 93%
rename from src/features/study-path/study-path.tsx
rename to src/widgets/study-path/ui/study-path.tsx
index 44c7ab690..0673e39cc 100644
--- a/src/features/study-path/study-path.tsx
+++ b/src/widgets/study-path/ui/study-path.tsx
@@ -1,8 +1,9 @@
import { createContext } from 'react';
-import { Stages } from './components';
-import { Paragraph, Title } from '@/app/components';
-import { useDataByName } from '@/app/hooks';
+import { Stages } from './stages';
import { type DataMap } from '@/app/services/data/courses-data.types';
+import { useDataByName } from '@/shared/hooks/use-data-by-name';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Title } from '@/shared/ui/title';
import './study-path.scss';
diff --git a/src/features/school/study-with-us/constants.ts b/src/widgets/study-with-us/constants.ts
similarity index 87%
rename from src/features/school/study-with-us/constants.ts
rename to src/widgets/study-with-us/constants.ts
index e9c632dc2..3f4faab95 100644
--- a/src/features/school/study-with-us/constants.ts
+++ b/src/widgets/study-with-us/constants.ts
@@ -1,4 +1,4 @@
-import { OptionItemProps } from '@/app/components/option-item/option-item';
+import { OptionItemProps } from '@/widgets/option-item/ui/option-item';
export const studyOptions: OptionItemProps[] = [
{
diff --git a/src/widgets/study-with-us/index.ts b/src/widgets/study-with-us/index.ts
new file mode 100644
index 000000000..cad7f20c8
--- /dev/null
+++ b/src/widgets/study-with-us/index.ts
@@ -0,0 +1 @@
+export { StudyWithUs } from './ui/study-with-us';
diff --git a/src/features/school/study-with-us/study-with-us.test.tsx b/src/widgets/study-with-us/study-with-us.test.tsx
similarity index 95%
rename from src/features/school/study-with-us/study-with-us.test.tsx
rename to src/widgets/study-with-us/study-with-us.test.tsx
index 0a62af0b4..ec4b91a5c 100644
--- a/src/features/school/study-with-us/study-with-us.test.tsx
+++ b/src/widgets/study-with-us/study-with-us.test.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
import { studyOptions } from './constants';
-import { StudyWithUs } from './study-with-us';
+import { StudyWithUs } from './ui/study-with-us';
describe('School Component', () => {
beforeEach(() => {
diff --git a/src/features/school/study-with-us/study-with-us.scss b/src/widgets/study-with-us/ui/study-with-us.scss
similarity index 100%
rename from src/features/school/study-with-us/study-with-us.scss
rename to src/widgets/study-with-us/ui/study-with-us.scss
diff --git a/src/features/school/study-with-us/study-with-us.tsx b/src/widgets/study-with-us/ui/study-with-us.tsx
similarity index 70%
rename from src/features/school/study-with-us/study-with-us.tsx
rename to src/widgets/study-with-us/ui/study-with-us.tsx
index b6516c60f..40ae661cf 100644
--- a/src/features/school/study-with-us/study-with-us.tsx
+++ b/src/widgets/study-with-us/ui/study-with-us.tsx
@@ -1,8 +1,11 @@
-import { studyOptions } from './constants';
-import { OptionItem, Paragraph, SectionLabel, Subtitle, Title } from '@/app/components';
-
-import image from '@/assets/rs-school.webp';
-import Image from '@/features/image';
+import { studyOptions } from '../constants';
+import image from '@/shared/assets/rs-school.webp';
+import Image from '@/shared/ui/image';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { SectionLabel } from '@/shared/ui/section-label';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title } from '@/shared/ui/title';
+import { OptionItem } from '@/widgets/option-item';
import './study-with-us.scss';
diff --git a/src/widgets/support/index.ts b/src/widgets/support/index.ts
new file mode 100644
index 000000000..b4b0d3e19
--- /dev/null
+++ b/src/widgets/support/index.ts
@@ -0,0 +1 @@
+export { Support } from './ui/support';
diff --git a/src/features/home/support/support.test.tsx b/src/widgets/support/support.test.tsx
similarity index 92%
rename from src/features/home/support/support.test.tsx
rename to src/widgets/support/support.test.tsx
index 030de2f2e..f5774d37d 100644
--- a/src/features/home/support/support.test.tsx
+++ b/src/widgets/support/support.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import { beforeEach, describe, expect, it } from 'vitest';
-import { Support } from './support';
-import { renderWithRouter } from '@/__tests__/utils';
+import { Support } from './ui/support';
+import { renderWithRouter } from '@/shared/__tests__/utils';
describe('Support', () => {
beforeEach(() => {
diff --git a/src/features/home/support/support.scss b/src/widgets/support/ui/support.scss
similarity index 100%
rename from src/features/home/support/support.scss
rename to src/widgets/support/ui/support.scss
diff --git a/src/features/home/support/support.tsx b/src/widgets/support/ui/support.tsx
similarity index 73%
rename from src/features/home/support/support.tsx
rename to src/widgets/support/ui/support.tsx
index bb7e8800a..d2f55b3ab 100644
--- a/src/features/home/support/support.tsx
+++ b/src/widgets/support/ui/support.tsx
@@ -1,9 +1,10 @@
-import { LinkCustom, Subtitle, Title, TitleType } from '@/app/components';
-
import { LINKS } from '@/app/const';
-import image from '@/assets/support.webp';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import image from '@/shared/assets/support.webp';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Subtitle } from '@/shared/ui/subtitle';
+import { Title, TitleType } from '@/shared/ui/title';
import './support.scss';
diff --git a/src/features/trainers/angular.data.ts b/src/widgets/trainers/angular.data.ts
similarity index 90%
rename from src/features/trainers/angular.data.ts
rename to src/widgets/trainers/angular.data.ts
index 63f46f2ac..bd4836255 100644
--- a/src/features/trainers/angular.data.ts
+++ b/src/widgets/trainers/angular.data.ts
@@ -1,11 +1,11 @@
import type { Trainer } from './trainers.types';
-import aSacca from '@/assets/mentors/a-sacca.webp';
-import aSerhiyenia from '@/assets/mentors/a-serhiyenia.webp';
-import dKohut from '@/assets/mentors/d-kohut.webp';
-import kBritsyn from '@/assets/mentors/k-britsyn.webp';
-import nLoginova from '@/assets/mentors/n-loginova.webp';
-import oDuleba from '@/assets/mentors/o-duleba.webp';
-import rSaltykov from '@/assets/mentors/r-saltykov.webp';
+import aSacca from '@/shared/assets/mentors/a-sacca.webp';
+import aSerhiyenia from '@/shared/assets/mentors/a-serhiyenia.webp';
+import dKohut from '@/shared/assets/mentors/d-kohut.webp';
+import kBritsyn from '@/shared/assets/mentors/k-britsyn.webp';
+import nLoginova from '@/shared/assets/mentors/n-loginova.webp';
+import oDuleba from '@/shared/assets/mentors/o-duleba.webp';
+import rSaltykov from '@/shared/assets/mentors/r-saltykov.webp';
export const angular: Trainer[] = [
{
diff --git a/src/features/trainers/awsDev.data.ts b/src/widgets/trainers/awsDev.data.ts
similarity index 89%
rename from src/features/trainers/awsDev.data.ts
rename to src/widgets/trainers/awsDev.data.ts
index 6c9a58511..f39b833be 100644
--- a/src/features/trainers/awsDev.data.ts
+++ b/src/widgets/trainers/awsDev.data.ts
@@ -1,10 +1,10 @@
import type { Trainer } from './trainers.types';
-import awsImg3 from '@/assets/mentors/ac-akbarov.webp';
-import awsImg6 from '@/assets/mentors/ac-danilov.webp';
-import awsImg4 from '@/assets/mentors/ac-konyakhin.webp';
-import awsImg5 from '@/assets/mentors/ac-kustikov.webp';
-import awsImg2 from '@/assets/mentors/v-antonau.webp';
-import awsImg1 from '@/assets/mentors/v-kavaliou.webp';
+import awsImg3 from '@/shared/assets/mentors/ac-akbarov.webp';
+import awsImg6 from '@/shared/assets/mentors/ac-danilov.webp';
+import awsImg4 from '@/shared/assets/mentors/ac-konyakhin.webp';
+import awsImg5 from '@/shared/assets/mentors/ac-kustikov.webp';
+import awsImg2 from '@/shared/assets/mentors/v-antonau.webp';
+import awsImg1 from '@/shared/assets/mentors/v-kavaliou.webp';
export const awsDev: Trainer[] = [
{
diff --git a/src/features/trainers/awsFundamentals.data.ts b/src/widgets/trainers/awsFundamentals.data.ts
similarity index 90%
rename from src/features/trainers/awsFundamentals.data.ts
rename to src/widgets/trainers/awsFundamentals.data.ts
index 48149907a..85e248763 100644
--- a/src/features/trainers/awsFundamentals.data.ts
+++ b/src/widgets/trainers/awsFundamentals.data.ts
@@ -1,6 +1,6 @@
import type { Trainer } from './trainers.types';
-import awsImg2 from '@/assets/mentors/v-antonau.webp';
-import awsImg1 from '@/assets/mentors/v-kavaliou.webp';
+import awsImg2 from '@/shared/assets/mentors/v-antonau.webp';
+import awsImg1 from '@/shared/assets/mentors/v-kavaliou.webp';
export const awsFundamentals: Trainer[] = [
{
diff --git a/src/widgets/trainers/index.ts b/src/widgets/trainers/index.ts
new file mode 100644
index 000000000..839e1950e
--- /dev/null
+++ b/src/widgets/trainers/index.ts
@@ -0,0 +1 @@
+export { Trainers } from './ui/trainers';
diff --git a/src/features/trainers/nodejs.data.ts b/src/widgets/trainers/nodejs.data.ts
similarity index 90%
rename from src/features/trainers/nodejs.data.ts
rename to src/widgets/trainers/nodejs.data.ts
index bd3f28869..7dca633e1 100644
--- a/src/features/trainers/nodejs.data.ts
+++ b/src/widgets/trainers/nodejs.data.ts
@@ -1,7 +1,7 @@
import type { Trainer } from './trainers.types';
-import nodejsImg2 from '@/assets/mentors/a-auchynikau.webp';
-import nodejsImg1 from '@/assets/mentors/m-shylau.webp';
-import nodejsImg3 from '@/assets/mentors/v-antonau.webp';
+import nodejsImg2 from '@/shared/assets/mentors/a-auchynikau.webp';
+import nodejsImg1 from '@/shared/assets/mentors/m-shylau.webp';
+import nodejsImg3 from '@/shared/assets/mentors/v-antonau.webp';
export const nodejs: Trainer[] = [
{
diff --git a/src/features/trainers/preSchool.data.ts b/src/widgets/trainers/preSchool.data.ts
similarity index 95%
rename from src/features/trainers/preSchool.data.ts
rename to src/widgets/trainers/preSchool.data.ts
index 50294091e..8b22b3299 100644
--- a/src/features/trainers/preSchool.data.ts
+++ b/src/widgets/trainers/preSchool.data.ts
@@ -1,6 +1,6 @@
import type { Trainer } from './trainers.types';
-import preSchoolImg2 from '@/assets/mentors/a-musikhina.webp';
-import preSchoolImg1 from '@/assets/mentors/v-kavaliou.webp';
+import preSchoolImg2 from '@/shared/assets/mentors/a-musikhina.webp';
+import preSchoolImg1 from '@/shared/assets/mentors/v-kavaliou.webp';
export const preSchoolRu: Trainer[] = [
{
diff --git a/src/features/trainers/react-en.data.ts b/src/widgets/trainers/react-en.data.ts
similarity index 86%
rename from src/features/trainers/react-en.data.ts
rename to src/widgets/trainers/react-en.data.ts
index eb0c5540f..b5222c9d7 100644
--- a/src/features/trainers/react-en.data.ts
+++ b/src/widgets/trainers/react-en.data.ts
@@ -1,10 +1,10 @@
import type { Trainer } from './trainers.types';
-import artsiomParfianenkau from '@/assets/mentors/a-parfianenkau.webp';
-import andrejPodlubnyj from '@/assets/mentors/a-podlubnyj.webp';
-import dzmitryYarmoshkin from '@/assets/mentors/d-yarmoshkin.png';
-import iharKrasiuk from '@/assets/mentors/i-krasiuk.webp';
-import marharytaMalets from '@/assets/mentors/m-malets.webp';
-import valeryDluski from '@/assets/mentors/v-dluski.webp';
+import artsiomParfianenkau from '@/shared/assets/mentors/a-parfianenkau.webp';
+import andrejPodlubnyj from '@/shared/assets/mentors/a-podlubnyj.webp';
+import dzmitryYarmoshkin from '@/shared/assets/mentors/d-yarmoshkin.png';
+import iharKrasiuk from '@/shared/assets/mentors/i-krasiuk.webp';
+import marharytaMalets from '@/shared/assets/mentors/m-malets.webp';
+import valeryDluski from '@/shared/assets/mentors/v-dluski.webp';
export const reactEn: Trainer[] = [
{
diff --git a/src/features/trainers/react-ru.data.ts b/src/widgets/trainers/react-ru.data.ts
similarity index 90%
rename from src/features/trainers/react-ru.data.ts
rename to src/widgets/trainers/react-ru.data.ts
index 0ee64a8c9..07057cdeb 100644
--- a/src/features/trainers/react-ru.data.ts
+++ b/src/widgets/trainers/react-ru.data.ts
@@ -1,8 +1,8 @@
import type { Trainer } from './trainers.types';
-import reactRuImg3 from '@/assets/mentors/d-cebruk.webp';
-import reactRuImg2 from '@/assets/mentors/p-razuvalov.webp';
-import reactRuImg4 from '@/assets/mentors/s-shalyapin.webp';
-import reactRuImg1 from '@/assets/mentors/v-kovalev.webp';
+import reactRuImg3 from '@/shared/assets/mentors/d-cebruk.webp';
+import reactRuImg2 from '@/shared/assets/mentors/p-razuvalov.webp';
+import reactRuImg4 from '@/shared/assets/mentors/s-shalyapin.webp';
+import reactRuImg1 from '@/shared/assets/mentors/v-kovalev.webp';
export const reactRu: Trainer[] = [
{
diff --git a/src/features/trainers/trainers.test.tsx b/src/widgets/trainers/trainers.test.tsx
similarity index 96%
rename from src/features/trainers/trainers.test.tsx
rename to src/widgets/trainers/trainers.test.tsx
index 539a5f488..f87c40777 100644
--- a/src/features/trainers/trainers.test.tsx
+++ b/src/widgets/trainers/trainers.test.tsx
@@ -1,10 +1,11 @@
import { render, screen } from '@testing-library/react';
-import { Trainers } from './trainers';
+
+import { Trainers } from './ui/trainers';
import {
MOCKED_MULTIPLE_TRAINERS,
MOCKED_ONE_TRAINER,
MOCKED_SEVERAL_TRAINERS,
-} from '@/__tests__/constants.ts';
+} from '@/shared/__tests__/constants';
describe('Trainer', () => {
it('renders the title correctly when 1 trainer', () => {
diff --git a/src/features/trainers/trainers.types.ts b/src/widgets/trainers/trainers.types.ts
similarity index 100%
rename from src/features/trainers/trainers.types.ts
rename to src/widgets/trainers/trainers.types.ts
diff --git a/src/features/trainers/trainer-card.tsx b/src/widgets/trainers/ui/trainers-card/trainer-card.tsx
similarity index 76%
rename from src/features/trainers/trainer-card.tsx
rename to src/widgets/trainers/ui/trainers-card/trainer-card.tsx
index 2e2550470..218365dda 100644
--- a/src/features/trainers/trainer-card.tsx
+++ b/src/widgets/trainers/ui/trainers-card/trainer-card.tsx
@@ -1,7 +1,7 @@
-import type { Trainer } from './trainers.types';
-import Image from '@/features/image';
+import { Trainer } from '../../trainers.types';
+import Image from '@/shared/ui/image';
-interface TrainerProps extends Trainer {}
+interface TrainerProps extends Trainer { }
export const TrainerCard = ({ name, bio, role, photo }: TrainerProps) => {
return (
diff --git a/src/features/trainers/trainers.scss b/src/widgets/trainers/ui/trainers.scss
similarity index 100%
rename from src/features/trainers/trainers.scss
rename to src/widgets/trainers/ui/trainers.scss
diff --git a/src/features/trainers/trainers.tsx b/src/widgets/trainers/ui/trainers.tsx
similarity index 87%
rename from src/features/trainers/trainers.tsx
rename to src/widgets/trainers/ui/trainers.tsx
index 829663e09..8d2eba5dc 100644
--- a/src/features/trainers/trainers.tsx
+++ b/src/widgets/trainers/ui/trainers.tsx
@@ -1,6 +1,6 @@
-import { TrainerCard } from './trainer-card';
-import { Title } from '@/app/components';
-import { Trainer } from '@/features/trainers/trainers.types.ts';
+import { TrainerCard } from './trainers-card/trainer-card';
+import { Title } from '@/shared/ui/title';
+import { Trainer } from '@/widgets/trainers/trainers.types';
import './trainers.scss';
diff --git a/src/widgets/training-program/index.ts b/src/widgets/training-program/index.ts
new file mode 100644
index 000000000..f9d69819b
--- /dev/null
+++ b/src/widgets/training-program/index.ts
@@ -0,0 +1 @@
+export { TrainingProgram } from './ui/training-program';
diff --git a/src/features/training-program/training-program.data.tsx b/src/widgets/training-program/training-program.data.tsx
similarity index 94%
rename from src/features/training-program/training-program.data.tsx
rename to src/widgets/training-program/training-program.data.tsx
index 14f3abe6d..067b14f26 100644
--- a/src/features/training-program/training-program.data.tsx
+++ b/src/widgets/training-program/training-program.data.tsx
@@ -1,14 +1,16 @@
import { Link } from 'react-router-dom';
-import { Actions, Paragraph, Subtitle } from '@/app/components';
-import awsPractitionerBadge from '@/assets/aws-cloud-pract-badge.webp';
-import angularImg from '@/assets/rs-slope-angular.webp';
-import awsDevImg from '@/assets/rs-slope-aws-dev.webp';
-import awsFundamentalsImg from '@/assets/rs-slope-aws-fundamentals.webp';
-import jsImg from '@/assets/rs-slope-js.webp';
-import nodejsImg from '@/assets/rs-slope-nodejs.webp';
-import reactEnImg from '@/assets/rs-slope-react-en.webp';
-import reactRuImg from '@/assets/rs-slope-react-ru.webp';
+import awsPractitionerBadge from '@/shared/assets/aws-cloud-pract-badge.webp';
+import angularImg from '@/shared/assets/rs-slope-angular.webp';
+import awsDevImg from '@/shared/assets/rs-slope-aws-dev.webp';
+import awsFundamentalsImg from '@/shared/assets/rs-slope-aws-fundamentals.webp';
+import jsImg from '@/shared/assets/rs-slope-js.webp';
+import nodejsImg from '@/shared/assets/rs-slope-nodejs.webp';
+import reactEnImg from '@/shared/assets/rs-slope-react-en.webp';
+import reactRuImg from '@/shared/assets/rs-slope-react-ru.webp';
+import { Actions } from '@/shared/ui/actions/actions';
+import { Paragraph } from '@/shared/ui/paragraph';
+import { Subtitle } from '@/shared/ui/subtitle';
export type CourseNames =
| 'aws cloud dev'
diff --git a/src/features/training-program/training-program.test.tsx b/src/widgets/training-program/training-program.test.tsx
similarity index 93%
rename from src/features/training-program/training-program.test.tsx
rename to src/widgets/training-program/training-program.test.tsx
index a7aeda38f..2e35643c9 100644
--- a/src/features/training-program/training-program.test.tsx
+++ b/src/widgets/training-program/training-program.test.tsx
@@ -1,11 +1,11 @@
import { screen } from '@testing-library/react';
import { type Mock, beforeEach, vi } from 'vitest';
-import { TrainingProgram } from './training-program';
-import { renderWithRouter } from '@/__tests__/utils';
+import { TrainingProgram } from './ui/training-program';
import { ROUTES } from '@/app/const';
-import { useCourseByTitle } from '@/app/hooks';
+import { renderWithRouter } from '@/shared/__tests__/utils';
+import { useCourseByTitle } from '@/shared/hooks/use-course-by-title';
-vi.mock('@/app/hooks');
+vi.mock('@/shared/hooks/use-course-by-title');
describe('TrainingProgram', () => {
describe('with "angular" props', () => {
diff --git a/src/features/training-program/training-program.scss b/src/widgets/training-program/ui/training-program.scss
similarity index 100%
rename from src/features/training-program/training-program.scss
rename to src/widgets/training-program/ui/training-program.scss
diff --git a/src/features/training-program/training-program.tsx b/src/widgets/training-program/ui/training-program.tsx
similarity index 82%
rename from src/features/training-program/training-program.tsx
rename to src/widgets/training-program/ui/training-program.tsx
index 7f57c3eba..1b3cc7056 100644
--- a/src/features/training-program/training-program.tsx
+++ b/src/widgets/training-program/ui/training-program.tsx
@@ -1,10 +1,12 @@
import { cloneElement } from 'react';
-import { type CourseNames, contentMap } from './training-program.data';
-import { LinkCustom, Title } from '@/app/components';
-import { useCourseByTitle } from '@/app/hooks';
+import { type CourseNames, contentMap } from '../training-program.data';
+
import type { Course } from '@/app/types';
-import Image from '@/features/image';
-import { ArrowIcon } from '@/icons';
+import { useCourseByTitle } from '@/shared/hooks/use-course-by-title';
+import { ArrowIcon } from '@/shared/icons';
+import Image from '@/shared/ui/image';
+import { LinkCustom } from '@/shared/ui/link-custom';
+import { Title } from '@/shared/ui/title';
import './training-program.scss';
diff --git a/tsconfig.json b/tsconfig.json
index a220688e9..9da589def 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,10 +2,13 @@
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "lib": [
+ "ES2020",
+ "DOM",
+ "DOM.Iterable"
+ ],
"module": "ESNext",
"skipLibCheck": true,
-
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
@@ -13,27 +16,38 @@
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
-
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
- "types": ["node", "@testing-library/jest-dom", "vitest/globals"],
+ "types": [
+ "node",
+ "@testing-library/jest-dom",
+ "vitest/globals"
+ ],
"baseUrl": "./src",
"paths": {
- "@/*": ["*"]
+ "@/*": [
+ "*"
+ ]
}
},
"include": [
"src",
"src/**/*.ts",
"src/**/*.tsx",
- "src/__tests__/setup-tests.ts",
- "src/__tests__/visualTesting/main.spec.ts",
- "src/__tests__/visualTesting/navbar.spec.ts",
- "src/__tests__/visualTesting/footer.spec.ts"
+ "src/shared/__tests__/setup-tests.ts",
+ "src/shared/__tests__/visualTesting/main.spec.ts",
+ "src/shared/__tests__/visualTesting/navbar.spec.ts",
+ "src/shared/__tests__/visualTesting/footer.spec.ts"
],
- "exclude": ["node_modules"],
- "references": [{ "path": "./tsconfig.node.json" }]
-}
+ "exclude": [
+ "node_modules"
+ ],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/vite.config.ts b/vite.config.ts
index d976c6bd7..647bd68ed 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -20,9 +20,10 @@ export default defineConfig({
preprocessorOptions: {
scss: {
additionalData: `
- @import "./src/styles/_constants.scss";
- @import "./src/styles/_mixins.scss";
- @import "./src/styles/_placeholders.scss";
+ @import "./src/app/styles/_constants.scss";
+ @import "./src/app/styles/_mixins.scss";
+ @import "./src/app/styles/_placeholders.scss";
+ @import "./src/app/styles/_normalize.scss";
`,
},
},
diff --git a/vitest.config.ts b/vitest.config.ts
index 5a0eaea29..a1dd8ccfa 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -13,7 +13,7 @@ export default defineConfig({
test: {
environment: 'jsdom',
globals: true,
- setupFiles: ['src/__tests__/setup-tests.ts'],
+ setupFiles: ['src/shared/__tests__/setup-tests.ts'],
exclude: [
'**/node_modules/**',
'**/dist/**',