diff --git a/src/app/page.tsx b/src/app/page.tsx index be125a5..fcb8446 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,101 +1,25 @@ import ContentMedia from "@/components/ContentMedia/ContentMedia"; import Place from "@/components/Place/Place"; import Faq from "@/components/Faq/Faq"; -import { SponsorProps } from "@/components/SponsorList/Sponsor/Sponsor.types"; import SponsorList from "@/components/SponsorList/SponsorList"; import Container from "@/layouts/Container"; import Hero from "@/components/Hero/Hero"; import Speakers from "@/components/Speakers/Speakers"; +import { promises as fs } from 'fs'; +import { SpeakersTypeProps } from "@/components/Speakers/SpeakersProps"; +import { SponsorProps } from "@/components/SponsorList/Sponsor/Sponsor.types"; +import { PlaceDataProps } from "@/components/Place/PlaceProps"; -export default function Home() { - const sponsors: SponsorProps[] = [ - { - type: "platinum", - name: "Adobe", - logoSrc: "adobe.svg", - }, - { - type: "gold", - name: "Dn'D", - logoSrc: "dnd.svg", - }, - { - type: "gold", - name: "Hyvä", - logoSrc: "hyva.svg", - }, - { - type: "gold", - name: "Ati4 Group", - logoSrc: "ati4group.svg", - }, - { - type: "gold", - name: "Platform.sh", - logoSrc: "platformsh.svg", - }, - { - type: "gold", - name: "Blackbird", - logoSrc: "blackbird.svg", - }, - { - type: "gold", - name: "DATASOLUTION", - logoSrc: "datasolution.svg", - }, - { - type: "silver", - name: "PH2M", - logoSrc: "ph2m.svg", - }, - { - type: "silver", - name: "Sensefuel", - logoSrc: "sensefuel.svg", - }, - { - type: "silver", - name: "PayPlug", - logoSrc: "payplug.svg", - }, - { - type: "silver", - name: "Mollie", - logoSrc: "mollie.svg", - }, - { - type: "silver", - name: "Spiriit", - logoSrc: "spiriit.svg", - }, - { - type: "silver", - name: "Sutunam", - logoSrc: "sutunam.svg", - }, - { - type: "bronze", - name: "Nosto", - logoSrc: "nosto.svg", - }, - { - type: "bronze", - name: "Socloz", - logoSrc: "socloz.svg", - }, - { - type: "bronze", - name: "Akeneo", - logoSrc: "akeneo.svg", - }, - ]; +export default async function Home() { + const speakers: SpeakersTypeProps = JSON.parse(await fs.readFile(process.cwd() + '/src/data/speakers.json', 'utf8')); + const sponsors: SponsorProps[] = JSON.parse(await fs.readFile(process.cwd() + '/src/data/sponsors.json', 'utf8')); + const place: PlaceDataProps = JSON.parse(await fs.readFile(process.cwd() + '/src/data/place.json', 'utf8')); return (
- +
@@ -119,7 +43,7 @@ export default function Home() { imagePosition="left" imageWidth="40%" > - +
diff --git a/src/components/ButtonLink/ButtonLink.tsx b/src/components/ButtonLink/ButtonLink.tsx index 43c5475..02ee66b 100644 --- a/src/components/ButtonLink/ButtonLink.tsx +++ b/src/components/ButtonLink/ButtonLink.tsx @@ -80,7 +80,7 @@ const ButtonLink = ({ target={target} rel={rel} className={classNames( - "inline-block group rounded-3xl font-semibold duration-300", + "inline-block w-fit group rounded-3xl font-semibold duration-300", variant === "primary" ? "p-[3px]" : paddingClass, variantClass[variant] )}> diff --git a/src/components/Faq/Faq.tsx b/src/components/Faq/Faq.tsx index c5d2f35..69d078b 100644 --- a/src/components/Faq/Faq.tsx +++ b/src/components/Faq/Faq.tsx @@ -35,7 +35,7 @@ const Faq = () => { question: "Comment puis-je acheter des billets pour l'événement ?", icon: , answer: - "Les billets pour Meet Magento France 2025 seront bientôt disponibles ! Restez connectés.", + "Les billets pour Meet Magento France 2025 sont disponibles ! Rendez-vous sur la billeterie à partir du menu.", }, { question: diff --git a/src/components/Hero/Hero.tsx b/src/components/Hero/Hero.tsx index c173c5f..848f0de 100644 --- a/src/components/Hero/Hero.tsx +++ b/src/components/Hero/Hero.tsx @@ -14,13 +14,26 @@ const Hero = () => { -
-
- Save the date ! - Meet Magento arrive en France - - Rejoignez la communauté Magento et Adobe Commerce pour une journée d'innovations, d'échanges - et d'expertise, à ne pas manquer ! +
+
+ + Save the date ! + + + Meet Magento arrive en France + + + Rejoignez la communauté Magento et Adobe Commerce pour une journée d’innovations, d’échanges + et d’expertise, à ne pas manquer !
diff --git a/src/components/Place/Place.tsx b/src/components/Place/Place.tsx index e9c839f..38d89e4 100644 --- a/src/components/Place/Place.tsx +++ b/src/components/Place/Place.tsx @@ -1,7 +1,10 @@ import React from "react"; import Typography from "../Typography/Typography"; +import ButtonLink from "@/components/ButtonLink/ButtonLink"; +import {IoIosArrowForward} from "react-icons/io"; +import {PlaceProps} from "@/components/Place/PlaceProps"; -const Place = () => { +const Place = ({place}: PlaceProps) => { return (
@@ -11,25 +14,27 @@ const Place = () => { weight="semibold" underlineColor="primary-100" > - L’Étoile Business Center + {place.title}
- En plein coeur de Paris, à deux pas des Champs-Élysées + {place.subtitle} - 21-25 Rue Balzac, 75008 Paris + {place.address}
- Le 25 mars 2025, Meet Magento France se tiendra dans un cadre - d’exception : l’Étoile Business Center, à Paris. Situé à deux pas des - Champs-Élysées, ce lieu prestigieux, alliant élégance et modernité, - incarne la classe française. Son architecture lumineuse et ses espaces - raffinés en font l’écrin idéal pour une journée riche en échanges, - partages d’expériences et exploration des dernières innovations autour - de Magento et Adobe Commerce. + {place.description} + } + > + {place.label} +
); diff --git a/src/components/Place/PlaceProps.ts b/src/components/Place/PlaceProps.ts new file mode 100644 index 0000000..96594ae --- /dev/null +++ b/src/components/Place/PlaceProps.ts @@ -0,0 +1,15 @@ +import {ReactNode} from "react"; + +type PlaceType = { + title: ReactNode; + subtitle: ReactNode; + address: ReactNode; + description: ReactNode; + label: ReactNode; + url: string; +}; + +export type PlaceDataProps = PlaceType; +export type PlaceProps = { + place: PlaceType; +}; diff --git a/src/components/Speakers/Speaker/Speaker.tsx b/src/components/Speakers/Speaker/Speaker.tsx index db0980d..f088890 100644 --- a/src/components/Speakers/Speaker/Speaker.tsx +++ b/src/components/Speakers/Speaker/Speaker.tsx @@ -2,17 +2,9 @@ import React from "react"; import Image from "next/image"; import useWindowSize from "@/hooks/useWindowSize"; import { GrFormView } from "react-icons/gr"; +import { SpeakerProps } from "@/components/Speakers/Speaker/SpeakerProps"; -interface Speaker { - id: number; - name: string; - title: string; - company: string; - role: string; - image: string; -} - -const SpeakerCard = ({ speaker }: { speaker: Speaker }) => ( +const SpeakerCard = ({ speaker }: { speaker: SpeakerProps }) => (
{/* (
); -const Speaker = ({ speaker }: { speaker: Speaker }) => { +const Speaker = ({ speaker }: { speaker: SpeakerProps }) => { const { width } = useWindowSize(); return ( <> diff --git a/src/components/Speakers/Speaker/SpeakerProps.ts b/src/components/Speakers/Speaker/SpeakerProps.ts new file mode 100644 index 0000000..6c0710f --- /dev/null +++ b/src/components/Speakers/Speaker/SpeakerProps.ts @@ -0,0 +1,8 @@ +export type SpeakerProps = { + id: number; + name: string; + title: string; + company: string; + role: string; + image: string; +}; diff --git a/src/components/Speakers/Speakers.tsx b/src/components/Speakers/Speakers.tsx index d1943a0..eb73d7a 100644 --- a/src/components/Speakers/Speakers.tsx +++ b/src/components/Speakers/Speakers.tsx @@ -4,12 +4,13 @@ import Typography from "../Typography/Typography"; import SpeakersList from "./SpeakersList"; import ButtonLink from "@/components/ButtonLink/ButtonLink"; import { IoIosArrowForward } from "react-icons/io"; +import { SpeakersProps } from "@/components/Speakers/SpeakersProps"; -const Speakers = () => { +const Speakers = ({data}: SpeakersProps) => { return (
- +
@@ -19,28 +20,27 @@ const Speakers = () => { weight="semibold" underlineColor="secondary-100" > - Appel à speakers + {data.title}
- Vous êtes expert du E-Commerce ou passionné de Magento ? + {data.subtitle} - Partagez vos connaissances sur la scène de Meet Magento 2025 - France, le 25 mars à Paris. + {data.description}
} > - Rejoignez les conférenciers de MM25FR + {data.registrationLabel}
diff --git a/src/components/Speakers/SpeakersList.tsx b/src/components/Speakers/SpeakersList.tsx index 5e74ff9..7e161ff 100644 --- a/src/components/Speakers/SpeakersList.tsx +++ b/src/components/Speakers/SpeakersList.tsx @@ -11,74 +11,17 @@ import TopBanner from "@/components/TopBanner/TopBanner"; import Speaker from "./Speaker/Speaker"; import SpeakerPopIn from "./Speaker/SpeakerPopIn"; import ButtonLink from "@/components/ButtonLink/ButtonLink"; +import { SpeakerProps } from "@/components/Speakers/Speaker/SpeakerProps"; +import {SpeakersListProps} from "@/components/Speakers/SpeakersListProps"; -const speakers: Speaker[] = [ - { - id: 1, - name: "Régis Quintin", - title: "lorem ipsum", - company: "Adobe", - role: "Head of Commerce for Western Europe", - image: "/images/speakers/speaker.png", - }, - { - id: 2, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, - { - id: 3, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, - { - id: 4, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, - { - id: 5, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, - { - id: 6, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, - { - id: 7, - name: "Balvesh Rakkar", - title: "lorem ipsum", - company: "Scandiweb", - role: "Responsable technique", - image: "/images/speakers/speaker.png", - }, -]; - -const SpeakersList = () => { +const SpeakersList = ({speakers}: SpeakersListProps) => { const { width } = useWindowSize(); const swiperRef = React.useRef(null); - const [selectedSpeaker, setSelectedSpeaker] = React.useState( + const [selectedSpeaker, setSelectedSpeaker] = React.useState( null ); - const handleSpeakerClick = (speaker: Speaker) => { + const handleSpeakerClick = (speaker: SpeakerProps) => { setSelectedSpeaker(speaker); }; diff --git a/src/components/Speakers/SpeakersListProps.tsx b/src/components/Speakers/SpeakersListProps.tsx new file mode 100644 index 0000000..eb98d3f --- /dev/null +++ b/src/components/Speakers/SpeakersListProps.tsx @@ -0,0 +1,5 @@ +import {SpeakerProps} from "@/components/Speakers/Speaker/SpeakerProps"; + +export type SpeakersListProps = { + speakers: SpeakerProps[] +}; diff --git a/src/components/Speakers/SpeakersProps.tsx b/src/components/Speakers/SpeakersProps.tsx new file mode 100644 index 0000000..0e865ab --- /dev/null +++ b/src/components/Speakers/SpeakersProps.tsx @@ -0,0 +1,15 @@ +import {ReactNode} from "react"; +import {SpeakerProps} from "@/components/Speakers/Speaker/SpeakerProps"; + +type SpeakersType = { + title: ReactNode, + subtitle: ReactNode, + description: ReactNode, + registrationLabel: ReactNode, + registrationFormUrl: string, + speakers: SpeakerProps[] +}; +export type SpeakersTypeProps = SpeakersType; +export type SpeakersProps = { + data: SpeakersType; +}; diff --git a/src/components/Typography/Typography.tsx b/src/components/Typography/Typography.tsx index 36feec8..dc434d0 100644 --- a/src/components/Typography/Typography.tsx +++ b/src/components/Typography/Typography.tsx @@ -18,8 +18,8 @@ const Typography = ({ underlineColor, }: TypographyProps) => { const variants: Record = { - h1: "text-4xl md:text-5xl lg:text-6xl", - h2: "text-3xl md:text-4xl lg:text-5xl", + h1: "font-alt text-4xl md:text-5xl lg:text-5xl", + h2: "font-alt text-2xl md:text-3xl lg:text-3xl", h3: "text-2xl md:text-3xl lg:text-4xl", h4: "text-xl md:text-2xl lg:text-3xl", h5: "text-lg md:text-xl lg:text-2xl", diff --git a/src/data/data.json b/src/data/data.json new file mode 100644 index 0000000..381a16c --- /dev/null +++ b/src/data/data.json @@ -0,0 +1,3 @@ +{ + "ticketingUrl": "https://www.eventbrite.fr/e/billets-meet-magento-2025-france-1124570503649" +} diff --git a/src/data/place.json b/src/data/place.json new file mode 100644 index 0000000..06828a4 --- /dev/null +++ b/src/data/place.json @@ -0,0 +1,8 @@ +{ + "title": "L’Étoile Business Center", + "subtitle": "En plein coeur de Paris, à deux pas des Champs-Élysées", + "address": "21-25 Rue Balzac, 75008 Paris", + "description": "Le 25 mars 2025, Meet Magento France se tiendra dans un cadre d’exception : l’Étoile Business Center, à Paris. Situé à deux pas des Champs-Élysées, ce lieu prestigieux, alliant élégance et modernité, incarne la classe française. Son architecture lumineuse et ses espaces raffinés en font l’écrin idéal pour une journée riche en échanges, partages d’expériences et exploration des dernières innovations autour de Magento et Adobe Commerce.", + "label": "Préparer ma venue", + "url": "" +} diff --git a/src/data/speakers.json b/src/data/speakers.json new file mode 100644 index 0000000..3851ecd --- /dev/null +++ b/src/data/speakers.json @@ -0,0 +1,65 @@ +{ + "title": "Appel à speakers", + "subtitle": "Vous êtes expert du E-Commerce ou passionné de Magento ?", + "description": "Partagez vos connaissances sur la scène de Meet Magento 2025 France, le 25 mars à Paris.", + "registrationLabel": "Rejoignez les conférenciers de MM25FR", + "registrationFormUrl": "https://forms.gle/M6Y8V2xP7PGw5VD8A", + "speakers": [ + { + "id": 1, + "name": "Régis Quintin", + "title": "lorem ipsum", + "company": "Adobe", + "role": "Head of Commerce for Western Europe", + "image": "/images/speakers/speaker.png" + }, + { + "id": 2, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + }, + { + "id": 3, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + }, + { + "id": 4, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + }, + { + "id": 5, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + }, + { + "id": 6, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + }, + { + "id": 7, + "name": "Balvesh Rakkar", + "title": "lorem ipsum", + "company": "Scandiweb", + "role": "Responsable technique", + "image": "/images/speakers/speaker.png" + } + ] +} diff --git a/src/data/sponsors.json b/src/data/sponsors.json new file mode 100644 index 0000000..666cb05 --- /dev/null +++ b/src/data/sponsors.json @@ -0,0 +1,82 @@ +[ + { + "type": "platinum", + "name": "Adobe", + "logoSrc": "adobe.svg" + }, + { + "type": "gold", + "name": "Dn'D", + "logoSrc": "dnd.svg" + }, + { + "type": "gold", + "name": "Hyvä", + "logoSrc": "hyva.svg" + }, + { + "type": "gold", + "name": "Ati4 Group", + "logoSrc": "ati4group.svg" + }, + { + "type": "gold", + "name": "Platform.sh", + "logoSrc": "platformsh.svg" + }, + { + "type": "gold", + "name": "Blackbird", + "logoSrc": "blackbird.svg" + }, + { + "type": "gold", + "name": "DATASOLUTION", + "logoSrc": "datasolution.svg" + }, + { + "type": "silver", + "name": "PH2M", + "logoSrc": "ph2m.svg" + }, + { + "type": "silver", + "name": "Sensefuel", + "logoSrc": "sensefuel.svg" + }, + { + "type": "silver", + "name": "PayPlug", + "logoSrc": "payplug.svg" + }, + { + "type": "silver", + "name": "Mollie", + "logoSrc": "mollie.svg" + }, + { + "type": "silver", + "name": "Spiriit", + "logoSrc": "spiriit.svg" + }, + { + "type": "silver", + "name": "Sutunam", + "logoSrc": "sutunam.svg" + }, + { + "type": "bronze", + "name": "Nosto", + "logoSrc": "nosto.svg" + }, + { + "type": "bronze", + "name": "Socloz", + "logoSrc": "socloz.svg" + }, + { + "type": "bronze", + "name": "Akeneo", + "logoSrc": "akeneo.svg" + } +]