How pratham-taikar/cloudinary-saas-v2 works
EasyUploads is a media-processing SaaS for creators: users upload images or videos, use transformation tools, and retrieve optimized media; subscription limits govern usage, while billing upgrades plans and dashboard APIs expose account history. The README documents Cloudinary edge processing and delivery, but most feature-page implementations were not sampled, so transformation-page wiring is shown only where documented. The sampled routes establish upload authorization, plan checks, persistence, and payment verification.
Main entry points: image-upload/route.ts Image upload API · signature/route.ts Video signature API · video-upload/route.ts Video metadata API · verify/route.ts Verify payment API
Components 29
User experience
- Landing
app/page.tsx - Sign in / up
app/(auth)/sign-in/[[...sign-in]]/page.tsx - Usage dashboard
app/(app)/user-dashboard/page.tsx
Media workflows
- Image tools
app/(app)/remove-background/page.tsx - Image effects
app/(app)/add-effects/page.tsx - Generative fill
app/(app)/gen-background/page.tsx - Social resizing
app/(app)/social-share/page.tsx - Video upload
app/(app)/video-upload/page.tsx - Image upload API
app/api/image-upload/route.ts - Video signature API
app/api/video-upload/signature/route.ts - Video metadata API
app/api/video-upload/route.ts
Plans and billing
- Plan limits
lib/services.ts - Plan selection
app/(billings)/billings/page.tsx - Checkout page
app/(billings)/checkout/page.tsx - Create order API
app/api/razorpay/order/route.ts - Verify payment API
app/api/razorpay/verify/route.ts
Persistence
- User profile API
app/api/user/route.ts - Video history API
app/api/videos/route.ts - Payment history API
app/api/user/payments/route.ts - Cycle reset logic
lib/subscription.ts - Database connection
lib/db.ts - User records
models/user.models.ts - Video records
models/video.models.ts - Payment records
models/payment.models.ts
Other components
- Visitor / user
- Cloudinary
- Media CDN
- Razorpay
- Clerk identity
Connections 48
- Visitor / user → Landing: opens
- Visitor / user → Sign in / up: authenticates
- Visitor / user → Image tools: uses tools
- Visitor / user → Image effects: applies filters
- Visitor / user → Generative fill: prompts fill
- Visitor / user → Social resizing: resizes media
- Visitor / user → Video upload: uploads video
- Visitor / user → Plan selection: chooses plan
- Visitor / user → Usage dashboard: views account
- Sign in / up → Clerk identity: authenticates
- Image tools → Cloudinary: transforms media
- Image effects → Cloudinary: transforms media
- Generative fill → Cloudinary: generates background
- Social resizing → Cloudinary: resizes media
- Cloudinary → Media CDN: delivers media
- Video upload → Video signature API: requests signature
- Video signature API → Clerk identity: checks identity
- Video signature API → Database connection: connects
- Video signature API → User records: reads usage
- Video signature API → Plan limits: checks limit
- Video signature API → Cloudinary: signs upload
- Video upload → Cloudinary: uploads video
- Video upload → Video metadata API: submits metadata
- Video metadata API → Clerk identity: checks identity
- Video metadata API → Database connection: connects
- Video metadata API → User records: reads / updates
- Video metadata API → Plan limits: checks limit
- Video metadata API → Video records: creates record
- Image tools → Image upload API: uploads image
- Image upload API → Clerk identity: checks identity
- Image upload API → Database connection: connects
- Image upload API → User records: reads / updates
- Image upload API → Plan limits: checks limit
- Image upload API → Cloudinary: uploads image
- Plan selection → Checkout page: continues to
- Checkout page → Create order API: requests order
- Create order API → Clerk identity: checks identity
- Create order API → Plan limits: prices plan
- Create order API → Razorpay: creates order
- Checkout page → Razorpay: completes payment
- Checkout page → Verify payment API: submits signature
- Verify payment API → Clerk identity: checks identity
- Verify payment API → Razorpay: verifies payment
- Verify payment API → Database connection: connects
- Verify payment API → User records: updates plan
- Verify payment API → Payment records: records payment
- Usage dashboard → User profile API: loads profile
- Usage dashboard → Video history API: loads videos