# ⚡ LNPaywall **Turn any link into paid access in 60 seconds.** LNPaywall is a platform that lets creators monetize any URL with Lightning Network payments. Paste a link, set a price, share or embed, and get paid instantly. ![LNPaywall](https://images.unsplash.com/photo-1621761191319-c6fb62004040?w=800) ## ✨ Features - **60 Second Setup** - Paste a URL, set your price, start earning - **Lightning Payments** - Instant, low-fee Bitcoin payments - **Embed Anywhere** - Works with Webflow, WordPress, Framer, any website - **No Custody** - Funds go directly to your Lightning wallet - **Works with Any Link** - Notion, Google Docs, PDFs, videos, private pages ## 🚀 Quick Start ### Prerequisites - Node.js 18+ - PostgreSQL - Redis (optional, for sessions) - LNbits account (for payments) ### Backend Setup ```bash cd backend # Install dependencies npm install # Set up environment variables cp env.example .env # Edit .env with your configuration # Generate Prisma client and push schema npm run db:generate npm run db:push # Seed demo data (optional) npm run db:seed # Start development server npm run dev ``` ### Frontend Setup ```bash cd frontend # Install dependencies npm install # Set up environment variables cp env.example .env # Edit .env with your configuration # Start development server npm run dev ``` ### Access the app - Frontend: http://localhost:5173 - Backend API: http://localhost:3001 - API Health: http://localhost:3001/health ### Demo Accounts After running the seed script: - **Admin**: admin@lnpaywall.com / admin123 - **Creator**: creator@demo.com / demo123 ## 📁 Project Structure ``` LNPaywall/ ├── backend/ │ ├── src/ │ │ ├── config/ # Database and app configuration │ │ ├── controllers/ # Route handlers │ │ ├── middleware/ # Auth, logging, error handling │ │ ├── models/ # Prisma schema │ │ ├── routes/ # API routes │ │ ├── services/ # Business logic │ │ └── utils/ # Helpers and validation │ ├── prisma/ │ │ ├── schema.prisma # Database schema │ │ └── seed.js # Demo data seeder │ └── env.example ├── frontend/ │ ├── src/ │ │ ├── components/ # Reusable UI components │ │ ├── pages/ # Page components │ │ ├── services/ # API client │ │ ├── store/ # Zustand state management │ │ └── styles/ # Global CSS │ ├── public/ │ └── env.example └── specs.md # Full product specification ``` ## 🔌 API Endpoints ### Authentication - `POST /api/auth/signup` - Create account - `POST /api/auth/login` - Log in - `POST /api/auth/logout` - Log out - `POST /api/auth/refresh` - Refresh token - `GET /api/auth/me` - Get current user ### Paywalls - `POST /api/paywalls` - Create paywall - `GET /api/paywalls` - List paywalls - `GET /api/paywalls/:id` - Get paywall - `PATCH /api/paywalls/:id` - Update paywall - `POST /api/paywalls/:id/archive` - Archive paywall ### Checkout - `POST /api/checkout/:paywallId` - Create checkout session - `GET /api/checkout/:sessionId` - Get session - `GET /api/checkout/:sessionId/status` - Check payment status ### Public - `GET /p/:slugOrId` - Public paywall page data - `GET /embed/:id` - Embed iframe ## 🔧 Configuration ### LNbits Setup 1. Create an LNbits wallet at https://legend.lnbits.com or self-host 2. Get your Admin Key and Invoice/Read Key 3. Add to your `.env`: ``` LNBITS_URL=https://legend.lnbits.com LNBITS_ADMIN_KEY=your-admin-key LNBITS_INVOICE_KEY=your-invoice-key ``` ### Database The app uses PostgreSQL with Prisma ORM. Update your `DATABASE_URL` in `.env`: ``` DATABASE_URL="postgresql://user:password@localhost:5432/lnpaywall" ``` ## 📦 Embedding ### Iframe Embed ```html ``` ### Button + Modal ```html ``` ## 🛡️ Security - JWT-based authentication with refresh tokens - HTTPS-only URLs for paywalls - SSRF protection on URL fetching - Rate limiting on checkout creation - Device fingerprinting for access control - Signed access tokens ## 📈 Roadmap - [ ] Email receipts - [ ] Custom branding - [ ] Team accounts - [ ] Subscriptions - [ ] Analytics dashboard - [ ] Custom domains - [ ] BTCPay Server integration ## 📄 License MIT License - see LICENSE file for details. ## 🤝 Contributing Contributions are welcome! Please read the contributing guidelines first. --- Built with ⚡ for the Bitcoin ecosystem