diff --git a/Dockerfile b/Dockerfile index 1580c44..05a1ad5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ COPY . /app/ RUN npm run build # Expone el puerto en el que se ejecutará la aplicación -EXPOSE 3000 +EXPOSE 3001 # Comando para iniciar la aplicación cuando el contenedor se ejecute CMD ["npm", "start"] diff --git a/docker-compose.yml b/docker-compose.yml index 6755c56..885beec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: networks: - traefik ports: - - 3000:3000 + - 3001:3001 environment: - TZ=Europe/Madrid labels: diff --git a/package-lock.json b/package-lock.json index 778638c..8bee784 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "emailjs-com": "^2.6.4", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-router-dom": "^6.22.0", "react-scripts": "^3.0.1", "smooth-scroll": "^16.1.3" }, @@ -2729,6 +2730,14 @@ "node": ">= 6" } }, + "node_modules/@remix-run/router": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz", + "integrity": "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@sheerun/mutationobserver-shim": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", @@ -15586,6 +15595,36 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-router": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz", + "integrity": "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==", + "dependencies": { + "@remix-run/router": "1.15.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz", + "integrity": "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==", + "dependencies": { + "@remix-run/router": "1.15.0", + "react-router": "6.22.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", diff --git a/package.json b/package.json index c439446..a74fde0 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "emailjs-com": "^2.6.4", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-router-dom": "^6.22.0", "react-scripts": "^3.0.1", "smooth-scroll": "^16.1.3" }, diff --git a/public/css/style.css b/public/css/style.css index 858ceda..432b41a 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -74,6 +74,7 @@ hr { #menu { padding: 15px; transition: all 0.8s; + position: relative; /* Cambia la posición del nav a relativa o estática */ } #menu.navbar-default { background-color: #fff; @@ -452,12 +453,19 @@ header .intro-text { #team { padding: 100px 0; background-color: #ecf7fd; + } #team h4 { margin: 5px 0; } #team .team-img { width: 240px; + height: 240px; /* Set the height equal to the width */ + object-fit: cover; /* Ensure the image is cropped */ +} +#team .team-img img { + width: 100%; /* Make the image fill its container */ + height: auto; /* Allow the image to maintain its aspect ratio */ } #team .thumbnail { background: transparent; @@ -525,4 +533,21 @@ header .intro-text { } } +/* Estilos para el título de cada base */ +.titulo-base { + font-size: 24px; + font-weight: bold; + margin-bottom: 10px; +} + +/* Estilos para el texto de cada base */ +.texto-base { + font-size: 18px; + margin-bottom: 20px; +} +/* Contenedor de cada base */ +.base-container { + display: flex; + flex-direction: column; +} diff --git a/public/img/team/fer.jpeg b/public/img/team/fer.jpeg new file mode 100644 index 0000000..ca76fe2 Binary files /dev/null and b/public/img/team/fer.jpeg differ diff --git a/public/img/team/pablo.jpeg b/public/img/team/pablo.jpeg new file mode 100644 index 0000000..8b25053 Binary files /dev/null and b/public/img/team/pablo.jpeg differ diff --git a/public/img/team/raul.jpeg b/public/img/team/raul.jpeg new file mode 100644 index 0000000..6b54afe Binary files /dev/null and b/public/img/team/raul.jpeg differ diff --git a/public/img/team/talia.jpeg b/public/img/team/talia.jpeg new file mode 100644 index 0000000..09082c1 Binary files /dev/null and b/public/img/team/talia.jpeg differ diff --git a/src/App.css b/src/App.css index 0e8605e..a40480a 100644 --- a/src/App.css +++ b/src/App.css @@ -16,3 +16,5 @@ width: 110%; } } + + diff --git a/src/App.jsx b/src/App.jsx index 17c039f..5f8a4b8 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,35 +1,35 @@ import React, { useState, useEffect } from "react"; -import { Navigation } from "./components/navigation"; -import { Header } from "./components/header"; -import { Features } from "./components/features"; -import { Testimonials } from "./components/testimonials"; -import { Team } from "./components/Team"; -import { Contact } from "./components/contact"; +import { BrowserRouter, Route, Routes } from "react-router-dom"; +import {Bases} from "./components/Bases"; +import {Home} from "./components/Home"; import JsonData from "./data/data.json"; import SmoothScroll from "smooth-scroll"; import "./App.css"; + + export const scroll = new SmoothScroll('a[href*="#"]', { speed: 1000, speedAsDuration: true, }); + + const App = () => { const [landingPageData, setLandingPageData] = useState({}); useEffect(() => { setLandingPageData(JsonData); - }, []); - - return ( -
- -
- - {/* */} - - -
- ); + }, []); + return ( + {/* Agrega BrowserRouter como contenedor principal */} + + + } /> + } /> + + + ); }; export default App; + diff --git a/src/components/Bases.jsx b/src/components/Bases.jsx new file mode 100644 index 0000000..4779789 --- /dev/null +++ b/src/components/Bases.jsx @@ -0,0 +1,34 @@ +import React, { useState, useEffect } from "react"; +import { Features } from "./features"; +import { Navigation } from "./navigation"; +import JsonData from "../data/data.json"; + +export const Bases = (props) => { + + return ( +
+ +
+
+
+
+

{props.data ? props.data.title : "Undefined"}

+
+
+
+ {props.data + ? props.data.bases.map((d, i) => ( +
+

{d.title}

+

+
+ )) + : "loading"} +
+
+
+
+ ); +}; + + diff --git a/src/components/Home.jsx b/src/components/Home.jsx new file mode 100644 index 0000000..044e447 --- /dev/null +++ b/src/components/Home.jsx @@ -0,0 +1,28 @@ +import React, { useState, useEffect } from "react"; +import { Header } from "./header"; +import { Features } from "./features"; +import { Testimonials } from "./testimonials"; +import { Team } from "./Team"; +import { Contact } from "./contact"; +import {Navigation} from "./navigation"; +import JsonData from "../data/data.json"; +import SmoothScroll from "smooth-scroll"; + + +export const Home = (props) => { + const [landingPageData, setLandingPageData] = useState({}); + useEffect(() => { + setLandingPageData(JsonData); + }, []); + return ( +
+ +
+ + {/* */} + + +
+ ) +} + diff --git a/src/components/header.jsx b/src/components/header.jsx index 97f7556..b0cdcaa 100644 --- a/src/components/header.jsx +++ b/src/components/header.jsx @@ -1457,11 +1457,13 @@ M1401.491699,1251.711426 z"/>

{props.data ? props.data.paragraph : "Loading"}

+

{props.data ? props.data.info : "Próximamente"}

+

{props.data ? props.data.contact : "Más info: eurielec.eeste@gmail.com"}

- Inscríbete + Inscripciones abiertas próximamente {" "} diff --git a/src/components/navigation.jsx b/src/components/navigation.jsx index e03ea27..2619668 100644 --- a/src/components/navigation.jsx +++ b/src/components/navigation.jsx @@ -1,4 +1,5 @@ import React from "react"; +import { Link } from "react-router-dom"; export const Navigation = (props) => { return ( @@ -17,7 +18,7 @@ export const Navigation = (props) => { {" "} {" "} - + EESTech Challenge {" "} @@ -33,23 +34,29 @@ export const Navigation = (props) => {
  • - + Inicio
  • - + Evento
  • - + Equipo
  • +
  • + {/* Utiliza Link para navegar a /bases */} + Bases + +
  • ); }; + diff --git a/src/data/data.json b/src/data/data.json index 9d60ed6..a76985c 100644 --- a/src/data/data.json +++ b/src/data/data.json @@ -1,7 +1,9 @@ { "Header": { "title": "EESTech Challenge", - "paragraph": "El EESTech Challenge es una competición tecnológica diseñada específicamente para estudiantes. Es tu oportunidad de enfrentar desafíos tecnológicos, demostrar tus habilidades y conectar con líderes de la industria. ¡Inscríbete para vivir una experiencia única de aprendizaje, creatividad y networking en un ambiente lleno de innovación!" + "paragraph": "El EESTech Challenge es una competición tecnológica diseñada específicamente para estudiantes. Es tu oportunidad de enfrentar desafíos tecnológicos, demostrar tus habilidades y conectar con líderes de la industria. ¡Inscríbete para vivir una experiencia única de aprendizaje, creatividad y networking en un ambiente lleno de innovación!", + "info": "¡Del 5 al 7 de abril de 2024, en la ETSIT UPM!", + "contact": "Contacta con nosotros para más información: eurielec.eestec@gmail.com" }, "Testimonials": [ { @@ -37,24 +39,24 @@ ], "Team": [ { - "img": "img/team/01.jpg", + "img": "img/team/fer.jpeg", "name": "Fernando Ingelmo", "job": "Head Organizer" }, { - "img": "img/team/02.jpg", + "img": "img/team/raul.jpeg", "name": "Raúl Merayo", "job": "Academic Coordinator" - }, + }, { - "img": "img/team/03.jpg", + "img": "img/team/talia.jpeg", "name": "Talía Mera", "job": "PR Coordinator" }, { - "img": "img/team/04.jpg", - "name": "Noelia Rodríguez", - "job": "EESTEC Ambassador" + "img": "img/team/pablo.jpeg", + "name": "Pablo Maldonado", + "job": "Fundraising Coordinator" } ], "Contact": { @@ -81,7 +83,7 @@ { "icon": "fa fa-group", "title": "Trabajo en Equipo", - "text": "Los participantes tendrán la oportunidad de trabajar en equipos multidisciplinarios, fomentando la colaboración y el intercambio de ideas." + "text": "Los participantes tendrán la oportunidad de trabajar en equipos multidisciplinarios junto a 2 compañeros, fomentando la colaboración y el intercambio de ideas." }, { "icon": "fa fa-magic", @@ -89,5 +91,62 @@ "text": "Los participantes mejoran sus habilidades técnicas al abordar nuevos desafíos. Esto incluye programación, resolución de problemas y la capacidad de trabajar bajo presión." } - ] + ], + "Bases":{ + "title": "Bases legales de la Competición", + "bases": [ + { + "title": "Nombre y Organización del Concurso", + "base": "El EESTech Challenge 2024 está organizado por EURIELEC ETSIT Madrid, con domicilio en Avenida Complutense 30, Madrid, 28040, España, de acuerdo con los términos y condiciones establecidos en las presentes bases legales." + }, + { + "title": "Participación", + "base": "Elegibilidad: El concurso está abierto a estudiantes de la UPM entre 18 y 27 años, cursando titulación de grado, máster o doctorado. \nRestricciones: No hay restricciones de edad ni ubicación geográfica más allá de los requisitos de elegibilidad mencionados. \n Equipos: Los equipos deben estar formados por tres participantes. Si un participante se inscribe individualmente o con un compañero, se le asignará un equipo por parte de la organización de manera arbitraria manteniendo siempre la multidisciplinaridad. Si finalmente hay individuos que no lleguen a formar un equipo de 3 personas estos no podrán formar parte de la competición y serán notificados de ello por parte de la organización." + }, + { + "title": "Inscripción y Registro", + "base": "La inscripción es gratuita y se realizará en las fechas especificadas a través del formulario de Google, accesible mediante el botón 'Inscríbete'.\nEs necesario el registro previo completando el formulario." + }, + { + "title": "Mecánica del Desafío", + "base": "Las reglas y directrices serán establecidas por la organización. \nLa evaluación se llevará a cabo mediante métricas definidas por un jurado académico." + }, + { + "title": "Premios", + "base": "Premios: Productos de la marca Corsair valorados en 300 euros por cada participante (por confirmar). \nCategoría de premios: Únicamente para el primer puesto." + }, + { + "title": "Fechas Importantes", + "base": "Fechas clave: 5, 6, 7 de abril. Anuncio de ganadores por confirmar." + }, + { + "title": "Propiedad Intelectual", + "base": "Los participantes conservarán la propiedad intelectual de las soluciones presentadas en la competición, a menos que se acuerde lo contrario en un acuerdo por escrito entre el participante y la empresa patrocinadora. \nSin embargo, al participar en la competición, los participantes otorgan a la empresa patrocinadora una licencia no exclusiva, irrevocable, perpetua, mundial y libre de regalías para utilizar, modificar, reproducir y distribuir las soluciones presentadas con fines promocionales, de marketing y de mejora del producto. La empresa patrocinadora se compromete a respetar los derechos de autor y a atribuir la autoría de las soluciones a los participantes correspondientes en cualquier uso público de las mismas. \nLos participantes aceptan que la empresa patrocinadora pueda compartir las soluciones presentadas con terceros con fines de evaluación, promoción y desarrollo de la competición, pero sin ceder los derechos de propiedad intelectual de los participantes. \nCualquier acuerdo adicional sobre la propiedad intelectual de las soluciones presentadas debe ser acordado por escrito entre el participante y la empresa patrocinadora, y prevalecerá sobre lo establecido en estas bases legales." + }, + { + "title": "Normativas Legales", + "base": "Los participantes deben cumplir con las leyes y regulaciones aplicables. \nSe abordarán cuestiones legales como derechos de autor y propiedad intelectual según lo establecido en estas bases." + }, + { + "title": "Responsabilidades y Exenciones de Responsabilidad", + "base": "Las responsabilidades de los participantes y organizadores se establecerán de acuerdo con las disposiciones en estas bases. \nExenciones de responsabilidad específicas podrán ser aceptadas por los participantes." + }, + { + "title": "Disposiciones Finales", + "base": "La organización se reserva el derecho de realizar modificaciones o anexos sucesivos. \nSe contempla la resolución de conflictos según la legislación española y la jurisdicción de los tribunales españoles." + }, + { + "title": "Consideraciones Fiscales", + "base": "Los premios estarán sujetos al régimen fiscal aplicable según la legislación vigente." + }, + { + "title": "Cesión de Derechos de Imagen y Propiedad Intelectual", + "base": "Autorización para utilizar nombres, imágenes y datos personales con fines promocionales. \nCesión de derechos de propiedad intelectual e industrial a favor de la organización." + }, + { + "title": "Legislación Aplicable y Jurisdicción", + "base": "El concurso se rige por la legislación española. \nEn caso de conflicto, los tribunales españoles serán competentes." + } + ] + } } diff --git a/yarn.lock b/yarn.lock index 82150c9..9c39f46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1579,6 +1579,11 @@ "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" "version" "1.1.3" +"@remix-run/router@1.15.0": + "integrity" "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==" + "resolved" "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz" + "version" "1.15.0" + "@sheerun/mutationobserver-shim@^0.3.2": "integrity" "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==" "resolved" "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz" @@ -9131,7 +9136,7 @@ "strip-ansi" "5.2.0" "text-table" "0.2.0" -"react-dom@*", "react-dom@^17.0.1": +"react-dom@*", "react-dom@^17.0.1", "react-dom@>=16.8": "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" "version" "17.0.2" @@ -9160,6 +9165,21 @@ "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" "version" "17.0.2" +"react-router-dom@^6.22.0": + "integrity" "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==" + "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz" + "version" "6.22.0" + dependencies: + "@remix-run/router" "1.15.0" + "react-router" "6.22.0" + +"react-router@6.22.0": + "integrity" "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==" + "resolved" "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz" + "version" "6.22.0" + dependencies: + "@remix-run/router" "1.15.0" + "react-scripts@^3.0.1": "integrity" "sha512-LKEjBhVpEB+c312NeJhzF+NATxF7JkHNr5GhtwMeRS1cMeLElMeIu8Ye7WGHtDP7iz7ra4ryy48Zpo6G/cwWUw==" "resolved" "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz" @@ -9220,7 +9240,7 @@ optionalDependencies: "fsevents" "2.0.6" -"react@*", "react@^17.0.1", "react@17.0.2": +"react@*", "react@^17.0.1", "react@>=16.8", "react@17.0.2": "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "version" "17.0.2"