diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Informations.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Informations.tsx new file mode 100644 index 000000000..ac9f68ef4 --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Informations.tsx @@ -0,0 +1,56 @@ +"use client"; +import { useContext } from "react"; +import { LanguageContext } from "contexts/con/LanguageContext"; +import SectionTitle from "components/con/common/typography/SectionTitle"; +import Button from "components/con/common/Button"; +import SectionSubTitle from "components/con/common/typography/SectionSubtitle"; + +const Arrow = () => ( + + + +); + +export default function Informations() { + const { t } = useContext(LanguageContext); + return ( +
+
+ + {t("2025.cfp.title")} + + {t("2025.cfp.subtitle")} +
+ + {t("2025.cfp.informations")} + +
    + {[1, 2, 3, 4, 5, 6].map((index) => ( +
  • + +

    {t(`2025.cfp.point_${index}`)}

    +
  • + ))} +
+ +
+
+
+ ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Package.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Package.tsx new file mode 100644 index 000000000..cfbca09e0 --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Package.tsx @@ -0,0 +1,37 @@ +"use client"; +import { useContext } from "react"; +import { LanguageContext } from "contexts/con/LanguageContext"; +import SectionTitle from "components/con/common/typography/SectionTitle"; + +export default function Package() { + const { t } = useContext(LanguageContext); + return ( +
+ + {t("2025.cfp.package.title")} + +
+
+ +
+
+
+ {t("2025.cfp.package.subtitle")} +
+
    + {[1, 2, 3, 4, 5, 6].map((index) => ( +
  • + + {t(`2025.cfp.package.point_${index}`)} +
  • + ))} +
+
+
+
+ ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Subject.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Subject.tsx new file mode 100644 index 000000000..3e7cb250f --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Subject.tsx @@ -0,0 +1,65 @@ +"use client"; +import { useContext } from "react"; +import { LanguageContext } from "contexts/con/LanguageContext"; +import SectionTitle from "components/con/common/typography/SectionTitle"; +import Button from "components/con/common/Button"; +import SectionSubTitle from "components/con/common/typography/SectionSubtitle"; + +export default function Informations() { + const { t, getLocaleDictionary } = useContext(LanguageContext); + const categories = getLocaleDictionary?.()[2025].cfp.subject.categories || []; + return ( +
+
+ + {t("2025.cfp.subject.title")} + + {t("2025.cfp.subject.subtitle")} +
+ {categories.map((c) => { + return ( +
+
+ +
+
+
+

+ {c.title} +

+
+ {c.points.map((p, i) => ( +
+ +

+

+ ))} +
+
+
+ ); + })} +
+ +
+
+ ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Techno.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Techno.tsx new file mode 100644 index 000000000..9cd546730 --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/Techno.tsx @@ -0,0 +1,23 @@ +"use client"; +import { useContext } from "react"; +import { LanguageContext } from "contexts/con/LanguageContext"; +import SectionTitle from "components/con/common/typography/SectionTitle"; +import { Logos } from "./logos"; + +export default function Technos() { + const { t } = useContext(LanguageContext); + return ( +
+ + {t("2025.cfp.techno.title")} + +
+
+ + + +
+
+
+ ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/logos.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/logos.tsx new file mode 100644 index 000000000..2892dd64a --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/components/logos.tsx @@ -0,0 +1,16 @@ +export function Logos() { + return ( + <> + + + + + + + + + + + + ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/call-for-papers/page.tsx b/pwa/app/(con)/[locale]/con/2025/call-for-papers/page.tsx new file mode 100644 index 000000000..eb24c9e3b --- /dev/null +++ b/pwa/app/(con)/[locale]/con/2025/call-for-papers/page.tsx @@ -0,0 +1,38 @@ +import { Locale, i18n } from "i18n/i18n-config"; +import { Metadata } from "next"; +import Package from "./components/Package"; +import Informations from "./components/Informations"; +import Subject from "./components/Subject"; +import Technos from "./components/Techno"; + +type Props = { + params: { locale: Locale }; +}; +export async function generateMetadata({ params }: Props): Promise { + const locale = params.locale || i18n.defaultLocale; + const dictionary = await import(`i18n/meta/${locale}.json`); + + return { + title: { + absolute: dictionary[2025].title, + template: `%s - API Platform Conference 2025`, + }, + alternates: { + languages: { + en: locale === "en" ? undefined : "/con/2025", + fr: locale === "fr" ? undefined : "/fr/con/2024", + }, + }, + }; +} + +export default async function Page({ params }: { params: { locale: Locale } }) { + return ( +
+ + + + +
+ ); +} diff --git a/pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx b/pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx index 5af5b93b5..bbd7d2e2c 100644 --- a/pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx +++ b/pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx @@ -144,10 +144,8 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => { edition: "2025", link: ( {t("2025.our_speakers.subtitle_link")} @@ -164,8 +162,11 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => { {t("speakers.see_all")} ) : null} -
diff --git a/pwa/components/con/common/typography/SectionTitle/index.tsx b/pwa/components/con/common/typography/SectionTitle/index.tsx index 974ee23da..d495be4c1 100644 --- a/pwa/components/con/common/typography/SectionTitle/index.tsx +++ b/pwa/components/con/common/typography/SectionTitle/index.tsx @@ -39,10 +39,10 @@ export default function SectionTitle({ ) : (

diff --git a/pwa/components/con/layout/ContactCard.tsx b/pwa/components/con/layout/ContactCard.tsx index bf47acc14..94d175766 100644 --- a/pwa/components/con/layout/ContactCard.tsx +++ b/pwa/components/con/layout/ContactCard.tsx @@ -55,8 +55,8 @@ export default function ContactCard() {

+
diff --git a/pwa/components/con/layout/Footer.tsx b/pwa/components/con/layout/Footer.tsx index 47b35cdbc..394b10da2 100644 --- a/pwa/components/con/layout/Footer.tsx +++ b/pwa/components/con/layout/Footer.tsx @@ -70,22 +70,22 @@ export default function Footer({ {t("follow_us")} - - Mastodon + + Twitter - - Twitter + + Bluesky LinkedIn + + + Mastodon + ) : null} diff --git a/pwa/components/icons/social.tsx b/pwa/components/icons/social.tsx index f6bb24e91..48c24163d 100644 --- a/pwa/components/icons/social.tsx +++ b/pwa/components/icons/social.tsx @@ -19,11 +19,30 @@ export function Github({ className }: IconProps) { export function Twitter({ className }: IconProps) { return ( + ); +} + +export function Bluesky({ className }: IconProps) { + return ( + - + ); } diff --git a/pwa/components/layout/Footer.tsx b/pwa/components/layout/Footer.tsx index 37d52095f..eec82eae6 100644 --- a/pwa/components/layout/Footer.tsx +++ b/pwa/components/layout/Footer.tsx @@ -1,5 +1,5 @@ import Logo from "components/common/Logo"; -import { Github, Mastodon, Twitter } from "components/icons/social"; +import { Bluesky, Github, Mastodon, Twitter } from "components/icons/social"; import footerData from "data/footer"; import Link, { LinkProps } from "components/common/Link"; import { PropsWithChildren } from "react"; @@ -110,11 +110,11 @@ export default function Footer() { - + + + +
diff --git a/pwa/components/layout/Nav.tsx b/pwa/components/layout/Nav.tsx index 43fad8b62..b127dbfc1 100644 --- a/pwa/components/layout/Nav.tsx +++ b/pwa/components/layout/Nav.tsx @@ -2,7 +2,7 @@ import classNames from "classnames"; import Logo from "components/common/Logo"; import ThemeToggle from "components/common/ThemeToggle"; -import { Github, Mastodon, Twitter } from "components/icons/social"; +import { Bluesky, Github, Mastodon, Twitter } from "components/icons/social"; import { usePathname } from "next/navigation"; import NavLink from "./NavLink"; import { useState, useEffect } from "react"; @@ -150,11 +150,11 @@ export default function Nav({ withPreheader = false }) { - + + + +
>; + getLocaleDictionary?: () => Awaited>; Translate: ({ translationKey, translationParams, @@ -61,9 +62,11 @@ export function LanguageProvider({ ); }; + const getLocaleDictionary = () => dictionary; + return ( {children} diff --git a/pwa/i18n/dictionaries/en.json b/pwa/i18n/dictionaries/en.json index cb6fab6b4..69a18f57f 100644 --- a/pwa/i18n/dictionaries/en.json +++ b/pwa/i18n/dictionaries/en.json @@ -126,16 +126,89 @@ }, "our_speakers": { "speaker": { "coming_soon": "coming soon" }, - "subtitle": "The call for papers will open in January 2025. {{link}} about the opening!", - "subtitle_link": "Stay updated", + "subtitle": "The call for papers will open in January 2025. {{link}} about our speaker pack and expected topics.", + "subtitle_link": "Find out more", "title": "Become a speaker", - "see_2024": "See 2024 speakers" + "cfp": "More info about the CFP" }, "venue": { "subtitle": "The on-site edition will take place in Lille, meeting point of European cities and touristic capital of the Flemish region. If you can't come to Lille, you can watch the event online.", "tip_title": "Important", "tip": "Hotel rooms have been negotiated and pre-booked to make your travel easier. Hotel demand is very high in Lille at this time of year: take a look at the available rooms and book them as soon as possible {{tip_link}}", "tip_link": "by following this link" + }, + "cfp": { + "title": "Call for papers", + "subtitle": "The call for papers for API Platform Conference 2025 opens on January 6 and runs until March 23. Final speakers will be announced starting May 14. Submit your pitch, and with a bit of luck, you could join us for this special anniversary edition!", + "package": { + "title": "Speaker package", + "subtitle": "Speaker package includes:", + "point_1": "Travel to Lille covered", + "point_2": "Speakers' dinner on Wednesday, September 17", + "point_3": "Entrance to the conference and to the birthday party on Thursday 18th", + "point_4": "Two hotel nights for speakers based in France, or three nights for speakers coming from outside France", + "point_5": "If your employer can cover your travel and hotel, we’re happy to list them as a sponsor. Employer sponsorship allows us to invite more international speakers to the conference.", + "point_6": "A gift box with some attentions." + }, + "techno": { + "title": "Talk us about your favorite techno!" + }, + "subject": { + "title": "Talk categories", + "subtitle": "We are looking forward to talks on (but not limited to) these topics:", + "button_subscribe": "Subscribe to our waiting list", + "categories": [ + { + "icon": "api-platform-ecosystem", + "title": "API Platform and its ecosystem", + "points": [ + "You have discovered new features, a use case, a migration story or a contribution to share with the API Platform framework.", + "You have built applications for real-world enterprise scenarios and your talk will showcase your development’s journey – from initial adoption to implementation.", + "You have used API Platform as a key tool in your API design." + ] + }, + { + "icon": "going-further-api-p", + "title": "Going further with API Platform", + "points": [ + "JavaScript - API Platform is not only about PHP: in addition to its powerful admin generator, API Platform also features a client generator capable of scaffolding fully functional applications with Next.js, Nuxt.js, React/Redux, Vue.js, Quasar, and Vuetify for both PWAs and SPAs. Share your insights, contributions, and discoveries about it!", + "Devops - you host or you have deployed a project with API Platform: tell us about it!", + "Share your experiments on using AI on your web project." + ] + }, + { + "icon": "franken-php", + "title": "FrankenPHP", + "points": [ + "You’ve optimized your application’s performance or migrated it with FrankenPHP.", + "You’ve deployed FrankenPHP natively or using a cloud hosting solution. Share your feedback with us!" + ] + }, + { + "icon": "frameworks", + "title": "Frameworks and tools", + "points": [ + "Share with us your findings or best practices regarding tools from the PHP ecosystem.", + "Tell us about the tools and good practices you use to build your software’s architecture. " + ] + }, + { + "icon": "society", + "title": "Society", + "points": [ + "Different management, corporate culture, mental health, agility, or the struggle for greater diversity and inclusion in tech... We always open the floor to more cross-cutting topics during our event." + ] + } + ] + }, + "informations": "Informations", + "point_1": "The API Platform Conference is an international event held in France, featuring two parallel tracks over two days in both English and French.", + "point_2": "The talks are 20 or 40 min (Q&A included).", + "point_3": "The event is hybrid: your talk will be streamed live online and recorded. Unless you advise otherwise, it will be published on our YouTube channel after the event.", + "point_4": "Submitting multiple proposals is encouraged, but it does not necessarily increase your chances of selection.", + "point_5": "While we prefer original content, submitting a previously presented conference topic is not grounds for elimination. Each talk is unique and never delivered in the same way.", + "point_6": "Speakers are expected to uphold the same Code of Conduct as attendees and staff.", + "button_subscribe": "Don't miss the CFP opening" } }, "an_event_by": "an event by", diff --git a/pwa/i18n/dictionaries/fr.json b/pwa/i18n/dictionaries/fr.json index 877118ae9..cbe433d00 100644 --- a/pwa/i18n/dictionaries/fr.json +++ b/pwa/i18n/dictionaries/fr.json @@ -37,7 +37,9 @@ "2022": { "baseline": "Le seul événement consacré au framework API Platform et à son écosystème", "date": "15 et 16 septembre 2022 - Lille & en ligne", - "our_speakers": { "subtitle": "Notre programmation est disponible !" }, + "our_speakers": { + "subtitle": "Notre programmation est disponible !" + }, "review": { "subtitle_1": "Merci de votre confiance et d'avoir suivi cette seconde édition.", "subtitle_2": "Nous espèrons que vous l'avez autant apprécié que nous avons pris plaisir à l'organiser.", @@ -53,7 +55,9 @@ "baseline": "La conférence internationale consacrée au framework API Platform et à son écosystème.", "date": "21 et 22 septembre 2023 - Lille & en ligne", "our_speakers": { - "speaker": { "coming_soon": "coming soon" }, + "speaker": { + "coming_soon": "coming soon" + }, "subtitle": "Le programme est sorti ! Architecture, rex, sécurité, tests ou bonnes pratiques : notre liste de conférencières et conférenciers couvre un large éventail de sujets à ne pas manquer en septembre !", "subtitle_link": "Contactez-nous !", "title": "Nos speakers" @@ -76,7 +80,9 @@ "baseline": "Le seul événement consacré à API Platform et son écosystème de retour les 19 et 20 septembre 2024, à Lille et en ligne.", "date": "19 et 20 septembre 2024 - Lille & en ligne", "our_speakers": { - "speaker": { "coming_soon": "Prochainement" }, + "speaker": { + "coming_soon": "Prochainement" + }, "subtitle": "Découvrez dès à présent les speakers qui monteront sur scène les 19 et 20 septembre prochains à Lille. Retours d'expérience, architecture, performances ou encore IA... Découvrez celles et ceux que vous rencontrerez prochainement !", "subtitle_link": "Contactez-nous !", "title": "Nos speakers" @@ -108,11 +114,13 @@ "link": "notre récap" }, "our_speakers": { - "speaker": { "coming_soon": "Prochainement" }, - "subtitle": "Le call for papers ouvrira en janvier 2025. {{link}} sur l’ouverture des candidatures !", - "subtitle_link": "Restez informés", + "speaker": { + "coming_soon": "Prochainement" + }, + "subtitle": "Le call for papers ouvrira le 6 janvier 2025. {{link}} ainsi que les sujets que nous attendons", + "subtitle_link": "Découvrez notre pack speaker", "title": "Devenez speaker", - "see_2024": "Voir les speakers de 2024" + "cfp": "Plus d'infos sur le CFP" }, "missing_conferences": { "subtitle": "Abonnez-vous à {{link}} pour découvrir les publications du replay cet hiver !", @@ -124,6 +132,79 @@ "tip_title": "Important", "tip": "Des chambres d’hôtels ont été spécialement négociées et bloquées pour faciliter votre déplacement à Lille. La demande hôtelière est très élevée à Lille à cette époque de l’année : jetez un œil aux chambres disponibles et réservez-les dès que possible {{tip_link}}", "tip_link": "en suivant ce lien" + }, + "cfp": { + "title": "Call for papers", + "subtitle": "Le call for papers de l'API Platform Conference 2025 ouvrira du 6 janvier au 23 mars. Le programme sera annoncé à partir du 14 mai. Proposez-nous un sujet ! Avec un peu de chance, vous ferez partie des speakers de cette édition anniversaire.", + "package": { + "title": "Speaker package", + "subtitle": "Votre prise en charge en tant que speaker :", + "point_1": "Remboursement de votre transport.", + "point_2": "Accès au dîner des speakers, prévu le mercredi 17 septembre à 20h.", + "point_3": "Accès complet à la conférence et à la soirée d'anniversaire prévue le jeudi 18 septembre.", + "point_4": "Deux nuits d'hôtel sont prévues pour les speakers résidant en France, et trois nuits si vous vivez à l'étranger ou si votre trajet nécessite plus de 6 heures de voyage.", + "point_5": "Si votre société peut couvrir vos frais de déplacement et d’hôtel, nous serons ravis de la mentionner comme sponsor de l'événement. Ce soutien nous permet d'accueillir davantage de speakers internationaux, et d'améliorer encore plus votre expérience lors de la conférence.", + "point_6": "Un coffret cadeau." + }, + "techno": { + "title": "Partagez-nous votre savoir !" + }, + "subject": { + "title": "Thématiques", + "subtitle": "Nous recherchons des talks sur ces sujets (mais pas uniquement) :", + "button_subscribe": "Restez informé·e sur le CFP", + "categories": [ + { + "icon": "api-platform-ecosystem", + "title": "API Platform et son écosystème", + "points": [ + "Vous avez découvert de nouvelles fonctionnalités, vous avez un cas d'usage, une expérience de migration ou une contribution à partager avec le framework API Platform.", + "Vous avez utilisé API Platform dans le cadre d'un projet client, et votre talk présentera votre parcours de développement – de la mise en place au déploiement.", + "Vous avez utilisé API Platform comme un outil clé dans la conception de vos API." + ] + }, + { + "icon": "going-further-api-p", + "title": "Aller plus loin avec API Platform", + "points": [ + "JavaScript - API Platform n'est pas qu'un outil PHP : en plus de son générateur d'interfaces d'administration, API Platform propose également un générateur de client capable de créer des applications entièrement fonctionnelles avec Next.js, Nuxt.js, React/Redux, Vue.js, Quasar ou Vuetify. Partagez-nous vos contributions et découvertes à ce sujet !", + "DevOps - Vous hébergez ou avez déployé un projet avec API Platform : racontez-nous votre expérience !", + "Partagez vos expériences sur l'utilisation de l'IA dans votre projet web." + ] + }, + { + "icon": "franken-php", + "title": "FrankenPHP", + "points": [ + "Vous avez optimisé les performances de votre application ou l’avez migrée avec FrankenPHP.", + "Vous avez déployé FrankenPHP de manière native ou en utilisant une solution d’hébergement Cloud. Partagez vos retours !" + ] + }, + { + "icon": "frameworks", + "title": "Frameworks et outils", + "points": [ + "Partagez avec nous vos découvertes ou vos meilleures pratiques concernant les outils de l’écosystème PHP.", + "Parlez-nous des outils et des bonnes pratiques que vous utilisez pour construire l’architecture de vos applications. " + ] + }, + { + "icon": "society", + "title": "Societé", + "points": [ + "Management, RH, culture d'entreprise, santé mentale, agilité, combat pour une plus grande diversité et inclusion dans la tech... Nous laissons toujours la place à des sujets transversaux lors de notre événement." + ] + } + ] + }, + "informations": "Informations", + "point_1": "L'API Platform Conference est une conférence internationale qui se déroule à Lille pendant deux jours, avec deux scènes parallèles, en anglais et en français.", + "point_2": "Les conférences durent 20 ou 40 min (questions/réponses incluses).", + "point_3": "L'événement est hybride : en plus de se dérouler à Lille, votre talk sera diffusé en direct sur Internet. Sauf mention contraire, votre conférence sera ensuite mise en ligne sur notre chaîne YouTube après l'événement", + "point_4": "Proposer de nombreux sujets est encouragé, mais n'augmente pas nécessairement vos chances de sélection.", + "point_5": "Nous préférons les sujets inédits, mais il n'est pas éliminatoire de proposer un sujet déjà donné dans une autre conférence : chaque talk est unique et peut évoluer au fil du temps.", + "point_6": "Les speakers sont soumis au même code de conduite que les participants et le staff.", + "button_subscribe": "Restez informé·e sur le CFP" } }, "an_event_by": "Un événement organisé par", @@ -215,7 +296,9 @@ } }, "or_follow_us": "ou suivez-nous sur nos réseaux", - "partners": { "title": "Nos partenaires" }, + "partners": { + "title": "Nos partenaires" + }, "pricing": { "certificate_needed": "Un justificatif sera demandé", "conference": { @@ -238,8 +321,12 @@ "subtitle": "Formez-vous au framework API Platform avec ses créateurs" } }, - "review": { "button": "Revivez nos moments clés" }, - "schedule": { "title": "Découvrez notre agenda" }, + "review": { + "button": "Revivez nos moments clés" + }, + "schedule": { + "title": "Découvrez notre agenda" + }, "see_details": "Plus de détails", "speakers": { "see_all": "Voir tous les speakers", diff --git a/pwa/public/fonts/api-platform-icon.eot b/pwa/public/fonts/api-platform-icon.eot index 3fcd54cff..16f4f5f33 100644 Binary files a/pwa/public/fonts/api-platform-icon.eot and b/pwa/public/fonts/api-platform-icon.eot differ diff --git a/pwa/public/fonts/api-platform-icon.svg b/pwa/public/fonts/api-platform-icon.svg index 0ffcc3b81..a2bea495d 100644 --- a/pwa/public/fonts/api-platform-icon.svg +++ b/pwa/public/fonts/api-platform-icon.svg @@ -3,7 +3,7 @@ Generated by IcoMoon - + @@ -24,7 +24,7 @@ - + @@ -35,6 +35,7 @@ + diff --git a/pwa/public/fonts/api-platform-icon.ttf b/pwa/public/fonts/api-platform-icon.ttf index eaa3807e9..4a33b5c40 100644 Binary files a/pwa/public/fonts/api-platform-icon.ttf and b/pwa/public/fonts/api-platform-icon.ttf differ diff --git a/pwa/public/fonts/api-platform-icon.woff b/pwa/public/fonts/api-platform-icon.woff index 63afddd9f..261325760 100644 Binary files a/pwa/public/fonts/api-platform-icon.woff and b/pwa/public/fonts/api-platform-icon.woff differ diff --git a/pwa/public/images/con/2025/cfp/JS.png b/pwa/public/images/con/2025/cfp/JS.png new file mode 100644 index 000000000..c2f7c099a Binary files /dev/null and b/pwa/public/images/con/2025/cfp/JS.png differ diff --git a/pwa/public/images/con/2025/cfp/api-platform-ecosystem.png b/pwa/public/images/con/2025/cfp/api-platform-ecosystem.png new file mode 100644 index 000000000..b18449de7 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/api-platform-ecosystem.png differ diff --git a/pwa/public/images/con/2025/cfp/api-platform.png b/pwa/public/images/con/2025/cfp/api-platform.png new file mode 100644 index 000000000..2acf19758 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/api-platform.png differ diff --git a/pwa/public/images/con/2025/cfp/caddy.png b/pwa/public/images/con/2025/cfp/caddy.png new file mode 100644 index 000000000..307d51a77 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/caddy.png differ diff --git a/pwa/public/images/con/2025/cfp/elastic.png b/pwa/public/images/con/2025/cfp/elastic.png new file mode 100644 index 000000000..c499ce60e Binary files /dev/null and b/pwa/public/images/con/2025/cfp/elastic.png differ diff --git a/pwa/public/images/con/2025/cfp/frameworks.png b/pwa/public/images/con/2025/cfp/frameworks.png new file mode 100644 index 000000000..8c4129957 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/frameworks.png differ diff --git a/pwa/public/images/con/2025/cfp/franken-php.png b/pwa/public/images/con/2025/cfp/franken-php.png new file mode 100644 index 000000000..430ad60d8 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/franken-php.png differ diff --git a/pwa/public/images/con/2025/cfp/frankenphp.png b/pwa/public/images/con/2025/cfp/frankenphp.png new file mode 100644 index 000000000..f9443c4d5 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/frankenphp.png differ diff --git a/pwa/public/images/con/2025/cfp/going-further-api-p.png b/pwa/public/images/con/2025/cfp/going-further-api-p.png new file mode 100644 index 000000000..2cd58ee89 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/going-further-api-p.png differ diff --git a/pwa/public/images/con/2025/cfp/laravel.png b/pwa/public/images/con/2025/cfp/laravel.png new file mode 100644 index 000000000..58f126659 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/laravel.png differ diff --git a/pwa/public/images/con/2025/cfp/php.png b/pwa/public/images/con/2025/cfp/php.png new file mode 100644 index 000000000..9614669c6 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/php.png differ diff --git a/pwa/public/images/con/2025/cfp/rabbitmq.png b/pwa/public/images/con/2025/cfp/rabbitmq.png new file mode 100644 index 000000000..b26d1654f Binary files /dev/null and b/pwa/public/images/con/2025/cfp/rabbitmq.png differ diff --git a/pwa/public/images/con/2025/cfp/react-admin.png b/pwa/public/images/con/2025/cfp/react-admin.png new file mode 100644 index 000000000..306af3553 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/react-admin.png differ diff --git a/pwa/public/images/con/2025/cfp/society.png b/pwa/public/images/con/2025/cfp/society.png new file mode 100644 index 000000000..31d3c6e70 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/society.png differ diff --git a/pwa/public/images/con/2025/cfp/speaker-gift.jpg b/pwa/public/images/con/2025/cfp/speaker-gift.jpg new file mode 100644 index 000000000..b3219dda0 Binary files /dev/null and b/pwa/public/images/con/2025/cfp/speaker-gift.jpg differ diff --git a/pwa/public/images/con/2025/cfp/xdebug.png b/pwa/public/images/con/2025/cfp/xdebug.png new file mode 100644 index 000000000..d9ad38dea Binary files /dev/null and b/pwa/public/images/con/2025/cfp/xdebug.png differ diff --git a/pwa/styles/icons.css b/pwa/styles/icons.css index 11c2a89d0..69fd6b268 100644 --- a/pwa/styles/icons.css +++ b/pwa/styles/icons.css @@ -124,5 +124,9 @@ span[class^='icon-'], span[class*=' icon-'], .icon-mastodon:before { content: '\e919'; } +.icon-bluesky:before { + content: '\e918'; +} +