A simple, powerful help desk solution built with Flask, SQLAlchemy, and SQLite. QuickDesk provides an intuitive interface for managing support tickets with role-based access control, file attachments, and real-time updates.
- User Authentication: Secure login/registration system with role-based access
- Ticket Management: Create, view, update, and track support tickets
- File Attachments: Support for multiple file uploads (up to 16MB)
- Comments System: Threaded conversations on tickets
- Voting System: Upvote/downvote tickets for prioritization
- Status Tracking: Open → In Progress → Resolved → Closed workflow
- End Users: Create tickets, view own tickets, add comments
- Support Agents: Manage tickets, update status, respond to users
- Administrators: User management, category management, system oversight
- Search & Filtering: Filter by status, category, priority, and search text
- Pagination: Efficient handling of large ticket volumes
- Email Notifications: Automatic notifications for ticket updates
- Responsive Design: Works on desktop, tablet, and mobile devices
- Backend: Flask (Python web framework)
- Database: SQLite with SQLAlchemy ORM
- Frontend: HTML5, CSS3, Bootstrap 5, JavaScript
- Templates: Jinja2 templating engine
- Authentication: Flask-Login
- File Handling: Werkzeug secure file uploads
- Python 3.8 or higher
- pip (Python package manager)
git clone <repository-url>
cd quick-deskpython -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activatepip install -r requirements.txtCreate a .env file in the project root:
# Flask Configuration
SECRET_KEY=your-secret-key-change-this-in-production
FLASK_ENV=development
FLASK_DEBUG=1
# Database Configuration (SQLite - no setup required!)
DATABASE_URL=sqlite:///quickdesk.db
# Email Configuration (optional)
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-passwordpython app.pyThe application will automatically create the SQLite database and seed initial data on first run.
python app.pyThe application will be available at http://localhost:5000
- Username: admin
- Password: admin123
- Role: Administrator
- Register/login to the system
- Create new tickets with attachments
- View and track own tickets
- Add comments to own tickets
- Vote on tickets (upvote/downvote)
- Search and filter tickets
- All end user capabilities
- View all tickets (not just own)
- Update ticket status
- Add comments to any ticket
- Access to ticket management tools
- All agent capabilities
- User management
- Category management
- System configuration
- Access to admin dashboard
GET /login- Login pagePOST /login- Authenticate userGET /register- Registration pagePOST /register- Create new userGET /logout- Logout user
GET /dashboard- Main dashboard with ticket listGET /ticket/new- Create new ticket formPOST /ticket/new- Submit new ticketGET /ticket/<id>- View ticket detailsPOST /ticket/<id>/comment- Add comment to ticketPOST /ticket/<id>/update_status- Update ticket status (agents/admin)POST /ticket/<id>/vote- Vote on ticket
GET /admin/users- User managementGET /admin/categories- Category managementPOST /admin/categories- Create new categoryPOST /admin/category/<id>/delete- Delete category
- id (Primary Key)
- username (Unique)
- email (Unique)
- password_hash
- role (user/agent/admin)
- created_at
- id (Primary Key)
- name
- description
- created_at
- id (Primary Key)
- subject
- description
- status (open/in_progress/resolved/closed)
- priority (low/medium/high/urgent)
- user_id (Foreign Key)
- category_id (Foreign Key)
- assigned_to (Foreign Key)
- upvotes
- downvotes
- created_at
- updated_at
- id (Primary Key)
- content
- user_id (Foreign Key)
- ticket_id (Foreign Key)
- created_at
- id (Primary Key)
- filename
- original_filename
- file_path
- ticket_id (Foreign Key)
- created_at
SECRET_KEY: Flask secret key for session managementDATABASE_URL: SQLite database path (default: sqlite:///quickdesk.db)MAIL_SERVER: SMTP server for email notificationsMAIL_PORT: SMTP portMAIL_USERNAME: Email usernameMAIL_PASSWORD: Email password
- Maximum file size: 16MB
- Supported formats: PDF, DOC, DOCX, TXT, JPG, JPEG, PNG, GIF
- Upload directory:
uploads/
- Password hashing with bcrypt
- CSRF protection
- Secure file uploads with filename sanitization
- Role-based access control
- Session management with Flask-Login
- Input validation and sanitization
-
Install dependencies:
pip install -r requirements.txt
-
Run the application:
python app.py
-
Access the application:
- URL:
http://localhost:5000 - Login: admin / admin123
- URL:
-
Test the installation:
python test_installation.py
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions, please create an issue in the repository or contact the development team.
- Email notifications implementation
- Advanced reporting and analytics
- API endpoints for mobile apps
- Real-time notifications with WebSockets
- Multi-language support
- Advanced search with Elasticsearch
- Integration with external tools (Slack, Teams)
- Automated ticket assignment
- Knowledge base integration