feat(hints): contextual help system + FAQ page (MVP)
Infrastructure for a portal-wide in-app help system:
* Users have hints_enabled (default true) and dismissed_hints (JSON
array) columns. User::shouldSeeHint(key) checks both.
* app/Support/Hints.php — single-source-of-truth registry with 14
pilot hints across Service (5), CRM (3), Depozit (3), Finanțe (3).
Each entry has RO/RU/EN title + body + optional next-step + links.
* <x-hint key="wo.dashboard.overview" /> Blade component renders a
small "?" icon with Alpine.js popover; the popover shows title,
body, next-step, related links and an "X" button that POSTs to
/app/hints/{key}/dismiss.
* HintController handles dismiss (per key), toggle (global on/off)
and reset (clear dismissed + re-enable). Routes are auth:web.
* /app/faq page (Filament Page under Admin group) renders the whole
registry grouped by area with a live search box and buttons to
toggle global hints or reset dismissed ones.
* Wired 3 pilot hints into the WO dashboard: title (overview), Docs
tab PDF preview, and the Chat client card.
Follow-ups: extend registry to cover more pages and add <x-hint>
tags where useful. Filament resource fields can also reuse the same
copy via ->hint()/->helperText().
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,15 @@ Route::post('/payments/paypal/webhook', [\App\Http\Controllers\PaymentController
|
||||
Route::post('/payments/paynet/webhook', [\App\Http\Controllers\PaymentController::class, 'paynetWebhook'])
|
||||
->withoutMiddleware([\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class]);
|
||||
|
||||
// Hint system — dismiss / toggle / reset (auth required, tenant-scoped).
|
||||
Route::middleware('auth:web')->group(function () {
|
||||
Route::post('/app/hints/{key}/dismiss', [\App\Http\Controllers\HintController::class, 'dismiss'])
|
||||
->where('key', '[a-z0-9._-]+')
|
||||
->name('hints.dismiss');
|
||||
Route::post('/app/hints/toggle', [\App\Http\Controllers\HintController::class, 'toggle'])->name('hints.toggle');
|
||||
Route::post('/app/hints/reset', [\App\Http\Controllers\HintController::class, 'reset'])->name('hints.reset');
|
||||
});
|
||||
|
||||
// PDF for appointments (used by CalendarBoard "PDF programări" button).
|
||||
// Inline preview by default; ?download=1 forces attachment.
|
||||
Route::get('/app/appointments/pdf', function (Request $request) {
|
||||
|
||||
Reference in New Issue
Block a user