B2B IT Remote Support Platform β A modern, multi-tenant helpdesk application built for remote IT support teams. Features workspace isolation, SLA management, role-based access, and real-time ticket handling.
- Multi-tenant Architecture β Complete workspace isolation for B2B clients
- Role-based Access β Admin, Agent, and Customer roles with appropriate permissions
- Ticket Management β Full lifecycle: create, assign, prioritize, resolve
- SLA Policies β Configurable response/resolution times with escalation
- Customer Portal β Self-service ticket creation and tracking
- Agent Console β Unified inbox with filtering and search
- Reports & Analytics β Agent performance and ticket metrics
- Background Jobs β Redis Queue (RQ) for SLA checking and email notifications
| Layer | Technology | Description |
|---|---|---|
| Frontend | React 18 + Vite + TailwindCSS | Agent Console & Customer Portal |
| Backend | FastAPI (Python 3.11+) | REST API with OpenAPI docs |
| Database | PostgreSQL 15 | Primary data store |
| Cache/Queue | Redis 7 | Session cache & job queue |
| Worker | RQ (Redis Queue) | Background job processing |
| Scheduler | APScheduler | Periodic SLA checks |
| Infra | Docker Compose | Local development stack |
helpdesk-mvp/
βββ apps/
β βββ api/ # FastAPI backend
β β βββ app/ # Application code
β β β βββ modules/ # Feature modules (auth, tickets, sla, etc.)
β β β βββ core/ # Config, security, logging
β β β βββ db/ # Database session, models
β β βββ alembic/ # Database migrations
β β βββ tests/ # API tests
β βββ web/ # React frontend
β βββ src/
β βββ features/ # Feature pages (tickets, portal, admin)
β βββ components/ # Shared UI components
β βββ lib/ # API client, auth store
βββ infra/
β βββ docker-compose.yml
β βββ scripts/ # Smoke tests, utilities
βββ scripts/
β βββ screenshots/ # Automated screenshot capture
βββ docs/ # Architecture & design docs
βββ @fotos/ # Generated screenshots (after running capture)
βββ Makefile # Common commands
βββ .env.example # Environment template
- Docker & Docker Compose
- Make (optional, for convenience commands)
- Node.js 18+ (for frontend dev / screenshots)
cp .env.example .envmake upThis starts all services:
| Service | URL | Description |
|---|---|---|
| Web UI | http://localhost:5173 | React frontend |
| API | http://localhost:18000 | FastAPI backend |
| API Docs | http://localhost:18000/docs | Swagger UI |
| ReDoc | http://localhost:18000/redoc | Alternative API docs |
| PostgreSQL | localhost:15432 | Database |
| Redis | localhost:16379 | Cache & Queue |
curl http://localhost:18000/health
# {"status":"ok","service":"helpdesk-api","version":"0.1.0"}make seedCreates demo workspace with test users.
After seeding, use these accounts:
| Role | Password | |
|---|---|---|
| Admin | admin@acme.com |
password123 |
| Agent | agent@acme.com |
password123 |
| Customer | customer@acme.com |
password123 |
GET /health # Health check
GET /docs # Swagger UI
GET /redoc # ReDocPOST /api/v1/auth/register # Create workspace + admin
POST /api/v1/auth/login # Get JWT token
GET /api/v1/auth/me # Current user infoGET /api/v1/tickets # List tickets (filtered by role)
POST /api/v1/tickets # Create ticket
GET /api/v1/tickets/{id} # Get ticket details
PATCH /api/v1/tickets/{id} # Update ticket
POST /api/v1/tickets/{id}/messages # Add message to ticketTOKEN=$(curl -s -X POST http://localhost:18000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"customer@acme.com","password":"password123"}' \
| jq -r '.data.access_token')
curl -X POST http://localhost:18000/api/v1/tickets \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subject": "VPN not connecting",
"description": "Unable to connect to corporate VPN since this morning",
"priority": "high"
}'Note: All API operations are scoped to the user's workspace (multi-tenant isolation).
Automated screenshots are generated in @fotos/ directory.
make screenshotsThis will:
- Install Playwright dependencies
- Wait for API health
- Capture all public pages, API docs, agent console, and customer portal
- Save to
@fotos/desktop/withmanifest.json
| Variable | Default | Description |
|---|---|---|
HELP_DESK_BASE_URL |
http://localhost:18000 |
API URL |
HELP_DESK_WEB_URL |
http://localhost:5173 |
Web app URL |
HELP_DESK_E2E_ADMIN_EMAIL |
admin@acme.com |
Admin login |
HELP_DESK_E2E_ADMIN_PASS |
password123 |
Admin password |
make testmake smokemake lint # Check code style
make format # Auto-format codecd apps/api
# With Docker running:
docker compose exec api bash
# Or locally with Poetry:
poetry install
poetry run uvicorn app.main:app --reloadcd apps/web
npm install
npm run dev# Run migrations
make migrate
# Create new migration
docker compose exec api alembic revision --autogenerate -m "description"| Command | Description |
|---|---|
make up |
Start all services |
make down |
Stop all services |
make logs |
Tail service logs |
make ps |
Show running services |
make build |
Rebuild containers |
make test |
Run API tests |
make lint |
Run linter |
make format |
Format code |
make migrate |
Run DB migrations |
make seed |
Seed demo data |
make smoke |
Run smoke tests |
make screenshots |
Generate screenshots |
- Email notifications for ticket updates
- Real-time updates via WebSocket
- Knowledge base / FAQ module
- Custom ticket fields per workspace
- Reporting dashboard with charts
- Mobile-responsive improvements
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
make test - Commit:
git commit -m 'feat: add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
MIT License β see LICENSE for details.