# LUMINA **An Image-First Nostr Client** LUMINA is a beautiful, Instagram-inspired Nostr client built with React 18.x, TailwindCSS 3.x, Vite, shadcn/ui, and Nostrify. Experience the decentralized web through stunning visuals - share, discover, and interact with kind-20 image-first notes on the Nostr protocol. ## ๐ŸŒŸ About LUMINA LUMINA brings the visual social experience to Nostr with a focus on kind-20 events - notes where images take center stage. Built for creators and visual storytellers, LUMINA combines the familiar Instagram-like interface with the power of decentralized, censorship-resistant social networking. **Visit**: [LUMINA.rocks](https://lumina.rocks) ## โœจ Features - **๐Ÿ“ธ Image-First Experience**: Built specifically for kind-20 notes with beautiful image galleries - **๐ŸŽจ Instagram-Like Interface**: Familiar, intuitive design for visual content - **โšก Lightning Fast**: Optimized performance with Vite and React 18 - **๐Ÿ” Decentralized & Private**: Your keys, your data, on the Nostr protocol - **๐Ÿ’ฐ Lightning Zaps**: Support creators with instant Bitcoin payments - **๐ŸŽจ Beautiful UI**: 48+ shadcn/ui components with light/dark theme support - **๐Ÿ“ฑ Fully Responsive**: Perfect experience on mobile, tablet, and desktop ## ๐Ÿ›  Technology Stack - **React 18.x**: Modern UI with hooks and concurrent rendering - **TailwindCSS 3.x**: Utility-first CSS for beautiful, responsive design - **Vite**: Lightning-fast build tool and development server - **shadcn/ui**: 48+ accessible UI components built with Radix UI - **Nostrify**: Comprehensive Nostr protocol implementation - **React Router**: Smooth client-side navigation - **TanStack Query**: Efficient data fetching and caching - **TypeScript**: Type-safe development ## ๐ŸŽฏ What are Kind-20 Notes? Kind-20 events are image-first notes on Nostr where the visual content is the primary focus. Unlike traditional text posts with optional images, kind-20 notes are designed to showcase photography, art, and visual storytelling - perfect for creators who want to share their work on a decentralized platform. ### Why Kind-20? - **Image-Centric**: Built specifically for visual content - **Creator-Friendly**: Perfect for photographers, artists, and visual creators - **Decentralized**: Your content lives on Nostr relays, not centralized servers - **Censorship-Resistant**: No platform can take down your work - **Monetization**: Direct support through Lightning zaps ## ๐Ÿ”ง Core Features ### Image Gallery & Feed - Beautiful image-first feed for kind-20 notes - Instagram-like grid and list views - Infinite scroll for seamless browsing - Optimized image loading and caching - Full-screen image viewer ### Social Interactions - Like/react to images (NIP-25) - Comment on posts with threaded discussions - Share and repost visual content - Follow your favorite creators - User profiles with image galleries ### Content Creation - Upload and publish kind-20 image notes - Edit captions and metadata - Add hashtags for discoverability - Multiple image support - File upload via Blossom servers (NIP-94) ### Authentication & Users - Nostr login with browser extensions (NIP-07) - Multi-account support with account switching - Edit profile with avatar and bio - Secure key management ### Payments & Zaps - Lightning zaps to support creators (NIP-57) - Wallet Connect integration (NIP-47) - WebLN support for instant payments - View zap receipts and amounts ### Technical Features - Efficient relay management (NIP-65) - Real-time event subscriptions - Event validation and filtering - Light/dark theme support - Fully responsive mobile design - TypeScript for type safety ## ๐Ÿš€ Getting Started ### Prerequisites - Node.js 18+ installed - A Nostr browser extension like [Alby](https://getalby.com/) or [nos2x](https://github.com/fiatjaf/nos2x) ### Installation ```bash # Clone the repository git clone https://github.com/lumina-rocks/lumina.git cd lumina # Install dependencies npm install # Start development server npm run dev ``` ### Building for Production ```bash # Build the application npm run build # Preview the production build npm run preview ``` ## ๐Ÿ“ Project Structure ``` src/ โ”œโ”€โ”€ components/ # UI components โ”‚ โ”œโ”€โ”€ ui/ # shadcn/ui components (48+ available) โ”‚ โ”œโ”€โ”€ auth/ # Login, signup, account switching โ”‚ โ”œโ”€โ”€ comments/ # Comment system for posts โ”‚ โ””โ”€โ”€ dm/ # Direct messaging components โ”œโ”€โ”€ hooks/ # Custom React hooks โ”‚ โ”œโ”€โ”€ useNostr # Core Nostr protocol integration โ”‚ โ”œโ”€โ”€ useAuthor # Fetch user profiles โ”‚ โ”œโ”€โ”€ useCurrentUser # Authentication state โ”‚ โ”œโ”€โ”€ useNostrPublish # Publish kind-20 and other events โ”‚ โ”œโ”€โ”€ useUploadFile # Upload images via Blossom โ”‚ โ””โ”€โ”€ useZaps # Lightning payments โ”œโ”€โ”€ pages/ # Page components (feed, profile, etc.) โ”œโ”€โ”€ lib/ # Utility functions โ”œโ”€โ”€ contexts/ # React context providers โ””โ”€โ”€ docs/ # Documentation for features and NIPs ``` ## ๐ŸŽจ Design Philosophy LUMINA combines the familiar Instagram experience with Nostr's decentralized principles: - **Visual First**: Images are the hero, with clean layouts that showcase content - **Intuitive Navigation**: Familiar patterns for browsing, posting, and interacting - **Beautiful Themes**: Carefully crafted light and dark modes - **Responsive Design**: Perfect experience on any device - **Accessible**: Built with Radix UI primitives for WCAG 2.1 AA compliance ### UI Components Powered by 48+ shadcn/ui components for a polished, professional interface: **Layout**: Card, Separator, Sheet, Sidebar, ScrollArea, Resizable **Navigation**: Breadcrumb, NavigationMenu, Menubar, Tabs, Pagination **Forms**: Button, Input, Textarea, Select, Checkbox, RadioGroup, Switch, Slider **Feedback**: Alert, AlertDialog, Toast, Progress, Skeleton **Overlay**: Dialog, Popover, HoverCard, Tooltip, ContextMenu, DropdownMenu **Data Display**: Table, Avatar, Badge, Calendar, Chart, Carousel ## ๐Ÿ” Privacy & Security - **Your Keys, Your Data**: Keys never leave your device - **NIP-07 Security**: Browser extension signing keeps keys safe - **End-to-End Encryption**: Private messages use NIP-44 encryption - **No Tracking**: No analytics, no cookies, no surveillance - **Decentralized Storage**: Content lives on Nostr relays, not our servers ## ๐ŸŒ Nostr Protocol LUMINA is built on the Nostr protocol - a simple, open protocol for decentralized social networking: - **Censorship-Resistant**: No single point of control - **Portable Identity**: Your identity works across all Nostr apps - **Lightning-Native**: Built-in Bitcoin payments via Lightning Network - **Open Source**: Transparent, auditable code - **Interoperable**: Content visible in other Nostr clients Learn more: [nostr.com](https://nostr.com) ## ๐Ÿงช Development ### Testing ```bash # Run tests npm test # Run tests in watch mode npm run test:watch ``` Built with Vitest, React Testing Library, and comprehensive test coverage. ### Code Quality ```bash # Type checking npx tsc --noEmit # Linting npm run lint ``` ## ๐Ÿค Contributing LUMINA is open source and welcomes contributions! Whether you're fixing bugs, adding features, or improving documentation, we'd love your help. ### Ways to Contribute - **Report Bugs**: Open an issue with details and steps to reproduce - **Suggest Features**: Share your ideas for making LUMINA better - **Submit Pull Requests**: Fix bugs, add features, or improve code - **Improve Documentation**: Help others understand and use LUMINA - **Share Feedback**: Tell us what you love and what could be better ### Development Guidelines - Follow TypeScript best practices - Write tests for new features - Follow existing code patterns - Keep commits focused and descriptive ## ๐Ÿ“š Resources - **Nostr Protocol**: [nostr.com](https://nostr.com) - **NIP Repository**: [github.com/nostr-protocol/nips](https://github.com/nostr-protocol/nips) - **shadcn/ui**: [ui.shadcn.com](https://ui.shadcn.com) - **Nostrify**: [nostrify.dev](https://nostrify.dev) ## ๐Ÿ“„ License MIT License - see LICENSE file for details. ## ๐Ÿ™ Acknowledgments Built with [MKStack](https://soapbox.pub/mkstack) - the complete framework for building Nostr clients with AI. Special thanks to the Nostr community for building an open, decentralized future for social networking. --- **Experience visual storytelling on the decentralized web.** Visit [LUMINA.rocks](https://lumina.rocks) | Follow updates on Nostr