Skip to content

Commit a0a4f2d

Browse files
committed
Enhanced talks page PoC
Signed-off-by: Radu Nichita <radunichita99@gmail.com>
1 parent 8a86afd commit a0a4f2d

File tree

6 files changed

+1566
-1326
lines changed

6 files changed

+1566
-1326
lines changed

docusaurus.config.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,24 @@ const config: Config = {
5050

5151
staticDirectories: ["static", "images"],
5252

53+
plugins: [
54+
() => ({
55+
name: "yaml-loader-plugin",
56+
configureWebpack() {
57+
return {
58+
module: {
59+
rules: [
60+
{
61+
test: /\.ya?ml$/,
62+
use: "yaml-loader",
63+
},
64+
],
65+
},
66+
};
67+
},
68+
}),
69+
],
70+
5371
presets: [
5472
[
5573
"classic",
@@ -98,7 +116,7 @@ const config: Config = {
98116
label: "Docs",
99117
},
100118
{ to: "/libraries", label: "Libraries", position: "left" },
101-
{to: "/talks", label: "Talks", position: 'left'},
119+
{ to: "/talks", label: "Talks", position: 'left'},
102120
{ to: "/blog", label: "Blog", position: "left" },
103121
{
104122
"aria-label": "Discourse Forum",

package-lock.json

Lines changed: 71 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"@docusaurus/module-type-aliases": "3.7.0",
3030
"@docusaurus/tsconfig": "3.7.0",
3131
"@docusaurus/types": "3.7.0",
32-
"typescript": "~5.6.2"
32+
"typescript": "~5.6.2",
33+
"yaml-loader": "^0.9.0"
3334
},
3435
"browserslist": {
3536
"production": [

src/pages/talks.md

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/pages/talks.mdx

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
---
2+
title: Talks
3+
slug: talks
4+
hide_table_of_contents: true
5+
---
6+
7+
import authors from '@site/blog/authors.yml';
8+
9+
export const TalkPost = ({ title, date, duration, videoId, authorId, conference, tag }) => {
10+
const author = authors[authorId];
11+
12+
// Safety check: if authorId is wrong, show error or fallback
13+
if (!author) {
14+
return <div className="alert alert--danger">Author ID "{authorId}" not found in authors.yml</div>;
15+
}
16+
17+
const githubLink = author.socials?.github ? `https://github.com/${author.socials.github}` : null;
18+
19+
return (
20+
<article className="margin-bottom--xl">
21+
<header>
22+
<h2 style={{ marginBottom: '0.5rem', fontSize: '2rem' }}>
23+
<a href="#" style={{ textDecoration: 'none' }}>{title}</a>
24+
</h2>
25+
26+
{/* METADATA ROW: Date, Duration, Conference, and Tag */}
27+
<div className="margin-bottom--md" style={{ color: 'var(--ifm-color-content-secondary)', fontSize: '0.9rem', display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'wrap' }}>
28+
<span><time>{date}</time> · {duration}</span>
29+
30+
{conference && (
31+
<>
32+
<span>·</span>
33+
<span style={{ fontWeight: '600', color: 'var(--ifm-color-primary)' }}>{conference}</span>
34+
</>
35+
)}
36+
37+
{tag && (
38+
<span className="badge badge--secondary" style={{ marginLeft: '4px' }}>
39+
{tag}
40+
</span>
41+
)}
42+
</div>
43+
44+
{/* AUTHOR ROW (Populated from YAML) */}
45+
<div className="avatar margin-bottom--lg">
46+
<a
47+
className="avatar__photo-link avatar__photo avatar__photo--lg"
48+
href={author.url}
49+
target="_blank"
50+
>
51+
<img
52+
alt={author.name}
53+
src={author.image_url}
54+
/>
55+
</a>
56+
<div className="avatar__intro">
57+
<div className="avatar__name">
58+
<a href={author.url} target="_blank" rel="noopener noreferrer">
59+
{author.name}
60+
</a>
61+
</div>
62+
<small className="avatar__subtitle">
63+
{author.title}
64+
</small>
65+
66+
{/* Social Icons */}
67+
<div style={{ display: 'flex', gap: '8px', marginTop: '4px' }}>
68+
{githubLink && (
69+
<a href={githubLink} target="_blank" style={{color: 'inherit'}} title="GitHub">
70+
<svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" strokeWidth="2" fill="none" strokeLinecap="round" strokeLinejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
71+
</a>
72+
)}
73+
</div>
74+
</div>
75+
</div>
76+
</header>
77+
78+
{/* VIDEO SECTION */}
79+
<div style={{
80+
position: 'relative',
81+
paddingBottom: '56.25%',
82+
height: 0,
83+
overflow: 'hidden',
84+
borderRadius: '8px',
85+
marginBottom: '1rem',
86+
backgroundColor: '#000',
87+
border: '1px solid var(--ifm-color-emphasis-200)'
88+
}}>
89+
<iframe
90+
src={`https://www.youtube.com/embed/${videoId}`}
91+
style={{position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 0}}
92+
allowFullScreen
93+
title={title}
94+
/>
95+
</div>
96+
97+
<hr className="margin-vert--xl" />
98+
</article>
99+
);
100+
};
101+
102+
# Talks
103+
104+
<TalkPost
105+
title="The Beman Project: Bringing C++ Standard Libraries to the Next Level"
106+
date="October 24, 2024"
107+
duration="70 min watch"
108+
videoId="f4JinCpcQOg"
109+
authorId="camio"
110+
conference="CppCon 2024"
111+
tag="Standard Library"
112+
/>
113+
114+
<TalkPost
115+
title="How to Use the Sender/Receiver Framework in C++ to Create a Simple HTTP Server"
116+
date="September 15, 2024"
117+
duration="60 min watch"
118+
videoId="Nnwanj5Ocrw"
119+
authorId="dietmarkuehl"
120+
conference="CppCon 2024"
121+
tag="Concurrency"
122+
/>

0 commit comments

Comments
 (0)