Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ ADD --chmod=500 https://caddyserver.com/api/download?os=linux&arch=$TARGETARCH&p

COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile

#Create the log repository due this issue : https://github.com/caddyserver/caddy/issues/6766
RUN mkdir -p /var/log/caddy

# Prod Caddy image
FROM caddy_base AS caddy_prod

Expand Down
15 changes: 12 additions & 3 deletions pwa/app/(con)/[locale]/con/2025/call-for-papers/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,22 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {

return {
title: {
absolute: dictionary[2025].title,
absolute: dictionary["call-for-papers"].title,
template: `%s - API Platform Conference 2025`,
},
description: dictionary["call-for-papers"].description,
openGraph: {
title: `${dictionary["call-for-papers"].title} - API Platform Conference`,
description: dictionary["call-for-papers"].description,
},
twitter: {
title: `${dictionary["call-for-papers"].title} - API Platform Conference`,
description: dictionary["call-for-papers"].description,
},
alternates: {
languages: {
en: locale === "en" ? undefined : "/con/2025",
fr: locale === "fr" ? undefined : "/fr/con/2024",
en: locale === "en" ? undefined : "/con/2025/call-for-papers",
fr: locale === "fr" ? undefined : "/fr/con/2025/call-for-papers",
},
},
};
Expand Down
143 changes: 87 additions & 56 deletions pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ import Button from "components/con/common/Button";
import SpeakerList from "components/con/speakers/SpeakerList";
import SectionTitle from "components/con/common/typography/SectionTitle";
import SectionSubTitle from "components/con/common/typography/SectionSubtitle";
import Web from "components/con/common/Web";
import { currentEdition } from "data/con/editions";
import Wave from "components/con/common/Wave";
import Venue from "components/con/home/Venue";
import Image from "next/image";
import Partners from "components/con/home/Partners";
import LookingSponsorCard from "components/con/home/LookingSponsorCard";
import { Partner, Speaker } from "types/con";
import { useContext } from "react";
import { LanguageContext } from "contexts/con/LanguageContext";
import Section from "components/con/home/Section";
import PictureGallery from "components/con/common/PictureGallery";
import prices from "data/con/2025/prices";
import Logo from "./Logo";
import AfterMovie from "app/con/2024/components/AfterMovie";
import PricingCard from "components/con/home/Pricing/PricingCard";
import BuyButton from "components/con/common/BuyButton";

type HomePageProps = {
speakers: Speaker[];
Expand All @@ -39,65 +39,29 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
<p className="flex-1 text-lg md:text-xl font-extrabold pb-6 lg:text-3xl md:text-left">
{t("2025.baseline")}
</p>
<p className="flex-1 text-sm md:text-md font-extrabold pb-6 lg:text-lg md:text-left">
{t("2025.subbaseline")}
</p>
<div className="flex gap-2">
<Button className="pink" to={`/${locale}/con/2024/review`}>
{t("2025.previous_edition")}
{currentEdition === "2025" && (
<BuyButton className="mr-2" id="cover">
{t("buy_tickets")}
</BuyButton>
)}
<Button empty to={`/${locale}/con/2025/call-for-papers`}>
{t("2025.cfp.title")}
</Button>
</div>
</div>
</div>
<Wave className="absolute opacity-30 z-0 bottom-0 h-[60vh] right-[7%] top-[63%] -translate-y-1/2" />
</Section>
<Section
section="lastYear"
className="bg-white z-10 relative pb-10 overflow-y-clip"
>
<div className="container text-center">
<SectionTitle>
<Translate translationKey="last_edition.title" />
</SectionTitle>
<SectionSubTitle>
<Translate
translationKey="2025.see_review.subtitle"
translationParams={{
edition: "2024",
link: (
<a href={`/${locale}/con/2024/review`} className="link">
{t("2025.see_review.link")}
</a>
),
}}
/>
</SectionSubTitle>
<PictureGallery
className="py-4"
link="https://www.flickr.com/photos/194052559@N02/albums/72177720320499314/"
>
{images.map((image: string) => (
<Image
className="object-cover"
key={image}
fill
src={image}
alt=""
sizes="(max-width: 640px) 200px, (max-width: 768px) 240px, (max-width: 1536px) 300px, 400px"
/>
))}
</PictureGallery>
</div>
</Section>
<Section
section="speakers"
className="z-10 relative py-4 overflow-x-hidden text-white"
className="bg-white z-10 relative py-4 overflow-x-hidden"
>
<div className="container text-center">
<SectionTitle dark h1>
<SectionTitle h1>
<Translate translationKey="2025.our_speakers.title" />
</SectionTitle>
<SectionSubTitle dark>
<SectionSubTitle>
<Translate
translationKey="2025.our_speakers.subtitle"
translationParams={{
Expand Down Expand Up @@ -130,15 +94,86 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
</Button>
</div>
</Section>
{currentEdition === "2025" && (
<Section
className="relative py-10 before:bg-grey before:h-[calc(100%-500px)] before:absolute before:left-0 before:bottom-0 before:w-full after:bg-wave2 after:w-[1300px] after:h-[800px] after:absolute after:top-24 after:left-1/2 after:bg-top after:bg-contain after:opacity-50 after:bg-no-repeat after:-translate-x-1/2 after:rotate-6"
section="pricing"
>
<div className="container relative z-10">
<SectionTitle dark>
<Translate translationKey="pricing.title" />
</SectionTitle>
<div className="max-w-4xl mx-auto flex flex-row flex-wrap justify-center">
{prices.map((price) => (
<PricingCard key={price.id} price={price} />
))}
<div className="w-full self-center max-w-md mt-10 | lg:pl-10 lg:mt-0 lg:w-1/3">
<div className="p-5 dotted-corner flex flex-col items-center text-center bg-blue bg-blue-gradient shadow-md border-blue-dark border-4">
<span className="font-bold text-white leading-tight font-title uppercase lined-center lined-white relative">
{t("pricing.student")}
</span>
<div className="mt-2 text-blue-black/80 font-semibold">
<Translate translationKey="pricing.free_ticket" />
</div>
<Button
size="small"
square
className="white mt-2 mb-5"
to="mailto:events@les-tilleuls.coop"
>
{t("contact_us")}
</Button>
<small className="text-xs text-blue-black/50 font-bold">
*{t("pricing.certificate_needed")}
</small>
</div>
</div>
</div>
</div>
</Section>
)}
<Venue subtitle={t("2025.venue.subtitle")} />
<Section
section="lastYear"
className=" z-10 relative pb-10 overflow-y-clip"
>
<div className="container text-center flex flex-col items-center pt-12">
<SectionTitle dark>
<Translate translationKey="last_edition.title" />
</SectionTitle>
<SectionSubTitle dark>
<Translate
translationKey="2025.see_review.subtitle"
translationParams={{
edition: "2024",
link: (
<a href={`/${locale}/con/2024/review`} className="link">
{t("2025.see_review.link")}
</a>
),
}}
/>
</SectionSubTitle>
<iframe
className="aspect-video w-full max-w-2xl border-white border-8 shadow-2xl"
src="https://www.youtube.com/embed/XXj8NCvLuis?si=hWGWKS81UriUkJ3R&amp;controls=0"
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerPolicy="strict-origin-when-cross-origin"
allowFullScreen
></iframe>
</div>
</Section>
<Section
section="missing"
className="relative z-10 text-center overflow-y-clip bg-white"
className="relative bg-grey z-10 text-center overflow-y-clip"
>
<div className="container text-center">
<SectionTitle>
<Translate
translationKey="missing_conferences.title"
translationParams={{ edition: "2024" }}
translationParams={{ edition: "2025" }}
/>
</SectionTitle>
<SectionSubTitle>{t("missing_conferences.subtitle")}</SectionSubTitle>
Expand All @@ -151,10 +186,6 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
</Button>
</div>
</Section>
<div className="pb-12">
<AfterMovie />
</div>
<Venue subtitle={t("2025.venue.subtitle")} />
<Section section="sponsorship" className="py-8">
<div className="container text-center">
<SectionTitle dark>
Expand Down
7 changes: 1 addition & 6 deletions pwa/app/(con)/[locale]/con/2025/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
function EditionLayout({ children }: { children: React.ReactNode }) {
const eventData = getEditionEventData("2025");
return (
<LayoutBase
edition="2025"
nav={nav}
footer={footer}
isTicketingOpen={false}
>
<LayoutBase edition="2025" nav={nav} footer={footer} isTicketingOpen>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(eventData) }}
Expand Down
Loading
Loading