-
-
Hashtags
-
Hashtags page - coming soon
+
+
+
Popular Hashtags
+
+ Discover trending topics and explore content by hashtag
+
+
+
+ {isLoading && (
+
+ {Array.from({ length: 9 }).map((_, i) => (
+
+
+
+
+
+
+
+
+ ))}
+
+ )}
+
+ {isError && (
+
+
+
+
+ Failed to load hashtags. Try checking your relay connections or wait a moment.
+
+
+
+
+ )}
+
+ {!isLoading && !isError && hashtags && hashtags.length === 0 && (
+
+
+
+
+
+ No hashtags found yet. Be the first to add hashtags to your pictures!
+
+
+
+
+ )}
+
+ {!isLoading && !isError && hashtags && hashtags.length > 0 && (
+
+ {hashtags.map(({ tag, count }) => (
+ navigate(`/tag/${encodeURIComponent(tag)}`)}
+ >
+
+
+
+ {tag}
+
+
+
+
+ {count} {count === 1 ? 'post' : 'posts'}
+
+
+
+ ))}
+
+ )}
diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx
index 7128dbf..fb6b8e7 100644
--- a/src/pages/Index.tsx
+++ b/src/pages/Index.tsx
@@ -2,13 +2,11 @@ import { useSeoMeta } from '@unhead/react';
import { Layout } from '@/components/Layout';
import { usePictureFeed } from '@/hooks/usePictureFeed';
import { useFollowerPictureFeed } from '@/hooks/useFollowerPictureFeed';
-import { PictureCard } from '@/components/feed/PictureCard';
-import { MinimalPictureCard } from '@/components/feed/MinimalPictureCard';
+import { AdaptivePictureCard } from '@/components/feed/AdaptivePictureCard';
import { useInView } from 'react-intersection-observer';
import { useEffect, useMemo } from 'react';
import { Skeleton } from '@/components/ui/skeleton';
import { Card, CardContent } from '@/components/ui/card';
-import { useAppContext } from '@/hooks/useAppContext';
import { useCurrentUser } from '@/hooks/useCurrentUser';
const Index = () => {
@@ -17,7 +15,6 @@ const Index = () => {
description: 'Discover amazing pictures shared on Nostr.',
});
- const { config } = useAppContext();
const { user } = useCurrentUser();
// Use follower feed for logged-in users, global feed for logged-out users
@@ -83,11 +80,7 @@ const Index = () => {
// Picture feed
<>
{pictures.map((picture) => (
- config.preferMinimalCards ? (
-
- ) : (
-
- )
+
))}
{/* Infinite scroll trigger */}
diff --git a/src/pages/ProfileView.tsx b/src/pages/ProfileView.tsx
index e79d9c0..3ebcbc3 100644
--- a/src/pages/ProfileView.tsx
+++ b/src/pages/ProfileView.tsx
@@ -4,24 +4,21 @@ import { useUserNotes } from '@/hooks/useUserNotes';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Skeleton } from '@/components/ui/skeleton';
-import { Loader2, Grid3x3, LayoutGrid, FileText } from 'lucide-react';
+import { Loader2, Image, FileText } from 'lucide-react';
import { ProfileHeader } from '@/components/profile/ProfileHeader';
-import { MinimalPictureCard } from '@/components/feed/MinimalPictureCard';
-import { PictureCard } from '@/components/feed/PictureCard';
+import { AdaptivePictureCard } from '@/components/feed/AdaptivePictureCard';
import { NoteCard } from '@/components/feed/NoteCard';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { useState } from 'react';
export function ProfileView({ pubkey }: { pubkey: string }) {
- const [activeTab, setActiveTab] = useState('minimal');
+ const [activeTab, setActiveTab] = useState('pictures');
const author = useAuthor(pubkey);
- const minimalPictures = useUserPictures(pubkey);
- const fullPictures = useUserPictures(pubkey);
+ const pictures = useUserPictures(pubkey);
const notes = useUserNotes(pubkey);
- const minimalPicturesData = minimalPictures.data?.pages.flat() || [];
- const fullPicturesData = fullPictures.data?.pages.flat() || [];
+ const picturesData = pictures.data?.pages.flat() || [];
const notesData = notes.data?.pages.flat() || [];
return (
@@ -36,68 +33,20 @@ export function ProfileView({ pubkey }: { pubkey: string }) {
{/* Tabbed Content */}
-
-
-
+
+
+
+ Pictures
-
-
-
-
+
+ Notes
- {/* Minimal Pictures Tab */}
-
- {minimalPictures.isLoading ? (
-
- {[...Array(8)].map((_, i) => (
-
- ))}
-
- ) : minimalPicturesData.length === 0 ? (
-
-
-
- No pictures found for this user.
-
-
-
- ) : (
- <>
-
- {minimalPicturesData.map((event) => (
-
- ))}
-
-
- {minimalPictures.hasNextPage && (
-
-
-
- )}
- >
- )}
-
-
- {/* Full Pictures Tab */}
-
- {fullPictures.isLoading ? (
+ {/* Pictures Tab */}
+
+ {pictures.isLoading ? (
{[...Array(6)].map((_, i) => (
@@ -109,7 +58,7 @@ export function ProfileView({ pubkey }: { pubkey: string }) {
))}
- ) : fullPicturesData.length === 0 ? (
+ ) : picturesData.length === 0 ? (
@@ -120,20 +69,20 @@ export function ProfileView({ pubkey }: { pubkey: string }) {
) : (
<>
- {fullPicturesData.map((event) => (
-
+ {picturesData.map((event) => (
+
))}
- {fullPictures.hasNextPage && (
+ {pictures.hasNextPage && (