{"id":19071806,"url":"https://github.com/yunsii/cf-worker-status-page-pro","last_synced_at":"2025-04-28T15:51:11.638Z","repository":{"id":227181807,"uuid":"769585734","full_name":"yunsii/cf-worker-status-page-pro","owner":"yunsii","description":"Monitor your websites, showcase status including daily history, and get notification whenever your website status changes. Using Cloudflare Workers, CRON Triggers, and KV storage.","archived":false,"fork":false,"pushed_at":"2024-11-13T06:27:13.000Z","size":310,"stargazers_count":31,"open_issues_count":3,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-18T18:32:43.785Z","etag":null,"topics":["cloudflare-workers","cloudflare-workers-cron","cloudflare-workers-kv","discord","eslint","iconify","monitoring","slack-notifications","status-page","tailwindcss","telegram-notification","typescript","vike","wrangler"],"latest_commit_sha":null,"homepage":"https://cf-worker-status-page-pro-production.yunsii.workers.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yunsii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-09T13:52:06.000Z","updated_at":"2025-04-11T07:59:24.000Z","dependencies_parsed_at":"2024-06-08T01:38:31.860Z","dependency_job_id":"460ea37c-a2bf-49ce-8313-39b4e265536f","html_url":"https://github.com/yunsii/cf-worker-status-page-pro","commit_stats":null,"previous_names":["yunsii/cf-worker-status-page-pro"],"tags_count":0,"template":true,"template_full_name":"yunsii/starter-vike-cloudflare-react-worker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunsii%2Fcf-worker-status-page-pro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunsii%2Fcf-worker-status-page-pro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunsii%2Fcf-worker-status-page-pro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunsii%2Fcf-worker-status-page-pro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yunsii","download_url":"https://codeload.github.com/yunsii/cf-worker-status-page-pro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251342700,"owners_count":21574242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare-workers","cloudflare-workers-cron","cloudflare-workers-kv","discord","eslint","iconify","monitoring","slack-notifications","status-page","tailwindcss","telegram-notification","typescript","vike","wrangler"],"created_at":"2024-11-09T01:31:13.395Z","updated_at":"2025-04-28T15:51:11.612Z","avatar_url":"https://github.com/yunsii.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloudflare Worker - Status Page Pro\n\n[![](https://dcbadge.vercel.app/api/server/gE39mt6WXd)](https://discord.gg/gE39mt6WXd)\n\nMonitor your websites, showcase status including daily history, and get Slack notification whenever your website status changes. Using **Cloudflare Workers**, **CRON Triggers,** and **KV storage**. Check [my status page](https://cf-worker-status-page-pro-production.yunsii.workers.dev/) out! 🚀\n\n## Features\n\n- 🦄 Written in TypeScript\n- ✨ Support [remote csv monitors](#remote-csv-monitors)\n- 🚀 No limit for max monitors of cron task, even with workers KV free tier\n- 🪁 [Auto GC](./src/worker/_helpers/store.ts#L77) for KV value size\n- 💎 More DX/UX detail you want\n\n## Pre-requisites\n\nYou'll need a [Cloudflare Workers account](https://dash.cloudflare.com/sign-up/workers) with\n\n- A workers domain set up\n- The Workers Bundled subscription \\($5/mo\\)\n  - [It works with Workers Free!](https://blog.cloudflare.com/workers-kv-free-tier/) Check [more info](#workers-kv-free-tier) on how to run on Workers Free.\n- Some websites/APIs to watch 🙂\n\nAlso, prepare the following secrets\n\n- Cloudflare API token with `Edit Cloudflare Workers` permissions\n- Slack incoming webhook \\(optional\\)\n- Discord incoming webhook \\(optional\\)\n\n## Getting started\n\nYou can use GitHub Actions to deploy on your own.\n\n1. You should use this template to create a new repository\n2. Navigate to your new **GitHub repository \u003e Settings \u003e Secrets and variables \u003e Actions** and add the following secrets:\n\n   ```yaml\n   - Name: CLOUDFLARE_API_TOKEN\n\n   - Name: SECRET_SLACK_WEBHOOK_URL (optional)\n   - Value: your-slack-webhook-url\n\n   - Name: SECRET_DISCORD_WEBHOOK_URL (optional)\n   - Value: your-discord-webhook-url\n   ```\n\n3. Edit [config.ts](./src/config.ts) to adjust configuration and list all of your websites/APIs you want to monitor\n\n4. Push to `master` branch to trigger the deployment\n5. 🎉\n6. _\\(optional\\)_ Go to [Cloudflare Workers settings](https://dash.cloudflare.com/?to=/workers) and assign custom domain/route\n7. _\\(optional\\)_ Edit [wrangler.toml](./wrangler.toml) to adjust Worker settings or CRON Trigger schedule, especially if you are on [Workers Free plan](#workers-kv-free-tier)\n\n## Workers KV free tier\n\nThe Workers Free plan includes limited KV usage, but the quota is sufficient for 2-minute checks only\n\n- Change the CRON trigger to 2 minutes interval (`crons = [\"*/2 * * * *\"]`) in [wrangler.toml](./wrangler.toml)\n\n## Known issues\n\n- **KV replication lag** - You might get Slack notification instantly, however it may take couple of more seconds to see the change on your status page as [Cron Triggers are usually running on underutilized quiet hours machines](https://blog.cloudflare.com/introducing-cron-triggers-for-cloudflare-workers/#how-are-you-able-to-offer-this-feature-at-no-additional-cost).\n\n- **Initial delay (no data)** - It takes couple of minutes to schedule and run CRON Triggers for the first time\n\n## Running project locally\n\n**Requirements**\n\n- Pnpm (`npm i -g pnpm`)\n\n### Steps to get server up and running\n\n**Install dependencies**\n\n```\npnpm i\n```\n\n**Login With Wrangler to Cloudflare**\n\n```\nnpx wrangler login\n```\n\n**Create your KV namespace in cloudflare**\n\n```\nOn the workers page navigate to KV, and create a namespace\n```\n\n**Update your wrangler.toml with**\n\n```\nkv-namespaces = [{binding=\"KV_STORE\", id=\"\u003cKV_ID\u003e\", preview_id=\"\u003cKV_ID\u003e\"}]\n```\n\n_Note: you may need to change `kv-namespaces` to `kv_namespaces`_\n\n**Run**\n\n```\npnpm run dev\n```\n\n## Remote CSV Monitors\n\nYou can use remote CSV monitors like [this template](https://docs.google.com/spreadsheets/d/1eNhgeS0ElQGFeaVLNJwFWI8JW-Ppv158necdqASJ6TY/edit?usp=sharing). You can get the URL by **File \u003e Share \u003e Publish to web** and select specific sheet and Comma-separated values (.csv).\n\n## Credits\n\n- [eidam/cf-workers-status-page](https://github.com/eidam/cf-workers-status-page)\n- [Vike](https://vike.dev/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyunsii%2Fcf-worker-status-page-pro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyunsii%2Fcf-worker-status-page-pro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyunsii%2Fcf-worker-status-page-pro/lists"}