diff --git a/lib/widgets/attachment/attachment_list.dart b/lib/widgets/attachment/attachment_list.dart
index f35d33d..14cf6b5 100644
--- a/lib/widgets/attachment/attachment_list.dart
+++ b/lib/widgets/attachment/attachment_list.dart
@@ -62,7 +62,8 @@ class _AttachmentListState extends State<AttachmentList> {
                     'audio' => 16 / 9,
                     'video' => 16 / 9,
                     _ => 1,
-                  };
+                  }
+                      .toDouble();
 
           return Container(
             constraints: ResponsiveBreakpoints.of(context).largerThan(MOBILE)
diff --git a/lib/widgets/post/post_item.dart b/lib/widgets/post/post_item.dart
index 7cddc8b..e70b14b 100644
--- a/lib/widgets/post/post_item.dart
+++ b/lib/widgets/post/post_item.dart
@@ -17,6 +17,7 @@ import 'package:surface/widgets/dialog.dart';
 import 'package:surface/widgets/markdown_content.dart';
 import 'package:gap/gap.dart';
 import 'package:surface/widgets/post/post_comment_list.dart';
+import 'package:surface/widgets/post/post_meta_editor.dart';
 import 'package:surface/widgets/post/post_reaction.dart';
 import 'package:surface/widgets/post/publisher_popover.dart';
 
@@ -69,6 +70,11 @@ class PostItem extends StatelessWidget {
                 _PostQuoteContent(child: data.repostTo!).padding(
                   horizontal: 12,
                 ),
+              if (data.visibility > 0)
+                _PostVisibilityHint(data: data).padding(
+                  horizontal: 16,
+                  vertical: 4,
+                ),
               if (data.body['content_truncated'] == true)
                 _PostTruncatedHint(data: data).padding(
                   horizontal: 16,
@@ -478,6 +484,30 @@ class _PostTagsList extends StatelessWidget {
   }
 }
 
+class _PostVisibilityHint extends StatelessWidget {
+  final SnPost data;
+  const _PostVisibilityHint({super.key, required this.data});
+
+  static const List<IconData> kVisibilityIcons = [
+    Symbols.public,
+    Symbols.group,
+    Symbols.person_check,
+    Symbols.person_remove,
+    Symbols.lock,
+  ];
+
+  @override
+  Widget build(BuildContext context) {
+    return Row(
+      children: [
+        Icon(kVisibilityIcons[data.visibility], size: 20),
+        const Gap(4),
+        Text(kPostVisibilityLevel[data.visibility] ?? 'postVisibilityAll').tr(),
+      ],
+    ).opacity(0.75);
+  }
+}
+
 class _PostTruncatedHint extends StatelessWidget {
   final SnPost data;
   const _PostTruncatedHint({super.key, required this.data});
@@ -495,9 +525,9 @@ class _PostTruncatedHint extends StatelessWidget {
               const Gap(4),
               Text('postReadEstimate').tr(args: [
                 '${Duration(
-                  seconds: ((data.body['content_length'] as num).toDouble() /
-                          kHumanReadSpeed)
-                      .round(),
+                  seconds: (data.body['content_length'] as num).toDouble() *
+                      60 ~/
+                      kHumanReadSpeed,
                 ).inSeconds}s',
               ]),
             ],
diff --git a/lib/widgets/post/post_meta_editor.dart b/lib/widgets/post/post_meta_editor.dart
index dd3e83b..3a469f7 100644
--- a/lib/widgets/post/post_meta_editor.dart
+++ b/lib/widgets/post/post_meta_editor.dart
@@ -9,18 +9,18 @@ import 'package:surface/controllers/post_write_controller.dart';
 import 'package:surface/widgets/account/account_select.dart';
 import 'package:surface/widgets/post/post_tags_field.dart';
 
+const Map<int, String> kPostVisibilityLevel = {
+  0: 'postVisibilityAll',
+  1: 'postVisibilityFriends',
+  2: 'postVisibilitySelected',
+  3: 'postVisibilityFiltered',
+  4: 'postVisibilityNone',
+};
+
 class PostMetaEditor extends StatelessWidget {
   final PostWriteController controller;
   const PostMetaEditor({super.key, required this.controller});
 
-  static Map<int, String> kPostVisibilityLevel = {
-    0: 'postVisibilityAll',
-    1: 'postVisibilityFriends',
-    2: 'postVisibilitySelected',
-    3: 'postVisibilityFiltered',
-    4: 'postVisibilityNone',
-  };
-
   Future<DateTime?> _selectDate(
     BuildContext context, {
     DateTime? initialDateTime,