Skip to content

Commit 52bc7d3

Browse files
committed
feat(metadata): synchronize PageMetadata component, public/index.html, and METADATA_CONFIG for 2026
1 parent 5f3fe98 commit 52bc7d3

4 files changed

Lines changed: 120 additions & 43 deletions

File tree

public/index.html

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<meta charset="utf-8" />
66
<meta content="width=device-width, initial-scale=1" name="viewport" />
77
<title>
8-
DevBcn 2025 - Barcelona Developers Conference in Spain — July 08-10
8+
DevBcn 2026 - Barcelona Developers Conference in Spain — June 16-17
99
</title>
1010
<link href="https://www.google-analytics.com" rel="preconnect" />
1111
<link href="https://www.devbcn.com" rel="canonical" />
@@ -15,17 +15,17 @@
1515
<link href="%PUBLIC_URL%/favicon.ico" rel="icon" />
1616
<meta content="#002454" name="theme-color" />
1717
<meta content="index,follow" lang="en" name="robots" />
18-
<meta content="DevBcn - Barcelona Developers Conference - July 8th - 10th 2025" name="description" />
18+
<meta content="DevBcn - Barcelona Developers Conference - June 16th - 17th 2026" name="description" />
1919
<meta
2020
content="conference, barcelona, frontend, backend, java, agile, kubernetes, agile, leadership, AI, ML, machine learning, artificial intelligence, cloud, security, frontend development, backend development, jvm, kotlin, DevOps"
2121
name="keywords" />
2222
<!-- start: Facebook Open Graph -->
23-
<meta content="DevBcn 2025 - Barcelona Developers Conference in Spain — 8-10July" property="og:title" />
24-
<meta content="Home • DevBcn 2025. The Barcelona Developer Conference in Spain" property="og:description" />
23+
<meta content="DevBcn 2026 - Barcelona Developers Conference in Spain — 16-17June" property="og:title" />
24+
<meta content="Home • DevBcn 2026. The Barcelona Developer Conference in Spain" property="og:description" />
2525
<meta content="website" property="og:type" />
2626
<meta content="en_GB" property="og:locale" />
2727
<meta content="devbcn.com" property="og:site_name" />
28-
<meta content="https://www.devbcn.com/images/devbcn25.png" property="og:image" />
28+
<meta content="https://www.devbcn.com/images/devbcn26.png" property="og:image" />
2929
<meta content="https://www.devbcn.com" property="og:url" />
3030
<!-- end: Facebook Open Graph -->
3131
<!-- start: Twitter cards -->
@@ -34,13 +34,13 @@
3434
<meta content="https://www.devbcn.com/" property="twitter:url" />
3535
<meta content="@dev_bcn" name="twitter:site" />
3636
<meta content="@dev_bcn" name="twitter:creator" />
37-
<meta content="https://www.devbcn.com/images/devbcn25.png" name="twitter:image" />
37+
<meta content="https://www.devbcn.com/images/devbcn26.png" name="twitter:image" />
3838
<meta content="DevBcn - Barcelona Developers Conference in Spain" name="twitter:image:alt" />
3939
<!-- for Slack -->
4040
<meta content="Date" name="twitter:label1" />
41-
<meta content="July 8th-10th, 2025" name="twitter:data1" />
41+
<meta content="June 16th-17th, 2026" name="twitter:data1" />
4242
<meta content="Location" name="twitter:label2" />
43-
<meta content="La Farga, Barcelona" name="twitter:data2" />
43+
<meta content="World Trade Center, Barcelona" name="twitter:data2" />
4444
<!-- end: Twitter cards -->
4545
<link href="%PUBLIC_URL%/apple-touch-icon.png" rel="apple-touch-icon" />
4646
<!--
@@ -103,46 +103,36 @@
103103
"@context": "https://schema.org",
104104
"@type": "Event",
105105
"name": "DevBcn — Barcelona Developers Conference",
106-
"startDate": "2025-07-08",
107-
"endDate": "2025-07-10",
106+
"startDate": "2026-06-16",
107+
"endDate": "2026-06-17",
108108
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
109109
"eventStatus": "https://schema.org/EventScheduled",
110110
"location": {
111111
"@type": "Place",
112-
"name": "La Farga",
112+
"name": "World Trade Center Barcelona",
113113
"address": {
114114
"@type": "PostalAddress",
115-
"streetAddress": "carrer Barcelona, 2",
116-
"addressLocality": "L'Hospitalet de Llobregat",
117-
"postalCode": "08901",
118-
"addressRegion": "Ba",
119-
"addressCountry": "SP"
115+
"streetAddress": "Moll de Barcelona, s/n",
116+
"addressLocality": "Barcelona",
117+
"postalCode": "08039",
118+
"addressRegion": "Barcelona",
119+
"addressCountry": "ES"
120120
}
121121
},
122122
"image": [
123-
"https://www.devbcn.com/images/devbcn25.webp",
124-
"https://www.devbcn.com/images/2023/FaqsImage0.webp"
123+
"https://www.devbcn.com/images/devbcn26.png"
125124
],
126125
"performers": [],
127126
"description": "Multidisciplinary conference made for Developers and by Developers, to learn and share on the different modern software technologies used across the companies",
128127
"offers": [
129128
{
130129
"@type": "Offer",
131-
"url": "https://tickets.devbcn.com/event/devbcn-2025",
130+
"url": "https://tickets.devbcn.com/event/devbcn-2026",
132131
"price": "250.00",
133132
"priceCurrency": "EUR",
134133
"availability": "https://schema.org/InStock",
135-
"validFrom": "2025-02-01",
136-
"validThrough": "2025-01-31"
137-
},
138-
{
139-
"@type": "Offer",
140-
"url": "https://tickets.devbcn.com/event/devbcn-2025",
141-
"price": "300.00",
142-
"priceCurrency": "EUR",
143-
"availability": "https://schema.org/InStock",
144-
"validFrom": "2025-02-01",
145-
"validThrough": "2025-02-29"
134+
"validFrom": "2026-01-01",
135+
"validThrough": "2026-06-15"
146136
}
147137
],
148138
"organizer": {

src/components/common/PageMetadata.test.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,68 @@ describe("PageMetadata", () => {
156156
) as HTMLMetaElement;
157157
expect(twitterCard?.content).toBe("summary_large_image");
158158
});
159+
160+
it("should render new default OpenGraph and Twitter tags", () => {
161+
render(<PageMetadata title="Test Page" description="Test description" />);
162+
163+
const ogLocale = document.querySelector(
164+
'meta[property="og:locale"]',
165+
) as HTMLMetaElement;
166+
expect(ogLocale?.content).toBe("en_GB");
167+
168+
const twitterDomain = document.querySelector(
169+
'meta[name="twitter:domain"]',
170+
) as HTMLMetaElement;
171+
expect(twitterDomain?.content).toBe("https://www.devbcn.com/");
172+
173+
const twitterSite = document.querySelector(
174+
'meta[name="twitter:site"]',
175+
) as HTMLMetaElement;
176+
expect(twitterSite?.content).toBe("@dev_bcn");
177+
178+
const twitterCreator = document.querySelector(
179+
'meta[name="twitter:creator"]',
180+
) as HTMLMetaElement;
181+
expect(twitterCreator?.content).toBe("@dev_bcn");
182+
183+
const twitterAlt = document.querySelector(
184+
'meta[name="twitter:image:alt"]',
185+
) as HTMLMetaElement;
186+
expect(twitterAlt?.content).toBe(
187+
"DevBcn - Barcelona Developers Conference in Spain",
188+
);
189+
});
190+
191+
it("should render Slack specific tags when provided", () => {
192+
render(
193+
<PageMetadata
194+
title="Test Page"
195+
description="Test description"
196+
twitterLabel1="Date"
197+
twitterData1="June 16-17"
198+
twitterLabel2="Location"
199+
twitterData2="BCN"
200+
/>,
201+
);
202+
203+
const label1 = document.querySelector(
204+
'meta[name="twitter:label1"]',
205+
) as HTMLMetaElement;
206+
expect(label1?.content).toBe("Date");
207+
208+
const data1 = document.querySelector(
209+
'meta[name="twitter:data1"]',
210+
) as HTMLMetaElement;
211+
expect(data1?.content).toBe("June 16-17");
212+
213+
const label2 = document.querySelector(
214+
'meta[name="twitter:label2"]',
215+
) as HTMLMetaElement;
216+
expect(label2?.content).toBe("Location");
217+
218+
const data2 = document.querySelector(
219+
'meta[name="twitter:data2"]',
220+
) as HTMLMetaElement;
221+
expect(data2?.content).toBe("BCN");
222+
});
159223
});

src/components/common/PageMetadata.tsx

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,39 @@ export interface PageMetadataProps {
66
canonicalUrl?: string;
77
ogImage?: string;
88
ogType?: "website" | "article" | "event";
9+
ogLocale?: string;
910
twitterCard?: "summary" | "summary_large_image";
11+
twitterDomain?: string;
12+
twitterSite?: string;
13+
twitterCreator?: string;
14+
twitterImageAlt?: string;
15+
twitterLabel1?: string;
16+
twitterData1?: string;
17+
twitterLabel2?: string;
18+
twitterData2?: string;
1019
keywords?: string[];
1120
}
1221

1322
/**
1423
* PageMetadata component using React 19's native metadata support.
1524
* Renders document metadata tags directly in the component tree.
16-
*
17-
* @example
18-
* ```tsx
19-
* <PageMetadata
20-
* title="DevBcn 2025 - Barcelona Developer Conference"
21-
* description="Join us for DevBcn 2025..."
22-
* canonicalUrl="https://www.devbcn.com/2025"
23-
* ogImage="https://www.devbcn.com/images/og-2025.jpg"
24-
* />
25-
* ```
2625
*/
2726
export const PageMetadata: FC<PageMetadataProps> = ({
2827
title,
2928
description,
3029
canonicalUrl,
3130
ogImage = "https://www.devbcn.com/images/devbcn26.png",
3231
ogType = "website",
32+
ogLocale = "en_GB",
3333
twitterCard = "summary_large_image",
34+
twitterDomain = "https://www.devbcn.com/",
35+
twitterSite = "@dev_bcn",
36+
twitterCreator = "@dev_bcn",
37+
twitterImageAlt = "DevBcn - Barcelona Developers Conference in Spain",
38+
twitterLabel1,
39+
twitterData1,
40+
twitterLabel2,
41+
twitterData2,
3442
keywords = [],
3543
}) => {
3644
const fullTitle = title.includes("DevBcn") ? title : `${title} | DevBcn`;
@@ -51,12 +59,23 @@ export const PageMetadata: FC<PageMetadataProps> = ({
5159
{canonicalUrl && <meta property="og:url" content={canonicalUrl} />}
5260
<meta property="og:image" content={ogImage} />
5361
<meta property="og:site_name" content="DevBcn" />
62+
<meta property="og:locale" content={ogLocale} />
5463

5564
{/* Twitter */}
5665
<meta name="twitter:card" content={twitterCard} />
5766
<meta name="twitter:title" content={fullTitle} />
5867
<meta name="twitter:description" content={description} />
5968
<meta name="twitter:image" content={ogImage} />
69+
<meta name="twitter:domain" content={twitterDomain} />
70+
<meta name="twitter:site" content={twitterSite} />
71+
<meta name="twitter:creator" content={twitterCreator} />
72+
<meta name="twitter:image:alt" content={twitterImageAlt} />
73+
74+
{/* Slack / App specific */}
75+
{twitterLabel1 && <meta name="twitter:label1" content={twitterLabel1} />}
76+
{twitterData1 && <meta name="twitter:data1" content={twitterData1} />}
77+
{twitterLabel2 && <meta name="twitter:label2" content={twitterLabel2} />}
78+
{twitterData2 && <meta name="twitter:data2" content={twitterData2} />}
6079

6180
{/* Canonical URL */}
6281
{canonicalUrl && <link rel="canonical" href={canonicalUrl} />}

src/config/metadata.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { PageMetadataProps } from "@components/common/PageMetadata";
66
*/
77

88
const BASE_URL = "https://www.devbcn.com";
9-
const DEFAULT_OG_IMAGE = `${BASE_URL}/images/og-default.jpg`;
9+
const DEFAULT_OG_IMAGE = `${BASE_URL}/images/devbcn26.png`;
1010

1111
export const METADATA_CONFIG: Record<
1212
string,
@@ -61,10 +61,14 @@ export const METADATA_CONFIG: Record<
6161
home2026: {
6262
title: "DevBcn 2026 - Barcelona Developer Conference",
6363
description:
64-
"Save the date for DevBcn 2026! Barcelona's most anticipated developer conference returns with exciting content and opportunities.",
64+
"DevBcn 2026 - Barcelona Developers Conference in Spain — June 16-17. Join us at the World Trade Center Barcelona.",
6565
canonicalUrl: `${BASE_URL}/2026`,
66-
ogImage: `${BASE_URL}/images/og-2026.jpg`,
66+
ogImage: `${BASE_URL}/images/devbcn26.png`,
6767
ogType: "event",
68+
twitterLabel1: "Date",
69+
twitterData1: "June 16th-17th, 2026",
70+
twitterLabel2: "Location",
71+
twitterData2: "World Trade Center, Barcelona",
6872
keywords: [
6973
"developer conference",
7074
"barcelona",

0 commit comments

Comments
 (0)