Product
An issue page built for reading an error, not for browsing a dashboard.
The list is a feed of grouped errors. The detail page is one issue and one event: the stack, the release, the trace, and what happened just before it.
Issue list
Each row is one grouped error: title, the file it came from, a short volume chart, event count, users, and when it was last seen. Filter by project, status, or text.
Issue detail
- Header with level, short id, event count, and user count.
- Volume for 1 hour, 24 hours, 7 days, 14 days, or 30 days, with release marks on the chart.
- Highlights for release, environment, URL, browser, and user.
- Stack with application frames open and library frames collapsed.
- Breadcrumbs leading up to the event.
- A short trace waterfall when the event carries a trace id.
- Request, tags, and runtime context.
- Sidebar with first seen, last seen, the releases, the assignee, the Jira link, and the activity log.
Install
A project is JavaScript or PHP. Both post to the same /api/<key>/store. Grouping, the issue page, and the Jira rule do not care which client sent the event.
Browser
A public key and a script tag. The script reports uncaught errors and unhandled promise rejections, and keeps recent clicks as breadcrumbs. Call TraceHawk.captureException for an error you already caught, and set a release, a user, and tags. The key is visible in the page, so set allowed origins before production. async keeps a dead host from blocking the page.
<script async src="https://tracehawk.net/api/<key>/snippet.js" crossorigin="anonymous"></script>
PHP
tracehawk/sdk reads TRACEHAWK_DSN itself. Laravel needs one call in bootstrap/app.php. Symfony needs one line in config/bundles.php. A try/catch you already handled does not reach either hook, so call TraceHawk::capture($e) there yourself. If TraceHawk is down, the call gives up in under half a second.
composer config repositories.tracehawk composer https://tracehawk.net/sdk composer require tracehawk/sdk:1.0.0
TRACEHAWK_DSN=https://tracehawk.net/api/<key>
# bootstrap/app.php
use TraceHawk\Sdk\Laravel\Integration;
->withExceptions(function (Exceptions $exceptions) {
Integration::handles($exceptions);
})
# config/bundles.php TraceHawk\Sdk\Symfony\TraceHawkBundle::class => ['all' => true],
What is not on the page
Session replay, profiles, and an AI write-up are not part of the product. The page stays on the error, the version, and the ticket.