[Feature Request] Action Widget — clickable buttons that fire HTTP requests
Summary
We're exploring the idea of adding a new Action Widget type to the dashboard grid (alongside the existing Stat Widget) that fires an HTTP request when clicked. This would let teams trigger CI pipelines, re-runs, or external integrations directly from the dashboard — without leaving the page.
We're not sure this belongs in robotframework-dashboard — it might be out of scope, or there might be a better way to achieve this that we haven't thought of. We'd genuinely appreciate your perspective on whether this is worth pursuing, and we're completely open to alternative approaches. If this isn't the right direction for the project, no hard feelings at all.
Simpler alternative (if the full action widget is too heavy or too far from the project's focus): a Custom Links setting that adds user-defined links to the navbar, so teams can at least navigate to external trigger pages or CI dispatch URLs from the dashboard.
Problem
Our team uses robotframework-dashboard as the central place to monitor test results. When we see a failure, the next step is almost always "re-run this suite" or "trigger a smoke test." Today that means:
- Leave the dashboard
- Navigate to GitHub Actions (or Jenkins, or whatever CI)
- Find the right workflow
- Fill in the inputs
- Dispatch
This context switch breaks the flow. The dashboard already knows what failed — it should be able to help us act on it.
We built a standalone HTML page with trigger buttons as a workaround, and honestly that might be the right answer. But we wanted to raise the idea here in case it's something that would benefit the broader community, or in case there's a simpler path we're not seeing.
Proposal: Action Widget
What it is
A new widget type that users can add via Customize View > + Add action widget, similar to how stat widgets work today. Each action widget is:
- A clickable button in the dashboard grid
- Configured with a label, URL, HTTP method, and optional request body (JSON)
- Optionally styled with text color and background color (like stat widgets)
- Draggable and resizable within the GridStack grid
User flow
- Enter Customize View mode
- Click "+ Add action widget" (new tile, next to "Add stat widget")
- Modal appears with fields:
- Label (e.g., "Run Smoke US")
- URL (e.g.,
https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches)
- HTTP Method (dropdown: POST, PUT, PATCH — default POST)
- Request Body (optional JSON textarea, e.g.,
{"ref": "main", "inputs": {"region": "us"}})
- Headers (optional key-value pairs, e.g.,
Authorization: Bearer $token)
- Confirmation (toggle: require a "Are you sure?" dialog before firing — default ON)
- Text Color / Background Color (color pickers, like stat widgets)
- Click Add — widget appears in grid
- Click Save to persist to localStorage
When clicked
- If confirmation is enabled, show a confirm dialog: "Trigger 'Run Smoke US'?"
- Fire the HTTP request
- Show inline feedback:
- Success (2xx): green flash + brief message (e.g., "Triggered successfully")
- Failure (4xx/5xx): red flash + status code + response body snippet
- Widget returns to idle state
Auth token handling
Sensitive tokens should NOT be persisted in localStorage. Two options:
- Option A (recommended): A single "API Token" prompt on the dashboard page (session-only, stored in JS memory, cleared on tab close). All action widgets reference this token via a
{{token}} placeholder in the Headers field.
- Option B: Let users paste tokens directly in the Headers config. Add a warning that these are stored in localStorage (not secure for shared machines).
Storage
Same as stat widgets — persisted in localStorage under the existing settings JSON structure. Example:
{
"actionWidgets": [
{
"id": "aw-1",
"label": "Run Smoke US",
"url": "https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches",
"method": "POST",
"body": "{\"ref\": \"main\", \"inputs\": {\"region\": \"us\"}}",
"headers": {"Authorization": "Bearer {{token}}"},
"confirm": true,
"textColor": "#ffffff",
"bgColor": "#4f8ff7",
"grid": {"x": 0, "y": 10, "w": 4, "h": 1}
}
]
}
CORS consideration
Action widgets fire requests from the browser. Endpoints must allow CORS, or teams can route through a lightweight proxy. This is the same constraint any browser-based tool faces — worth documenting but not a blocker for the feature itself.
Simpler Alternative: Custom Links in Navbar
If the full action widget is too much scope for a first pass, a simpler version would still be valuable:
What it is
A new setting (in the Theme or Defaults tab) that lets users add custom links to the navigation bar.
Configuration
In the Settings modal, a new section:
| Field |
Example |
| Label |
"Trigger Regression" |
| URL |
https://github.com/org/repo/actions/workflows/regression.yml |
| Open in new tab |
Yes (default) |
Users can add multiple links. Links appear as nav items after the existing pages (Overview, Dashboard, Compare, Tables).
Storage
{
"customLinks": [
{"label": "Trigger Regression", "url": "https://...", "newTab": true},
{"label": "Grafana", "url": "https://grafana.example.com/dashboard/tests", "newTab": true}
]
}
Why this is still useful
- Zero security concerns (no HTTP requests, no tokens)
- Tiny implementation surface (navbar already has dynamic items)
- Bridges the dashboard to external tools (CI, monitoring, wikis, trigger pages)
- Could ship as a quick win in a minor release
Use Cases
| Use case |
Widget config |
| Re-run failed smoke test |
POST to GitHub Actions workflow_dispatch with env/region inputs |
| Trigger full regression |
POST to GitHub Actions with test_strategy: regression |
| Notify Slack channel |
POST to Slack webhook URL with a message body |
| Refresh dashboard data |
POST to the dashboard server's own /refresh-dashboard endpoint |
| Clear stale results |
POST to /remove-outputs with tag-based cleanup |
Prior Art
Summary of asks
| Feature |
Scope |
Value |
| Action Widget |
New widget type in GridStack grid |
Trigger CI/webhooks directly from dashboard |
| Custom Links (fallback) |
Navbar config |
Navigate to external tools without leaving dashboard |
Happy to help with implementation if the direction is agreed. And if this isn't something that fits the project's vision, we'd welcome any suggestions on the best way to achieve this externally — whether that's a companion page, a wrapper, or something else entirely. Thanks for a great project!
[Feature Request] Action Widget — clickable buttons that fire HTTP requests
Summary
We're exploring the idea of adding a new Action Widget type to the dashboard grid (alongside the existing Stat Widget) that fires an HTTP request when clicked. This would let teams trigger CI pipelines, re-runs, or external integrations directly from the dashboard — without leaving the page.
We're not sure this belongs in robotframework-dashboard — it might be out of scope, or there might be a better way to achieve this that we haven't thought of. We'd genuinely appreciate your perspective on whether this is worth pursuing, and we're completely open to alternative approaches. If this isn't the right direction for the project, no hard feelings at all.
Simpler alternative (if the full action widget is too heavy or too far from the project's focus): a Custom Links setting that adds user-defined links to the navbar, so teams can at least navigate to external trigger pages or CI dispatch URLs from the dashboard.
Problem
Our team uses robotframework-dashboard as the central place to monitor test results. When we see a failure, the next step is almost always "re-run this suite" or "trigger a smoke test." Today that means:
This context switch breaks the flow. The dashboard already knows what failed — it should be able to help us act on it.
We built a standalone HTML page with trigger buttons as a workaround, and honestly that might be the right answer. But we wanted to raise the idea here in case it's something that would benefit the broader community, or in case there's a simpler path we're not seeing.
Proposal: Action Widget
What it is
A new widget type that users can add via Customize View > + Add action widget, similar to how stat widgets work today. Each action widget is:
User flow
https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches){"ref": "main", "inputs": {"region": "us"}})Authorization: Bearer $token)When clicked
Auth token handling
Sensitive tokens should NOT be persisted in localStorage. Two options:
{{token}}placeholder in the Headers field.Storage
Same as stat widgets — persisted in localStorage under the existing settings JSON structure. Example:
{ "actionWidgets": [ { "id": "aw-1", "label": "Run Smoke US", "url": "https://api.github.com/repos/org/repo/actions/workflows/smoke.yml/dispatches", "method": "POST", "body": "{\"ref\": \"main\", \"inputs\": {\"region\": \"us\"}}", "headers": {"Authorization": "Bearer {{token}}"}, "confirm": true, "textColor": "#ffffff", "bgColor": "#4f8ff7", "grid": {"x": 0, "y": 10, "w": 4, "h": 1} } ] }CORS consideration
Action widgets fire requests from the browser. Endpoints must allow CORS, or teams can route through a lightweight proxy. This is the same constraint any browser-based tool faces — worth documenting but not a blocker for the feature itself.
Simpler Alternative: Custom Links in Navbar
If the full action widget is too much scope for a first pass, a simpler version would still be valuable:
What it is
A new setting (in the Theme or Defaults tab) that lets users add custom links to the navigation bar.
Configuration
In the Settings modal, a new section:
https://github.com/org/repo/actions/workflows/regression.ymlUsers can add multiple links. Links appear as nav items after the existing pages (Overview, Dashboard, Compare, Tables).
Storage
{ "customLinks": [ {"label": "Trigger Regression", "url": "https://...", "newTab": true}, {"label": "Grafana", "url": "https://grafana.example.com/dashboard/tests", "newTab": true} ] }Why this is still useful
Use Cases
workflow_dispatchwith env/region inputstest_strategy: regression/refresh-dashboardendpoint/remove-outputswith tag-based cleanupPrior Art
Summary of asks
Happy to help with implementation if the direction is agreed. And if this isn't something that fits the project's vision, we'd welcome any suggestions on the best way to achieve this externally — whether that's a companion page, a wrapper, or something else entirely. Thanks for a great project!