Skip to content

jayxvj/ktour-media-portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 KTOUR - Kosmos Media Production

A fully production-ready, modern, responsive website for KTOUR Media Production, specializing in Google 360Β° virtual tours, 360Β° photos, 360Β° videos, and media creation services.



✨ Features

🌐 Public Website

  • Home Page with 360Β° video hero background
  • About Page with company story, mission, vision, and timeline
  • Services Page with detailed service offerings
  • Portfolio/Albums Gallery with 360Β° media viewer
  • Contact Page with working contact form
  • Get a Quote Modal accessible throughout the site
  • Fully responsive design (mobile, tablet, desktop)
  • Smooth animations with Framer Motion
  • Glassmorphism UI effects

πŸ” Admin Dashboard

  • Secure Firebase Authentication (Email: ktour@world.com, Password: ktour@58575)
  • Dashboard Overview with statistics
  • Album Management:
    • Create albums with title and thumbnail
    • Edit album details
    • Delete albums
    • Upload multiple 360Β° images and videos to albums
    • View and manage all media in albums
  • Contact Requests Management with status tracking
  • Quote Requests Management with status tracking
  • Modern, intuitive admin interface

πŸ“§ Email Notifications

  • Automatic email notifications to ktour58575@gmail.com for:
    • Contact form submissions
    • Quote requests
  • Professional HTML email templates

πŸŽ₯ 360Β° Media Features

  • Interactive 360Β° image viewer using PhotoSphere Viewer
  • 360Β° video playback support
  • Fullscreen viewer with navigation
  • Drag and gyroscope support

πŸš€ Tech Stack

  • Frontend: Next.js 15 (App Router)
  • Styling: Tailwind CSS v4
  • Animations: Framer Motion
  • UI Components: Shadcn/UI
  • Backend: Firebase
    • Authentication
    • Firestore Database
    • Storage
  • Email: Nodemailer
  • 360Β° Viewer: Photo Sphere Viewer
  • Form Validation: React Hook Form + Zod

πŸ“¦ Installation

  1. Clone the repository

    git clone <repository-url>
    cd ktour-website
  2. Install dependencies

    npm install
  3. Configure environment variables

    The .env.local file has been created with placeholders. Update it with your Firebase and email credentials:

    # Firebase Configuration
    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key_here
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
    # Email Configuration
    EMAIL_USER=ktour58575@gmail.com
    EMAIL_PASS=your_gmail_app_password_here
    
    # Admin Email for Notifications
    ADMIN_EMAIL=ktour58575@gmail.com

πŸ”₯ Firebase Setup

1. Create a Firebase Project

  1. Go to Firebase Console
  2. Click "Add Project"
  3. Follow the setup wizard

2. Enable Authentication

  1. In Firebase Console, go to Authentication
  2. Click "Get Started"
  3. Enable Email/Password sign-in method
  4. Create an admin user:
    • Email: ktour@world.com
    • Password: ktour@58575

3. Setup Firestore Database

  1. Go to Firestore Database
  2. Click "Create Database"
  3. Choose Production mode (or Test mode for development)
  4. Select your region

The following collections will be created automatically:

  • albums - Stores album information
  • media - Stores 360Β° images and videos
  • contactRequests - Stores contact form submissions
  • quoteRequests - Stores quote form submissions

4. Setup Firebase Storage

  1. Go to Storage
  2. Click "Get Started"
  3. Choose security rules (start in test mode for development)

The app will create these folders automatically:

  • thumbnails/ - Album thumbnails
  • images/ - 360Β° images
  • videos/ - 360Β° videos

5. Get Firebase Configuration

  1. Go to Project Settings (gear icon)
  2. Scroll down to "Your apps"
  3. Click the web icon (</>)
  4. Register your app
  5. Copy the configuration values to your .env.local file

πŸ“§ Email Setup (Gmail)

1. Enable 2-Factor Authentication

  1. Go to your Google Account settings
  2. Enable 2-Factor Authentication

2. Generate App Password

  1. Go to Google App Passwords
  2. Select "Mail" and "Other (Custom name)"
  3. Name it "KTOUR Website"
  4. Copy the generated 16-character password
  5. Add it to .env.local as EMAIL_PASS

πŸƒ Running the Project

Development Mode

npm run dev

Open http://localhost:3000 in your browser.

Production Build

npm run build
npm start

πŸ“ Project Structure

ktour-website/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ page.tsx                 # Home page
β”‚   β”‚   β”œβ”€β”€ about/page.tsx           # About page
β”‚   β”‚   β”œβ”€β”€ services/page.tsx        # Services page
β”‚   β”‚   β”œβ”€β”€ portfolio/
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx             # Portfolio gallery
β”‚   β”‚   β”‚   └── [id]/page.tsx        # Single album viewer
β”‚   β”‚   β”œβ”€β”€ contact/page.tsx         # Contact page
β”‚   β”‚   β”œβ”€β”€ admin/
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx             # Admin dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ login/page.tsx       # Admin login
β”‚   β”‚   β”‚   β”œβ”€β”€ albums/page.tsx      # Album management
β”‚   β”‚   β”‚   β”œβ”€β”€ contacts/page.tsx    # Contact requests
β”‚   β”‚   β”‚   └── quotes/page.tsx      # Quote requests
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   β”œβ”€β”€ send-contact-email/  # Contact email API
β”‚   β”‚   β”‚   └── send-quote-email/    # Quote email API
β”‚   β”‚   β”œβ”€β”€ layout.tsx               # Root layout
β”‚   β”‚   └── globals.css              # Global styles
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ Navigation.tsx           # Main navigation
β”‚   β”‚   β”œβ”€β”€ Footer.tsx               # Footer component
β”‚   β”‚   β”œβ”€β”€ GetQuoteModal.tsx        # Quote modal
β”‚   β”‚   β”œβ”€β”€ Viewer360.tsx            # 360Β° viewer
β”‚   β”‚   └── ui/                      # Shadcn UI components
β”‚   β”œβ”€β”€ contexts/
β”‚   β”‚   └── AuthContext.tsx          # Firebase auth context
β”‚   └── lib/
β”‚       └── firebase.ts              # Firebase configuration
β”œβ”€β”€ .env.local                       # Environment variables
└── package.json

🎯 Key Features Usage

Admin Dashboard

  1. Login: Navigate to /admin/login

    • Email: ktour@world.com
    • Password: ktour@58575
  2. Create Album:

    • Go to Albums page
    • Click "Add Album"
    • Enter title and select thumbnail
    • Click "Create Album"
  3. Upload Media to Album:

    • Click "Media" button on any album
    • Select multiple 360Β° images or videos
    • Click "Upload Files"
  4. Manage Requests:

    • View contact requests in Contacts page
    • View quote requests in Quotes page
    • Update status: New β†’ In Progress β†’ Closed

Public Website

  • Browse portfolio at /portfolio
  • Click any album to view 360Β° media
  • Click individual media items for fullscreen 360Β° viewer
  • Use "Get a Quote" button to request services
  • Fill contact form on /contact page

πŸ”’ Security

  • Admin routes are protected with Firebase Authentication
  • All form submissions are validated with Zod schemas
  • Email credentials are stored in environment variables
  • Firebase Security Rules should be configured appropriately

πŸš€ Deployment

Vercel (Recommended)

  1. Push your code to GitHub
  2. Connect your repository to Vercel
  3. Add environment variables in Vercel dashboard
  4. Deploy!

Other Platforms

The app can be deployed to any platform that supports Next.js:

  • Netlify
  • AWS Amplify
  • Google Cloud
  • Azure

Remember to set all environment variables on your hosting platform.

πŸ“ Environment Variables Summary

Variable Description Example
NEXT_PUBLIC_FIREBASE_API_KEY Firebase API Key AIza...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN Firebase Auth Domain project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID Firebase Project ID my-project
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET Firebase Storage Bucket project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID Firebase Messaging Sender ID 123456789
NEXT_PUBLIC_FIREBASE_APP_ID Firebase App ID 1:123...
EMAIL_USER Gmail address for sending emails ktour58575@gmail.com
EMAIL_PASS Gmail app password abcd efgh ijkl mnop
ADMIN_EMAIL Email to receive notifications ktour58575@gmail.com

πŸ› Troubleshooting

Firebase Connection Issues

  • Verify all Firebase environment variables are correct
  • Check Firebase project settings
  • Ensure Firestore and Storage are enabled

Email Not Sending

  • Verify Gmail app password is correct
  • Check Gmail 2FA is enabled
  • Verify EMAIL_USER and EMAIL_PASS in .env.local

360Β° Viewer Not Loading

  • Check media URL is accessible
  • Verify file format (JPEG/PNG for images, MP4 for videos)
  • Check browser console for errors

Admin Login Issues

  • Verify admin user exists in Firebase Authentication
  • Check credentials: ktour@world.com / ktour@58575
  • Clear browser cache and try again

πŸ“ž Support

For support or questions:

πŸ“„ License

All rights reserved Β© 2024 KTOUR - Kosmos Media Production


Built with ❀️ for KTOUR Media Production

About

Project from Orchids.app - ktour-media-portfolio

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors