{% extends 'superuser/base_superuser.html' %} {% block title %}Superuser Console | ChatLab{% endblock %} {% block dashboard_active %}active{% endblock %} {% block custom_styles %} /* ---- STAT CARDS ---- */ .su-stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 20px; } @media (max-width: 900px) { .su-stat-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .su-stat-grid { grid-template-columns: 1fr 1fr; } } .su-stat-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; padding: 18px 20px; display: flex; flex-direction: column; gap: 6px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); transition: box-shadow 0.2s; } .su-stat-card:hover { box-shadow: 0 4px 14px rgba(0,0,0,0.09); } .su-stat-icon { width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; margin-bottom: 4px; } .su-stat-value { font-size: 28px; font-weight: 800; color: var(--text-primary); line-height: 1.1; } .su-stat-label { font-size: 12.5px; color: var(--text-muted); font-weight: 500; } .su-stat-sub { font-size: 11.5px; color: var(--text-muted); margin-top: 2px; } /* ---- CHARTS GRID ---- */ .su-charts-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 16px; margin-bottom: 20px; } @media (max-width: 800px) { .su-charts-grid { grid-template-columns: 1fr; } } .su-chart-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; padding: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .su-chart-title { font-size: 14px; font-weight: 700; color: var(--text-primary); margin-bottom: 16px; } .su-chart-subtitle { font-size: 11.5px; color: var(--text-muted); font-weight: 400; margin-left: 8px; } /* ---- TODAY MINI STATS ---- */ .su-today-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 20px; } @media (max-width: 600px) { .su-today-row { grid-template-columns: 1fr; } } .su-today-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; padding: 14px 18px; display: flex; align-items: center; gap: 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.04); } .su-today-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; } /* ---- SECTION HEADER ---- */ .su-section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; } .su-section-title { font-size: 15px; font-weight: 700; color: var(--text-primary); } /* ---- TABLE STYLES ---- */ .su-table-wrap { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; overflow: hidden; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .su-table-head { padding: 14px 18px; border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; } .custom-table th { background: #f7f8fa; font-size: 11.5px; text-transform: uppercase; letter-spacing: 0.04em; } /* ---- BADGE ---- */ .badge-gemini { background: rgba(49, 162, 76, 0.1); color: var(--success-green); border: 1px solid rgba(49,162,76,0.2); } .badge-openai { background: rgba(99, 102, 241, 0.1); color: var(--web-indigo); border: 1px solid rgba(99,102,241,0.2); } {% endblock %} {% block workspace %}
{{ total_messages }}
Total Messages
+{{ total_today }} today
{{ companies|length }}
Tenant Companies
{{ gemini_count }} Gemini · {{ openai_count }} OpenAI
{{ total_escalations }}
Total Escalations
Require agent attention
{{ total_leads }}
Captured Leads
From public landing page
{{ today_bot }}
Bot Replies Today
{{ today_visitor }}
Visitor Messages Today
{{ today_agent }}
Agent Replies Today
Daily Message Traffic Last 14 days
Today's Sender Mix
Bot ({{ today_bot }})
Visitor ({{ today_visitor }})
Agent ({{ today_agent }})
Messages per Company Top 8 all time
Escalations Trend Last 14 days
Google Gemini Models
{% if gemini_models %}
{% for model in gemini_models %}
{{ model.display_name }}
{{ model.model_name }}
GEMINI
{% endfor %}
{% else %}
No Gemini models configured.
{% endif %}
OpenAI Models
{% if openai_models %}
{% for model in openai_models %}
{{ model.display_name }}
{{ model.model_name }}
OPENAI
{% endfor %}
{% else %}
No OpenAI models configured.
{% endif %}
Tenant Chatbots + New
{% if companies %}
{% for company in companies %} {% endfor %}
Company Chatbot Provider Model API Key Admin Created Actions
{{ company.name }} {{ company.chatbot_name }} {% if company.ai_provider == 'gemini' %} Gemini {% else %} OpenAI {% endif %} {{ company.model_name }} {% if company.api_key %} ✓ Set {% else %} Not set {% endif %} {% if company.users.count %} {{ company.users.count }} user(s) {% else %} No admin {% endif %} {{ company.created_at|date:"M d, Y" }}
Test Edit
{% csrf_token %}
{% else %}
📋
No Tenant Companies

Get started by creating your first chatbot client.

Create Company
{% endif %}
Captured Leads {{ total_leads }} total
{% if leads %}
{% for lead in leads %} {% endfor %}
Name Phone Page URL Submitted Action
{{ lead.name }} {{ lead.phone }} {% if lead.page_url %} {{ lead.page_url|truncatechars:40 }} {% else %} {% endif %} {{ lead.created_at|date:"M d, Y h:i A" }}
{% csrf_token %}
{% else %}
No leads captured yet. They will appear here when visitors submit the lead form.
{% endif %}
{% endblock %}