TestimonialHub
A modern, full-featured testimonial collection and management platform built with React, TypeScript, and Supabase. Easily collect, manage, and showcase customer testimonials to build trust and grow your business.
- Shareable Collection Links: Generate unique URLs to collect testimonials via email, WhatsApp, QR codes, or social media
- Smart Dashboard: Organized view with filters, approval workflow, search, and analytics
- Rich Media Support: Accept text, photos, and video testimonials with mobile-optimized forms
- Secure & Verified: Optional email verification to prevent spam and ensure authenticity
- Embeddable Widgets: Seamlessly integrate testimonials into any website with customizable widgets
- Multiple Layouts: Choose from list, grid, carousel, or single testimonial layouts
- Theme Options: Light/dark themes with customizable colors, fonts, and styling
- Responsive Design: Mobile-first design that looks great on all devices
- Approval Workflow: Review and approve testimonials before they go live
- Status Tracking: Monitor pending, approved, and rejected testimonials
- Star Ratings: Collect and display star ratings alongside testimonials
- Client Information: Capture client names, emails, and company information
- Node.js 18+
- npm or yarn
- Supabase account (for backend services)
-
Clone the repository
git clone https://github.com/slok0066/testimonial.git cd testimonial -
Install dependencies
npm install
-
Environment Setup
Create a
.envfile in the project root:VITE_SUPABASE_URL=your_project_url VITE_SUPABASE_ANON_KEY=your_anon_key
Note: Vite only exposes variables prefixed with
VITE_to the client. -
Database Setup
Set up your Supabase database with the required tables. The application expects:
testimonialstable for storing testimonial datauser_settingstable for user configuration- Authentication enabled
-
Start Development Server
npm run dev
The application will be available at
http://localhost:5173
npm run build:devnpm run buildnpm run previewnpm run lint- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Deploy automatically on push to main branch
- Connect your GitHub repository to Render
- Use the included
render.yamlconfiguration - Set environment variables in Render dashboard
- Sign Up: Create an account and access your dashboard
- Get Collection URL: Generate a unique link for collecting testimonials
- Share Link: Send via email, social media, or QR codes to your customers
- Manage Testimonials: Review, approve, and organize testimonials in your dashboard
- Embed Widget: Add testimonials to your website using the embed code
- Access Collection Link: Click the link shared by the business
- Submit Testimonial: Fill out the simple form with your feedback
- Add Details: Include your name, company, rating, and testimonial text
- Submit: Your testimonial will be reviewed and published by the business
<!-- Add this div where you want testimonials to appear -->
<div id="testimonia-widget"></div>
<!-- Add the script with your configuration -->
<script
data-slug="your-collection-slug"
data-layout="list"
data-theme="light"
data-primary-color="#f59e0b"
data-max-items="10"
src="https://your-domain.com/embed.js">
</script>data-slug: Your unique collection slug (required)data-layout:list,grid,carousel, orsingledata-theme:lightordarkdata-primary-color: Hex color for accentsdata-max-width: Maximum width of the widgetdata-max-items: Maximum number of testimonials to showdata-show-stars: Show/hide star ratings (true/false)data-grid-columns: Number of columns for grid layoutdata-border-radius: Border radius for cardsdata-shadow: Shadow style (none,sm,md,lg)data-font: Font family (sans,serif,mono)
βββ public/
β βββ embed.js # Embeddable widget script
β βββ robots.txt # SEO configuration
βββ src/
β βββ components/ # Reusable UI components
β β βββ ui/ # shadcn/ui components
β β βββ dashboard/ # Dashboard-specific components
β βββ contexts/ # React contexts (Auth, etc.)
β βββ hooks/ # Custom React hooks
β βββ integrations/ # External service integrations
β βββ lib/ # Utility functions and configurations
β βββ pages/ # Page components
β βββ App.tsx # Main application component
β βββ main.tsx # Application entry point
βββ index.html # HTML template
βββ package.json # Dependencies and scripts
βββ vite.config.ts # Vite configuration
- Secure Authentication: Powered by Supabase Auth with OAuth and email/password options
- Data Validation: Client and server-side validation for all inputs
- Spam Protection: Optional email verification for testimonial submissions
- Privacy Controls: Users control testimonial approval and visibility
- HTTPS Only: All communications encrypted in transit
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Documentation: Check this README and environment setup guide
- Issues: Open an issue on GitHub for bug reports or feature requests
- Discussions: Use GitHub Discussions for questions and community support
- Frontend: React 18, TypeScript, Vite
- UI Framework: shadcn/ui, Tailwind CSS, Radix UI
- Backend: Supabase (PostgreSQL, Auth, Real-time)
- State Management: React Query (TanStack Query)
- Routing: React Router DOM
- Forms: React Hook Form with Zod validation
- Analytics: Vercel Analytics
- Deployment: Vercel, Render
Made with β€οΈ for businesses who value customer feedback