██╗███████╗████████╗███████╗███████╗████████╗ ██████╗ ██████╗
██║██╔════╝╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔════╝ ██╔═══██╗
██║█████╗ ██║ ███████╗█████╗ ██║ ██║ ███╗██║ ██║
██ ██║██╔══╝ ██║ ╚════██║██╔══╝ ██║ ██║ ██║██║ ██║
╚█████╔╝███████╗ ██║ ███████║███████╗ ██║ ╚██████╔╝╚██████╔╝
╚════╝ ╚══════╝ ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═════╝
A fully functional, full-stack, user-friendly multi-page flight booking web application built with vanilla HTML, CSS, and JavaScript. Features real authentication via Supabase, OTP verification via EmailJS, split fare payments, and a standalone passenger payment portal.
- User Authentication — Sign up, log in, log out via Supabase Auth
- Flight Search — Search by city, date, passengers, and class
- Real Flight Data — 140+ real domestic flights across 36 Indian cities with actual airline schedules
- Flight Booking — Multi-step booking flow with passenger details and meal selection
- Payment Flow — OTP-verified card payment simulation
- Split Fare — Book for a group, each passenger pays their own share via a unique email link
- Email OTP — Real OTP delivery via EmailJS
- Standalone Payment Page — Co-passengers pay their share after signing in
- My Bookings — View all bookings with live payment status
- Dark / Light Mode — Persistent theme toggle
- Responsive Design — Works on mobile, tablet, and desktop
JetSetGo/
├── index.html # Home page with flight search
├── login.html # Login page
├── signup.html # Sign up page
├── flights.html # Flight results page
├── booking.html # Passenger details + payment flow
├── mybookings.html # User booking dashboard
├── splitpay.html # Standalone split fare payment page
├── style.css # Complete design system
├── script.js # All application logic
├── netlify.toml # Netlify routing config
└── README.md
| Technology | Usage |
|---|---|
| HTML5 / CSS3 | Structure and styling |
| Vanilla JavaScript (ES6+) | All application logic |
| Supabase Auth | User authentication |
| Supabase Database | Bookings and user profiles |
| EmailJS | OTP and payment link emails |
| Netlify | Hosting and deployment |
| Google Fonts | Syne + DM Sans typography |
git clone https://github.com/yourusername/jetsetgo.git
cd jetsetgo- Go to supabase.com → Create a new project
- Go to Settings → API Keys → Legacy anon, service_role API keys
- Copy your Project URL and anon key
- Go to Table Editor and create two tables:
users table:
| Column | Type |
|---|---|
id |
text (primary key) |
name |
text |
email |
text |
phone |
text |
bookings table:
| Column | Type |
|---|---|
id |
text (primary key) |
user_id |
text |
data |
json |
created_at |
text |
Disable Row Level Security (RLS) on both tables.
- Paste your keys into
script.js:
const SUPABASE_URL = "https://xxxx.supabase.co";
const SUPABASE_ANON = "eyJ...your anon key...";- Go to emailjs.com → Sign up free
- Add a Gmail service → connect your Gmail → copy the Service ID
- Create an OTP template with these variables:
- To Email:
{{to_email}} - Subject:
Your JetSetGo OTP: {{otp_code}} - Body:
Hi {{to_name}}, Your OTP is: {{otp_code}} This code expires in 5 minutes. — JetSetGo Team
- To Email:
- Create a payment link template:
- Subject:
Complete your JetSetGo payment — #{{booking_id}} - Body:
Hi {{to_name}}, You've been added to a group flight booking (#{{booking_id}}). Your share: {{amount}} Click here to pay: {{payment_link}} — JetSetGo Team
- Subject:
- Paste all keys into
script.js:
const EMAILJS_PUBLIC_KEY = "YOUR_PUBLIC_KEY";
const EMAILJS_SERVICE_ID = "YOUR_SERVICE_ID";
const EMAILJS_OTP_TEMPLATE = "YOUR_OTP_TEMPLATE_ID";
const EMAILJS_PAYMENT_TEMPLATE = "YOUR_PAYMENT_TEMPLATE_ID";- Go to netlify.com → Add new site → Deploy manually
- Drag your entire project folder onto the deploy area
- Your site goes live instantly at a
*.netlify.appURL
The
netlify.tomlhandles URL routing so both/loginand/login.htmlwork.
# Option 1: Double-click index.html
# Option 2: VS Code Live Server extension
# Option 3: Python
python -m http.server 8000Search → Select Flight → Fill Passenger Details
→ Email OTP → Pay → Booking Confirmed
Search → Select Flight → Enable Split Fare
→ Fill your details → Enter co-passenger emails
→ Email OTP → Pay your share immediately
→ Co-passengers get email links → Sign in → OTP → Pay
→ Status: Pending → Partially Paid → Fully Paid
- 140+ real domestic flights, 36 Indian cities
- Airlines: IndiGo, Air India, Vistara, SpiceJet, Akasa Air, Alliance Air
- Real flight numbers, timings, and fare tiers
- Filter by class, sort by price / duration / departure
- 30 meal options: Vegetarian, Non-Veg, Vegan, Snack, Beverage, Business
- Airline-specific menus per flight
- Complimentary meals for Business class on eligible airlines
- Primary booker fills their own details only
- Pays their share immediately after OTP (no second verification)
- Co-passengers must sign in before paying
- Payment status synced via Supabase
| Service | Free Limit |
|---|---|
| Supabase Auth | 50,000 MAU |
| Supabase Storage | 500MB |
| EmailJS | 200 emails/month |
| Netlify | 100GB bandwidth/month |
- Real payment gateway (Razorpay / Stripe)
- PDF booking confirmation email
- Seat selection map
- Real flight data via Amadeus API
- Admin dashboard
- International flights
- Multi-language support (Hindi, Tamil, Telugu)