An open-source support ticket application with a React frontend, a Django REST backend, and an optional local AI classification bridge powered by the vendored freeloader runtime.
- create, list, filter, search, and update support tickets
- view ticket statistics from the admin dashboard
- classify tickets into category and priority using a local OpenAI-compatible proxy
- run locally without Docker or with a Docker Compose stack
- keep AI classification non-blocking when the local browser-based AI layer is unavailable
- Frontend: React + esbuild
- Backend: Django + Django REST Framework
- Database: SQLite for local development, PostgreSQL in Docker
- AI bridge: local OpenAI-compatible proxy backed by vendored
freeloader
backend/ Django API and data model
frontend/ React application and static server
freeloader/ Vendored local browser-driven AI runtime
python -m venv .venv
.\.venv\Scripts\python -m pip install --upgrade pip
.\.venv\Scripts\python -m pip install -r backend\requirements.txt
.\.venv\Scripts\python -m pip install -r freeloader\requirements.txt
.\.venv\Scripts\python -m playwright install chromium
cd frontend
npm install --no-package-lock
npm run build
cd ..Start the backend:
.\.venv\Scripts\python backend\manage.py migrate
.\.venv\Scripts\python backend\manage.py runserver 127.0.0.1:8000Start the local AI proxy in another terminal:
$env:FREELOADER_BROWSER_MODE="managed"
.\.venv\Scripts\python chatgpt_openai_proxy.py --host 127.0.0.1 --port 11435Start the frontend in a third terminal:
cd frontend
npm run serveOpen http://127.0.0.1:3000.
Copy the example environment file:
Copy-Item .env.example .envRun the local AI proxy on the host:
$env:FREELOADER_BROWSER_MODE="managed"
.\.venv\Scripts\python chatgpt_openai_proxy.py --host 127.0.0.1 --port 11435Then start the stack:
docker compose up --buildBackend base URL: http://127.0.0.1:8000/api
GET /health/GET /tickets/POST /tickets/PATCH /tickets/{id}/GET /tickets/stats/POST /tickets/classify/
AI proxy base URL: http://127.0.0.1:11435/v1
GET /modelsPOST /chat/completionsPOST /responses
- The repository includes a vendored copy of
freeloaderunderfreeloader/. - Keep vendored notices and license files intact when redistributing the project.
- The local AI integration depends on a browser session and may require signing in to ChatGPT.
Backend tests:
.\.venv\Scripts\python backend\manage.py test ticketsFrontend build:
cd frontend
npm run buildProxy sanity:
.\.venv\Scripts\python chatgpt_openai_proxy.py --version
.\.venv\Scripts\python -m freeloader --versionThis repository is released under the MIT License.