diff --git a/AGENTS.md b/AGENTS.md
index 4375f7bd48..a84f752a75 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -395,6 +395,10 @@ When reviewing code (or writing code that will be reviewed):
- **Avoid confusing naming** - Don't create multiple components with the same name in different locations (e.g., two `AboutMe` components)
- **Remove unused exports** - If a function/constant is only used internally, don't export it
- **Clean up duplicates** - If the same interface/type is defined in multiple places, consolidate to one location and import
+- **Activity list modals should be metadata-first** - For lists like reposts/upvotes/history in modals, prefer compact rows that emphasize source/author and engagement. Avoid large content images that dominate the layout unless image content is the primary purpose.
+- **Reuse feed/list card primitives first** - Before adding modal-specific list item components, check existing card building blocks (`FeedItemContainer`, `PostCardHeader`, list card primitives) and compose with them.
+- **Do not hide accessible data using presentation heuristics** - In UI lists, avoid masking content based on flags like `source.public`; rely on backend access controls and render the data returned by the query.
+- **Keep scope tight in design iterations** - When adjusting UI, avoid unrelated behavioral/SEO changes in the same commit unless explicitly requested.
## Node.js Version Upgrade Checklist
diff --git a/packages/shared/src/components/modals/RepostListItem.tsx b/packages/shared/src/components/modals/RepostListItem.tsx
new file mode 100644
index 0000000000..2d73c4d32f
--- /dev/null
+++ b/packages/shared/src/components/modals/RepostListItem.tsx
@@ -0,0 +1,133 @@
+import type { ReactElement } from 'react';
+import React from 'react';
+import { ProfileImageSize } from '../ProfilePicture';
+import { SourceAvatar } from '../profile/source/SourceAvatar';
+import Link from '../utilities/Link';
+import type { Post } from '../../graphql/posts';
+import { isSourceUserSource } from '../../graphql/sources';
+import { DiscussIcon, LockIcon, UpvoteIcon } from '../icons';
+import { largeNumberFormat } from '../../lib/numberFormat';
+import { UserShortInfo } from '../profile/UserShortInfo';
+import { TimeFormatType, formatDate } from '../../lib/dateFormat';
+
+interface RepostListItemProps {
+ post: Post;
+ scrollingContainer?: HTMLElement | null;
+ appendTooltipTo?: HTMLElement | null;
+}
+
+export function RepostListItem({
+ post,
+ scrollingContainer,
+ appendTooltipTo,
+}: RepostListItemProps): ReactElement {
+ const isUserSource = isSourceUserSource(post.source);
+ const upvotes = post.numUpvotes ?? 0;
+ const comments = post.numComments ?? 0;
+ const { author } = post;
+ const showSquadPreview = !isUserSource && !!post.source;
+ const isPrivateSquad = showSquadPreview && !post.source.public;
+
+ const renderUserInfo = () => {
+ if (!author) {
+ return null;
+ }
+
+ const userShortInfoProps = {
+ user: author,
+ showDescription: false,
+ scrollingContainer,
+ appendTooltipTo,
+ };
+
+ if (author.permalink) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+ );
+ };
+
+ return (
+
+ {/* Squad name + lock + date */}
+ {showSquadPreview && (
+