A professional, bold, responsive, and animated event management website built with modern web technologies. The design is inspired by the sleek, minimalistic dark theme of Enrique Iglesias' website, featuring smooth animations, clean layouts, and consistent typography.
- Modern Frontend: React.js with Vite for fast development and optimized builds
- Full-Stack Architecture: Express.js backend with MySQL database
- Beautiful UI: TailwindCSS with custom animations matching Enrique Iglesias design
- Smooth Animations: Framer Motion for fluid page transitions and interactions
- State Management: Redux Toolkit for global state management
- RESTful API: Complete backend API for events, reviews, and enquiries
- Database Integration: MySQL database with automatic table initialization
- Email Integration:
- EmailJS (frontend-only option) for contact forms and feedback submissions
- Nodemailer (backend option) for server-side email sending
- Data Management:
- Static JSON files (current frontend implementation)
- Database-driven (backend API available)
- Responsive Design: Mobile-first approach with perfect responsiveness
- Cookie Management: GDPR-compliant cookie consent banner
- Image Gallery: Modal image viewer with smooth zoom animations
- Advanced Video Gallery:
- YouTube-style hover previews with sound
- Playback position continuity (resumes from where you left off)
- Zoom animations and smooth transitions
- Mobile tap-to-play support
- Keyboard navigation (Arrow keys, Space, Escape)
- Blurred previews of next/previous videos
- Full accessibility support (ARIA labels, focus trap)
- Professional Video Player: Custom video player with full controls, timeline seeking, volume control, and fullscreen support
- Event Management: Full CRUD API for events management
- Reviews System: API endpoints for reviews with rate limiting
- Security: Helmet.js, CORS, rate limiting, input validation
- Caching: Redis caching support (optional, graceful fallback)
- CI/CD: Automated deployment to GitHub Pages
euphoric/
βββ .github/
β βββ workflows/
β βββ deploy.yml # GitHub Actions CI/CD workflow
βββ backend/ # Express.js backend API
β βββ src/
β β βββ config/
β β β βββ database.js # MySQL connection pool
β β βββ controllers/
β β β βββ enquiryController.js
β β β βββ eventsController.js
β β β βββ reviewsController.js
β β βββ middleware/
β β β βββ errorHandler.js # Error handling middleware
β β βββ models/
β β β βββ initDatabase.js # Database table initialization
β β βββ routes/
β β β βββ enquiry.js
β β β βββ events.js
β β β βββ reviews.js
β β βββ utils/
β β β βββ cache.js # Redis caching utilities
β β βββ server.js # Express server entry point
β βββ package.json
βββ frontend/ # React frontend application
β βββ public/ # Static assets (favicon, etc.)
β βββ src/
β β βββ assets/ # Images, videos, logos, gallery
β β βββ components/ # Reusable React components
β β β βββ AboutEuphoric.jsx
β β β βββ Alert.jsx
β β β βββ CookieBanner.jsx
β β β βββ EventsPreview.jsx
β β β βββ FeaturedVideos.jsx
β β β βββ Footer.jsx
β β β βββ GalleryPreview.jsx
β β β βββ Hero.jsx
β β β βββ Loader.jsx
β β β βββ Navbar.jsx
β β β βββ QuickActionBox.jsx
β β β βββ ServicesPreview.jsx
β β β βββ videos/
β β β βββ VideoGallery.jsx
β β β βββ VideoPlayer.jsx
β β βββ pages/ # Page components
β β β βββ About.jsx
β β β βββ Contact.jsx
β β β βββ Enquiry.jsx
β β β βββ Events.jsx
β β β βββ Feedbacks.jsx
β β β βββ Gallery.jsx
β β β βββ Home.jsx
β β β βββ Links.jsx
β β β βββ Services.jsx
β β β βββ Videos.jsx
β β βββ data/ # JSON files for events and reviews (static fallback)
β β β βββ events.json
β β β βββ reviews.json
β β βββ store/ # Redux store and slices
β β β βββ slices/
β β β β βββ cookieSlice.js
β β β β βββ eventsSlice.js
β β β β βββ reviewsSlice.js
β β β βββ store.js
β β βββ utils/ # Utility functions
β β β βββ imageImports.js
β β β βββ videoImports.js
β β βββ context/ # React Context providers
β β β βββ AlertContext.jsx
β β βββ hooks/ # Custom React hooks
β β β βββ useAlert.js
β β β βββ useEmailJS.js
β β βββ App.jsx # Main app component
β β βββ main.jsx # Entry point
β βββ package.json
β βββ vite.config.js
βββ package.json # Monorepo root package.json
βββ README.md
- React 18 - UI library
- Vite - Build tool and dev server
- TailwindCSS - Utility-first CSS framework
- Redux Toolkit - State management
- React Router - Client-side routing
- Framer Motion - Animation library
- EmailJS - Email service integration (frontend-only option)
- React Icons - Icon library
- Three.js - 3D graphics library (via @react-three/fiber)
- Node.js - Runtime environment
- Express.js - Web framework
- MySQL2 - MySQL database driver
- Nodemailer - Email sending service
- Helmet.js - Security middleware
- CORS - Cross-origin resource sharing
- express-rate-limit - Rate limiting middleware
- express-validator - Input validation
- dotenv - Environment variable management
- redis - Caching layer (optional)
- Node.js (v18 or higher)
- npm or yarn
- MySQL Server (for backend database)
git clone https://github.com/yourusername/euphoric.git
cd euphoricOption A: Install all dependencies (recommended for monorepo)
npm run install:allOption B: Install separately
# Install root dependencies
npm install
# Install frontend dependencies
cd frontend
npm install
# Install backend dependencies
cd ../backend
npm installCreate frontend/.env:
VITE_EMAILJS_SERVICE_ID=your_service_id
VITE_EMAILJS_TEMPLATE_ID=your_template_id
VITE_EMAILJS_PUBLIC_KEY=your_public_key
VITE_API_URL=http://localhost:5000/apiNote: EmailJS credentials are optional if using backend API. Get them from EmailJS - it's free!
Create backend/.env:
# Server Configuration
PORT=5000
FRONTEND_URL=http://localhost:3000
# Database Configuration
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_mysql_password
DB_NAME=euphoric_db
# Email Configuration (optional - for Nodemailer)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_passwordNote:
- Create a MySQL database named
euphoric_db(or updateDB_NAMEin.env) - The database tables will be automatically created on server start
- For Gmail, use an App Password instead of your regular password
- Create MySQL Database:
CREATE DATABASE euphoric_db;- Start the backend server - Tables will be automatically created:
cd backend
npm run devThe server will automatically create the following tables:
reviews- Stores customer reviews/feedbackevents- Stores event informationenquiries- Stores contact form submissions
From the root directory:
npm run devThis runs both servers concurrently:
- Backend API:
http://localhost:5000 - Frontend:
http://localhost:3000
Backend (runs on http://localhost:5000):
cd backend
npm run devFrontend (runs on http://localhost:3000):
cd frontend
npm run devBuild Frontend:
cd frontend
npm run buildThe dist/ folder contains your production-ready website!
Build Backend:
cd backend
npm run buildStart Backend in Production:
cd backend
npm startThe backend provides the following RESTful API endpoints:
GET /api/reviews- Get all reviews (ordered by date, newest first)POST /api/reviews- Create a new review- Body:
{ name: string, message: string, rating: number (1-5) } - Rate limited: 5 requests per 15 minutes per IP
- Body:
GET /api/events- Get all upcoming events (date >= today)GET /api/events/:id- Get a specific event by IDPOST /api/events- Create a new event- Body:
{ title: string, date: string (YYYY-MM-DD), location: string, image?: string, description?: string }
- Body:
PUT /api/events/:id- Update an eventDELETE /api/events/:id- Delete an event
POST /api/enquiry- Submit an enquiry- Body:
{ name: string, email: string, phone?: string, message: string } - Rate limited: 10 requests per 15 minutes per IP
- Saves to database and sends email notification (if configured)
- Body:
GET /api/health- Server health check
- Home (
/) - Hero section with animated background, services preview, events preview, gallery preview - About (
/about) - Company information and mission - Services (
/services) - List of all event management services with professional icons - Gallery (
/gallery) - Image gallery with modal viewer - Videos (
/videos) - Advanced video gallery with hover previews, playback continuity, and full-screen player - Events (
/events) - Upcoming events display (currently from JSON, backend API available) - Contact (
/contact) - Contact information and quick actions - Links (
/links) - Social media and external links - Feedbacks (
/feedbacks) - Client reviews (currently from JSON) and feedback form (sends via EmailJS) - Enquiry (
/enquiry) - Contact form for event inquiries (sends via EmailJS, backend API available)
- Navbar - Responsive navigation with smooth scroll effects
- Footer - Contact information and quick links
- Hero - Full-screen hero section with animated overlays and contact buttons
- CookieBanner - GDPR-compliant cookie consent
- ServicesPreview - Homepage services preview
- EventsPreview - Homepage events preview
- GalleryPreview - Homepage gallery preview
- FeaturedVideos - Homepage featured videos showcase
- VideoGallery - Advanced video gallery component with:
- YouTube-style hover previews with sound
- Playback position continuity
- Zoom animations
- Mobile tap-to-play support
- Keyboard navigation
- Accessibility features
- VideoPlayer - Professional video player with:
- Full playback controls
- Timeline seeking
- Volume control
- Fullscreen support
- Keyboard shortcuts
- Buffering indicators
- Alert - Toast notification system
- Loader - Loading spinner component
- QuickActionBox - Quick action buttons component
- AboutEuphoric - About section component
The project currently supports two data management approaches:
The frontend currently uses static JSON files for events and reviews:
frontend/src/data/events.jsonfrontend/src/data/reviews.json
To update content:
- Edit the JSON files directly
- Changes reflect immediately (after page refresh)
The backend provides a complete API for dynamic data management. To switch to API-based data:
- Update Redux slices to fetch from API endpoints
- Configure
VITE_API_URLin frontend.env - Update form submissions to use API endpoints instead of EmailJS
Example API Integration:
// Fetch events from API
const response = await fetch(`${import.meta.env.VITE_API_URL}/events`);
const events = await response.json();
// Submit review via API
await fetch(`${import.meta.env.VITE_API_URL}/reviews`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name, message, rating }),
});- Sign up at EmailJS (free tier available)
- Create an email service (Gmail, Outlook, etc.)
- Create email templates for:
- Feedback submissions
- Enquiry submissions
- Get your Service ID, Template ID, and Public Key
- Add them to
frontend/.env
EmailJS Templates:
Feedback Template:
From: {{from_name}}
Rating: {{rating}}/5
Message: {{message}}
Date: {{feedback_date}}
Enquiry Template:
From: {{from_name}}
Email: {{from_email}}
Phone: {{phone}}
Message: {{message}}
- Configure email credentials in
backend/.env - For Gmail:
- Enable 2-factor authentication
- Generate an App Password
- Use the app password as
EMAIL_PASS
- The backend will automatically send email notifications for enquiries
- Primary Dark:
#000000(Black) - Primary Light:
#1a1a1a(Dark Gray) - Accent:
#ffff00(Yellow) - Grey:
#808080(Gray)
- Display Font: Bebas Neue (for headings)
- Body Font: Inter (for body text)
- Fade-in animations on page load
- Slide-up/slide-down transitions
- Hover scale effects
- Glow effects on interactive elements
- Smooth page transitions
Option 1: Via JSON File (Current)
Edit frontend/src/data/events.json:
{
"id": 3,
"title": "New Event",
"date": "2024-12-25",
"location": "City, Country",
"image": null,
"description": "Event description"
}Option 2: Via API
curl -X POST http://localhost:5000/api/events \
-H "Content-Type: application/json" \
-d '{
"title": "New Event",
"date": "2024-12-25",
"location": "City, Country",
"description": "Event description"
}'Option 1: Via JSON File (Current)
Edit frontend/src/data/reviews.json:
{
"id": 6,
"name": "Client Name",
"message": "Amazing service!",
"rating": 5,
"created_at": "2024-01-20"
}Option 2: Via API
curl -X POST http://localhost:5000/api/reviews \
-H "Content-Type: application/json" \
-d '{
"name": "Client Name",
"message": "Amazing service!",
"rating": 5
}'Note: When users submit feedback via the form, it's currently sent via EmailJS. With backend integration, reviews can be automatically saved to the database.
This repository includes a GitHub Actions workflow that automatically deploys to GitHub Pages on every push to main or master branch.
Setup Instructions:
-
Enable GitHub Pages:
- Go to your repository Settings β Pages
- Under "Source", select "GitHub Actions"
-
Add Secrets (for EmailJS):
- Go to Settings β Secrets and variables β Actions
- Add the following secrets:
VITE_EMAILJS_SERVICE_IDVITE_EMAILJS_TEMPLATE_IDVITE_EMAILJS_PUBLIC_KEY
-
Push to Main Branch:
git add . git commit -m "Initial commit" git push origin main
-
Automatic Deployment:
- The workflow will automatically build and deploy your site
- Check the "Actions" tab to see deployment status
- Your site will be live at:
https://yourusername.github.io/euphoric/
- Connect your repository
- Set build command:
cd frontend && npm run build - Set output directory:
frontend/dist - Add environment variables (EmailJS credentials)
- Deploy!
- Build the project:
cd frontend && npm run build - Upload
frontend/dist/contents topublic_html - Configure
.htaccessfor SPA routing (if needed)
-
Set Environment Variables:
PORT(usually auto-set by platform)FRONTEND_URL(your frontend URL)DB_HOST,DB_USER,DB_PASSWORD,DB_NAME(database credentials)EMAIL_HOST,EMAIL_PORT,EMAIL_USER,EMAIL_PASS(optional)
-
Database Setup:
- Use a managed MySQL service (e.g., Railway, PlanetScale, AWS RDS)
- Update
DB_HOSTand credentials in backend.env
-
Deploy Backend:
- Connect your repository
- Set root directory to
backend - Set start command:
npm start - Deploy!
-
Update Frontend Environment:
VITE_API_URL=https://your-backend-url.com/api
-
Deploy Frontend (same as frontend-only deployment)
The repository includes a GitHub Actions workflow (.github/workflows/deploy.yml) that:
- Automatically builds the frontend on push to main/master
- Uses environment secrets for EmailJS configuration
- Deploys to GitHub Pages automatically
- Runs on every push and can be manually triggered
The VideoGallery component provides a premium video viewing experience:
- Hover Previews: Hover over any video thumbnail to see a preview with sound (YouTube-style)
- Playback Continuity: Videos remember where you left off when switching between thumbnails
- Smooth Animations: Zoom animations and transitions for a polished feel
- Mobile Support: Tap once to preview, tap twice to open full video
- Keyboard Navigation:
Arrow Left/Right- Navigate between videosSpace/Enter- Play/PauseEscape- Close video
- Accessibility: Full ARIA support, focus trap, keyboard navigation
- Blurred Previews: See blurred previews of next/previous videos in full-screen mode
A professional video player with:
- Full Controls: Play, pause, volume, fullscreen
- Timeline Seeking: Click or drag on timeline to seek
- Keyboard Shortcuts:
Space- Play/PauseArrow Left/Right- Seek backward/forward 10 secondsArrow Up/Down- Increase/Decrease volumeF- Toggle fullscreenM- Toggle mute
- Auto-hide Controls: Controls automatically hide during playback
- Buffering Indicator: Shows loading state during buffering
- Start Time Support: Can resume playback from a specific timestamp
- Helmet.js - Sets various HTTP headers for security
- CORS - Configured to allow requests only from frontend URL
- Rate Limiting - Prevents abuse on review and enquiry endpoints
- Input Validation - Validates request data before processing
- SQL Injection Protection - Uses parameterized queries
- Environment Variables - Sensitive data stored in
.envfiles - Redis Caching - Optional caching layer for improved performance (graceful fallback if unavailable)
- Phone: +91 9727579905
- WhatsApp: +91 9727579905
- Email: euphoricparth1003@gmail.com
- Instagram: @euphoric_live
Database Connection Failed:
- Verify MySQL server is running
- Check database credentials in
backend/.env - Ensure database
euphoric_dbexists - Check firewall settings if using remote database
Port Already in Use:
- Change
PORTinbackend/.env - Or kill the process using the port:
lsof -ti:5000 | xargs kill
Email Not Sending:
- Verify email credentials in
backend/.env - For Gmail, ensure you're using an App Password
- Check email service logs in console
EmailJS Not Working:
- Verify environment variables are set correctly in
frontend/.env - For GitHub Pages, ensure secrets are added in repository settings
- Check EmailJS service and template IDs
- Ensure EmailJS account is active
- Check browser console for errors
API Connection Failed:
- Verify
VITE_API_URLis set correctly infrontend/.env - Ensure backend server is running
- Check CORS configuration in backend
- Verify backend URL is accessible
Images Not Loading:
- Verify image paths in
frontend/src/utils/imageImports.js - Ensure assets are in
frontend/src/assets/ - Check file extensions match (case-sensitive)
Build Errors:
- Clear
node_modulesand reinstall:rm -rf node_modules && npm install - Check Node.js version:
node --version(should be v18+) - Verify all dependencies are installed
GitHub Pages Routing Issues:
- Ensure
base: '/euphoric/'is set invite.config.js(already configured) - All routes should work correctly with React Router
Concurrent Scripts Not Working:
- Ensure
concurrentlyis installed:npm install - Check that both
frontendandbackenddirectories exist - Verify package.json scripts are correct
This project is proprietary and confidential.
This is a private project. For contributions, please contact the project owner.
Built with β€οΈ for Stackified