+
diff --git a/content.config.ts b/content.config.ts
index 2c5bd71..bf1504d 100644
--- a/content.config.ts
+++ b/content.config.ts
@@ -7,16 +7,23 @@ import { defineContentConfig, defineCollection } from '@nuxt/content'
import { asSeoCollection } from '@nuxtjs/seo/content'
import { z } from 'zod'
+const testimonialSchema = z.object({
+ /** The testimonial text. */
+ quote: z.string(),
+ /** Name of the person who gave the testimonial. */
+ author: z.string(),
+ /** Role or affiliation of the author (e.g. "Project Lead / Company"). */
+ role: z.string(),
+})
+
export default defineContentConfig({
collections: {
content: defineCollection(
asSeoCollection({
type: 'page',
source: {
- include: '**',
- exclude: [
- 'socials/**',
- ],
+ include: 'pages/**',
+ prefix: '/',
},
}),
),
@@ -41,5 +48,26 @@ export default defineContentConfig({
handle: z.string(),
}),
}),
+
+ talks: defineCollection({
+ type: 'page',
+ source: 'talks/**',
+ schema: z.object({
+ /** Date of the talk in ISO 8601 format (e.g. "2024-11-12"). */
+ date: z.iso.date(),
+ /** Name of the event or conference (e.g. "NuxtNation 2024"). */
+ event: z.string(),
+ /** Location of the event (e.g. "Online" or city name). */
+ location: z.string(),
+ /** URL to the companion source code repository. */
+ repoUrl: z.url().optional(),
+ /** URL to the published slides. */
+ slidesUrl: z.url().optional(),
+ /** URL to the recorded video. */
+ videoUrl: z.url().optional(),
+ /** Audience or organizer testimonials for this talk. */
+ testimonials: z.array(testimonialSchema).optional(),
+ }),
+ }),
},
})
diff --git a/content/example.md b/content/pages/example.md
similarity index 100%
rename from content/example.md
rename to content/pages/example.md
diff --git a/content/talks/2022-10-28-musiktheorie-symposium.md b/content/talks/2022-10-28-musiktheorie-symposium.md
new file mode 100755
index 0000000..fd7528b
--- /dev/null
+++ b/content/talks/2022-10-28-musiktheorie-symposium.md
@@ -0,0 +1,11 @@
+---
+title: FMADB - Film Music Analysis Database
+date: 2022-10-28
+event: Musiktheorie Symposium
+location: Dresden, Germany
+repoUrl: https://github.com/toddeTV/talk_2022-10-28_musiktheorie-symposium
+---
+
+Presenting the FMADB\* project at the Musiktheorie Symposium, HfM Dresden\*\*, showcasing how structured databases can support the analysis of film music.
+ \* "Film Music Analysis Database"
+\*\* "Hochschule für Musik Carl Maria von Weber Dresden"
diff --git a/content/talks/2023-01-25-masters-thesis-defense.md b/content/talks/2023-01-25-masters-thesis-defense.md
new file mode 100755
index 0000000..bbcc853
--- /dev/null
+++ b/content/talks/2023-01-25-masters-thesis-defense.md
@@ -0,0 +1,11 @@
+---
+title: "Master's Thesis Defense: FMADB"
+date: 2023-01-25
+event: TUD Dresden University of Technology
+location: Dresden, Germany
+repoUrl: https://github.com/toddeTV/talk_2023-01-25_masters-thesis-defense
+slidesUrl: https://toddetv-masters-thesis-defense.netlify.app/1
+---
+
+Defense of the master's thesis on FMADB\* - a system enabling detailed music-theoretical analysis of film soundtracks using structured data.
+ \* "Film Music Analysis Database"
diff --git a/content/talks/2024-09-17-pragvue.md b/content/talks/2024-09-17-pragvue.md
new file mode 100755
index 0000000..23c28b1
--- /dev/null
+++ b/content/talks/2024-09-17-pragvue.md
@@ -0,0 +1,9 @@
+---
+title: Moving Vue to 3D
+date: 2024-09-17
+event: PragVue 2024
+location: Prague, Czech Republic
+# repoUrl: https://github.com/toddeTV/talk_2024-09-17_PragVue-conference # TODO publish it
+---
+
+Presenting the journey of bringing 3D capabilities to Vue.js applications at the PragVue conference.
diff --git a/content/talks/2024-11-12-nuxtnation.md b/content/talks/2024-11-12-nuxtnation.md
new file mode 100755
index 0000000..573684a
--- /dev/null
+++ b/content/talks/2024-11-12-nuxtnation.md
@@ -0,0 +1,12 @@
+---
+title: Playing with Nuxt in 3D
+date: 2024-11-12
+event: NuxtNation 2024
+location: Online
+repoUrl: https://github.com/toddeTV/talk_2024-11-12_NuxtNation-conference
+slidesUrl: https://talk2024-11-12nuxtnation-conference.vercel.app/1
+# videoUrl: https://vi.to/hubs/nuxtnation
+videoUrl: https://www.youtube.com/watch?v=o5zTGtHb5-o
+---
+
+Demonstrating how to integrate 3D experiences into Nuxt applications using TresJS, covering setup, rendering, and interactive scenes.
diff --git a/content/talks/2025-01-29-vue-js-nation.md b/content/talks/2025-01-29-vue-js-nation.md
new file mode 100755
index 0000000..150a5e4
--- /dev/null
+++ b/content/talks/2025-01-29-vue-js-nation.md
@@ -0,0 +1,11 @@
+---
+title: Your Own Vite Plugin? That's as easy as 1 2 3(D)
+date: 2025-01-29
+event: Vue.js Nation 2025
+location: Online
+repoUrl: https://github.com/toddeTV/talk_2025-01-29_vue-js-nation-conference
+slidesUrl: https://talk-2025-01-29-vue-js-nation-conference.vercel.app/1
+videoUrl: https://www.youtube.com/watch?v=EbvvwWgJNpo
+---
+
+A hands-on guide to creating custom Vite plugins, with a focus on 3D web development use cases, including type-safe `*.gltf` file parsing.
diff --git a/content/talks/2025-02-13-hamburg-vue-js-meetup.md b/content/talks/2025-02-13-hamburg-vue-js-meetup.md
new file mode 100755
index 0000000..96d8bb4
--- /dev/null
+++ b/content/talks/2025-02-13-hamburg-vue-js-meetup.md
@@ -0,0 +1,10 @@
+---
+title: 3D or Not 3D? Vue and Beyond!
+date: 2025-02-13
+event: Hamburg Vue.js Meetup
+location: Hamburg, Germany
+repoUrl: https://github.com/toddeTV/talk-2025-02-13-hamburg-vue-js-meetup
+slidesUrl: https://talk-2025-02-13-hamburg-vue-js-meetup.vercel.app/1
+---
+
+Exploring the possibilities of 3D rendering within the Vue.js ecosystem at the Hamburg Vue.js Meetup.
diff --git a/content/talks/2025-04-08-dev-day.md b/content/talks/2025-04-08-dev-day.md
new file mode 100755
index 0000000..609b8c6
--- /dev/null
+++ b/content/talks/2025-04-08-dev-day.md
@@ -0,0 +1,10 @@
+---
+title: Playing with 3D on the Web & Beyond
+date: 2025-04-08
+event: Dev Day 2025
+location: Dresden, Germany
+repoUrl: https://github.com/toddeTV/talk-2025-04-08-dev-day-conference
+slidesUrl: https://talk-2025-04-08-dev-day-conference.vercel.app/1
+---
+
+An overview of 3D web technologies - from Three.js and TresJS to WebGL and beyond - showcasing what's possible with 3D in the browser.
diff --git a/content/talks/2025-05-22-printed-europe.md b/content/talks/2025-05-22-printed-europe.md
new file mode 100755
index 0000000..2e6dbbf
--- /dev/null
+++ b/content/talks/2025-05-22-printed-europe.md
@@ -0,0 +1,11 @@
+---
+title: Web 101 with ❤️ from a Web-Dev for 3D Printing Pros
+date: 2025-05-22
+event: Printed Europe 2025
+location: Amsterdam, Netherlands
+repoUrl: https://github.com/toddeTV/talk-2025-05-22-printed-europe-conference
+slidesUrl: https://talk-2025-05-22-printed-europe-conference.vercel.app/1
+videoUrl: https://www.youtube.com/watch?v=AUYFrQmK0Kw
+---
+
+An introduction to modern web technologies tailored for professionals in the 3D printing industry, bridging the gap between web development and additive manufacturing.
diff --git a/content/talks/2025-06-04-frontend-nation.md b/content/talks/2025-06-04-frontend-nation.md
new file mode 100755
index 0000000..3bb43b9
--- /dev/null
+++ b/content/talks/2025-06-04-frontend-nation.md
@@ -0,0 +1,11 @@
+---
+title: Your Own Build Tool Agnostic Web-Plugin? That's as easy as 1 2 3(D)
+date: 2025-06-04
+event: Frontend Nation 2025
+location: Online
+repoUrl: https://github.com/toddeTV/talk-2025-06-04-frontend-nation
+slidesUrl: https://talk-2025-06-04-frontend-nation.vercel.app/1
+videoUrl: https://www.youtube.com/watch?v=7Y8MbIAqweE
+---
+
+Building cross-bundler plugins with Unplugin - creating plugins that work seamlessly across Vite, Rollup, Webpack, esbuild, and Rspack.
diff --git a/content/talks/2025-09-23-prag-vue.md b/content/talks/2025-09-23-prag-vue.md
new file mode 100755
index 0000000..7ea0201
--- /dev/null
+++ b/content/talks/2025-09-23-prag-vue.md
@@ -0,0 +1,11 @@
+---
+title: How to Nuxt Modules
+date: 2025-09-23
+event: PragVue 2025
+location: Prague, Czech Republic
+repoUrl: https://github.com/toddeTV/talk-2025-09-23-prag-vue
+slidesUrl: https://talk-2025-09-23-prag-vue.vercel.app/1
+videoUrl: https://slideslive.com/39045696/how-to-nuxt-modules?ref=folder-185349
+---
+
+A deep dive into creating Nuxt modules - from scaffolding to publishing, covering the module API, hooks, and best practices for extending Nuxt.
diff --git a/content/talks/2025-10-08-pre-vite-conf.md b/content/talks/2025-10-08-pre-vite-conf.md
new file mode 100755
index 0000000..fdb8cdf
--- /dev/null
+++ b/content/talks/2025-10-08-pre-vite-conf.md
@@ -0,0 +1,9 @@
+---
+title: The Small(er) Vite Quiz
+date: 2025-10-08
+event: Pre-ViteConf 2025
+location: Amsterdam, Netherlands
+# repoUrl: https://github.com/toddeTV/talk-2025-10-08-pre-vite-conf # TODO, repo currently empty, I need to upload the slides
+---
+
+A pre-conference talk kicking off ViteConf 2025 in Amsterdam.
diff --git a/content/talks/2025-10-10-vite-conf.md b/content/talks/2025-10-10-vite-conf.md
new file mode 100755
index 0000000..94cd6ff
--- /dev/null
+++ b/content/talks/2025-10-10-vite-conf.md
@@ -0,0 +1,9 @@
+---
+title: The Ultimate Vite Quiz
+date: 2025-10-10
+event: ViteConf 2025
+location: Amsterdam, Netherlands
+# repoUrl: https://github.com/toddeTV/talk-2025-10-10-vite-conf # TODO, repo currently empty, I need to upload the slides
+---
+
+Presenting at ViteConf 2025, the annual conference for the Vite ecosystem.
diff --git a/content/talks/2025-10-25-vue-fes-japan.md b/content/talks/2025-10-25-vue-fes-japan.md
new file mode 100755
index 0000000..707a7a1
--- /dev/null
+++ b/content/talks/2025-10-25-vue-fes-japan.md
@@ -0,0 +1,14 @@
+---
+title: Playing with Vue in 3D
+date: 2025-10-25
+event: Vue Fes Japan 2025
+location: Tokyo, Japan
+repoUrl: https://github.com/toddeTV/talk-2025-10-25-vue-fes-japan
+slidesUrl: https://talk-2025-10-25-vue-fes-japan.vercel.app/1
+testimonials:
+ - quote: One of the most engaging conference talks I've attended. Thorsten made 3D on the web feel approachable and exciting for the entire audience.
+ author: Attendee
+ role: Vue Fes Japan 2025
+---
+
+Exploring 3D rendering in Vue.js applications using TresJS and Three.js - bringing immersive 3D experiences to the web with the Vue ecosystem.
diff --git a/content/talks/2026-03-13-vuejs-amsterdam.md b/content/talks/2026-03-13-vuejs-amsterdam.md
new file mode 100755
index 0000000..c09964a
--- /dev/null
+++ b/content/talks/2026-03-13-vuejs-amsterdam.md
@@ -0,0 +1,8 @@
+---
+title: Vue Think You Know It All? The Ultimate Vue Live Quiz
+date: 2026-03-13
+event: Vue.js Amsterdam 2026
+location: Amsterdam, Netherlands
+---
+
+An interactive live quiz challenging the audience on their Vue.js knowledge - from fundamentals to advanced internals.
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 105151f..1d91a8f 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -202,7 +202,7 @@ export default defineNuxtConfig({
type: 'Person',
name: 'Thorsten Seyschab',
url: 'https://todde.tv',
- image: '/avatar-thorsten-seyschab.webp',
+ image: '/avatar-thorsten-seyschab.jpg',
// logo: '/favicon.svg', // not a standard Schema.org property for Person, but some tools check for it.
// `sameAs` and `email` are populated at runtime from the `socials` content collection (see `app.vue`).
},
diff --git a/public/avatar-thorsten-seyschab.jpg b/public/avatar-thorsten-seyschab.jpg
new file mode 100755
index 0000000..727dbfa
Binary files /dev/null and b/public/avatar-thorsten-seyschab.jpg differ
diff --git a/public/avatar-thorsten-seyschab.webp b/public/avatar-thorsten-seyschab.webp
deleted file mode 100755
index 50ec632..0000000
Binary files a/public/avatar-thorsten-seyschab.webp and /dev/null differ