8 Commits
Author SHA1 Message Date
HousemannandClaude Sonnet 4.6 9861a74e1e Fix admin AI nav bug, add rescan feature
- Fix Blade parse error in admin AI settings (Blade was interpreting
  JSON braces in DEFAULT_PROMPT as template tags, breaking the navbar)
  — pass defaultPrompt from controller instead
- Add rescan: POST /nail-polishes/{id}/rescan creates a new import for
  an existing nail polish and updates its fields after AI analysis
- Add KI-Rescan button on collection cards (only if image exists)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 18:22:41 +02:00
HousemannandClaude Sonnet 4.6 f60221d0ef Make Ollama prompt editable in admin AI settings
- Add prompt column to ai_settings (migration)
- AiSetting: DEFAULT_PROMPT constant + getActivePrompt() (falls back to default if empty)
- ProcessNailPolishImage: reads prompt from DB instead of hardcoded
- Admin view: textarea to edit prompt, shows active prompt, reset-to-default link

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 18:11:47 +02:00
HousemannandClaude Sonnet 4.6 ecac206a6c Fix background queue and add image compression on import
- Switch queue from sync to database so Ollama job truly runs in background
- Compress uploaded images to max 1200px JPEG 85% before storage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 17:57:33 +02:00
HousemannandClaude Sonnet 4.6 f94f53abbd Improve AI import UX and recognition quality
- AJAX upload with progress bar — browser no longer blocks during upload;
  redirects to status page immediately after file transfer completes
- Improved Ollama prompt: clearly separates manufacturer (brand logo),
  product name (descriptive text) and number (article code) to fix
  misidentification like treating the product name as manufacturer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 17:52:19 +02:00
HousemannandClaude Sonnet 4.6 f715bc4552 Add AI photo import via Ollama Vision
Users can upload a photo of a nail polish bottle; a background queue
job sends it to Ollama (llama3.2-vision at 192.168.30.172:11434),
extracts name, number and manufacturer, then creates the nail polish
and adds it to the user's collection automatically.

- ProcessNailPolishImage job (180s timeout, 2 tries)
- NailPolishImport model + migration (status tracking)
- AiSetting model + migration (Ollama URL + model, admin-configurable)
- NailPolishImportController: upload, status page (auto-refresh every 5s)
- Admin\AiSettingController: configure Ollama connection
- Views: drag-drop upload form, live status page, import history
- Navbar: "Foto importieren" link for all users
- Admin dropdown: "KI-Einstellungen"
- neonail-worker.conf: Supervisor config for the queue worker

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 17:37:26 +02:00
HousemannandClaude Sonnet 4.6 60259a3655 Add Authentik SSO via OAuth2/OIDC
Implements Single Sign-On with Authentik alongside the existing
password login. Admins configure Client ID, Client Secret and Base URL
directly in the app; the SSO button on the login page only appears
when the configuration is complete and enabled.

- SsoSetting model + migration (one-row config table)
- sso_provider_id / is_sso_user fields on users (migration)
- SsoController: redirect to Authentik + callback (token exchange,
  userinfo fetch, auto-create unknown users)
- Admin\SsoSettingController + admin/sso/show view with setup guide
  and one-click Redirect URI copy
- Admin dropdown: SSO-Konfiguration entry
- Login page: Authentik button rendered conditionally

No additional Composer packages required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 15:13:30 +02:00
Housemann c5fe3ad808 design anpasungen und url for image 2026-06-13 10:19:44 +02:00
Housemann 2a15995cbb Script erstellt 2025-08-10 18:09:07 +02:00