You described the app, the agent built it, you shipped it. Somewhere in that generated codebase there is a try/catch around every API route, an error tracker catching crashes, maybe even a log line in every handler. Crashes will page you. That part is handled.
The bug that gets you is the one with no stack trace: the thing that simply stops happening.
Four ways your app dies without an error
The welcome email. You redeploy and reorganize your environment variables. The SMTP key does not come along. Your email helper was built the responsible way, fire-and-forget, never throws, never blocks a signup. So it fails silently, exactly as designed. Signups keep landing. Welcome emails stop. Eleven days later a user mentions they never got one, and you realize nobody has.
The Stripe webhook. You move to a custom domain. The old webhook URL now answers with a redirect, and Stripe does not follow redirects for webhooks. It retries for a while, then gives up. Checkouts complete on Stripe's side. Plans never activate on yours. Your alert channel for this outage is a support ticket from a paying customer.
The cron. Your cleanup job runs nightly on a free-tier service that idles when traffic stops. At 2 AM there is no traffic, so there is no service, so there is no job. Nothing throws, because nothing runs. The database bloats for a month before anything visibly breaks.
The agent. Your AI workflow calls an external tool. The provider has an incident. The run awaits a response that never comes, forever. No exception, no timeout event, no crash report. The queue behind it grows in silence.
Count the stack traces in those four stories: zero. Your error tracker is watching for exceptions, and there are none, because in every case the code never executed. From outside, an app that is frozen looks exactly like an app that is fine.
Step one: give your app a heartbeat
You cannot detect the absence of something you never recorded the presence of. So first, log real server events: every signup, every payment, every cron completion, every agent run, every failure path.
If an agent built your app, an agent can wire this too. The logs.so install is one prompt. Paste it into Cursor, Lovable, Bolt, or v0 and it maps what your app actually does, then instruments the moments that matter, catch blocks included. Each event is one HTTP call with a channel, a title, and tags. The docs fit on one page, no SDK required.
Now you have a live feed, and the feed alone is worth it. Payment lands, phone buzzes. This is the part you may already know from LogSnag. It stays free on logs.so: unlimited events, 7-day history, no card, no trial clock.
Step two: silence detection watches the rhythm
Here is the part the feed alone cannot do. Once events flow, every channel has a rhythm. Signups arrive hourly. Checkouts every 15 minutes. The digest cron logs once a night. An agent run completes every few minutes.
Silence detection watches that rhythm and pages you the moment a channel that should have moved, didn't. The welcome-email channel goes 3 hours without an event that arrives every 20 minutes: page. The nightly cron misses its window: page. The payments channel flatlines on a Friday evening: page, on Friday evening, not Monday.
The page reads like this: emails went quiet. No welcome-email for 3 hours. Expected one every 20 minutes. That sentence is the difference between an 11-day silent outage and an 11-minute one.
The quiet math
Silence detection and full history are Pro, $19/mo. Self-serve, cancel anytime. One caught webhook outage pays for years of it.
You vibe-coded the app in an afternoon. Give it a nervous system in the next five minutes: start free, paste the prompt, watch your first events land. Then let something watch for the events that stop.
Related: Your LogSnag feed looks fine. Production still died.
silence, server-side
Get paged when a channel that should have moved, didn't.
Free: unlimited events, 7-day history, no card. Pro is $19/mo for silence detection.