coming soon: errors that fix themselves

ping

get pinged the moment anything matters.

subscribe to start getting pinged

scroll

01 — integrate

your error endpoint

json body

try it

bash # send a test error
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"deploy failed","description":"exit code 1","content":"stack trace..."}'

in your code

javascript // catch block, CI, cron — anywhere
try {
  await deploy();
} catch (err) {
  await fetch("https://ping.worklyn.com/api/YOUR_ID/errors", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      title: "deploy failed",
      description: err.message,
      content: err.stack
    })
  });
}

your event endpoint

json body — title + body shape the push, anything else rides along

try it

bash # send a test event
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"new signup 🎉","body":"Thabo just joined","email":"thabo@acme.co","plan":"pro"}'

in your code

javascript // a signup, a sale, a finished job — anywhere
await fetch("https://ping.worklyn.com/api/YOUR_ID/events", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    title: "new signup 🎉",
    body: user.name + " just joined",
    email: user.email  // any extra fields you want
  })
});
Integrate ping error monitoring into this codebase. Endpoint: POST https://ping.worklyn.com/api/YOUR_CHANNEL_ID/errors Body: { "title": string, "description": string, "content": string } Steps: 1. Detect the primary language and framework in this project. 2. Add a global error handler using the language's native catch-all mechanism: Node: process.on('uncaughtException') + process.on('unhandledRejection') Python: sys.excepthook Go: recover() in a deferred function Rust: panic::set_hook Web frameworks: error middleware (Express, Django, Rails, etc.) Browser JS: window.addEventListener('error') + window.addEventListener('unhandledrejection') 3. In that handler, POST to the endpoint above with: title = error name or type description = error message content = full stack trace 4. Do NOT remove or replace existing error handling — this runs alongside it. 5. The POST must be fire-and-forget. Do not let it throw or block. Use a no-await fetch, background task, or language equivalent. 6. If a global handler already exists, add the POST inside it. Do not create a second one. 7. Keep the change minimal — one file if possible, no new dependencies.
view errors

02 — what it does

one endpoint

You get a unique URL. POST a JSON body — a title and whatever else you want to know. That's your entire integration.

one push notification

When something hits your endpoint, your phone buzzes. Tap it — you're looking at the full payload, every field you sent.

errors or anything

Started as error monitoring. Now ping anything worth knowing — a signup, a sale, a finished job, a new message. Errors get a stack trace; events get a free-form body.

two files

The entire product is a Deno server and a service worker. No database migrations. No Redis. No infra. Just the thing.

You'll need PagerDuty eventually.

Today, you need ping.

One endpoint.

One push notification.

Two files.

That's the whole product.