--- title: Pare AI Chatbot emoji: ๐Ÿข colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false --- # Pare AI Chatbot ๐Ÿข An intelligent AI-powered chatbot for Pare Interior & Exterior Solutions. Built with Flask and Google Gemini AI, this chatbot helps customers learn about products and book appointments with real-time slot management. ## Features โœจ - **AI-Powered Chat**: Intelligent responses about Pare products using Google Gemini AI - **Product Information**: Detailed info about 6 product series (INNOV+, INNOV2+, DURA+, EASY+, LUXE, Acoustic) - **Smart Appointment Booking**: - Book via chat or direct UI - Time slots: 9 AM - 6 PM in 1-hour intervals - Real-time slot availability checking - Prevents double bookings - Auto-refresh every 5 seconds when booking modal is open - **Bilingual Support**: English and Hindi language support - **Real-time Validation**: - Business hours enforcement (9 AM - 6 PM only) - Full hour slots only (no 9:30, 10:15, etc.) - Date format normalization - **Usage Tracking**: Monitor API quota usage in real-time - **Responsive Design**: Works on desktop and mobile devices - **Modern UI**: Clean, professional interface with smooth animations ## Product Series ๐Ÿ“ฆ 1. **INNOV+**: Waterproof, termite-proof wood-look interiors 2. **INNOV2+**: 3D textured walls (Wave, Dome, Stripes, Prism) 3. **DURA+**: UV-resistant exterior cladding (Norma, Stretta) 4. **EASY+**: Direct installation without plywood 5. **LUXE**: Premium dead-matt finish (Panelo, Flut, Verto) 6. **Acoustic**: Sound absorption with louver design ## Tech Stack ๐Ÿ› ๏ธ - **Backend**: Flask (Python 3.8+) - **AI**: Google Gemini API (gemini-flash-lite-latest) - **Frontend**: HTML5, CSS3, Vanilla JavaScript - **Styling**: Custom CSS with modern design patterns - **Icons**: Font Awesome 6.4.0 - **Environment**: python-dotenv for secure config ## Key Features in Detail ๐Ÿ” ### Smart Appointment System - **Dual Booking Methods**: Book via AI chat or direct UI form - **Time Slot Management**: - Business hours: 9:00 AM to 6:00 PM - 1-hour intervals only (9:00, 10:00, 11:00, etc.) - No partial hours (9:30, 10:15 rejected) - **Real-time Sync**: - Chat bookings instantly reflect in UI - Auto-refresh every 5 seconds when modal is open - Visual indicators for booked slots - **Validation**: - Backend validates all time slots - Prevents bookings outside business hours - Checks for duplicate bookings - Date format normalization (YYYY-MM-DD internally) ### Usage Tracking - **Request Counter**: Shows current API usage (X/60 requests per minute) - **Color Coding**: Green (safe), Red (near limit) - **Auto-reset**: Counter resets every 60 seconds - **Detailed Stats**: Click info icon for full usage breakdown - **Quota Monitoring**: Direct link to Google's quota dashboard ## Installation ๐Ÿš€ ### Prerequisites - Python 3.8 or higher - Google Gemini API key ([Get it here](https://aistudio.google.com/app/apikey)) ### Setup Steps 1. **Clone the repository** ```bash git clone cd Pare_chatbot ``` 2. **Create virtual environment** ```bash python -m venv venv ``` 3. **Activate virtual environment** ```bash # Windows .\venv\Scripts\activate # Linux/Mac source venv/bin/activate ``` 4. **Install dependencies** ```bash pip install flask flask-cors google-generativeai python-dotenv ``` 5. **Configure API key** Create a `.env` file in the root directory: ```env GEMINI_API_KEY=your_api_key_here ``` 6. **Run the application** ```bash python app.py ``` 7. **Open in browser** ``` http://localhost:5000 ``` ## Project Structure ๐Ÿ“ ``` Pare_chatbot/ โ”œโ”€โ”€ app.py # Main Flask application โ”œโ”€โ”€ .env # Environment variables (API key) โ”œโ”€โ”€ .gitignore # Git ignore file โ”œโ”€โ”€ requirements.txt # Python dependencies โ”œโ”€โ”€ templates/ โ”‚ โ””โ”€โ”€ index.html # Main HTML template โ”œโ”€โ”€ static/ โ”‚ โ”œโ”€โ”€ css/ โ”‚ โ”‚ โ””โ”€โ”€ style.css # Styling โ”‚ โ””โ”€โ”€ js/ โ”‚ โ””โ”€โ”€ script.js # Frontend logic โ””โ”€โ”€ venv/ # Virtual environment (not in git) ``` ## Usage ๐Ÿ’ฌ ### Chat with AI - Type your questions about Pare products - Click product buttons in sidebar for quick info - Get instant AI-powered responses in English or Hindi - Ask in Hindi: "INNOV+ เค•เฅ‡ เคฌเคพเคฐเฅ‡ เคฎเฅ‡เค‚ เคฌเคคเคพเค“" ### Book Appointments #### Method 1: Via Chat ``` User: "I want to book an appointment" Bot: "Sure! Please provide your name, address, date, and time." User: "Name: John Doe, Address: 123 Main St, Date: tomorrow, Time: 2 PM" Bot: *Creates appointment with validation* ``` **Chat Booking Rules:** - AI validates time slots (9 AM - 6 PM only) - Rejects invalid times (8 AM, 9:30 AM, 7 PM, etc.) - Checks for duplicate bookings - Provides helpful error messages #### Method 2: Direct UI 1. Click "Book Appointment" button 2. Fill in your details (Name, Address) 3. Select date from calendar 4. Choose from available time slots - Booked slots show as "(Booked)" and are disabled - Only valid hours (9 AM - 6 PM) are shown 5. Confirm booking 6. Receive appointment confirmation with unique ID **UI Features:** - Auto-selects tomorrow if past business hours - Real-time slot availability - Auto-refresh every 5 seconds - Visual "Updating..." indicator ### View & Manage Appointments - Click "View Appointments" to see all bookings - Each appointment shows: - Unique ID (APT-XXXX) - Name, Address, Date, Time - Cancel button - Cancel appointments with confirmation - Canceled slots become available immediately ## Features in Detail ๐Ÿ” ### Smart Time Slot Management - **1-hour intervals**: 9:00 AM, 10:00 AM, 11:00 AM, etc. - **Business hours**: 9 AM - 6 PM - **Real-time availability**: Shows only available slots - **Auto-date selection**: Defaults to tomorrow if past business hours - **Double-booking prevention**: Validates before confirming ### AI Capabilities - Product recommendations - Detailed product information - Bilingual responses (English/Hindi) - Appointment booking via chat - JSON-formatted responses ## API Endpoints ๐Ÿ”Œ ### Chat ```http POST /api/chat Content-Type: application/json { "message": "Tell me about INNOV+ series" } Response: { "type": "message", "content": "INNOV+ is a waterproof, termite-proof...", "language": "en", "usage": { "request_count": 1, "timestamp": "2026-02-10T20:30:00" } } ``` ### Book Appointment ```http POST /api/appointments/book Content-Type: application/json { "name": "John Doe", "address": "123 Main St", "date": "2026-02-11", "time": "14:00" } Success Response (200): { "status": "confirmed", "appointment_id": "APT-1234", "name": "John Doe", "address": "123 Main St", "date": "2026-02-11", "time": "14:00", "created_at": "2026-02-10T20:30:00" } Error Response (400): { "status": "error", "message": "Time slot 14:00 on 2026-02-11 is already booked." } ``` ### View Appointments ```http GET /api/appointments Response: { "appointments": [ { "appointment_id": "APT-1234", "name": "John Doe", "address": "123 Main St", "date": "2026-02-11", "time": "14:00", "status": "confirmed", "created_at": "2026-02-10T20:30:00" } ] } ``` ### Cancel Appointment ```http POST /api/appointments/cancel Content-Type: application/json { "appointment_id": "APT-1234" } Response: { "status": "cancelled", "appointment_id": "APT-1234", "message": "Appointment successfully cancelled" } ``` ### Usage Statistics ```http GET /api/usage Response: { "total_appointments": 5, "free_tier_limit": "60 requests/minute", "recommendation": "Monitor at https://ai.dev/rate-limit", "current_model": "gemini-flash-lite-latest" } ``` ## Configuration โš™๏ธ ### Environment Variables - `GEMINI_API_KEY`: Your Google Gemini API key (required) ### Model Configuration Current model: `gemini-flash-lite-latest` - Temperature: 0.7 - Max output tokens: 512 - Timeout: 30 seconds - Retry logic: 2 attempts on timeout To change model, edit `app.py`: ```python model = genai.GenerativeModel( "models/gemini-flash-lite-latest", # Change model here generation_config={...} ) ``` ### Business Hours Default: 9 AM - 6 PM (1-hour slots) To change, edit `static/js/script.js`: ```javascript const startHour = 9; // Change start hour (24-hour format) const endHour = 18; // Change end hour (24-hour format) ``` Also update `app.py` validation: ```python def validate_time_slot(time: str) -> tuple[bool, str]: # Check business hours (9 AM to 6 PM) if hour < 9 or hour > 18: # Change these values return False, "Appointments are available only from 9:00 AM to 6:00 PM." ``` ### Auto-refresh Interval Default: 5 seconds To change, edit `static/js/script.js`: ```javascript window.timeSlotsRefreshInterval = setInterval(() => { // ... }, 5000); // Change milliseconds (5000 = 5 seconds) ``` ## Troubleshooting ๐Ÿ”ง ### API Key Issues - Ensure `.env` file exists with valid API key - Check API key at: https://aistudio.google.com/app/apikey - Verify no quotes around the key in `.env` - Format: `GEMINI_API_KEY=AIzaSyC...` (no quotes) ### Quota Exceeded (429 Error) **Error**: "You exceeded your current quota" - **Cause**: Hit free tier limit (60 requests/minute) - **Solution**: - Wait 1 minute for quota reset - Check usage: https://ai.dev/rate-limit - Monitor with built-in usage tracker (top-right corner) - Consider upgrading API plan ### Timeout Errors (504) **Error**: "Deadline expired before operation could complete" - **Cause**: API is slow or overloaded - **Solution**: - Retry after a few seconds - Check internet connection - Try different model (gemini-2.0-flash) - Increase timeout in `app.py` ### Invalid Time Slot **Error**: "Appointments are available only from 9:00 AM to 6:00 PM" - **Cause**: Requested time outside business hours or not full hour - **Valid times**: 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00 - **Invalid times**: 08:00, 09:30, 10:15, 19:00, etc. ### Slot Already Booked **Error**: "Time slot X on Y is already booked" - **Cause**: Someone else booked that slot - **Solution**: - Choose different time - Refresh booking modal to see updated slots - Check "View Appointments" to see all bookings ### Date Format Issues - Backend stores: `YYYY-MM-DD` (2026-02-11) - Display shows: `DD-MM-YYYY` (11-02-2026) - AI accepts both formats, automatically normalized ### Port Already in Use ```bash # Change port in app.py app.run(debug=True, port=5001) # Use different port ``` ### Slots Not Refreshing - Check browser console for errors (F12) - Ensure `/api/appointments` endpoint is working - Hard refresh: `Ctrl + Shift + R` - Clear browser cache ## Security ๐Ÿ”’ - API key stored in `.env` (not in code) - `.gitignore` prevents committing secrets - Input validation on appointments - CORS enabled for API access ## Future Enhancements ๐Ÿš€ - [ ] Database integration (SQLite/PostgreSQL) for persistent storage - [ ] User authentication and login system - [ ] Email/SMS notifications for appointments - [ ] Admin dashboard for managing bookings - [ ] Payment integration for booking fees - [ ] Multi-language support expansion (Spanish, French, etc.) - [ ] Voice input/output capabilities - [ ] Image upload for product queries - [ ] Calendar integration (Google Calendar, Outlook) - [ ] Appointment reminders (24 hours before) - [ ] Customer feedback and ratings - [ ] Analytics dashboard (booking trends, popular times) - [ ] Waiting list for fully booked slots - [ ] Recurring appointments - [ ] Export appointments to CSV/PDF ## Recent Updates ๐Ÿ“ ### v1.2.0 (Latest) - โœ… Added usage tracking with real-time counter - โœ… Implemented auto-refresh for time slots (5-second interval) - โœ… Added date format normalization (YYYY-MM-DD) - โœ… Enhanced validation for business hours - โœ… Improved error messages for quota/timeout issues - โœ… Added visual indicators for slot updates ### v1.1.0 - โœ… Dual booking methods (Chat + Direct UI) - โœ… Real-time slot synchronization - โœ… Duplicate booking prevention - โœ… Time slot validation (9 AM - 6 PM, full hours only) ### v1.0.0 - โœ… Initial release - โœ… AI-powered chat with Gemini - โœ… Basic appointment booking - โœ… Bilingual support (English/Hindi) ## Contributing ๐Ÿค Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Commit your changes 4. Push to the branch 5. Open a Pull Request ## License ๐Ÿ“„ This project is licensed under the MIT License. ## Acknowledgments ๐Ÿ™ - Google Gemini AI for powering the chatbot - Flask framework for backend - Font Awesome for icons - Pare for product information --- **project purpose only**