GitHub Repository
Minimal Next.js, Supabase और Dodo Payments subscription boilerplate।
Live Demo
Deployed demo देखें।
अवलोकन
Supabase subscription starter एक Next.js 15 और React 19 app है, जो Dodo Payments के साथ subscriptions बेचता है। Supabase Google OAuth sign-in और Postgres database प्रदान करता है, और Drizzle ORM schema को परिभाषित करता है। एक Supabase Edge Function Dodo Payments webhooks प्राप्त करके payments और subscriptions को store करता है, और एक basic dashboard प्रत्येक user का plan और invoices दिखाता है। अगर आपको किसी मौजूदा app के लिए केवल checkout, Customer Portal और webhook route handlers चाहिए, तो इसके बजाय framework adaptor का उपयोग करें:Next.js Adaptor
Express Adaptor
आवश्यकताएँ
शुरू करने से पहले, आपको इनकी आवश्यकता होगी:- Node.js 18 या बाद का संस्करण, या Bun 1.0 या बाद का संस्करण।
- एक Supabase project। आपको इसका URL, anon key, service role key और database connection string चाहिए।
- एक Dodo Payments account, API key और webhook signing secret के लिए।
- एक Google Cloud OAuth client, इसके Client ID और Client Secret के लिए।
Quickstart
1
Clone and Install
Repository को clone करें, फिर Bun, npm या pnpm के साथ dependencies install करें:
2
Create a Supabase Project
एक Supabase project बनाएँ। बाद के steps में इसके project reference, यानी
https://[your-project-ref].supabase.co में मौजूद subdomain, का उपयोग किया जाएगा। इन values को copy करें:NEXT_PUBLIC_SUPABASE_URL, project URLNEXT_PUBLIC_SUPABASE_ANON_KEY, anon keySUPABASE_SERVICE_ROLE_KEY, service role keyDATABASE_URL, database connection string
3
Configure Google OAuth
Google Cloud में अपने OAuth client में यह authorized redirect URI जोड़ें:
https://[your-project-ref].supabase.co/auth/v1/callback। फिर Supabase Auth में अपने Client ID और Client Secret के साथ Google provider enable करें।4
Configure Dodo Payments
Sidebar में Live Mode switch बंद होने पर, Dodo Payments dashboard में Developer → API Keys के अंतर्गत एक API key बनाएँ। Development के दौरान
DODO_PAYMENTS_ENVIRONMENT को test_mode पर सेट रखें।5
Add the Webhook in Dodo Payments
Developer → Webhooks के अंतर्गत, इस URL के साथ एक endpoint जोड़ें। इसे serve करने वाले function को आप बाद के step में deploy करेंगे।Function द्वारा handle किए जाने वाले payment और subscription events चुनें:
- Payment events:
payment.succeeded,payment.failed,payment.processing, औरpayment.cancelled - Subscription events:
subscription.active,subscription.plan_changed,subscription.renewed,subscription.on_hold,subscription.cancelled,subscription.expired, औरsubscription.failed
DODO_WEBHOOK_SECRET की value है।6
Create .env.local
Root directory में एक Next.js app इस file में मौजूद हर variable को पढ़ता है, सिवाय
.env.local file बनाएँ:DODO_WEBHOOK_SECRET के। Edge Function DODO_WEBHOOK_SECRET को अपने Supabase secrets से पढ़ता है, जिन्हें आप इसे deploy करते समय set करेंगे।7
Provision the Database Schema
Drizzle schema को अपने Supabase database में push करें:
बनाई गई tables:
users, subscriptions, payments।8
Deploy the Webhook Function
Supabase में log in करें, signing secret को function secret के रूप में store करें, और
dodo-webhook Edge Function को deploy करें। [your-project-ref] को अपने project reference से replace करें:deploy:webhook script supabase functions deploy dodo-webhook --no-verify-jwt चलाता है, ताकि Dodo Payments function को Supabase auth token के बिना call कर सके। Supabase डिफ़ॉल्ट रूप से function को SUPABASE_URL और SUPABASE_SERVICE_ROLE_KEY उपलब्ध कराता है।Deployment जाँचने के लिए, एक unsigned request भेजें:cURL
400 response के साथ Invalid webhook signature का अर्थ है कि function चल रहा है और उसके पास secret है। 500 response के साथ Server configuration error का अर्थ है कि DODO_WEBHOOK_SECRET set नहीं है। Signed test event भेजने के लिए, Developer → Webhooks में endpoint खोलें और उसका Testing tab इस्तेमाल करें।9
Create Products and Features
Dodo Payments dashboard में Products के अंतर्गत, प्रत्येक plan के लिए subscription product बनाने हेतु Add Product पर click करें। App में plan features की list दिखाने के लिए, वैकल्पिक रूप से key Metadata values strings, numbers या booleans होती हैं, इसलिए array को JSON string के रूप में store करें। Pricing UI
features और value के रूप में strings की JSON array वाली metadata entry जोड़ें। Product का metadata इस तरह दिखेगा:features value को parse करके प्रत्येक item को render करता है।10
Run the Dev Server
अब आपके पास Supabase और Dodo Payments के साथ तैयार किया गया एक working subscription SaaS scaffold है। इसे end to end confirm करने के लिए, test card के साथ किसी plan की subscription लें। Webhook आने के बाद, dashboard आपका नया plan दिखाएगा।
इसमें क्या शामिल है
- Supabase के माध्यम से authentication, जिसमें Google OAuth configured है
- Dodo Payments के माध्यम से subscription checkout
- Webhooks के लिए Supabase Edge Function (
dodo-webhook) - Drizzle ORM schema, migrations के लिए
db:generateऔरdb:migratescripts के साथ - Invoices, subscription status और plan features वाला dashboard
- Plans बदलने, subscription cancel करने और cancelled subscription restore करने के लिए server actions
मुख्य Files और Paths
Webhook handler, app routes और database schema इन files में मौजूद हैं:- Edge Function
- Next.js Routes
- Database (Drizzle)
Environment Variables
Next.js app और Edge Function इन variables को पढ़ते हैं:Supabase
Supabase
.env.example में SUPABASE_SERVICE_ROLE_KEY सूचीबद्ध नहीं है, लेकिन lib/supabase/admin.ts में app के admin client को इसकी आवश्यकता है। इसे स्वयं जोड़ें।Dodo Payments
Dodo Payments
Google OAuth
Google OAuth
App Google credentials को environment variables से नहीं पढ़ता। Supabase Auth की Google provider settings में Client ID और Client Secret दर्ज करें, और Google Cloud में OAuth client में यह redirect URI जोड़ें:
Verification और Troubleshooting
Webhook signature invalid (400)
Webhook signature invalid (400)
- सुनिश्चित करें कि फ़ंक्शन का
DODO_WEBHOOK_SECRETsecret, Dodo Payments dashboard में endpoint के signing secret से मेल खाता हो। - पुष्टि करें कि आपने नवीनतम
dodo-webhookफ़ंक्शन deploy किया है। - फ़ंक्शन Standard Webhooks headers
webhook-id,webhook-signature, औरwebhook-timestampको verify करता है। सुनिश्चित करें कि कोई proxy इन्हें strip न करे।
Database push fails
Database push fails
DATABASE_URLsyntax जाँचें।- Direct connection (
db.[project-ref].supabase.co:5432) IPv6 का उपयोग करता है, जब तक कि आपके project में IPv4 add-on न हो। केवल IPv4 वाले network पर, इसके बजाय session pooler connection string का उपयोग करें (Supabase connection docs)। - Project बनाने के बाद पहली push से पहले 2–3 मिनट प्रतीक्षा करें।
OAuth redirect mismatch
OAuth redirect mismatch
- Redirect URI
https://[ref].supabase.co/auth/v1/callbackहोना चाहिए। - Google Cloud और Supabase Auth provider, दोनों में समान URI का उपयोग करें।
Original repository और विस्तृत steps के लिए dodo-supabase-subscription-starter देखें।