Search by

concept24 / nova-ai-report

mihaictinescu

KPI Reports tool for Laravel Nova — daily/weekly/monthly analytics dashboards for e-commerce.

Package info

bitbucket.org/concept24/nova-ai-report

pkg:composer/concept24/nova-ai-report

Statistics

Installs: 82

Dependents: 0

Suggesters: 0

v1.5.1 2026-10-19 09:09 UTC

This package is auto-updated.

Last update: 2026-10-19 09:10:07 UTC


README

KPI Reports & BI Agent tool for Concept24 CMS — daily/weekly/monthly analytics dashboards and AI-powered chat for e-commerce, built on Laravel Nova.

Requirements

  • PHP 8.2+
  • Laravel 11, 12 or 13
  • Laravel Nova 4.12+ / 5.x
  • OpenRouter API key

Installation

composer require concept24/nova-ai-report

The service provider is auto-discovered. Migrations run automatically via loadMigrationsFrom. Publish config manually:

php artisan vendor:publish --tag=nova-ai-report-config

To copy migrations into your app's database/migrations/ (optional):

php artisan vendor:publish --tag=nova-ai-report-migrations

To seed the default prompt library (30 standard e-commerce reports):

php artisan db:seed --class="Concept24\NovaAiReport\Database\Seeders\AiReportPromptSeeder"

Configuration

config/nova-ai-report.php (takes full priority over package defaults):

KeyEnv varDefault
openrouter.api_keyOPENROUTER_API_KEY—
default_modelNOVA_AI_REPORT_DEFAULT_MODEL~anthropic/claude-opus-latest
models.primaryNOVA_AI_REPORT_MODEL_PRIMARY~anthropic/claude-sonnet-latest
models.fastNOVA_AI_REPORT_MODEL_FASTgoogle/gemini-3-flash-preview
models.reasoningNOVA_AI_REPORT_MODEL_REASONING~anthropic/claude-opus-latest
max_tool_iterationsNOVA_AI_REPORT_MAX_TOOL_ITERATIONS60
max_tokensNOVA_AI_REPORT_MAX_TOKENS32000
reasoning_effortNOVA_AI_REPORT_REASONING_EFFORTmedium
brief_reasoning_effortNOVA_AI_REPORT_BRIEF_REASONING_EFFORThigh (briefuri cu ≥3 puncte)
brief_max_tokensNOVA_AI_REPORT_BRIEF_MAX_TOKENS64000
max_continuationsNOVA_AI_REPORT_MAX_CONTINUATIONS3 (răspuns tăiat la max_tokens → continuare automată)
stream_retries / stream_retry_delayNOVA_AI_REPORT_STREAM_RETRIES / …_RETRY_DELAY2 / 5 s (erorile 400–404/413 nu se reiau)
max_run_secondsNOVA_AI_REPORT_MAX_RUN_SECONDS1800 (ridică limita Octane de 30 s pe stream)
connectionNOVA_AI_REPORT_DB_CONNECTIONconexiunea implicită (BI pe altă bază)
cache_ttlNOVA_AI_REPORT_CACHE_TTL300
rate_limitNOVA_AI_REPORT_RATE_LIMIT30,1

Minimum .env:

OPENROUTER_API_KEY=sk-or-...

Database

Tables

TablePurpose
nova_ai_report_conversationsBI Agent chat sessions (user_id, title, model, model_tier)
nova_ai_report_messagesChat messages (role, content, tool_calls, query_results)
nova_ai_report_logsPer-request usage tracking (tokens, cost, latency, tool_calls_count)
nova_ai_report_promptsGlobal saved prompt library (title, content, sort_order)

Prompts table

nova_ai_report_prompts
  id            bigint PK
  title         varchar(255)
  content       text  (max 5000 chars)
  sort_order    int   (default 0)
  created_at    timestamp
  updated_at    timestamp

Prompts are global — no user ownership, no sharing flags. All Nova users share the same library.

Seeder

AiReportPromptSeeder ships 30 standard e-commerce report prompts in Romanian, organized by category:

CategoryPrompts
Vânzări & Venituri6 — revenue, product/category sales, AOV, vouchers, returns, profitability
Comportament Utilizatori5 — conversion rate, funnel, cart abandonment, page performance, site search
Clienți & Loialitate7 — new vs. returning, CLV, cohort retention, repeat purchase, RFM, churn risk, reviews
Produse & Stoc6 — bestsellers/worst performers, critical stock, replenishment, dead stock, cross-sell, wishlist
Operațional & Logistică3 — order status, delivery performance, payment methods
Financiar & Strategic3 — executive dashboard, net profitability after returns, 6-month strategic trend

Excludes: GA4, Google Ads, Meta/TikTok, Hotjar/Clarity — uses only internal database data.

Features

KPI Dashboards

Tab-based dashboards powered by pre-aggregated kpi_* tables. Tabs are hidden automatically if kpi_daily_sales does not exist in the database.

TabData source
OverviewCross-table KPI summary
Saleskpi_daily_sales, site_orders
Traffickpi_daily_traffic, kpi_sessions
UXkpi_daily_ux, kpi_webvitals
Productskpi_daily_products, site_products
Funnelskpi_daily_funnels, kpi_events

BI Agent Chat

AI-powered chat that queries operational and KPI tables via a tool-call loop.

  • Multi-turn conversation with tool calls: execute_sql, get_table_schema, get_join_pattern, get_entity_links, get_report_recipe
  • Multi-model picker: Gemini Flash/Pro, OpenAI (Astra, Sol, Terra, Mini), Claude (Sonnet, Opus, Fable), Grok, Kimi — OpenRouter „latest” aliases
  • SSE real-time streaming with animated typing indicator
  • Silent retry on failed tool calls
  • Per-conversation cost display
  • Conversation management: rename, delete, search, multi-tab

Routing: all BI Agent endpoints are prefixed /nova-vendor/nova-ai-report/bi-agent/ and protected by Nova + Authorize middleware.

MethodPathDescription
POSTchatStream a response (SSE)
GETconfigAvailable models, defaults, KPI table presence
GETcreditsOpenRouter credit balance
GETusagePer-day usage stats
GET/POSTconversationsList / create
GET/PATCH/DELETEconversations/{id}Show / update / delete
GET/POSTpromptsList / create prompts
PATCH/DELETEprompts/{id}Update / delete prompt
POSTexportGenerate HTML export

Saved Prompts

Global library of reusable prompt templates accessible from two entry points:

  • Prompts tab — split-panel management UI (CRUD, search, inline edit)
  • ⚡ button in ChatInput — modal picker that inserts prompt content into the textarea

Chat Export

Selective export of agent responses to a self-contained HTML file.

  • Click the ↓ button in the tab bar to enter selection mode
  • Checkboxes appear on each exportable message (text + charts/tables)
  • Transitional inter-tool notes are excluded from export automatically
  • Click Export HTML — html2canvas captures chart messages as PNG screenshots; text messages export as real HTML
  • Downloads as {conversation-title}.html

Architecture

Backend

src/
  Http/
    Controllers/
      BiAgentController.php     — chat, config, credits, usage
      ConversationController.php — conversation CRUD
      PromptController.php       — prompt CRUD
      ExportController.php       — HTML export
  Services/
    BiAgentOrchestrator.php      — tool-call loop
    ChatExportService.php        — HTML export generation
    KpiSchemaProvider.php        — system prompt + schema introspection
    KpiQuerySanitizer.php        — SQL safety (SELECT/WITH only, sensitive column masking)
    NovaReportRecipes.php        — CMS report SQL recipes
    OpenRouterClient.php         — SSE streaming client
  Models/
    Conversation.php
    Message.php
    AiReportLog.php
    Prompt.php

Frontend (Vue 3 Composition API)

resources/js/
  pages/
    AiReport.vue                  — root page, tab routing
  components/
    tabs/
      BiAgentTab.vue              — chat UI, export orchestration
      PromptsTab.vue              — prompt management (split panel)
      UsageTab.vue
      OverviewTab.vue / SalesTab.vue / TrafficTab.vue / UxTab.vue / ProductsTab.vue / FunnelsTab.vue
    bi-agent/
      ChatThread.vue              — message list
      BiAgentMessage.vue          — single message (text / chart / export checkbox)
      BiAgentResultChart.vue      — chart/table renderer (Chart.js)
      ChatInput.vue               — textarea + model picker + ⚡ prompts button
      ExportBar.vue               — export mode action bar
      PromptPickerModal.vue       — modal prompt selector

CSS

All component styles in resources/css/tool.css using --ai-* CSS variables scoped to .nova-ai-report-wrap. Dark mode via .dark .nova-ai-report-wrap.

Changelog

VersionDateNotes
1.5.12026-10-19Compatibilitate Laravel 11, 12 și 13 (laravel/framework ^11.0\|^12.0\|^13.0); PHP minim 8.2
1.5.02026-10-15Briefuri mari în etape: protocol de acoperire (tabel „Acoperire”), reasoning effort high + 64K pentru briefuri, continuare automată la max_tokens, o trecere de completare pentru punctele neverificate, sinteză la epuizarea pașilor, retry la erori de rețea, heartbeat SSE la 10 s, max_run_seconds; fix pierdere text lângă emoji (✅) și tokeni „0”; conexiune BI configurabilă; model implicit Opus latest
1.4.132026-10-13Kimi (latest) grupat sub furnizorul Moonshot, alături de Kimi K2
1.4.122026-10-13Modele: aliasuri „latest” Gemini Flash, Gemini Pro și Kimi (Moonshot AI)
1.4.112026-10-13Modele: aliasuri OpenRouter „latest” pentru OpenAI (Astra, Sol, Terra, Mini), Anthropic (Sonnet, Opus, Fable) și xAI (Grok); implicit Sonnet/Opus latest
1.4.102026-10-12Security: the tool page (/nova-ai-report) rendered without login (Nova::router() applied only nova.middleware) and the API relied only on the tool's canSee (a guest crashed it with a 500 instead of a 401). Page now on nova + Nova Authenticate + viewNova + the tool's Authorize; API on nova:api + Authorize. Guests get a redirect to the Nova login / 401, Nova users failing canSee get 403
1.4.82026-05-19Fix UX/Traffic/Products tab KPI cards reading wrong API key (current → kpis.*.current); fix product name resolution (use title accessor instead of name); add utils/labels.js with human-readable labels for events/funnels/steps/page types; funnel chart improvements (wider labels, more spacing, value pill visible on both filled and empty bars)
1.3.12026-05-02Fix o3/o1 temperature error (reasoning models skip temperature, use max_completion_tokens); increase max_tokens 4096→16384; compress large tool results in conversation history (first 60 rows); error/timeout messages survive loadTabMessages reload
1.3.02026-04-30Migrations bundled in package; AiReportPromptSeeder (30 e-commerce reports); KPI tabs auto-hidden; Romanian terminology; operational tables priority; table overflow fix
1.2.02026-04-30Chat export to HTML (html2canvas); nudge/retry chips; transitional message styling
1.1.02026-04-29Saved Prompts (global library + modal picker + management tab)
1.0.02026-04-29Initial release — BI Agent chat, KPI dashboards, model picker, usage tracking