diff --git a/apps/web/src/app/shared/components/content-card/content-card.component.html b/apps/web/src/app/shared/components/content-card/content-card.component.html
new file mode 100644
index 000000000..b8d3fa2b2
--- /dev/null
+++ b/apps/web/src/app/shared/components/content-card/content-card.component.html
@@ -0,0 +1,48 @@
+
+
+ @if (showRemoveButton()) {
+
+ }
+
+ @if (posterUrl()) {
+
![]()
+ } @else if (showPlaceholder()) {
+
+ {{ getPlaceholderIcon() }}
+
+ } @else {
+

+ }
+
+ @if (type()) {
+
+ {{ type() }}
+
+ }
+
+
+
+
{{ title() }}
+ @if (date()) {
+
+ {{ date() | date: 'd MMM, HH:mm' }}
+
+ }
+
+
diff --git a/apps/web/src/app/shared/components/content-card/content-card.component.scss b/apps/web/src/app/shared/components/content-card/content-card.component.scss
new file mode 100644
index 000000000..6cc36dea1
--- /dev/null
+++ b/apps/web/src/app/shared/components/content-card/content-card.component.scss
@@ -0,0 +1,21 @@
+@use '../../styles/content-grid' as grid;
+
+.content-card {
+ @include grid.content-card;
+
+ .thumbnail-wrapper {
+ @include grid.thumbnail-wrapper;
+
+ .remove-button {
+ @include grid.remove-button;
+ }
+
+ .type-badge {
+ @include grid.type-badge;
+ }
+ }
+
+ .card-info {
+ @include grid.card-info;
+ }
+}
diff --git a/apps/web/src/app/shared/components/content-card/content-card.component.ts b/apps/web/src/app/shared/components/content-card/content-card.component.ts
new file mode 100644
index 000000000..9ee4049ed
--- /dev/null
+++ b/apps/web/src/app/shared/components/content-card/content-card.component.ts
@@ -0,0 +1,73 @@
+import { DatePipe } from '@angular/common';
+import {
+ ChangeDetectionStrategy,
+ Component,
+ input,
+ output,
+} from '@angular/core';
+import { MatIconButton } from '@angular/material/button';
+import { MatIcon } from '@angular/material/icon';
+import { MatTooltip } from '@angular/material/tooltip';
+
+@Component({
+ selector: 'app-content-card',
+ standalone: true,
+ imports: [DatePipe, MatIcon, MatIconButton, MatTooltip],
+ templateUrl: './content-card.component.html',
+ styleUrl: './content-card.component.scss',
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class ContentCardComponent {
+ /** URL of the poster image */
+ readonly posterUrl = input