Asklid
One <script> tag

Your visitors already see the bugs. Now you will too.

Paste one line into your template. A quiet button appears on the page: the visitor clicks it, circles what is broken and writes a single sentence. You get a card with a full-page screenshot, JavaScript errors, failed requests, browser, screen size and the last clicks that led there. After that it is an ordinary board: statuses, assignees, comments, notifications.

  • The whole page, not a photo of the window
  • Console, network and steps collected in advance
  • Board, roles and notifications included

No card. The free plan does not run out.

<script src="https://www.asklid.com/widget.js" data-hub-token="YOUR-TOKEN" defer></script>

That button in the corner is the widget itself. Click it: Asklid collects reports about Asklid the same way it will collect yours.

“Nothing works” is not a bug report

Between the visitor who hit the bug and the developer who has to reproduce it there are usually three emails, a phone photo of a screen and a browser nobody on the team has. Half of those reports die on “cannot reproduce”. Asklid removes the middle: the report is written on the very page that broke, and it takes that page along — together with whatever the console was complaining about at that moment.

Three steps, and none of them are yours

Click a step to see what happens.

Report a bug

The tag is in. A button appeared in the corner — nothing else on the site changed.

A screenshot that shows the page they were on

The frame is not drawn by the visitor’s browser but by our server: the widget sends the page markup and styles, and a real Chrome on our side renders the picture. So the frame holds the whole page, including what was below the fold, and holds it the way the person saw it — fonts, shadows and images included, not a pale copy. The site’s layout never shifts by a pixel: nobody touches the page.

  • The whole page, not the visible part of the window
  • Fonts, shadows, backgrounds and images intact
  • Private details blurred before sending

Markup over the frame

Try it — it works right here.

Console, network and steps — without asking “what were you doing?”

The widget records from the first paint, so by the time the button is clicked everything is already gathered: JavaScript errors and warnings, requests that answered with an error or never answered at all, browser, version, screen size and the visitor’s last actions. Field values and request bodies are never recorded — the widget sits on other people’s sites with other people’s personal data, and that is not a place to take chances.

A full-page screenshot with the visitor’s markup.

The form fits your process, not ours

You decide what can be written about at all: bug, idea, question — you switch on the types you need, and the chosen one changes the hint in the field. Title and email can each be required, optional or hidden entirely: where a report is one sentence, a separate title field only gets in the way, and the card lives perfectly well without one. Up to six screenshots go with a single request, and the picture does not have to be drawn by the widget — it can simply be pasted from the clipboard.

  • Request types: bug, idea, question
  • Title and email — required, optional or hidden
  • Up to six screenshots per request
  • Screenshots pasted from the clipboard, not only drawn

The widget looks like part of your site

The button sits in any of eight spots — four corners and four edge centres — and comes in four shapes: icon only, text only, icon with text, or a narrow tab hugging an edge. Colour, radius, size, offset from the edge, an icon from the set or your own, a light or dark panel, every line of the form — all of it is set in the cabinet, and the preview changes as you go, with nothing to deploy. The widget lives in a shadow root: your styles cannot reach it and its styles cannot reach your layout. Twelve languages ship in the box and the widget picks the one the page is written in; a missing language is translated with one button.

Build the button

Colour
Icon

This is how the button will sit on your site.

This is a small part of it. The cabinet configures the widget in full — there are far more ways to place and dress it.

A board instead of a mail thread

Requests land on a kanban: four columns, drag and drop, assignees, priorities, comments. There is a table for people who think in tables and a feed for people who just read top to bottom — plus a summary page, “Reports”, showing what came in lately and from which projects. Filters are remembered: set them once, come back and find the same view. You can have several projects, each with its own widget and token.

Pick a card up and move it to another column. A finger works too.

New

Cart empties after payment

bug Chrome 141

Menu will not scroll on iPhone

bug iOS 18

In progress

Form rejects a perfectly good phone number

task Firefox 133

In review

Done

Workspaces, team and roles

A workspace is a separate set of projects with its own team: your own work, a client’s, a sandbox. They switch with one move in the menu, and a person’s subscription covers every workspace they own. There are four roles — from “reads” to “owns” — and next to the team you see the people who wrote to you: not members, but the ones whose requests came in from the site.

You can see who wrote it

If the visitor is already signed in to your site, the site can sign their identity with a secret key — and the card shows a name and an email you can trust instead of “anonymous”. The signature is verified on our side and cannot be forged from the page. Nobody signed in? The widget simply asks for an email, and that is fine too.

Notifications where you already sit

A new request goes to Telegram, to email, to your webhook or as a row in a Google Sheet — a separate set per project. A channel can be told to stay quiet about reports whose author it could not identify, so the on-call person is not woken by their own smoke test.

Telegram Email Webhook Google Sheet

API and CLI: an agent reads and closes the requests

Everything the cabinet can do the REST API can do: create, search, edit, move across the board. Keys are issued and revoked in the cabinet, each with its own abilities and its own projects. We run on this ourselves — the Asklid board lives in Asklid, and the same agent that writes the code moves the cards.

curl -H "Authorization: Bearer sk_…" \
  https://www.asklid.com/api/v1/tasks

The API opens on any paid plan. API

And, briefly

  • The widget token only works on your domains — a key lifted off the page buys nothing.
  • The site’s language is detected for you: we walk the sitemap and see what it is written in.
  • Widget texts translate into any language with one button, not line by line by hand.
  • API keys are issued with abilities, an expiry and a project list, and revoked in one click.
  • A channel can be told to stay quiet about your own smoke tests.
  • Reports export as a row into a Google Sheet, for people who count everything in a sheet.
  • The “Powered by” badge comes off on any paid plan.
  • The cabinet speaks Russian and English, and every screen has a dark theme.

One line to install, one button to check

Copy the tag from the cabinet and paste it into your site. Then press “Check”: we open your page with a real browser and tell you whether the widget was found. If it was not, we say where to look for the reason instead of just “error”.

The widget is on the site checked just now

We open your page with a real browser, not a plain request: an app that draws itself with script would look empty otherwise.

Pricing

Start free and see the widget work on your own site. Paid plans grow by projects and people — reports themselves are never rationed.

Trial

Free

1 projects · 2 people

Start

$19 /mo

3 projects · 5 people

Team

$49 /mo

15 projects · 20 people

Agency

$99 /mo

unlimited projects · unlimited people

Before you ask

Will it slow the site down?

The tag loads asynchronously and the core weighs about 15 KB gzipped. The heavy half is pulled in only once a visitor actually clicks the button. Before that click the widget makes no request to us at all.

Will it fight our styles?

No. The widget lives in a shadow root: page styles cannot reach it and its styles cannot reach the page. It does not move your layout during capture either — we do not repaint the page, we send it as it is.

We are a single-page app, everything is drawn by script

That is the point. The widget captures what is in the browser right now — after every render, route change and lazy load. That is exactly why the frame is built from the page markup rather than by fetching your URL: the URL would return an empty shell.

Where does the data go?

Into your workspace here and nowhere else. Field values and request bodies are never collected. The form tells the person plainly what will be sent along with the report, before they press “Send”.

Who can send reports?

Any visitor — that is what the widget is for. If you want only your own people to see the button, render the tag for signed-in users: it is inserted by script as easily as into the template.

Do I have to pay?

No. The free plan gives one workspace, one project, three people and a monthly ceiling on reports; the API stays closed on it. Any paid plan opens the API, takes the badge off the widget and stops counting reports.

Five minutes to the first report

Create a workspace, copy the tag, paste it into your site. Nothing else is needed from you.

Create an account