LogSure

Feedback and bug reports

Reports that explain themselves.

Feedback with a rating and bug reports with steps, screenshots and your own fields, from any app, in your own forms.

A bug report in the console: steps to reproduce, the expected result, a team note, and details such as the version, browser and device.

The context comes with it.

The page it was sent from, the version, browser, system, device and country arrive with every report, so nobody has to ask.

  • Steps to reproduce and the expected result
  • Up to three attachments: images, text or JSON
  • The type of a file is read from its bytes, never its name
The Mac app: a bug report beside the inbox, with the sender, page, browser, system, device and the steps it came with.

Your fields, not ours.

Add fields to bug reports, feedback or messages per app: text, choices, numbers, dates, checkboxes or JSON, optional or required.

Your own fields
Settings for a sample app's bug report form: three fields, a plan choice, a workspace text field and a required platform choice.

Built for the public.

The forms take requests from anyone on the internet, so they are built to keep spam out.

  • A honeypot field bots fill and people never see
  • Cloudflare Turnstile, when you set a secret
  • Rate limits and daily caps per app
  • A spam status that deletes after 30 days

The form definition, to render a form from

const { fields } = await logsure.form('bug');
// [{ key: 'plan', label: 'Plan', type: 'select',
//    options: ['Free', 'Pro', 'Team'] }, …]

await logsure.bug({
  title, description,
  fields: { plan: 'Pro', platform: 'macOS' },
  website: '',          // the honeypot, left empty
});

How it works.

Add the script

The tracker gives the page window.logsure with a function for each kind of request.

<script defer data-app="acme-notes"
  src="/_care/script.js"></script>

Send from your form

Each call resolves to the answer, or rejects with the reason.

await logsure.feedback({
  message: 'Love the new editor',
  rating: 5,
  email: '[email protected]',
});

Or from anywhere

Native apps and back-ends post the same JSON with the app's server key.

curl -X POST https://logsure.example.com/_care/bug \
  -H "authorization: Bearer $LOGSURE_KEY" \
  -H 'content-type: application/json' \
  -d '{"app":"acme-notes","title":"…",
       "description":"…"}'