managarten/apps-archived/wisekeep/apps/landing/src/components/speakers/TalkGrid.astro
Till JS 2eb1a0cd76 chore: archive 25 standalone web apps, move wisekeep to apps-archived
All standalone SvelteKit web apps have been superseded by the unified
ManaCore app (apps/manacore/apps/web). Moved to web-archived/ within
each project to preserve history while removing from active workspace.

Archived: calc, cards, chat, citycorners, contacts, context, guides,
inventar, moodlit, mukke, news, nutriphi, photos, picture, planta,
presi, questions, skilltree, storage, times, zitare, todo, calendar,
uload, memoro

Moved to apps-archived/: wisekeep (not integrated, inactive)

Kept active: manacore (unified), matrix, manavoxel, arcade (separate containers)

Server, landing, and package directories remain active for each project.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:14:29 +02:00

113 lines
3 KiB
Text

---
export interface Talk {
id: string;
title: string;
date: string;
duration: string;
description: string;
tags: string[];
url: string;
views?: string;
}
export interface Props {
talks: Talk[];
}
const { talks } = Astro.props;
---
<section class="py-12">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-bold text-theme-text mb-8">Alle Vorträge</h2>
<div class="grid md:grid-cols-2 gap-6">
{
talks.map((talk) => (
<a
href={talk.url}
class="bg-theme-card rounded-xl p-6 border border-theme-border/20 hover:border-theme-primary/30 transition-all duration-300 group block"
>
<div class="flex items-start justify-between mb-3">
<h3 class="text-lg font-semibold text-theme-text group-hover:text-theme-primary transition-colors pr-4">
{talk.title}
</h3>
{talk.views && (
<span class="text-sm text-theme-text-muted whitespace-nowrap flex items-center gap-1">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-4 w-4"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
/>
</svg>
{talk.views}
</span>
)}
</div>
<div class="flex items-center gap-4 text-sm text-theme-text-muted mb-3">
<span class="flex items-center gap-1">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-4 w-4"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
/>
</svg>
{talk.date}
</span>
<span class="flex items-center gap-1">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-4 w-4"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
{talk.duration}
</span>
</div>
<p class="text-theme-text-muted text-sm mb-4 line-clamp-2">{talk.description}</p>
<div class="flex flex-wrap gap-2">
{talk.tags.map((tag) => (
<span class="inline-block bg-theme-primary/10 text-theme-primary text-xs px-2 py-1 rounded-full">
{tag}
</span>
))}
</div>
</a>
))
}
</div>
</div>
</section>