Skip to content

Commit c547585

Browse files
MEP - add ticketing on API con and fix deploy issue (#589)
* feat: add ticketing page (#587) * feat: add register page * feat: update contributors * Create Caddy log repository --------- Co-authored-by: ThomasSamson <[email protected]>
1 parent 4079c2f commit c547585

File tree

21 files changed

+2891
-2000
lines changed

21 files changed

+2891
-2000
lines changed

api/Dockerfile

+3
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ ADD --chmod=500 https://caddyserver.com/api/download?os=linux&arch=$TARGETARCH&p
123123

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

126+
#Create the log repository due this issue : https://github.com/caddyserver/caddy/issues/6766
127+
RUN mkdir -p /var/log/caddy
128+
126129
# Prod Caddy image
127130
FROM caddy_base AS caddy_prod
128131

pwa/app/(con)/[locale]/con/2025/call-for-papers/page.tsx

+12-3
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,22 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
1414

1515
return {
1616
title: {
17-
absolute: dictionary[2025].title,
17+
absolute: dictionary["call-for-papers"].title,
1818
template: `%s - API Platform Conference 2025`,
1919
},
20+
description: dictionary["call-for-papers"].description,
21+
openGraph: {
22+
title: `${dictionary["call-for-papers"].title} - API Platform Conference`,
23+
description: dictionary["call-for-papers"].description,
24+
},
25+
twitter: {
26+
title: `${dictionary["call-for-papers"].title} - API Platform Conference`,
27+
description: dictionary["call-for-papers"].description,
28+
},
2029
alternates: {
2130
languages: {
22-
en: locale === "en" ? undefined : "/con/2025",
23-
fr: locale === "fr" ? undefined : "/fr/con/2024",
31+
en: locale === "en" ? undefined : "/con/2025/call-for-papers",
32+
fr: locale === "fr" ? undefined : "/fr/con/2025/call-for-papers",
2433
},
2534
},
2635
};

pwa/app/(con)/[locale]/con/2025/components/HomePage.tsx

+87-56
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ import Button from "components/con/common/Button";
33
import SpeakerList from "components/con/speakers/SpeakerList";
44
import SectionTitle from "components/con/common/typography/SectionTitle";
55
import SectionSubTitle from "components/con/common/typography/SectionSubtitle";
6-
import Web from "components/con/common/Web";
6+
import { currentEdition } from "data/con/editions";
77
import Wave from "components/con/common/Wave";
88
import Venue from "components/con/home/Venue";
9-
import Image from "next/image";
109
import Partners from "components/con/home/Partners";
1110
import LookingSponsorCard from "components/con/home/LookingSponsorCard";
1211
import { Partner, Speaker } from "types/con";
1312
import { useContext } from "react";
1413
import { LanguageContext } from "contexts/con/LanguageContext";
1514
import Section from "components/con/home/Section";
16-
import PictureGallery from "components/con/common/PictureGallery";
15+
import prices from "data/con/2025/prices";
1716
import Logo from "./Logo";
18-
import AfterMovie from "app/con/2024/components/AfterMovie";
17+
import PricingCard from "components/con/home/Pricing/PricingCard";
18+
import BuyButton from "components/con/common/BuyButton";
1919

2020
type HomePageProps = {
2121
speakers: Speaker[];
@@ -39,65 +39,29 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
3939
<p className="flex-1 text-lg md:text-xl font-extrabold pb-6 lg:text-3xl md:text-left">
4040
{t("2025.baseline")}
4141
</p>
42-
<p className="flex-1 text-sm md:text-md font-extrabold pb-6 lg:text-lg md:text-left">
43-
{t("2025.subbaseline")}
44-
</p>
4542
<div className="flex gap-2">
46-
<Button className="pink" to={`/${locale}/con/2024/review`}>
47-
{t("2025.previous_edition")}
43+
{currentEdition === "2025" && (
44+
<BuyButton className="mr-2" id="cover">
45+
{t("buy_tickets")}
46+
</BuyButton>
47+
)}
48+
<Button empty to={`/${locale}/con/2025/call-for-papers`}>
49+
{t("2025.cfp.title")}
4850
</Button>
4951
</div>
5052
</div>
5153
</div>
5254
<Wave className="absolute opacity-30 z-0 bottom-0 h-[60vh] right-[7%] top-[63%] -translate-y-1/2" />
5355
</Section>
54-
<Section
55-
section="lastYear"
56-
className="bg-white z-10 relative pb-10 overflow-y-clip"
57-
>
58-
<div className="container text-center">
59-
<SectionTitle>
60-
<Translate translationKey="last_edition.title" />
61-
</SectionTitle>
62-
<SectionSubTitle>
63-
<Translate
64-
translationKey="2025.see_review.subtitle"
65-
translationParams={{
66-
edition: "2024",
67-
link: (
68-
<a href={`/${locale}/con/2024/review`} className="link">
69-
{t("2025.see_review.link")}
70-
</a>
71-
),
72-
}}
73-
/>
74-
</SectionSubTitle>
75-
<PictureGallery
76-
className="py-4"
77-
link="https://www.flickr.com/photos/194052559@N02/albums/72177720320499314/"
78-
>
79-
{images.map((image: string) => (
80-
<Image
81-
className="object-cover"
82-
key={image}
83-
fill
84-
src={image}
85-
alt=""
86-
sizes="(max-width: 640px) 200px, (max-width: 768px) 240px, (max-width: 1536px) 300px, 400px"
87-
/>
88-
))}
89-
</PictureGallery>
90-
</div>
91-
</Section>
9256
<Section
9357
section="speakers"
94-
className="z-10 relative py-4 overflow-x-hidden text-white"
58+
className="bg-white z-10 relative py-4 overflow-x-hidden"
9559
>
9660
<div className="container text-center">
97-
<SectionTitle dark h1>
61+
<SectionTitle h1>
9862
<Translate translationKey="2025.our_speakers.title" />
9963
</SectionTitle>
100-
<SectionSubTitle dark>
64+
<SectionSubTitle>
10165
<Translate
10266
translationKey="2025.our_speakers.subtitle"
10367
translationParams={{
@@ -130,15 +94,86 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
13094
</Button>
13195
</div>
13296
</Section>
97+
{currentEdition === "2025" && (
98+
<Section
99+
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"
100+
section="pricing"
101+
>
102+
<div className="container relative z-10">
103+
<SectionTitle dark>
104+
<Translate translationKey="pricing.title" />
105+
</SectionTitle>
106+
<div className="max-w-4xl mx-auto flex flex-row flex-wrap justify-center">
107+
{prices.map((price) => (
108+
<PricingCard key={price.id} price={price} />
109+
))}
110+
<div className="w-full self-center max-w-md mt-10 | lg:pl-10 lg:mt-0 lg:w-1/3">
111+
<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">
112+
<span className="font-bold text-white leading-tight font-title uppercase lined-center lined-white relative">
113+
{t("pricing.student")}
114+
</span>
115+
<div className="mt-2 text-blue-black/80 font-semibold">
116+
<Translate translationKey="pricing.free_ticket" />
117+
</div>
118+
<Button
119+
size="small"
120+
square
121+
className="white mt-2 mb-5"
122+
to="mailto:[email protected]"
123+
>
124+
{t("contact_us")}
125+
</Button>
126+
<small className="text-xs text-blue-black/50 font-bold">
127+
*{t("pricing.certificate_needed")}
128+
</small>
129+
</div>
130+
</div>
131+
</div>
132+
</div>
133+
</Section>
134+
)}
135+
<Venue subtitle={t("2025.venue.subtitle")} />
136+
<Section
137+
section="lastYear"
138+
className=" z-10 relative pb-10 overflow-y-clip"
139+
>
140+
<div className="container text-center flex flex-col items-center pt-12">
141+
<SectionTitle dark>
142+
<Translate translationKey="last_edition.title" />
143+
</SectionTitle>
144+
<SectionSubTitle dark>
145+
<Translate
146+
translationKey="2025.see_review.subtitle"
147+
translationParams={{
148+
edition: "2024",
149+
link: (
150+
<a href={`/${locale}/con/2024/review`} className="link">
151+
{t("2025.see_review.link")}
152+
</a>
153+
),
154+
}}
155+
/>
156+
</SectionSubTitle>
157+
<iframe
158+
className="aspect-video w-full max-w-2xl border-white border-8 shadow-2xl"
159+
src="https://www.youtube.com/embed/XXj8NCvLuis?si=hWGWKS81UriUkJ3R&amp;controls=0"
160+
title="YouTube video player"
161+
frameBorder="0"
162+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
163+
referrerPolicy="strict-origin-when-cross-origin"
164+
allowFullScreen
165+
></iframe>
166+
</div>
167+
</Section>
133168
<Section
134169
section="missing"
135-
className="relative z-10 text-center overflow-y-clip bg-white"
170+
className="relative bg-grey z-10 text-center overflow-y-clip"
136171
>
137172
<div className="container text-center">
138173
<SectionTitle>
139174
<Translate
140175
translationKey="missing_conferences.title"
141-
translationParams={{ edition: "2024" }}
176+
translationParams={{ edition: "2025" }}
142177
/>
143178
</SectionTitle>
144179
<SectionSubTitle>{t("missing_conferences.subtitle")}</SectionSubTitle>
@@ -151,10 +186,6 @@ const HomePage = ({ speakers, partners, images }: HomePageProps) => {
151186
</Button>
152187
</div>
153188
</Section>
154-
<div className="pb-12">
155-
<AfterMovie />
156-
</div>
157-
<Venue subtitle={t("2025.venue.subtitle")} />
158189
<Section section="sponsorship" className="py-8">
159190
<div className="container text-center">
160191
<SectionTitle dark>

pwa/app/(con)/[locale]/con/2025/layout.tsx

+1-6
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
4141
function EditionLayout({ children }: { children: React.ReactNode }) {
4242
const eventData = getEditionEventData("2025");
4343
return (
44-
<LayoutBase
45-
edition="2025"
46-
nav={nav}
47-
footer={footer}
48-
isTicketingOpen={false}
49-
>
44+
<LayoutBase edition="2025" nav={nav} footer={footer} isTicketingOpen>
5045
<script
5146
type="application/ld+json"
5247
dangerouslySetInnerHTML={{ __html: JSON.stringify(eventData) }}

0 commit comments

Comments
 (0)