I built The Welcome Window to solve a simple problem: how do you make customer support feel personal, immediate, and actually pleasant?
What Is The Welcome Window?
The Welcome Window is a self-hosted Flask-based customer service portal that combines real-time chat, visitor management, and interactive games. It's designed so I can offer live support by appointment, with a professional interface that keeps customers engaged even when they're waiting.
Think of it as a digital reception area. Visitors can see when I am available, request access, and once approved, they can chat in real-time or even hop on a video call. And here's the twist: while they wait for responses, they can play Word Search, Sudoku, or Trivia instead of staring at a loading spinner.
The Problem It Solves
I wanted a service I could provide for customers of my eCommerce builder. I wanted a personal connection portal that gives customers a warm welcome while giving me complete control over who gets in and when.
The appointment-based access model means I am not bombarded with random visitors. People submit their name and email, I approve them, and only then can they enter the "window" to chat or video call.
Key Features
For Customers:
- Real-time availability status (Available, Busy, Away)
- Access request system with name and email
- Live text chat
- Interactive games (Word Search with 10 themes, Sudoku with 3 difficulty levels, Trivia with customizable categories)
- Optional Jitsi Meet video chat with screen sharing
For Support Staff:
- Live admin dashboard with real-time visitor monitoring
- Visitor queue management (approve/reject/disconnect)
- Availability controls with custom status messages
- Chat interface that broadcasts to all connected visitors
The Tech Stack
I built The Welcome Window using technologies I trust for real-time applications:
**Backend:** Flask 3.1.0 with Flask-SocketIO 5.4.1 running in eventlet async mode for proper WebSocket support. After testing threading mode and hitting limitations with real-time notifications, I switched to eventlet for reliable socket communication.
**Frontend:** Tailwind CSS for styling and Alpine.js for reactive components. No build step required - everything runs in the browser with CDN-hosted libraries.
**Real-time Communication:** Socket.IO handles bidirectional communication between visitors and the admin dashboard. Messages are broadcast instantly, and the connection status updates in real-time.
**Database:** SQLite with WAL (Write-Ahead Logging) mode for better concurrent access. For a small-scale application like this, SQLite is perfectly sufficient without the overhead of PostgreSQL.
**Video Chat:** Embedded Jitsi Meet provides professional-quality video calls without building custom WebRTC infrastructure.
**Deployment:** Caddy handles reverse proxy and automatic SSL termination, while systemd manages the application as a service on an Ubuntu VPS.
How It Works
The flow is intentionally simple:
1. Visitors land on the page and see your real-time availability status
2. If you're available, they click "Request Access" and enter their name and email
3. You receive an instant notification in the admin dashboard
4. You approve or reject the request with one click
5. Approved visitors choose between "Chat" or "Video" mode
6. You communicate through the live chat interface
7. When the session ends, you disconnect the visitor
Throughout the process, visitors can play games to pass the time. The Word Search has 10 themed word lists (Animals, Food, Travel, Tech, Nature, Music, Sports, Movies, Space, Christmas), Sudoku offers three difficulty levels with solution validation, and Trivia pulls questions from the Open Trivia Database API.
Why I Built It This Way
I wanted a project that demonstrated several technical skills:
- Real-time WebSocket communication with Flask-SocketIO
- Session management and user authentication
- Database design with proper relationships
- API integration (Open Trivia Database)
- Responsive frontend without heavy frameworks
- Production deployment with SSL and process management
But more importantly, I wanted to build something genuinely useful for connecting with customers and providing help.
What's Next
The Welcome Window is live at https://welcome.todiane.com and running in production. Future enhancements could include:
- Multiple admin users with role-based permissions
- Scheduled availability windows
- Chat history export
- Custom game themes
- Mobile app version
For now, it's a complete, functional customer service portal that does exactly what it's supposed to do: make live support feel personal and engaging.
---
The Welcome Window is open source and available on GitHub https://github.com/todiane/welcome-window . Built with Flask, Socket.IO, and a focus on real-time user experience.
Thanks for sharing: