├── src ├── pages │ ├── News │ │ ├── news.css │ │ └── news.tsx │ ├── About │ │ ├── About.css │ │ └── About.tsx │ ├── Login │ │ ├── login.css │ │ └── login.tsx │ ├── Staff │ │ ├── staff.css │ │ └── staff.tsx │ ├── Contacts │ │ ├── contacts.css │ │ └── contacts.tsx │ ├── Education │ │ ├── education.css │ │ └── education.tsx │ ├── Vacancies │ │ ├── vacancies.css │ │ └── vacancies.tsx │ └── Main │ │ ├── SliderPhoto │ │ ├── SliderPhoto.css │ │ └── SliderPhoto.tsx │ │ ├── Teachgers_Slider │ │ ├── Teachgers_Slider.css │ │ └── Teachgers_Slider.tsx │ │ ├── DirectorPhoto │ │ ├── DirectorPhoto.tsx │ │ └── DirectorPhoto.css │ │ ├── Achievements │ │ ├── Achievements.css │ │ └── Achievements.tsx │ │ └── Question │ │ ├── Accordion.css │ │ └── Accordion.tsx ├── vite-env.d.ts ├── Footer │ ├── Footer_lower │ │ ├── Footer_lower.css │ │ └── Footer_lower.tsx │ ├── Footer_top │ │ ├── Footer_top.css │ │ └── Footer_top.tsx │ ├── favicon.png │ ├── Footer.css │ └── Footer.tsx ├── index.css ├── Header │ ├── favicon.png │ ├── Header.css │ └── Header.tsx ├── App.css ├── App.tsx ├── main.tsx ├── Carousel │ └── Carousel.tsx └── assets │ └── react.svg ├── tsconfig.node.tsbuildinfo ├── public ├── favicon.png └── vite.svg ├── Styles ├── test_img.avif └── Styles.css ├── images └── Ellipse 15.png ├── postcss.config.js ├── tsconfig.json ├── tailwind.config.js ├── vite.config.ts ├── README.md ├── .gitignore ├── index.html ├── tsconfig.node.json ├── .github └── workflows │ └── main.yml ├── tsconfig.app.json ├── tsconfig.app.tsbuildinfo ├── package.json └── Dockerfile /src/pages/News/news.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/About/About.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Login/login.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Staff/staff.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Contacts/contacts.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Education/education.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Vacancies/vacancies.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Main/SliderPhoto/SliderPhoto.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Main/Teachgers_Slider/Teachgers_Slider.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/Footer/Footer_lower/Footer_lower.css: -------------------------------------------------------------------------------- 1 | .footer_lower{ 2 | 3 | } -------------------------------------------------------------------------------- /src/Footer/Footer_top/Footer_top.css: -------------------------------------------------------------------------------- 1 | .footer_top{ 2 | 3 | } -------------------------------------------------------------------------------- /tsconfig.node.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"root":["./vite.config.ts"],"version":"5.6.2"} -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capybaracplusplus/govno-react-school-website/HEAD/public/favicon.png -------------------------------------------------------------------------------- /Styles/test_img.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capybaracplusplus/govno-react-school-website/HEAD/Styles/test_img.avif -------------------------------------------------------------------------------- /images/Ellipse 15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capybaracplusplus/govno-react-school-website/HEAD/images/Ellipse 15.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | } 6 | } -------------------------------------------------------------------------------- /src/Footer/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capybaracplusplus/govno-react-school-website/HEAD/src/Footer/favicon.png -------------------------------------------------------------------------------- /src/Header/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capybaracplusplus/govno-react-school-website/HEAD/src/Header/favicon.png -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | 2 | .DirectorPhoto_Teachgers_Slider{ 3 | display: flex; 4 | justify-content: center; 5 | align-items: center; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{html,ts,tsx,jsx,js}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | base: './', 7 | plugins: [react()], 8 | }) 9 | -------------------------------------------------------------------------------- /src/pages/News/news.tsx: -------------------------------------------------------------------------------- 1 | //import React from 'react'; 2 | 3 | 4 | function News() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

НОВОСТИ!!!

9 | 10 | ) 11 | } 12 | export default News; -------------------------------------------------------------------------------- /src/pages/Staff/staff.tsx: -------------------------------------------------------------------------------- 1 | //import React from 'react'; 2 | 3 | 4 | function Staff() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

наши учителя

9 | 10 | ) 11 | } 12 | export default Staff; -------------------------------------------------------------------------------- /src/pages/Login/login.tsx: -------------------------------------------------------------------------------- 1 | //import React from 'react'; 2 | 3 | 4 | function Login() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

типа регистрация

9 | 10 | ) 11 | } 12 | export default Login; -------------------------------------------------------------------------------- /src/pages/Contacts/contacts.tsx: -------------------------------------------------------------------------------- 1 | //import React from 'react'; 2 | 3 | 4 | function Contacts() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

тут контакты

9 | 10 | ) 11 | } 12 | export default Contacts; -------------------------------------------------------------------------------- /src/pages/About/About.tsx: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | 3 | 4 | function About() { 5 | return ( 6 | <> 7 |

О нас

8 |

Здесь будет информация о нашей школе.

9 | 10 | ) 11 | } 12 | export default About; -------------------------------------------------------------------------------- /src/pages/Education/education.tsx: -------------------------------------------------------------------------------- 1 | //import React from 'react'; 2 | 3 | 4 | function Education() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

инфа о обучении

9 | 10 | ) 11 | } 12 | export default Education; -------------------------------------------------------------------------------- /src/pages/Main/Teachgers_Slider/Teachgers_Slider.tsx: -------------------------------------------------------------------------------- 1 | import './Teachgers_Slider.css' 2 | 3 | function Teachgers_Slider() { 4 | return ( 5 | <> 6 |

Teachgers_Slider

7 | 8 | ) 9 | } 10 | 11 | export default Teachgers_Slider; -------------------------------------------------------------------------------- /src/pages/Vacancies/vacancies.tsx: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | 3 | 4 | function Vacancies() { 5 | return ( 6 | <> 7 |

Заголовок

8 |

Приходите к нам работать

9 | 10 | ) 11 | } 12 | export default Vacancies; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Running a Project Using Docker 2 | ```bash 3 | git clone https://github.com/capybaracplusplus/Govno-React-School-website.git 4 | 5 | cd Govno-React-School-website 6 | 7 | docker build -t school-website . 8 | 9 | docker run -d -p 3000:3000 school-website 10 | ``` 11 | -------------------------------------------------------------------------------- /src/Footer/Footer_lower/Footer_lower.tsx: -------------------------------------------------------------------------------- 1 | function Footer_lower() { 2 | return ( 3 | <> 4 |
5 |

Контакты:

6 |

Дискорд Телега Вконтакте Одноклассники

7 |
8 | 9 | ) 10 | } 11 | export default Footer_lower; -------------------------------------------------------------------------------- /src/Footer/Footer_top/Footer_top.tsx: -------------------------------------------------------------------------------- 1 | function Footer_top() { 2 | return ( 3 | <> 4 |
5 |

Меню:

6 |

Главная О нас Обучение Педсостав Вакансии Новости Контакты

7 |
8 | 9 | 10 | ) 11 | } 12 | export default Footer_top; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /src/pages/Main/DirectorPhoto/DirectorPhoto.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './DirectorPhoto.css'; 3 | 4 | const DirectorPhoto: React.FC = () => { 5 | return ( 6 |
7 |
8 | Фото директора 9 |
10 |
11 | ); 12 | }; 13 | 14 | export default DirectorPhoto; -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | School-website 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/pages/Main/DirectorPhoto/DirectorPhoto.css: -------------------------------------------------------------------------------- 1 | .director-photo { 2 | display: flex; 3 | justify-content: center; 4 | align-items: center; 5 | margin-left: 20px; 6 | } 7 | 8 | .photo-circle { 9 | width: 200px; 10 | height: 200px; 11 | border-radius: 50%; 12 | background: linear-gradient(90deg, #3A42B2 0%, #1F1E29 100%); 13 | display: flex; 14 | justify-content: center; 15 | align-items: center; 16 | color: white; 17 | font-size: 18px; 18 | font-family: Arial, sans-serif; 19 | text-align: center; 20 | } 21 | -------------------------------------------------------------------------------- /src/pages/Main/SliderPhoto/SliderPhoto.tsx: -------------------------------------------------------------------------------- 1 | import './SliderPhoto.css' 2 | import Carousel from '../../../Carousel/Carousel'; 3 | 4 | const images = [ 5 | "https://avatars.mds.yandex.net/get-altay/4530524/2a00000179e64be106f8902aa9d99c6d4baf/L_height", 6 | "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRmdpijMxdX4EqRRprtXbrrcdbGjo4bJfMTbw&s", 7 | ] 8 | 9 | function SliderPhoto() { 10 | return ( 11 | <> 12 | 13 | 14 | ) 15 | } 16 | 17 | export default SliderPhoto; -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "lib": ["ES2023"], 5 | "module": "ESNext", 6 | "skipLibCheck": true, 7 | 8 | /* Bundler mode */ 9 | "moduleResolution": "bundler", 10 | "allowImportingTsExtensions": true, 11 | "isolatedModules": true, 12 | "moduleDetection": "force", 13 | "noEmit": true, 14 | 15 | /* Linting */ 16 | "strict": true, 17 | "noUnusedLocals": true, 18 | "noUnusedParameters": true, 19 | "noFallthroughCasesInSwitch": true 20 | }, 21 | "include": ["vite.config.ts"] 22 | } 23 | -------------------------------------------------------------------------------- /src/pages/Main/Achievements/Achievements.css: -------------------------------------------------------------------------------- 1 | .achievements { 2 | max-width: 465px; 3 | } 4 | 5 | .achievements-title { 6 | font-size: 24px; 7 | color: #b03030; 8 | font-family: 'Georgia', serif; 9 | margin-bottom: 20px; 10 | } 11 | 12 | .achievement-item { 13 | background: linear-gradient(90deg, #3A42B2 0%, #1F1E29 100%); 14 | color: white; 15 | padding: 15px; 16 | margin: 10px 0; 17 | border-radius: 10px; 18 | font-family: Arial, sans-serif; 19 | text-align: left; 20 | font-size: 16px; 21 | } 22 | 23 | @media screen { 24 | 25 | } -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions/setup-node@v4 14 | 15 | - name: Install 16 | run: | 17 | npm i 18 | 19 | - name: Build 20 | run: | 21 | npm run build 22 | 23 | - name: Deploy 24 | uses: crazy-max/ghaction-github-pages@v4 25 | with: 26 | target_branch: gh-pages 27 | build_dir: dist 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} -------------------------------------------------------------------------------- /src/Footer/Footer.css: -------------------------------------------------------------------------------- 1 | .footer_container{ 2 | color:aquamarine; 3 | background: linear-gradient(92.14deg, rgba(31, 30, 41, 0.95) 7.09%, rgba(58, 66, 178, 0.95) 36.34%); 4 | height: 198px; 5 | display: flex; 6 | align-items: center; 7 | gap: 100px; 8 | } 9 | 10 | .top_lower_footer{ 11 | 12 | } 13 | 14 | .logo_footer{ 15 | 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src"] 24 | } 25 | -------------------------------------------------------------------------------- /src/pages/Main/Achievements/Achievements.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Achievements.css'; 3 | 4 | const Achievements: React.FC = () => { 5 | const items = ['Школа признана лучшей в городе', 'Ученик занял 1 место на олимпиаде', 'Сборная футбола школы заняла первое место на соревнованиях', 'я не знаю что писать']; 6 | 7 | return ( 8 |
9 |

Достижения

10 | {items.map((item, index) => ( 11 |
12 | {item} 13 |
14 | ))} 15 |
16 | ); 17 | }; 18 | 19 | export default Achievements; 20 | -------------------------------------------------------------------------------- /Styles/Styles.css: -------------------------------------------------------------------------------- 1 | html,body{ 2 | box-sizing: border-box; 3 | } 4 | 5 | *,*::after,*::before{ 6 | box-sizing: inherit; 7 | } 8 | 9 | body{ 10 | position: relative; 11 | min-height: 100vh; 12 | 13 | } 14 | body::after{ 15 | background: white; 16 | background-size: cover; 17 | background-repeat: no-repeat; 18 | background-position: center; 19 | position: absolute; 20 | content: ""; 21 | height: 100vh; 22 | width: 99vw; 23 | top: 0; 24 | left: 0; 25 | z-index: -999; 26 | } 27 | 28 | main{ 29 | min-height: calc(100vh - 236px) 30 | } 31 | 32 | .container{ 33 | width: 100%; 34 | max-width: 1000px; 35 | margin: 0 auto; 36 | padding: 0 10px; 37 | } 38 | -------------------------------------------------------------------------------- /tsconfig.app.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/carousel/carousel.tsx","./src/footer/footer.tsx","./src/footer/footer_lower/footer_lower.tsx","./src/footer/footer_top/footer_top.tsx","./src/header/header.tsx","./src/pages/about/about.tsx","./src/pages/contacts/contacts.tsx","./src/pages/education/education.tsx","./src/pages/login/login.tsx","./src/pages/main/achievements/achievements.tsx","./src/pages/main/photoofdirector/photoofdirector.tsx","./src/pages/main/question/question.tsx","./src/pages/main/sliderphoto/sliderphoto.tsx","./src/pages/main/teachgers_slider/teachgers_slider.tsx","./src/pages/news/news.tsx","./src/pages/staff/staff.tsx","./src/pages/vacancies/vacancies.tsx"],"version":"5.6.2"} -------------------------------------------------------------------------------- /src/Footer/Footer.tsx: -------------------------------------------------------------------------------- 1 | import "./Footer.css" 2 | import Footer_top from "./Footer_top/Footer_top" 3 | import Footer_lower from "./Footer_lower/Footer_lower" 4 | import faviconSrc from "./favicon.png" 5 | 6 | function Footer() { 7 | return ( 8 | <> 9 |
10 |
11 | 12 | 13 |
14 |
15 | 16 |

Название школы

17 |
18 |
19 | 20 | 21 | ) 22 | } 23 | 24 | export default Footer; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test_bun", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc -b && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "homepage": "https://capybaracplusplus.github.io/Govno-React-School-website", 12 | "dependencies": { 13 | "@types/react-slick": "^0.23.13", 14 | "react": "^18.3.1", 15 | "react-dom": "^18.3.1", 16 | "react-router-dom": "^6.26.2", 17 | "react-slick": "^0.30.2" 18 | }, 19 | "devDependencies": { 20 | "@types/react": "^18.3.3", 21 | "@types/react-dom": "^18.3.0", 22 | "@vitejs/plugin-react": "^4.3.1", 23 | "autoprefixer": "^10.4.20", 24 | "tailwindcss": "^3.4.10", 25 | "typescript": "^5.5.3", 26 | "vite": "^5.4.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/pages/Main/Question/Accordion.css: -------------------------------------------------------------------------------- 1 | .accordion { 2 | max-width: 685px; 3 | margin: 0 auto; 4 | font-family: Arial, sans-serif; 5 | } 6 | 7 | .accordion-item { 8 | background: linear-gradient(90deg, #3A42B2 0%, #1F1E29 100%); 9 | margin: 10px 0; 10 | border-radius: 5px; 11 | overflow: hidden; 12 | } 13 | 14 | .accordion-header { 15 | display: flex; 16 | justify-content: space-between; 17 | align-items: center; 18 | color: white; 19 | padding: 15px; 20 | cursor: pointer; 21 | font-size: 16px; 22 | } 23 | 24 | .accordion-content { 25 | background: linear-gradient(90deg, #3A42B2 0%, #1F1E29 100%); 26 | color: white; 27 | padding: 15px; 28 | font-size: 14px; 29 | line-height: 1.5; 30 | } 31 | 32 | .accordion-header h3 { 33 | margin: 0; 34 | } 35 | 36 | .accordion-header span { 37 | font-size: 20px; 38 | } 39 | -------------------------------------------------------------------------------- /src/Header/Header.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .hearder_logo img { 4 | width: 100%; 5 | height: auto; 6 | } 7 | 8 | .hearder_icons { 9 | display: flex; 10 | align-items: center; 11 | gap: 15px; 12 | } 13 | 14 | .icon_h img { 15 | min-width: 40px; 16 | min-height: 40px; 17 | width: 40px; 18 | height: 40px; 19 | border-radius: 50%; 20 | transition: background-color 0.3s ease; 21 | } 22 | 23 | .icon_h:hover { 24 | background-color: #f0f0f0; 25 | border-radius: 50%; 26 | } 27 | 28 | .mybutton { 29 | color: black; 30 | font-family: Pacifico; 31 | cursor: pointer; 32 | text-decoration: none; 33 | position: relative; 34 | transition: all 0.3s ease; 35 | white-space: nowrap; 36 | } 37 | 38 | .mybutton::after { 39 | content: ''; 40 | position: absolute; 41 | left: 0; 42 | bottom: -5px; 43 | width: 0; 44 | height: 2px; 45 | background-color: black; 46 | transition: width 0.3s ease; 47 | } 48 | 49 | .mybutton:hover::after { 50 | width: 100%; 51 | } 52 | 53 | .mybutton.active::after { 54 | width: 100%; 55 | height: 4px; 56 | background-color: darkred; 57 | } 58 | 59 | 60 | .mobileMenu{ 61 | z-index: 999; 62 | } 63 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | import { Routes, Route } from 'react-router-dom'; 3 | import About from './pages/About/About'; 4 | import Question from './pages/Main/Question/Accordion'; 5 | import Teachgers_Slider from './pages/Main/Teachgers_Slider/Teachgers_Slider'; 6 | import SliderPhoto from './pages/Main/SliderPhoto/SliderPhoto'; 7 | import Achievements from './pages/Main/Achievements/Achievements'; 8 | import DirectorPhoto from './pages/Main/DirectorPhoto/DirectorPhoto'; 9 | 10 | function App() { 11 | return ( 12 | <> 13 |
14 | 15 | 17 | 18 |
19 | 20 | 21 |
22 | 23 | 24 | } /> 25 | } /> 26 |
27 |
28 | 29 | ); 30 | } 31 | 32 | export default App; 33 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # use the official Bun image 2 | # see all versions at https://hub.docker.com/r/oven/bun/tags 3 | FROM oven/bun:1 AS base 4 | WORKDIR /usr/src/app 5 | 6 | # install dependencies into temp directory 7 | # this will cache them and speed up future builds 8 | FROM base AS install 9 | RUN mkdir -p /temp/dev 10 | COPY package.json bun.lockb /temp/dev/ 11 | RUN cd /temp/dev && bun install --frozen-lockfile 12 | 13 | # install with --production (exclude devDependencies) 14 | RUN mkdir -p /temp/prod 15 | COPY package.json bun.lockb /temp/prod/ 16 | RUN cd /temp/prod && bun install --frozen-lockfile --production 17 | 18 | # copy node_modules from temp directory 19 | # then copy all (non-ignored) project files into the image 20 | FROM base AS prerelease 21 | COPY --from=install /temp/dev/node_modules node_modules 22 | COPY . . 23 | 24 | # build React app and output to dist directory 25 | ENV NODE_ENV=production 26 | RUN bun run build 27 | 28 | # copy production dependencies and built files into final image 29 | FROM base AS release 30 | COPY --from=install /temp/prod/node_modules node_modules 31 | COPY --from=prerelease /usr/src/app/dist ./dist 32 | COPY --from=prerelease /usr/src/app/package.json . 33 | 34 | # serve the app using a static server (like serve) 35 | RUN bun add serve 36 | EXPOSE 3000/tcp 37 | CMD ["bun", "run", "serve", "-s", "dist", "-l", "3000"] -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import App from './App.tsx'; 4 | import './index.css'; 5 | import { HashRouter, Routes, Route } from 'react-router-dom'; 6 | import About from './pages/About/About'; 7 | import Header from './Header/Header.tsx'; 8 | import Footer from './Footer/Footer.tsx'; 9 | import Contacts from './pages/Contacts/contacts.tsx'; 10 | import Education from './pages/Education/education.tsx'; 11 | import Login from './pages/Login/login.tsx'; 12 | import News from './pages/News/news.tsx'; 13 | import Staff from './pages/Staff/staff.tsx'; 14 | import Vacancies from './pages/Vacancies/vacancies.tsx'; 15 | 16 | 17 | createRoot(document.getElementById('root')!).render( 18 | 19 | 20 |
21 | 22 | } /> 23 | } /> 24 | } /> 25 | } /> 26 | } /> 27 | } /> 28 | } /> 29 | } /> 30 | 31 |