diff --git a/components/profile/ProfileActivityTab.tsx b/components/profile/ProfileActivityTab.tsx
deleted file mode 100644
index e16004485..000000000
--- a/components/profile/ProfileActivityTab.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-'use client';
-
-import { FeedContent } from '@/components/Feed/FeedContent';
-import { PillTabs } from '@/components/ui/PillTabs';
-import { useFeed } from '@/hooks/useFeed';
-
-export const ACTIVITY_PILLS = [
- { id: 'proposals', label: 'Proposals' },
- { id: 'peer-reviews', label: 'Peer Reviews' },
- { id: 'comments', label: 'Comments' },
- { id: 'bounties', label: 'Bounties' },
-];
-
-export type ActivityPillId = (typeof ACTIVITY_PILLS)[number]['id'];
-
-export function isActivityPill(id: string): id is ActivityPillId {
- return ACTIVITY_PILLS.some((pill) => pill.id === id);
-}
-
-interface ProfileActivityTabProps {
- activePill: ActivityPillId;
- onPillChange: (pillId: ActivityPillId) => void;
- userId?: number;
- children: React.ReactNode;
-}
-
-function ProposalsEmptyState() {
- return (
-
- );
-}
-
-function ProposalsContent({ userId }: { userId: number }) {
- const { entries, isLoading, hasMore, loadMore } = useFeed('all', {
- endpoint: 'funding_feed',
- contentType: 'PREREGISTRATION',
- createdBy: userId,
- ordering: 'newest',
- });
-
- return (
-
}
- />
- );
-}
-
-/**
- * Activity tab — thin wrapper rendering the pill bar + whatever feed the
- * parent decided to render for the active pill. Proposals is rendered
- * internally since it uses a different data source than the contributions feed.
- */
-export function ProfileActivityTab({
- activePill,
- onPillChange,
- userId,
- children,
-}: ProfileActivityTabProps) {
- let activityContent = children;
- if (activePill === 'proposals') {
- activityContent = userId ?
:
;
- }
-
- return (
-
-
-
onPillChange(id as ActivityPillId)}
- size="sm"
- />
-
- {activityContent}
-
- );
-}
diff --git a/components/profile/ProfileFundingTab.tsx b/components/profile/ProfileFundingTab.tsx
deleted file mode 100644
index 31ffabbc0..000000000
--- a/components/profile/ProfileFundingTab.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-'use client';
-
-import { useMemo } from 'react';
-import { FeedContent } from '@/components/Feed/FeedContent';
-import { useFeed } from '@/hooks/useFeed';
-
-export const FUNDING_PILLS = [{ id: 'grants', label: 'RFPs' }];
-
-export type FundingPillId = 'grants';
-
-export function isFundingPill(id: string): id is FundingPillId {
- return id === 'grants';
-}
-
-interface ProfileFundingTabProps {
- /** User id of the profile being viewed. */
- userId: number;
-}
-
-/**
- * Funding tab — shows the user's funding opportunities (grants).
- */
-export function ProfileFundingTab({ userId }: ProfileFundingTabProps) {
- const grantsOpts = useMemo(
- () => ({
- endpoint: 'grant_feed' as const,
- contentType: 'GRANT',
- createdBy: userId,
- ordering: 'newest',
- }),
- [userId]
- );
-
- const { entries, isLoading, hasMore, loadMore } = useFeed('all', grantsOpts);
-
- return (
-
- No RFPs yet
-
- }
- />
- );
-}
diff --git a/components/profile/ProfileRightSidebar.tsx b/components/profile/ProfileRightSidebar.tsx
deleted file mode 100644
index 54fa5cb87..000000000
--- a/components/profile/ProfileRightSidebar.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-'use client';
-
-import { Building2, Globe, Link as LinkIcon } from 'lucide-react';
-import { BarChart } from '@/components/charts/BarChart';
-
-export function ProfileRightSidebar() {
- // Mock data for publications histogram
- const publicationData = {
- labels: ['2019', '2020', '2021', '2022', '2023'],
- datasets: [
- {
- data: [45678, 52345, 58902, 62341, 71234],
- backgroundColor: '#6366f1',
- },
- ],
- };
-
- const topics = [
- 'Regulation of RNA Processing and Function',
- 'Molecular Mechanisms of Plant Development and Regulation',
- 'Gene Therapy Techniques and Applications',
- ];
-
- return (
-