Production-ready hospitality booking platform with WhatsApp integration.
Built with simplicity and speed in mind - Python Flask backend, vanilla HTML/CSS/JS frontend, SQLite database, and Docker deployment.
- Docker Desktop installed (Download here)
- WhatsApp Business API credentials (Get here)
-
Extract the project folder to your desired location
-
Configure WhatsApp (see detailed guide below):
cp .env.example .env # Edit .env file with your WhatsApp credentials -
Start the application:
docker-compose up -d
-
Access the application:
- Guest Portal: http://localhost
- Admin Dashboard: http://localhost/admin.html
-
Login to Admin:
- Username:
Admin - Password:
A.dmin@2026
- Username:
- Go to Meta Developer Portal
- Click "Create App" → Select "Business" type
- Fill in app details and create
- In your app dashboard, click "Add Product"
- Find "WhatsApp" and click "Set Up"
- Go to "API Setup" in WhatsApp section
- Copy "Phone Number ID" → Paste into
.envasWHATSAPP_PHONE_NUMBER_ID - Copy "Temporary Access Token" → Paste into
.envasWHATSAPP_ACCESS_TOKEN - Add your staff WhatsApp number → Paste into
.envasSTAFF_WHATSAPP_NUMBER
- In Meta Developer Portal, send a test message
- Create a test booking in the guest portal
- Verify WhatsApp notification is received
For production use, generate a permanent access token:
- Go to "Business Settings" → "System Users"
- Create a system user
- Generate a permanent token with
whatsapp_business_messagingpermission - Replace temporary token in
.envwith permanent token
innflow-production/
├── backend/ # Python Flask backend
│ ├── app.py # Main Flask application
│ ├── database.py # SQLite database & schemas
│ ├── whatsapp.py # WhatsApp Business API integration
│ ├── pdf_generator.py # PDF receipt generation
│ ├── requirements.txt # Python dependencies
│ └── Dockerfile # Backend container config
├── frontend/ # Static frontend files
│ ├── index.html # Guest portal
│ ├── admin.html # Admin dashboard
│ └── assets/
│ ├── style.css # Guest portal styles
│ ├── app.js # Guest portal logic
│ └── admin.js # Admin dashboard logic
├── docker-compose.yml # Docker orchestration
├── nginx.conf # Nginx web server config
├── .env.example # Environment variables template
└── README.md # This file
- ✅ Browse available rooms with images and pricing
- ✅ Real-time availability checking
- ✅ Multi-step booking flow with validation
- ✅ Guest details capture (name, email, phone, ID)
- ✅ Payment method selection (Cash, EFT, Card, iKhokha)
- ✅ Instant WhatsApp confirmation to guest and staff
- ✅ PDF receipt download with QR code
- ✅ Secure login authentication
- ✅ Dashboard with stats (today's bookings, monthly revenue, etc.)
- ✅ Bookings management (view all bookings with filters)
- ✅ Rooms management (add/edit rooms, prices, descriptions)
- ✅ Daily cash-up recording (Cash, EFT, Card, iKhokha totals)
- ✅ Reports:
- Daily report (bookings, revenue, payment breakdown)
- Monthly report (revenue, room performance stats)
- ✅ Staff notifications on new bookings (guest details, room, dates, amount)
- ✅ Guest confirmations with booking reference and details
- ✅ Uses official WhatsApp Business API
- Username:
Admin - Password:
A.dmin@2026
Edit .env file (copy from .env.example):
| Variable | Description | Example |
|---|---|---|
WHATSAPP_PHONE_NUMBER_ID |
Phone Number ID from Meta | 123456789012345 |
WHATSAPP_ACCESS_TOKEN |
Access token from Meta | EAAbc123... |
STAFF_WHATSAPP_NUMBER |
Staff number (receives alerts) | 27821234567 |
JWT_SECRET |
Secret key for admin auth | your-secret-key |
SQLite database located at backend/innflow.db
- admin_users - Admin authentication
- rooms - Room inventory (number, type, capacity, price, description, image)
- bookings - All bookings (guest details, dates, payment, status)
- cash_ups - Daily cash-up records (cash, EFT, card, iKhokha totals)
- 10 sample rooms (IDs 101-302) with realistic descriptions and images
- 1 admin user (credentials above)
docker-compose up -ddocker-compose logs -fdocker-compose downdocker-compose restartdocker-compose up -d --build- ✅ Open http://localhost
- ✅ Select a room from the grid
- ✅ Choose check-in and check-out dates
- ✅ Verify availability checking works
- ✅ Fill in guest details (use real WhatsApp number for testing)
- ✅ Submit booking
- ✅ Verify confirmation screen appears
- ✅ Download PDF receipt
- ✅ CHECK WHATSAPP: Staff should receive notification
- ✅ Open http://localhost/admin.html
- ✅ Login with
Admin / A.dmin@2026 - ✅ Verify dashboard shows booking stats
- ✅ Go to Bookings → verify new booking appears
- ✅ Go to Rooms → edit a room's price
- ✅ Go to Cash-Up → record today's cash-up
- ✅ Go to Reports → generate daily report
- ✅ Go to Reports → generate monthly report
- ✅ Verify credentials in
.envfile - ✅ Check that staff number is added to test recipients in Meta Developer Portal
- ✅ Check backend logs:
docker-compose logs backend - ✅ Ensure number format is correct (no + or spaces):
27821234567
- ✅ Ensure Docker Desktop is running
- ✅ Check if port 80 is available:
docker-compose ps - ✅ Try accessing: http://localhost or http://127.0.0.1
- ✅ Delete
backend/innflow.dband restart:docker-compose restart backend - ✅ Database will be recreated automatically
- ✅ Check backend logs for errors
- ✅ Ensure
reportlabandqrcodeare installed (should be in requirements.txt)
- ✅ Change default admin password
- ✅ Use permanent WhatsApp access token (not temporary)
- ✅ Set strong
JWT_SECRETin.env - ✅ Enable HTTPS (use reverse proxy like Cloudflare or Let's Encrypt)
- ✅ Restrict admin dashboard access to specific IPs if possible
- ✅ Regular database backups of
backend/innflow.db
If you need multi-property support or high volume:
- Update
docker-compose.ymlto add PostgreSQL service - Update
DATABASE_URLin.env - Modify
database.pyto use PostgreSQL connection string - Install
psycopg2inrequirements.txt
Edit these in backend/pdf_generator.py and frontend/index.html:
- Property name: "Ocean Whisper Lodge"
- Address, contact email, phone
- Login to admin dashboard
- Go to "Rooms" page
- Click "+ Add Room"
- Fill in details and save
- Guest portal CSS:
frontend/assets/style.css - Colors are defined in CSS variables at the top
Built by InnFlow™ - Professional Hospitality Management Solutions
For technical issues:
- Check logs:
docker-compose logs - Review this README
- Check WhatsApp API documentation: https://developers.facebook.com/docs/whatsapp
Proprietary - All rights reserved © 2026 InnFlow™
Before going live:
- WhatsApp configured with permanent token
- Admin password changed
- SSL/HTTPS enabled
- Database backup strategy in place
- Test all booking flows
- Staff trained on admin dashboard
- Monitor logs for first 24 hours
🎉 You're ready to take bookings!
Guest Portal: http://localhost
Admin Dashboard: http://localhost/admin.html