5059f64a00baaa2d8b48c82182cef84857a5ecdc
🌎 G Travel — Guatemala Tourism Website
A modern, responsive tourism website for Guatemala built with Flask, SQLite, and Jinja2. Features a premium glassmorphism design, an admin dashboard, and integrations with Cloudflare Turnstile, Retell AI, and Mailtrap SMTP.
✨ Features
Public Website
- 🏛️ Tours, Surf & Volcanoes — Dynamic sections loaded from the database
- 🎬 Hero Video Background — Autoplay MP4 video with overlay
- 🌐 Multi-language — English / Spanish toggle
- 📱 Fully Responsive — Hamburger menu on mobile
- 📝 Contact Form — With Cloudflare Turnstile bot protection
- 🤖 Retell AI Opt-in — Checkbox to request an AI agent call
- 🔍 Tour Detail Pages — Individual pages with booking forms
Admin Dashboard (/admin)
- 🔐 HTTP Basic Auth — Username:
admin/ Password:admin - 📑 Tabbed Interface — Leads & Forms, Tours & Activities, System Settings
- ✏️ Full CRUD for Tours — Create, Read, Update, Delete with image upload
- 📊 Lead Management — View all submitted inquiries
- ⚙️ System Settings — Configure all integrations from the UI:
- Agency name, email, and logo (URL or upload)
- Hero video (URL or upload)
- Mailtrap SMTP credentials
- Cloudflare Turnstile keys
- Retell AI API key, phone number, agent ID, and enable/disable toggle
🚀 Quick Start
1. Clone the repository
git clone <your-repo-url>
cd GTravel
2. Create a virtual environment
python3 -m venv venv
source venv/bin/activate
3. Install dependencies
pip install -r requirements.txt
4. Seed the database (first run)
python seed.py
5. Run the application
python main.py
The app will be available at http://localhost:8000
🌐 Production Deployment (CloudPanel / Gunicorn)
This app is ready for deployment on CloudPanel.io or any WSGI-compatible server.
Using Gunicorn
gunicorn wsgi:application --bind 0.0.0.0:8000
CloudPanel Setup
- Create a new Python application in CloudPanel
- Point the entry file to
wsgi.py - Install dependencies:
pip install -r requirements.txt - Run
python seed.pyto initialize the database - The
wsgi.pyfile exposes the standardapplicationvariable
📁 Project Structure
GTravel/
├── main.py # Flask application (all routes)
├── database.py # SQLAlchemy models & DB setup
├── seed.py # Database seeder with sample data
├── wsgi.py # WSGI entry point for production
├── requirements.txt # Python dependencies
├── gtravel.db # SQLite database (auto-created)
├── static/
│ ├── css/
│ │ └── style.css # All styles (glassmorphism theme)
│ ├── images/ # Tour images & uploaded logos
│ └── videos/ # Uploaded hero videos
└── templates/
├── base.html # Base layout (navbar, hamburger menu)
├── index.html # Homepage (hero, tours, surf, volcanoes, contact)
├── detail.html # Tour detail page with booking form
└── dashboard.html # Admin dashboard (tabbed interface)
🔧 Configuration
All configuration is managed through the Admin Dashboard → System Settings tab.
| Setting | Description |
|---|---|
| Agency Name | Displayed in the browser title |
| Agency Email | Used as sender/receiver for email notifications |
| Logo | Upload an image or provide a URL |
| Hero Video | Upload an MP4 or provide a URL for the homepage background |
| Mailtrap SMTP | Host, Port, Username, Password for email delivery |
| Cloudflare Turnstile | Site Key & Secret Key for bot protection |
| Retell AI | API Key, Phone Number, Agent ID, and Enable toggle |
🛡️ Security Notes
- Change the default admin credentials in
main.pybefore deploying to production - Set a strong
SECRET_KEYenvironment variable:export SECRET_KEY="your-secret-key" - Configure Cloudflare Turnstile to protect public forms from bots
- Use HTTPS in production (CloudPanel handles this automatically)
📄 License
This project is proprietary. All rights reserved.
Description
Languages
Python
98%
C++
1.2%
C
0.3%
HTML
0.2%
Cython
0.1%