diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
index 34ce69c63d92fc877c0e757401d2b1ce548807fb..f34aa343941fd007d471f7de7beda46f971886c5 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/blog/BlogPostView.kt
@@ -68,6 +68,7 @@ import org.briarproject.briar.desktop.ui.HorizontalDivider
 import org.briarproject.briar.desktop.ui.Tooltip
 import org.briarproject.briar.desktop.ui.TrustIndicatorShort
 import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18n
+import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18nF
 import org.briarproject.briar.desktop.utils.PreviewUtils.preview
 import org.briarproject.briar.desktop.utils.TimeUtils.getFormattedTimestamp
 import org.briarproject.briar.desktop.utils.UiUtils.getContactDisplayName
@@ -166,6 +167,10 @@ private fun BlogPostViewHeader(
                 onAuthorClicked = if (onAuthorClicked == null) null else {
                     { onAuthorClicked(item.header.groupId) }
                 },
+                authorClickTooltip = if (onAuthorClicked == null) null else {
+                    val name = getContactDisplayName(item.header.author.name, item.header.authorInfo.alias)
+                    i18nF("blog.open.from.author", name)
+                },
             )
             if (item is BlogCommentItem) {
                 val postHeader = item.postHeader
@@ -176,6 +181,9 @@ private fun BlogPostViewHeader(
                     onAuthorClicked = if (onAuthorClicked == null) null else {
                         { onAuthorClicked(item.postHeader.groupId) }
                     },
+                    authorClickTooltip = if (onAuthorClicked == null) null else {
+                        i18nF("blog.open.from.author", item.postHeader.author.name)
+                    },
                 )
             }
         }
@@ -188,11 +196,13 @@ private fun BlogPostViewHeader(
     }
 }
 
+@OptIn(ExperimentalFoundationApi::class)
 @Composable
 private fun RepeatAuthorView(
     item: BlogPost,
     modifier: Modifier = Modifier,
     onAuthorClicked: (() -> Unit)?,
+    authorClickTooltip: String? = null,
 ) {
     val author = item.author
     val authorInfo = item.authorInfo
@@ -202,36 +212,40 @@ private fun RepeatAuthorView(
         verticalAlignment = CenterVertically,
         modifier = modifier,
     ) {
-        Row(
-            modifier = Modifier.weight(1f)
-                .modifyIf(onAuthorClicked != null, Modifier.clickable { onAuthorClicked?.invoke() }),
-            horizontalArrangement = spacedBy(8.dp),
-            verticalAlignment = CenterVertically,
+        Tooltip(
+            text = authorClickTooltip ?: "",
+            modifier = Modifier.weight(1f),
         ) {
-            // TODO we may eventually want to move this into its own composable or integrate into ProfileCircle
-            Box(
-                contentAlignment = BottomEnd,
-                modifier = Modifier.size(36.dp),
+            Row(
+                modifier = Modifier.modifyIf(onAuthorClicked != null, Modifier.clickable { onAuthorClicked?.invoke() }),
+                horizontalArrangement = spacedBy(8.dp),
+                verticalAlignment = CenterVertically,
             ) {
-                ProfileCircle(36.dp, author.id, authorInfo)
-                if (item is BlogCommentItem) {
-                    Icon(
-                        imageVector = Icons.Default.Repeat,
-                        tint = Color.Black,
-                        contentDescription = i18n("access.blogs.reblog"),
-                        modifier = Modifier.size(16.dp).clip(CircleShape)
-                            .border(1.dp, Color.Black, CircleShape).background(Color.White).padding(2.dp)
-                    )
+                // TODO we may eventually want to move this into its own composable or integrate into ProfileCircle
+                Box(
+                    contentAlignment = BottomEnd,
+                    modifier = Modifier.size(36.dp),
+                ) {
+                    ProfileCircle(36.dp, author.id, authorInfo)
+                    if (item is BlogCommentItem) {
+                        Icon(
+                            imageVector = Icons.Default.Repeat,
+                            tint = Color.Black,
+                            contentDescription = i18n("access.blogs.reblog"),
+                            modifier = Modifier.size(16.dp).clip(CircleShape)
+                                .border(1.dp, Color.Black, CircleShape).background(Color.White).padding(2.dp)
+                        )
+                    }
                 }
+                Text(
+                    modifier = Modifier.weight(1f, fill = false),
+                    text = getContactDisplayName(author.name, authorInfo.alias),
+                    fontWeight = if (authorInfo.status == OURSELVES) FontWeight.Bold else null,
+                    maxLines = 1,
+                    overflow = TextOverflow.Ellipsis,
+                )
+                TrustIndicatorShort(authorInfo.status)
             }
-            Text(
-                modifier = Modifier.weight(1f, fill = false),
-                text = getContactDisplayName(author.name, authorInfo.alias),
-                fontWeight = if (authorInfo.status == OURSELVES) FontWeight.Bold else null,
-                maxLines = 1,
-                overflow = TextOverflow.Ellipsis,
-            )
-            TrustIndicatorShort(authorInfo.status)
         }
         Text(
             text = getFormattedTimestamp(timestamp),
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/AuthorView.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/AuthorView.kt
index c61faa3a0b97ab84617d690057004b554294e26a..71b2cd302a045ad19373ed7d533b1505fe037818 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/AuthorView.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/AuthorView.kt
@@ -18,6 +18,7 @@
 
 package org.briarproject.briar.desktop.ui
 
+import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement.spacedBy
 import androidx.compose.foundation.layout.Row
@@ -39,6 +40,7 @@ import org.briarproject.briar.desktop.utils.TimeUtils
 import org.briarproject.briar.desktop.utils.UiUtils.getContactDisplayName
 import org.briarproject.briar.desktop.utils.UiUtils.modifyIf
 
+@OptIn(ExperimentalFoundationApi::class)
 @Composable
 fun AuthorView(
     author: Author,
@@ -47,27 +49,32 @@ fun AuthorView(
     modifier: Modifier = Modifier,
     avatarSize: Dp = 27.dp,
     onAuthorClicked: (() -> Unit)? = null,
+    authorClickTooltip: String? = null,
 ) {
     Row(
         modifier = modifier,
         horizontalArrangement = spacedBy(8.dp),
         verticalAlignment = CenterVertically,
     ) {
-        Row(
-            modifier = Modifier.weight(1f)
-                .modifyIf(onAuthorClicked != null, Modifier.clickable { onAuthorClicked?.invoke() }),
-            horizontalArrangement = spacedBy(8.dp),
-            verticalAlignment = CenterVertically,
+        Tooltip(
+            text = authorClickTooltip ?: "",
+            modifier = Modifier.weight(1f),
         ) {
-            ProfileCircle(avatarSize, author.id, authorInfo)
-            Text(
-                modifier = Modifier.weight(1f, fill = false),
-                text = getContactDisplayName(author.name, authorInfo.alias),
-                fontWeight = if (authorInfo.status == OURSELVES) Bold else null,
-                maxLines = 1,
-                overflow = Ellipsis,
-            )
-            TrustIndicatorShort(authorInfo.status)
+            Row(
+                modifier = Modifier.modifyIf(onAuthorClicked != null, Modifier.clickable { onAuthorClicked?.invoke() }),
+                horizontalArrangement = spacedBy(8.dp),
+                verticalAlignment = CenterVertically,
+            ) {
+                ProfileCircle(avatarSize, author.id, authorInfo)
+                Text(
+                    modifier = Modifier.weight(1f, fill = false),
+                    text = getContactDisplayName(author.name, authorInfo.alias),
+                    fontWeight = if (authorInfo.status == OURSELVES) Bold else null,
+                    maxLines = 1,
+                    overflow = Ellipsis,
+                )
+                TrustIndicatorShort(authorInfo.status)
+            }
         }
         Text(
             text = TimeUtils.getFormattedTimestamp(timestamp),
diff --git a/briar-desktop/src/main/resources/strings/BriarDesktop.properties b/briar-desktop/src/main/resources/strings/BriarDesktop.properties
index 76edac5b197bba5effa6b36c311dc9e1fe06da23..e41d59318953cbfde67d999d4b64ef9a45148482 100644
--- a/briar-desktop/src/main/resources/strings/BriarDesktop.properties
+++ b/briar-desktop/src/main/resources/strings/BriarDesktop.properties
@@ -222,6 +222,7 @@ blog.empty.state=No posts to show
 blog.post.reply.intro=Reblog this post:
 blog.post.hint=Type your blog post
 blog.post.reply.hint=Add a comment (optional)
+blog.open.from.author=Open blog of {0}
 
 # Introduction
 introduction.introduce=Make Introduction