diff --git a/front/src/App.js b/front/src/App.js
new file mode 100644
index 0000000..173405f
--- /dev/null
+++ b/front/src/App.js
@@ -0,0 +1,45 @@
+import { useRoutes, Outlet, BrowserRouter } from 'react-router-dom'
+import Films from './pages/Films'
+import FilmPage from './pages/FilmPage'
+import Header from './pages/components/Header'
+import Footer from './pages/components/Footer'
+import SearchSame from './pages/SearchSame'
+import Registration from './pages/Registration'
+import Sessions from './pages/Sessions'
+import Orders from './pages/Orders'
+
+function Router(props) {
+ return useRoutes(props.rootRoute);
+}
+
+export default function App() {
+ const routes = [
+ { index: true, element: },
+ { path: '/films', element: , label: 'Главная' },
+ { path: '/registration', element: , label: 'Регистрация' },
+ { path: '/sessions', element: , label: 'Сеансы' },
+ { path: '/orders', element: , label: 'Заказы' },
+ { path: '/films/:id', element: },
+ { path: '/search-same/:request', element: }
+ ];
+ const links = routes.filter(route => route.hasOwnProperty('label'));
+ const rootRoute = [
+ { path: '/', element: render(links), children: routes }
+ ];
+
+ function render(links) {
+ return (
+ <>
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/front/src/index.js b/front/src/index.js
new file mode 100644
index 0000000..1d4fe2c
--- /dev/null
+++ b/front/src/index.js
@@ -0,0 +1,12 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import App from './App'
+import 'bootstrap/dist/css/bootstrap.css'
+import './styles/index.css'
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render(
+
+
+
+);
diff --git a/front/src/styles/ModalEdit.module.css b/front/src/styles/ModalEdit.module.css
new file mode 100644
index 0000000..40b00b4
--- /dev/null
+++ b/front/src/styles/ModalEdit.module.css
@@ -0,0 +1,22 @@
+.myModal {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ display: none;
+ background: rgba(0,0,0, 0.5);
+}
+
+.myModalContent {
+ padding: 25px;
+ background: white;
+ border-radius: 16px;
+ max-width: 600px;
+}
+
+.myModal.active {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/front/src/styles/banner.css b/front/src/styles/banner.css
new file mode 100644
index 0000000..081c540
--- /dev/null
+++ b/front/src/styles/banner.css
@@ -0,0 +1,23 @@
+#banner {
+ margin: 15px;
+}
+
+@keyframes newAnim {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+#banner img {
+ max-width: 90%;
+ border-radius: 5px;
+ animation: newAnim 1s forwards;
+}
+
+#banner a.show {
+ text-align: center;
+ display: block;
+}
+
+#banner a.hide {
+ display: none;
+}
\ No newline at end of file
diff --git a/front/src/styles/index.css b/front/src/styles/index.css
new file mode 100644
index 0000000..69a5a3c
--- /dev/null
+++ b/front/src/styles/index.css
@@ -0,0 +1,72 @@
+html,
+body {
+ background: #2b2d33;
+}
+.green-mark {
+ background-color: #38a65d;
+}
+.willSee {
+ background-color: #38a65d;
+}
+.delete {
+ background-color: #e94049;
+}
+.icon {
+ width: 50px;
+ height: 50px;
+}
+hr {
+ height: 2px; /* Толщина линии */
+}
+.description {
+ color: #8f9398;
+}
+.editIcon {
+ height: 2.5vh;
+}
+.posterChoiceToTaste {
+ width: 290px;
+ height: 437px;
+}
+.posterFilmPage{
+ width: 290px;
+ height: 437px;
+}
+a {
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+/* for film-page */
+.table {
+ color: #8f9398;
+}
+/* main */
+@media screen and (max-width: 290px) {
+ .posterItem {
+ display: none !important;
+ }
+ .fs-1 {
+ margin-left: 1em !important;
+ }
+}
+/* willsee */
+@media screen and (max-width: 290px) {
+ .posterItem {
+ display: none !important;
+ }
+ .fs-1 {
+ font-size: medium !important;
+ margin-left: 1em !important;
+ }
+}
+/* choicetotaste */
+@media screen and (max-width: 250px) {
+ .fs-2 {
+ font-size: medium !important;
+ }
+ .fs-1 {
+ font-size: large !important;
+ }
+}
\ No newline at end of file
diff --git a/front/src/styles/styleBlock.css b/front/src/styles/styleBlock.css
new file mode 100644
index 0000000..749ae5c
--- /dev/null
+++ b/front/src/styles/styleBlock.css
@@ -0,0 +1,14 @@
+html,
+body {
+ background: #2b2d33;
+}
+
+.content {
+ min-height: calc(100vh - 25.1vh);
+ background: #40444d;
+}
+
+.content_header {
+ margin: -1.5em -1.5em 0em -1.5em;
+ background-color: #8f9297;
+}
\ No newline at end of file
diff --git a/front/src/styles/styleFilmItem.css b/front/src/styles/styleFilmItem.css
new file mode 100644
index 0000000..435eef3
--- /dev/null
+++ b/front/src/styles/styleFilmItem.css
@@ -0,0 +1,13 @@
+.posterItem {
+ width: 90px;
+ height: 90px;
+ margin-top: -10px;
+}
+
+form input {
+ max-width: 300px;
+}
+
+table tbody tr td {
+ border: 0px !important;
+}
\ No newline at end of file
diff --git a/front/src/styles/styleFooter.css b/front/src/styles/styleFooter.css
new file mode 100644
index 0000000..9c164c3
--- /dev/null
+++ b/front/src/styles/styleFooter.css
@@ -0,0 +1,9 @@
+footer {
+ flex: 0 0 auto !important;
+ background: #1a1c20;
+ color: #c2c2c2;
+}
+
+footer nav {
+ color: #c2c2c2;
+}
\ No newline at end of file
diff --git a/front/src/styles/styleHeader.css b/front/src/styles/styleHeader.css
new file mode 100644
index 0000000..0b37854
--- /dev/null
+++ b/front/src/styles/styleHeader.css
@@ -0,0 +1,15 @@
+header {
+ background: #1a1c20;
+}
+
+header a {
+ color: #c2c2c2;
+}
+
+header a:hover {
+ color: #ffffff;
+}
+
+.mainInput {
+ max-width: 200px;
+}
\ No newline at end of file