8.6 KiB
Zelo.news
A Decentralized Blogging Platform Built on Nostr
Zelo.news is a modern, censorship-resistant blogging platform powered by the Nostr protocol. Write, publish, and share long-form content without intermediaries or platform restrictions. Your content lives on a decentralized network, giving you true ownership and freedom of expression.
✨ Features
- 📝 Long-form Publishing: Write and publish articles using NIP-23 (long-form content)
- 💬 Comments & Engagement: Built-in comment system with threaded discussions
- ⚡ Lightning Zaps: Support your favorite writers with instant Bitcoin payments
- 🔐 Censorship-Resistant: Content stored across multiple Nostr relays
- 🎨 Beautiful Design: Clean, distraction-free reading experience with light/dark themes
- 👤 User Profiles: Follow writers and build your audience
- 🌐 Multi-Relay Support: Connect to any Nostr relay for maximum reach
- 📱 Responsive: Optimized for all devices - desktop, tablet, and mobile
<EFBFBD> Quick Start
# Clone the repository
git clone https://github.com/mroxso/zelo-news.git
cd zelo-news
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
🛠 Technology Stack
- React 18.x: Modern React with hooks and concurrent rendering
- TypeScript: Full type safety for robust code
- TailwindCSS 3.x: Utility-first styling with custom design system
- Vite: Lightning-fast build tool and development server
- Nostrify: Comprehensive Nostr protocol implementation
- shadcn/ui: Beautiful, accessible UI components
- TanStack Query: Powerful data fetching and caching
- React Router: Seamless client-side navigation
- Markdown Support: Full markdown rendering for articles
📖 How It Works
Zelo.news leverages the Nostr protocol to create a truly decentralized blogging platform:
- Content Publishing: Articles are published as NIP-23 events (long-form content)
- Distributed Storage: Content is stored across multiple Nostr relays
- User Identity: Writers and readers use Nostr key pairs (npub/nsec)
- Comments: NIP-10 threaded comments enable discussions
- Monetization: NIP-57 Lightning zaps allow instant micropayments
- No Central Server: No single point of failure or censorship
<EFBFBD> Key Features for Writers
Publishing Tools
- Rich Text Editor: Write with markdown support for formatting
- Draft Management: Save and edit posts before publishing
- Media Uploads: Add images and media via Blossom servers (NIP-94)
- SEO Friendly: Articles include metadata for better discoverability
- Version History: All edits preserved on the Nostr network
Monetization
- Lightning Zaps: Receive instant Bitcoin tips from readers
- Wallet Connect: Support for WebLN and NWC (NIP-47)
- Transparent: No platform fees or middlemen
Audience Building
- Profile Pages: Showcase your published articles
- User Profiles: Display name, bio, avatar, and social links
- Engagement Metrics: See comments and zaps on your content
- Multi-Account: Manage multiple writer identities
🔑 Key Features for Readers
Discovery & Reading
- Clean Interface: Distraction-free reading experience
- Infinite Scroll: Seamless browsing through articles
- Search & Filter: Find content by author, topic, or relay
- Responsive Design: Perfect reading on any device
Engagement
- Comments: Participate in threaded discussions (NIP-10)
- Zap Authors: Support writers with Lightning payments
- Save & Share: Bookmark articles and share via Nostr identifiers
- Follow Authors: Keep track of your favorite writers
Privacy & Control
- No Tracking: No analytics or data collection
- Relay Choice: Choose which relays to read from
- Key Management: Use browser extensions or your own keys
- True Ownership: Your identity and data belong to you
🌐 Nostr Protocol Integration
Zelo.news implements several Nostr Improvement Proposals (NIPs):
- NIP-01: Basic protocol flow and event structure
- NIP-07: Browser extension signing (Alby, nos2x, etc.)
- NIP-10: Threaded comment system
- NIP-19: Identifier routing (npub, note, naddr, nevent)
- NIP-23: Long-form content (blog posts)
- NIP-25: Reactions and likes
- NIP-44: Encrypted messaging
- NIP-57: Lightning zaps and monetization
- NIP-94: File metadata and uploads
🔐 Privacy & Security
- Self-Sovereign Identity: You control your keys, you control your content
- No Account Creation: Use existing Nostr keys or browser extensions
- Encrypted Options: Support for private content via NIP-44
- Open Source: Fully transparent codebase for security audits
- Multi-Relay: Content distributed across multiple relays for redundancy
📁 Project Structure
src/
├── components/
│ ├── ui/ # 48+ shadcn/ui components
│ ├── auth/ # Login and account management
│ ├── comments/ # Comment system
│ ├── BlogHeader.tsx # Site header with navigation
│ ├── BlogPostForm.tsx # Article editor
│ └── MarkdownContent.tsx # Markdown renderer
├── hooks/
│ ├── useNostr.ts # Nostr protocol integration
│ ├── useBlogPosts.ts # Fetch articles
│ ├── useAuthor.ts # User profile data
│ ├── useComments.ts # Comment functionality
│ └── useZaps.ts # Lightning payments
├── pages/
│ ├── BlogHomePage.tsx # Homepage with article feed
│ ├── ArticlePage.tsx # Individual article view
│ ├── CreatePostPage.tsx # Article editor
│ └── EditPostPage.tsx # Edit existing articles
├── contexts/ # React context providers
└── lib/ # Utility functions
💻 Development
Prerequisites
- Node.js 18+ and npm
- A Nostr browser extension for testing (optional but recommended)
Local Development
# Install dependencies
npm install
# Start development server
npm run dev
# Run tests
npm run test
# Build for production
npm run build
# Preview production build
npm run preview
Environment Variables
Create a .env file for custom configuration:
# Optional: Default relay URL
VITE_DEFAULT_RELAY=wss://relay.nostr.band
# Optional: App name
VITE_APP_NAME=zelo.news
🚀 Deployment
Deploy to Netlify/Vercel
# Build the project
npm run build
# The dist/ folder contains your static site
Deploy to NostrDeploy
npm run deploy
The app is a static site and can be hosted anywhere that supports single-page applications.
🤝 Contributing
Zelo.news is open source and welcomes contributions! Whether you're fixing bugs, adding features, or improving documentation, we'd love your help.
How to Contribute
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and test thoroughly
- Run tests:
npm run test - Commit your changes:
git commit -m 'Add amazing feature' - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
Development Guidelines
- Write TypeScript with proper types (no
any) - Follow the existing code style
- Add tests for new features
- Update documentation as needed
- Test on multiple relays
📚 Resources
- Nostr Protocol: nostr.com
- NIPs Repository: github.com/nostr-protocol/nips
- NIP-23 Long-form Content: github.com/nostr-protocol/nips/blob/master/23.md
- shadcn/ui Components: ui.shadcn.com
- React Documentation: react.dev
🐛 Bug Reports & Feature Requests
Found a bug or have an idea? Open an issue on GitHub!
- Bug Reports: Include steps to reproduce, expected behavior, and actual behavior
- Feature Requests: Describe the feature and why it would be useful
- Questions: Join the Nostr community or open a discussion
🌟 Acknowledgments
Built with:
- MKStack - Nostr development framework
- Nostrify - Nostr protocol implementation
- shadcn/ui - UI component library
- The entire Nostr community
💬 Connect
- GitHub: github.com/mroxso/zelo-news
Made with ⚡ and 💜 for the decentralized web
Write freely. Publish independently. Own your content forever.