vendor-status-watch / template.html
APProjects's picture
site refresh (2752 changed, 0 removed)
7fb8ee6 verified
Raw History Blame Contribute Delete
9.62 kB
<!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://approjects-vendor-status-watch.static.hf.space; form-action 'self' https://app.gumroad.com https://gumroad.com; base-uri 'self'; object-src 'none'">
<meta name="referrer" content="strict-origin-when-cross-origin">
<title>Free GitHub Actions template — SaaS outage alerts in Slack, Discord or Teams</title><meta name="description" content="Set up free SaaS outage alerts in four minutes: an MIT GitHub Action that polls 804 vendors&#x27; public status pages and posts incidents to your own Slack, Discord or Teams webhook. No account, no telemetry.">
<link rel="canonical" href="https://approjects-vendor-status-watch.static.hf.space/template.html"><link rel="alternate" type="application/rss+xml" title="All vendor incidents" href="https://approjects-vendor-status-watch.static.hf.space/feed.xml">
<meta property="og:title" content="Free GitHub Actions template — SaaS outage alerts in Slack, Discord or Teams"><meta property="og:type" content="website">
<style>:root{--bg:#fbfbf8;--ink:#14213d;--muted:#5b6478;--line:#e3e5ea;--card:#fff;--accent:#d9480f;--accent-ink:#fff;
--ok:#1f8a4c;--warn:#c98a00;--bad:#c8102e;--unk:#8a8f9c;--maxw:1040px}
@media (max-width:640px){.capture input[type=email],.capture button.btn{flex:1 1 100%}h1{font-size:30px}h2{font-size:22px}section{padding:40px 0}.dv-kpi b{font-size:28px}header.top nav{margin-left:0}}</style><link rel="stylesheet" href="https://approjects-vendor-status-watch.static.hf.space/site.css"></head><body>
<header class="top"><div class="in"><a class="brand" href="https://approjects-vendor-status-watch.static.hf.space/"><svg width="26" height="26" viewBox="0 0 26 26" aria-hidden="true"><circle cx="13" cy="13" r="12" fill="#d9480f"/><path d="M5 14 l4 0 l2 -6 l3 12 l3 -9 l2 3 l3 0" fill="none" stroke="#fff" stroke-width="2.4" stroke-linejoin="round" stroke-linecap="round"/></svg> Vendor Status Watch</a><nav><a href="/board.html">Live board</a><a href="/vendors.html">Vendors</a><a href="/template.html">Free template</a><a href="/#hosted">Pricing</a><a href="/outage-duration.html">Outage length</a><a href="/platforms.html">Coverage</a><a href="/api.html">API</a></nav></div></header>
<main>
<section id="template"><h1>Free: SaaS outage alerts from your own GitHub Actions</h1>
<p class="lead">If you already have a workflow, add the action and you are done. Your vendors, your webhook secret, your runner — nothing leaves your repository except the POST to your own channel.</p>
<pre>- uses: APVentureEngine/vendor-status-watch-action@v1
with:
vendors: github,openai,cloudflare,stripe
webhook-url: ${{ secrets.WEBHOOK_URL }}</pre>
<div class="cta"><a class="btn" href="https://github.com/APVentureEngine/vendor-status-watch-action">Get the action</a><a class="btn ghost" href="/vendors.html">Find your vendors' slugs</a></div>
<div class="card" id="verified"><h3>Does it actually work? We check every day.</h3>
<p class="small">Anyone can publish a broken action. So each build downloads <code>APVentureEngine/vendor-status-watch-action@v1</code>
from the public tag — the same bytes you get — and runs its self-test: poll real vendor status
feeds through the live map, deliver a real webhook payload, confirm a second run stays quiet
instead of re-alerting, and confirm dry-run posts nothing. Last run <b>2026-09-24T12:29:22Z</b>.</p>
<pre>schema: PASS (name/description/branding/inputs wired, no ${{ }} in run bodies)
polled 2 vendors via remote map: github=ok, cloudflare=degraded
watching GitHub: now watching — currently ok
watching Cloudflare: now watching — currently degraded, 3 open incident(s) already listed (not re-alerted)
webhook json -&gt; http 200 ok
live e2e: PASS (1 payload(s), state at .vendor-status-watch/state.json, 2 vendor(s) baselined)
idempotence: PASS (second run with the same state posted nothing)
dry-run: PASS (fresh state, nothing posted)
ALL PASS</pre>
<p class="small muted">Reproduce it yourself in about a minute — no account, no key:</p>
<pre>git clone --branch v1 https://github.com/APVentureEngine/vendor-status-watch-action
cd vendor-status-watch-action &amp;&amp; python3 selftest_action.py</pre>
<p class="small muted">If that check ever fails, this box disappears rather than telling you it passed.
Note for the curious: our own GitHub organisation cannot run Actions minutes, which is why you see
no build badge here. That limit is ours and it does not touch you — the action runs on
<em>your</em> runner, in <em>your</em> repository, which is exactly what the test above exercises.</p></div>
<h2 style="margin-top:40px">Or start from the template repo</h2>
<p>No workflow yet? Click <b>Use this template</b>, list your vendors in one JSON file, add one repository secret (your webhook URL), and copy the workflow file the README points you to — four minutes, and the README walks through every click. GitHub then runs it every 5 minutes on their free tier (~2,000 Actions minutes a month on free plans; a 5-minute schedule uses roughly a third of that). The poller reads our daily-refreshed vendor map at run time, so when a vendor moves from Statuspage to Instatus next quarter your alerts keep working without you touching anything.</p>
<pre>{
"vendors": ["twilio", "github", "cloudflare", "openai", "vercel"],
"format": "auto",
"map_url": "https://raw.githubusercontent.com/APVentureEngine/vendor-status-watch/main/vendors.json",
"unreachable_after": 3,
"mute_maintenance": false
}</pre>
<p class="small muted">The webhook URL never goes in the file: it lives in a repository secret named <code>WEBHOOK_URL</code>.</p>
<p>Events you receive: <b>now watching</b> (once, with any already-open incidents listed but not re-alerted), <b>opened</b>, <b>updated</b>, <b>resolved</b>, <b>unreachable</b> (the vendor's feed stopped answering — you are told, instead of silently seeing green), <b>recovered</b>. Slack Block Kit, Discord embeds, Teams Adaptive Cards and plain JSON are auto-detected from the webhook host.</p>
<figure style="margin:22px 0"><div class="card" style="max-width:560px;background:#fff"><div class="small muted" style="margin-bottom:10px">#alerts · vendor-status-watch APP</div><div style="border-left:3px solid var(--ok);padding:8px 0 8px 12px;margin:0 0 14px"><div style="font-weight:700">🟢 Crypto.com — RESOLVED</div><div class="small">Monoova banking option unavailable for AUD deposits/withdraws</div><div class="small muted">This incident has been resolved.</div><div class="small muted">started 2026-09-24 11:16 UTC · status page</div></div><div style="border-left:3px solid var(--warn);padding:8px 0 8px 12px;margin:0 0 14px"><div style="font-weight:700">🟡 ESET — INCIDENT</div><div class="small">[ESET Business Account, ESET MSP Administrator, ESET PROTECT Hub] planned maintenance</div><div class="small muted">Scheduled maintenance is currently in progress. We will provide updates as necessary.</div><div class="small muted">started 2026-09-24 10:58 UTC · status page</div></div><div style="border-left:3px solid var(--warn);padding:8px 0 8px 12px;margin:0 0 14px"><div style="font-weight:700">🟡 IONOS — INCIDENT</div><div class="small">Störungsmeldung für Webhosting</div><div class="small muted">Wir haben es geschafft, die Einschränkungen zu minimieren.</div><div class="small muted">started 2026-09-24 10:39 UTC · status page</div></div></div><figcaption>What lands in your Slack — rendered from the 3 newest real incidents in the feed (Discord and Teams get native embeds/cards; anything else gets plain JSON).</figcaption></figure>
<div class="cta"><a class="btn" href="https://github.com/APVentureEngine/vendor-status-watch-template">Use the template on GitHub</a><a class="btn ghost" href="/vendors.html">Find your vendors' slugs</a></div>
<div class="note small">Honest limits: 323 of the 1,127 mapped vendors publish no machine-readable status (Apple, Microsoft 365 and Okta among them — bespoke HTML pages; AWS, Azure, Google Cloud, Slack and Stripe ARE covered, by hand-written parsers over their own public feeds). The template tells you on its first run which of your picks are unsupported; we do not fake an OK for them. Coverage by platform is on the <a href="/platforms.html">coverage page</a>.</div>
<p class="small muted" style="margin-top:28px">Would rather not run it? <a href="/#hosted">We host the same watcher for $49 / 12 months</a> — no repo, no YAML, nothing to install.</p>
</section>
</main>
<footer><div class="in"><p>Run by APVentureEngine, an automated open-source project; not affiliated with any vendor named here. <a href="https://github.com/APVentureEngine/vendor-status-watch">Source &amp; template (MIT)</a> · <a href="https://github.com/APVentureEngine/vendor-status-watch/issues">Contact / report a wrong entry</a> · <a href="/feed.xml">RSS</a> · <a href="/api.html">JSON API</a> · <a href="https://huggingface.co/datasets/APProjects/saas-vendor-status-pages-outages-incidents-daily">Dataset (CSV, CC-BY-4.0)</a> · <a href="/legal.html">Privacy &amp; terms</a> · Data as of 2026-09-24T12:28:39Z</p></div></footer>
<img src="https://cdn.jsdelivr.net/gh/APVentureEngine/vendor-status-watch@main/docs/assets/px/site/template.png" alt="" width="1" height="1" style="position:absolute;left:-9999px" aria-hidden="true"></body></html>