Publisher onboarding dashboard for OpenRSS, implementing the Universal Publishing Protocol (UPP).
- Patreon OAuth Integration: One-click connection to sync content
- Multiple Payment Options: Stripe Connect, PayPal, Google Pay
- Tier Configuration: Map source tiers to OpenRSS pricing
- Real-time Status: Track sync progress and webhook status
- Node.js 18+
- npm or yarn
- Patreon Developer Account
- Stripe Account (for payments)
-
Clone the repository:
cd openrss-web -
Install dependencies:
npm install
-
Copy environment file:
cp .env.example .env.local
-
Configure environment variables (see below)
-
Run development server:
npm run dev
| Variable | Description |
|---|---|
NEXT_PUBLIC_API_URL |
OpenRSS backend API URL |
NEXT_PUBLIC_PATREON_CLIENT_ID |
Patreon OAuth Client ID |
NEXT_PUBLIC_PATREON_REDIRECT_URI |
Patreon OAuth redirect URI |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY |
Stripe publishable key |
NEXT_PUBLIC_STRIPE_CONNECT_CLIENT_ID |
Stripe Connect client ID |
| Variable | Description |
|---|---|
NEXT_PUBLIC_PAYPAL_CLIENT_ID |
PayPal client ID |
NEXT_PUBLIC_GOOGLE_MERCHANT_ID |
Google Pay merchant ID |
- Go to Patreon Developer Portal
- Create a new client
- Set redirect URI to
http://localhost:3000/onboarding/callback/patreon - Copy Client ID to
.env.local - Request the following scopes:
identitycampaignscampaigns.posts
- Go to Stripe Dashboard
- Enable Stripe Connect for your platform
- Set redirect URI to
http://localhost:3000/onboarding/callback/stripe - Copy the Connect Client ID to
.env.local
src/
├── app/
│ ├── layout.tsx # Root layout
│ ├── globals.css # Global styles
│ └── onboarding/
│ ├── page.tsx # Main onboarding page
│ └── callback/
│ ├── patreon/ # Patreon OAuth callback
│ └── stripe/ # Stripe Connect callback
├── components/
│ ├── ui/ # Reusable UI components
│ │ ├── Button.tsx
│ │ └── Card.tsx
│ └── onboarding/ # Onboarding step components
│ ├── StepIndicator.tsx
│ ├── ConnectSourceStep.tsx
│ ├── ConfigureTiersStep.tsx
│ ├── PaymentSetupStep.tsx
│ └── CompleteStep.tsx
├── context/
│ └── OnboardingContext.tsx # Onboarding state management
└── lib/
├── api.ts # API client
└── config.ts # Configuration
- Connect Source - Publisher connects Patreon via OAuth
- Configure Tiers - Map Patreon tiers to OpenRSS pricing
- Payment Setup - Connect Stripe, PayPal, or Google Pay
- Complete - Publication is live and syncing
The frontend communicates with the OpenRSS backend API:
| Endpoint | Method | Description |
|---|---|---|
/onboarding/session |
POST | Create new onboarding session |
/onboarding/patreon/callback |
POST | Exchange Patreon OAuth code |
/onboarding/session/:id/tiers |
POST | Save tier configuration |
/onboarding/payment/stripe/callback |
POST | Exchange Stripe Connect code |
/onboarding/session/:id/complete |
POST | Complete onboarding |
# Run development server
npm run dev
# Build for production
npm run build
# Run production build
npm start
# Lint code
npm run lintMIT