{% extends "base.html" %} {% block title %}Edit {{ dashboard.name if dashboard else 'Dashboard' }} - Analytics{% endblock %} {% block head %} {% endblock %} {% block content %}
Dashboards
+ description
Preview
Stat
Number + trend
Comparison
vs period
Line
Trend
Bar
Compare
Donut
Distribution
Area
Volume
Table
Rows & cols
Pivot
Cross-tab
Top-N
Ranked list
Funnel
Stage drop-off
Text
Markdown
Map
Geospatial
{% for q in queries %}
{{ q.name }}
{{ q.source_name }}
{% endfor %} {% if not queries %}

No saved queries yet

Create one
{% endif %}
Running...
{% if variables %} {% for v in variables %}
${{ v.name }}
{{ v.var_type }}
{% if v.default_value %}
{{ v.default_value }}
{% endif %}
{% endfor %} {% else %}

No variables defined.

{% endif %}
{% for w in widgets %}
{{ w.widget_type }}
{{ w.col_span }}×{{ w.row_span }} {% if w.tab_id %}[tab]{% endif %}
{% endfor %}
Drag a widget here, or click any widget in the panel
Nothing selected
Click a widget on the canvas to configure it
Data Source
Query
Widget Type
Assign to Tab
Accent Color
Size
Options
Show border
Compact mode
Refresh
Widget ID
Click select Del remove ⌘S save
● unsaved changes ● saved

Dashboard Settings

When on, anyone with the dashboard URL can view it (no login). Edit access stays restricted.

When set, the viewer auto-refreshes all widgets on this cadence. Shown as a "Live · Ns" badge in the header.

{% if tabs %} {% for tab in tabs %}
{{ tab.name }}
{% endfor %} {% else %}

No tabs created yet.

{% endif %}
{% if schedules %} {% for s in schedules %}
{{ s.query_name }}
{{ s.cron_expr }}
{% endfor %} {% else %}

No schedules configured.

{% endif %}

Generate shareable links for this dashboard.

Generate embed tokens for iframe embedding. Supports row-level security (RLS).

New Embed Token

{% endblock %} {% block scripts %} {% endblock %}