{"id":23126334,"url":"https://github.com/mrcfps/refly-status","last_synced_at":"2025-04-04T05:23:08.563Z","repository":{"id":268413314,"uuid":"904213590","full_name":"mrcfps/refly-status","owner":"mrcfps","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-16T15:43:11.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-09T16:42:50.896Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/mrcfps.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}},"created_at":"2024-12-16T13:11:43.000Z","updated_at":"2024-12-16T15:43:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"9174fe38-f95f-423b-a06d-37994d6b20eb","html_url":"https://github.com/mrcfps/refly-status","commit_stats":null,"previous_names":["mrcfps/refly-status"],"tags_count":0,"template":false,"template_full_name":"yunsii/cf-worker-status-page-pro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrcfps%2Frefly-status","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrcfps%2Frefly-status/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrcfps%2Frefly-status/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrcfps%2Frefly-status/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrcfps","download_url":"https://codeload.github.com/mrcfps/refly-status/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247124635,"owners_count":20887530,"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":[],"created_at":"2024-12-17T08:29:30.941Z","updated_at":"2025-04-04T05:23:08.557Z","avatar_url":"https://github.com/mrcfps.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%2Fmrcfps%2Frefly-status","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrcfps%2Frefly-status","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrcfps%2Frefly-status/lists"}