mirror of
https://github.com/lumina-rocks/lumina.git
synced 2026-04-09 06:56:57 +02:00
247 lines
8.5 KiB
Markdown
247 lines
8.5 KiB
Markdown
# 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 |