A modern, responsive photography portfolio website showcasing aerial drone photography with YouTube integration and contact functionality.
- β¨ Features
- π οΈ Tech Stack
- π Quick Start
- π³ Docker Deployment
- βΈοΈ Kubernetes Deployment
- π Project Structure
- π§ API Endpoints
- π Live Demo
- πΈ Screenshots
- π€ Contributing
- π License
- π± Responsive Design: Mobile-first approach with modern UI/UX
- π₯ YouTube Integration: Dynamic playlist loading and video display
- π§ Contact Form: Email functionality for inquiries
- π Auto Data Sync: Scheduled YouTube data fetching (every 12 hours)
- βΈοΈ Kubernetes Ready: Full containerization and orchestration support
- π³ Docker Support: Easy deployment with Docker containers
- π Analytics: Top viewed videos and latest content tracking
- π¨ EJS Templating: Server-side rendering with dynamic content
- Node.js - Runtime environment
- Express.js - Web framework
- EJS - Template engine
- Axios - HTTP client for API calls
- Node-localstorage - Local data persistence
- HTML5/CSS3 - Structure and styling
- JavaScript - Interactive functionality
- Responsive Design - Mobile-optimized layouts
- Docker - Containerization
- Kubernetes - Container orchestration
- Minikube - Local Kubernetes development
- Node.js 18+
- npm or yarn
- Git
- YouTube API key
- RapidAPI account (for email functionality)
-
Clone the repository
git clone https://github.com/hill0106/Flyming_Drone.git cd Flyming_Drone -
Install dependencies
npm install
-
Set up environment variables
# Option 1: Use the setup script (recommended) npm run setup # Option 2: Manual setup cp env.example .env nano .env # or use your preferred editor
-
Configure your API keys in
.env# YouTube API Configuration YOUTUBE_API_KEY=your_youtube_api_key_here YOUTUBE_CHANNEL_ID=your_youtube_channel_id_here # Email API Configuration RAPIDAPI_KEY=your_rapidapi_key_here RAPIDAPI_HOST=rapidmail.p.rapidapi.com # Email Configuration CONTACT_EMAIL=your_contact_email_here EMAIL_SENDER_NAME=Flyming Drone # Server Configuration PORT=3000
-
Start the development server
npm start
-
Access the application
http://localhost:3000
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable YouTube Data API v3
- Create credentials (API Key)
- Copy the API key to your
.envfile
- Sign up at RapidAPI
- Subscribe to an email service (e.g., RapidMail)
- Copy your API key to your
.envfile
-
Build the Docker image
docker build -t flyming-drone-backend:latest . -
Run the container
docker run -p 3000:3000 flyming-drone-backend:latest
-
Access the application
http://localhost:3000
- Docker installed and running
- Minikube installed
- kubectl configured
-
Start Minikube
minikube start
-
Apply Kubernetes manifests
kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml
-
Check deployment status
kubectl get pods kubectl get services
-
Access the service
minikube service flyming-drone-backend-service
- Deployment: Manages the application pods
- Service: Exposes the application on port 30001
- NodePort: Allows external access to the application
Flyming_Drone/
βββ π API/ # API integration modules
βββ π k8s/ # Kubernetes manifests
β βββ deployment.yaml # Kubernetes deployment
β βββ service.yaml # Kubernetes service
βββ π public/ # Static assets
β βββ π assets/ # Images and media
β βββ π js/ # Client-side JavaScript
β βββ π styles/ # CSS stylesheets
βββ π views/ # EJS templates
β βββ index.ejs # Homepage
β βββ AboutMe.ejs # About page
β βββ Project.ejs # Projects page
β βββ Contact.ejs # Contact page
β βββ common.ejs # Shared components
βββ π data/ # Local storage data
βββ app.js # Main application file
βββ package.json # Dependencies and scripts
βββ Dockerfile # Docker configuration
βββ README.md # Project documentation
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Homepage with latest content |
GET |
/aboutme |
About page |
GET |
/project |
Projects showcase |
GET |
/contact |
Contact form |
POST |
/send-data |
Fetch YouTube playlist data |
POST |
/submitted |
Handle contact form submission |
GET |
* |
404 error page |
π Live Website: https://flymingdrone.azurewebsites.net
Experience the full Flyming Drone Photography Portfolio with:
- π± Responsive design across all devices
- π₯ Live YouTube integration showing latest aerial photography
- π§ Working contact form for inquiries
- π Real-time channel statistics and popular videos
For local testing:
minikube service flyming-drone-backend-serviceπ· Screenshots will be added here showing the responsive design and key features
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add some amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow existing code style
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass
This project uses environment variables to store sensitive information like API keys. Never commit your .env file to version control.
- β
.envis already in.gitignore - β
Use
env.exampleas a template - β Keep your API keys secure and private
- Rotate your API keys regularly
- Use environment-specific keys (dev/staging/prod)
- Monitor API usage and set up alerts
- Never share API keys in code or documentation
This project is licensed under the ISC License - see the LICENSE file for details.
- GitHub: @hill0106
- Project Link: https://github.com/hill0106/Flyming_Drone
Made with β€οΈ for aerial photography enthusiasts
β Star this repo if you found it helpful!