OpChan/app/README.md

133 lines
4.2 KiB
Markdown

# OpChan
A decentralized forum application built as a Proof of Concept for a Waku-powered discussion platform. OpChan enables users to create "cells" (discussion boards), make posts, and engage in threaded conversations using Ethereum wallets (wagmi) with optional ENS verification and the Waku protocol for decentralized messaging.
## Quick Start
### Prerequisites
- Node.js 18+ and npm
- Ethereum wallet (e.g., MetaMask, Coinbase Wallet) or WalletConnect-compatible wallet
### Installation
1. **Clone the repository**
```bash
git clone https://github.com/waku-org/OpChan.git
cd OpChan
```
2. **Install dependencies**
```bash
npm install
```
3. **Setup environment variables**
```bash
cp .env.example .env
```
Edit `.env` to configure development settings as needed for local testing.
4. **Start development server**
```bash
npm run dev
```
### Project Structure
```
src/
├── components/ # React components
│ ├── ui/ # shadcn/ui component library
│ ├── ActivityFeed.tsx
│ ├── CellPage.tsx
│ ├── Dashboard.tsx
│ └── ...
├── contexts/ # React Context providers
│ ├── AuthContext.tsx # Wallet & authentication
│ ├── ForumContext.tsx # Forum data & state
│ └── forum/ # Forum logic modules
├── lib/ # Core libraries
│ ├── identity/ # Wallet & cryptographic operations
│ ├── waku/ # Waku protocol integration
│ └── utils.ts
├── pages/ # Route components
└── types/ # TypeScript definitions
```
## Usage
### Getting Started
1. **Connect Wallet**: Click "Connect Wallet" and approve the wallet connection
2. **Verify ENS**: The app will resolve your ENS name (if any) and mark your account as ENS-verified
3. **Browse Cells**: View existing discussion boards on the dashboard
4. **Create Content**: Create new cells, posts, or comments (requires Ordinals)
5. **Moderate**: Cell creators can moderate their boards
### Authentication Flow
OpChan uses a two-tier authentication system:
1. **Wallet Connection**: Initial connection via wagmi connectors (Injected / WalletConnect / Coinbase)
2. **Key Delegation**: Optional browser key generation for improved UX
- Reduces wallet signature prompts
- Configurable duration: 1 week or 30 days
- Can be regenerated anytime
### Network & Performance
- **Waku Network**: Connects to multiple bootstrap nodes for resilience
- **Message Caching**: Local caching with IndexedDB (planned)
- **Time-bounded Queries**: 24-hour query windows to prevent database overload
- **Pagination**: 50 messages per query with fallback limits
## Contributing
### Development Setup
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Make your changes following the existing code style
4. Test your changes thoroughly
5. Commit your changes: `git commit -m 'Add amazing feature'`
6. Push to the branch: `git push origin feature/amazing-feature`
7. Open a Pull Request
## TODOs
- [x] replace mock wallet connection/disconnection
- supports Phantom
- [x] replace mock Ordinal verification (API)
- [ ] figure out using actual icons for cells
- [ ] store message cache in indexedDB -- make app local-first (update from/to Waku when available)
- [ ] moderation
- [ ] admins can "moderate" comments/posts
## Architecture
OpChan implements a decentralized architecture with these key components:
- **Waku Protocol**: Handles peer-to-peer messaging and content distribution
- **ENS**: Provides decentralized identity signal for identity and display
- **Key Delegation**: Improves UX while maintaining security
- **Content Addressing**: Messages are cryptographically signed and verifiable
- **Moderation Layer**: Cell-based moderation without global censorship
## Support
For questions, issues, or contributions:
- Open an issue on GitHub for bugs or feature requests
- Check existing issues before creating new ones
- Provide detailed information for bug reports
- Include steps to reproduce issues
---
**Note**: This is a Proof of Concept implementation. Use at your own risk in production environments.