A comprehensive review and testimonial system for Whop communities, similar to Judge.me. This app allows community members to submit, view, and manage product/service reviews with photos, videos, and detailed analytics.
- β Submit reviews with 1-5 star ratings
- πΈ Upload photos (up to 5 per review)
- π₯ Upload videos (optional)
- π Mark reviews as helpful/not helpful
- π Filter reviews by rating
- π Sort reviews by date, rating, or helpfulness
- β View verified purchase badges
- π‘οΈ Review moderation (approve/reject/pending)
- π Detailed analytics dashboard
- βοΈ Customizable settings:
- Auto-approve reviews
- Require verified purchases
- Enable/disable photos and videos
- Set minimum rating
- Email notifications
- Custom thank you messages
- Review incentives (coupon codes)
- π― Featured reviews
- π¬ Respond to reviews
- π Rating distribution charts
- π Review status breakdown
- Node.js 18+ and npm/pnpm
- A Whop account and API key
- A PostgreSQL database (Supabase recommended)
- Clone this repository or create a new Next.js project:
npx create-next-app@latest whop-reviews-app
cd whop-reviews-app- Install dependencies:
npm install
# or
pnpm install- Set up your database:
Create a Supabase account at https://supabase.com and create a new project.
- Configure environment variables:
Copy .env.local.example to .env.local and fill in your values:
# Whop API Key (Get from https://whop.com/apps)
WHOP_API_KEY=your_whop_api_key_here
# Database URLs (From Supabase)
DATABASE_URL="postgresql://user:password@host:port/database"
DIRECT_URL="postgresql://user:password@host:port/database"- Initialize Prisma:
npm run prisma:generate
npm run prisma:db:push- Run the development server:
npm run devOpen http://localhost:3000 to see your app.
whop-reviews-app/
βββ app/
β βββ api/
β β βββ reviews/[experienceId]/
β β β βββ route.ts # GET and POST reviews
β β β βββ [reviewId]/
β β β βββ moderate/route.ts # Approve/reject reviews
β β β βββ helpful/route.ts # Mark as helpful
β β βββ settings/[experienceId]/route.ts # Settings management
β β βββ upload-image/route.ts # Image upload handler
β βββ experiences/[experienceId]/
β β βββ page.tsx # Main reviews page
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
βββ components/
β βββ ui/
β β βββ button.tsx # Button component
β β βββ tabs.tsx # Tabs component
β βββ review-form.tsx # Review submission form
β βββ reviews-list.tsx # Reviews display
β βββ stats-overview.tsx # Analytics stats
β βββ settings-panel.tsx # Admin settings
βββ lib/
β βββ db.ts # Prisma client
β βββ whop-sdk.ts # Whop SDK initialization
β βββ utils.ts # Utility functions
βββ prisma/
β βββ schema.prisma # Database schema
βββ .env.local.example # Environment variables template
βββ next.config.js # Next.js configuration
βββ package.json # Dependencies
βββ tailwind.config.js # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
- User information and ratings
- Text content with optional title
- Images and videos arrays
- Verification status
- Helpful/not helpful counters
- Admin moderation status
- Store owner responses
- Moderation settings
- Content options (photos/videos)
- Notification preferences
- Review incentives
- Custom messaging
- Display preferences
- Daily statistics
- Rating distribution
- Content type counts (photos/videos)
- Go to https://whop.com/apps and create a new app
- Set the base URL to your deployment URL
- Copy your API key to
.env.local - Install the app to your Whop community
The app uses Prisma with PostgreSQL. Supabase is recommended for easy setup:
- Create a Supabase project
- Copy the connection strings from Settings > Database
- Paste into
.env.local - Run migrations with
npm run prisma:db:push
The app uses Tailwind CSS. Customize colors and themes in:
tailwind.config.js- Tailwind configurationapp/globals.css- Global CSS variables
Enable/disable features by modifying:
- Review settings in the admin panel
- Database schema in
prisma/schema.prisma - Component logic in
components/
- Push your code to GitHub
- Import the project in Vercel
- Add environment variables
- Deploy!
# Add this to package.json scripts for Vercel
"postinstall": "prisma generate"After deployment:
- Go to your Whop app settings
- Update the "Base URL" to your Vercel URL
- Test the app in your Whop community
GET /api/reviews/[experienceId]- Fetch all reviewsPOST /api/reviews/[experienceId]- Submit a new reviewPATCH /api/reviews/[experienceId]/[reviewId]/moderate- Moderate review (admin only)POST /api/reviews/[experienceId]/[reviewId]/helpful- Mark review as helpful
PUT /api/settings/[experienceId]- Update review settings (admin only)
POST /api/upload-image- Upload and optimize review images
Authentication is handled automatically by Whop SDK:
- User tokens verified via
whopSdk.verifyUserToken() - Access levels checked via
whopSdk.access.checkIfUserHasAccessToExperience() - Admin-only routes protected by access level checks
β Implemented:
- Star ratings (1-5)
- Text reviews with optional titles
- Photo and video uploads
- Review moderation
- Analytics dashboard
- Helpful/not helpful voting
- Admin responses
- Featured reviews
- Auto-approval settings
- Review incentives
- Custom messaging
- Email notifications
- Verified purchase badges
π Can be Extended:
- Email review requests
- Social media sharing
- Rich snippets for SEO
- Multi-language support
- Advanced filtering
- Review imports/exports
- Bulk operations
This is an open-source Whop app. Feel free to:
- Report bugs
- Suggest features
- Submit pull requests
- Fork and customize for your needs
MIT License - feel free to use this code for your own Whop apps!
Need help?
- Join the Whop Developers Community
- Check the Whop Documentation
- Open an issue on GitHub
Built with:
- Next.js 15
- Whop SDK
- Prisma
- Tailwind CSS
- Radix UI
- Sharp - Image optimization
Inspired by Judge.me