# TicketAssistant (Laravel 13 + pgvector + external Ollama) AI-powered customer support ticket system using semantic retrieval + LLM re-ranking. ## Requirements - Docker Desktop - Docker Compose v2 - Ollama running on a reachable network server ## Quick Start (Docker) 1. Create environment file ```bash cp .env.docker.example .env ``` 2. Set the external Ollama URL in `.env` ```env OLLAMA_BASE_URL=http://:11434 ``` 3. Build and start containers ```bash docker compose up -d --build ``` 4. Install PHP dependencies in app container ```bash docker compose exec app composer install ``` 5. Generate app key and run database setup ```bash docker compose exec app php artisan key:generate docker compose exec app php artisan migrate --seed ``` API base URL: `http://localhost:8090/api` Admin dashboard: `http://localhost:8090/admin/dashboard` ## Admin Dashboard (Blade + Livewire) - `/admin/dashboard`: KPI cards + recente tickets + recente AI decisions - `/admin/articles`: artikel aanmaken + artikeloverzicht - `/admin/tickets`: tickets met AI-classificatie-overzicht Business logic is isolated in service classes: - `App\Services\AdminDashboardService` - `App\Services\AdminArticleService` - `App\Services\AdminTicketService` ## Services - `web`: Nginx (public endpoint) - `app`: PHP-FPM Laravel runtime - `worker`: queue worker for async jobs - `postgres`: PostgreSQL 17 + pgvector ## Notes - No external AI APIs are used. - Ollama runs outside Docker on your network. - Set `QUEUE_EMBEDDINGS=true` for async article embedding generation. ## Helpdesk Scraper Command Importeer artikelen vanaf InternetToday Helpdesk (categorieen + subcategorieen): ```bash docker compose exec app php artisan helpdesk:import ``` Opties: ```bash # test zonder schrijven docker compose exec app php artisan helpdesk:import --dry-run # verwerk alleen eerste N artikelen docker compose exec app php artisan helpdesk:import --limit=25 # custom base-url docker compose exec app php artisan helpdesk:import --base-url=https://www.internettoday.nl/helpdesk ```