Sends desktop notifications behind a gesture-gated requestPermission() that never throws, keeps the permission state live via the Permissions API, registers each notification by tag so close(tag) works, and skips notifications while the page is visible.
npx shadcn@latest add @zyeon/use-notificationZyeon UI limits how often it can be asked, and useNotification hasn't had its turn. Its source will show here once it has.