diff --git a/src/lib/cards/index.ts b/src/lib/cards/index.ts
index 1f915c5..e0c53f2 100644
--- a/src/lib/cards/index.ts
+++ b/src/lib/cards/index.ts
@@ -49,6 +49,7 @@ import { LastFMProfileCardDefinition } from './media/LastFMCard/LastFMProfileCar
import { PlyrFMCardDefinition, PlyrFMCollectionCardDefinition } from './media/PlyrFMCard';
import { MarginCardDefinition } from './social/MarginCard';
import { SembleCollectionCardDefinition } from './social/SembleCollectionCard';
+import { GermDMCardDefinition } from './social/GermDMCard';
// import { Model3DCardDefinition } from './visual/Model3DCard';
export const AllCardDefinitions = [
@@ -103,7 +104,8 @@ export const AllCardDefinitions = [
PlyrFMCardDefinition,
PlyrFMCollectionCardDefinition,
MarginCardDefinition,
- SembleCollectionCardDefinition
+ SembleCollectionCardDefinition,
+ GermDMCardDefinition
] as const;
export const CardDefinitionsByType = AllCardDefinitions.reduce(
diff --git a/src/lib/cards/social/GermDMCard/GermDMCard.svelte b/src/lib/cards/social/GermDMCard/GermDMCard.svelte
new file mode 100644
index 0000000..a380726
--- /dev/null
+++ b/src/lib/cards/social/GermDMCard/GermDMCard.svelte
@@ -0,0 +1,73 @@
+
+
+{#if germData && dmUrl}
+
+
+ {@html platformsData.germ.svg}
+
+
+
+ {#if !isEditing}
+
+
+ Message me on Germ
+
+ {/if}
+{:else if isLoaded}
+
+ Germ DM not available
+
+{:else}
+
+ Loading...
+
+{/if}
diff --git a/src/lib/cards/social/GermDMCard/index.ts b/src/lib/cards/social/GermDMCard/index.ts
new file mode 100644
index 0000000..78add01
--- /dev/null
+++ b/src/lib/cards/social/GermDMCard/index.ts
@@ -0,0 +1,42 @@
+import { getRecord } from '$lib/atproto';
+import type { CardDefinition } from '../../types';
+import { platformsData } from '../BigSocialCard';
+import GermDMCard from './GermDMCard.svelte';
+
+const germ = platformsData.germ;
+
+export const GermDMCardDefinition = {
+ type: 'germDM',
+ contentComponent: GermDMCard,
+ createNew: (card) => {
+ card.w = 2;
+ card.h = 2;
+ card.mobileW = 4;
+ card.mobileH = 4;
+ card.cardData.label = 'Message me';
+ },
+ loadData: async (_items, { did }) => {
+ try {
+ const record = await getRecord({
+ did,
+ collection: 'com.germnetwork.declaration',
+ rkey: 'self'
+ });
+ const value = record?.value;
+ if (!value?.messageMe) return null;
+ return {
+ messageMeUrl: value.messageMe.messageMeUrl,
+ showButtonTo: value.messageMe.showButtonTo
+ };
+ } catch {
+ return null;
+ }
+ },
+ defaultColor: 'transparent',
+ allowSetColor: false,
+ canHaveLabel: true,
+ name: 'DM on Germ',
+ keywords: ['germ', 'dm', 'message', 'chat', 'encrypted'],
+ groups: ['Social'],
+ icon: `