diff --git a/src/app/components/ProfileDetail.svelte b/src/app/components/ProfileDetail.svelte
index 9600e038..1feafb21 100644
--- a/src/app/components/ProfileDetail.svelte
+++ b/src/app/components/ProfileDetail.svelte
@@ -17,6 +17,7 @@
import ProfileAbout from "@app/components/ProfileAbout.svelte"
import ProfileBadges from "@app/components/ProfileBadges.svelte"
import ProfileMenu from "@app/components/ProfileMenu.svelte"
+ import ProfilePinnedNote from "@app/components/ProfilePinnedNote.svelte"
import ProfileStatus from "@app/components/ProfileStatus.svelte"
import {messagingRelayLists, profiles, relayManagement, user} from "@app/core"
import {deriveUserIsSpaceAdmin} from "@app/management"
@@ -138,6 +139,7 @@
+
diff --git a/src/app/components/ProfilePageNotes.svelte b/src/app/components/ProfilePageNotes.svelte
index 2b129e61..15664d0d 100644
--- a/src/app/components/ProfilePageNotes.svelte
+++ b/src/app/components/ProfilePageNotes.svelte
@@ -1,18 +1,18 @@
+
+{#if event}
+
+
+
+ Pinned note
+
+
+
+
+
+{/if}
diff --git a/src/app/core.ts b/src/app/core.ts
index ff13babc..7325013f 100644
--- a/src/app/core.ts
+++ b/src/app/core.ts
@@ -16,6 +16,7 @@ import {
MessagingRelayLists,
MuteLists,
Network,
+ PinLists,
Profiles,
Reactions,
RelayLists,
@@ -143,6 +144,7 @@ export const logger = usePlugin(Logger)
export const messagingRelayLists = usePlugin(MessagingRelayLists)
export const muteLists = usePlugin(MuteLists)
export const network = usePlugin(Network)
+export const pinLists = usePlugin(PinLists)
export const profiles = usePlugin(Profiles)
export const reactions = usePlugin(Reactions)
export const relayLists = usePlugin(RelayLists)
diff --git a/src/app/pins.ts b/src/app/pins.ts
new file mode 100644
index 00000000..aa26d997
--- /dev/null
+++ b/src/app/pins.ts
@@ -0,0 +1,36 @@
+import {derived} from "svelte/store"
+import type {Readable} from "svelte/store"
+import {getIdFilters, outbox} from "@welshman/util"
+import type {TrustedEvent} from "@welshman/util"
+import {network, pinLists, router} from "@app/core"
+import {deriveEvents} from "@app/repository"
+
+export const derivePinnedEvents = (pubkey: string): Readable =>
+ derived(
+ pinLists.get().one(pubkey),
+ ($pinList, set: (events: TrustedEvent[]) => void) => {
+ const ids = $pinList?.ids() || []
+
+ if (ids.length > 0) {
+ const controller = new AbortController()
+ const filters = getIdFilters(ids)
+
+ router
+ .get()
+ .resolver.relays([outbox(pubkey)])
+ .then($relays =>
+ network.get().load({relays: $relays, filters, signal: controller.signal}),
+ )
+
+ const unsubscribe = deriveEvents(filters).subscribe(set)
+
+ return () => {
+ controller.abort()
+ unsubscribe()
+ }
+ }
+
+ set([])
+ },
+ [] as TrustedEvent[],
+ )