Install & Setup
This guide will walk you through setting up your Shadow Status page from scratch.
Step 1: Get the Repository
- Fork (Recommended)
- Use as Template
- Clone Locally
Forking is the easiest way to get started and allows you to receive updates.
- Go to the Shadow Status repository
- Click the Fork button in the top right
- Select your account or organization
- Wait for the fork to complete
Using as a template creates a fresh repository without the commit history.
- Go to the Shadow Status repository
- Click Use this template > Create a new repository
- Name your repository (e.g.,
statusormy-status-page) - Choose public or private visibility
- Click Create repository
For local development and manual deployment.
git clone https://github.com/Shadow-Develops/ShadowStatus.git my-status-page
cd my-status-page
npm install
Step 2: Configure GitHub Secrets
Your status page needs a GitHub token to fetch issues (for incidents) and commit status updates.
Create a Personal Access Token
- Go to GitHub Settings > Developer settings > Personal access tokens > Tokens (classic)
- Click Generate new token > Generate new token (classic)
- Give it a descriptive name (e.g., "Shadow Status")
- Set expiration (or "No expiration" for convenience)
- Select these scopes:
repo(Full control of private repositories) — or justpublic_repoif your repo is public
- Click Generate token
- Copy the token immediately — you won't see it again!
Add the Secret to Your Repository
- Go to your forked/created repository
- Navigate to Settings > Secrets and variables > Actions
- Click New repository secret
- Name:
GIT_TOKEN - Value: Paste your personal access token
- Click Add secret
You can also add these optional secrets for notifications:
DISCORD_WEBHOOK— For Discord notifications (How to create a webhook)WEBHOOK_URL— For generic webhook notifications
Step 3: Configure Your Status Page
You'll need to edit two main configuration files:
config.json
This file controls your site's appearance and behavior. At minimum, update:
{
"domain": "https://your-username.github.io/your-repo-name",
"siteSettings": {
"siteName": "Your Status Page",
"siteDescription": "Service status for Your Company"
},
"github": {
"owner": "your-username",
"repo": "your-repo-name"
}
}
See the Configuration guide for all available options.
monitors.json
This file defines what services to monitor. Here's a simple example:
{
"groups": [
{
"name": "Web Services",
"defaultOpen": true,
"monitors": [
{
"name": "Main Website",
"type": "http",
"target": "https://example.com",
"expectedStatus": [200]
},
{
"name": "API",
"type": "http",
"target": "https://api.example.com/health",
"expectedStatus": [200]
}
]
}
],
"monitors": []
}
See the Monitors guide for all monitor types and options.
Step 4: Enable GitHub Pages
- Go to your repository's Settings
- Navigate to Pages in the sidebar
- Under "Build and deployment":
- Source: Select "Deploy from a branch"
- Branch: Select
gh-pagesand/ (root)
- Click Save
The gh-pages branch is created automatically when the deploy workflow runs for the first time.
Step 5: Enable GitHub Actions
If Actions aren't already enabled:
- Go to your repository's Actions tab
- If prompted, click I understand my workflows, go ahead and enable them
- The workflows should now be active
Trigger the First Build
The monitor checks run automatically every 30 minutes by default, but you can trigger them manually:
- Go to Actions > Monitor Checks
- Click Run workflow > Run workflow
Similarly, trigger the deploy:
- Go to Actions > Deploy
- Click Run workflow > Run workflow
Step 6: View Your Status Page
After the workflows complete, your status page will be available at:
https://your-username.github.io/your-repo-name/
To use a custom domain:
- Add a
CNAMEfile tostatic/with your domain (e.g.,status.example.com) - Configure your DNS with a CNAME record pointing to
your-username.github.io - Update the
domainfield inconfig.json
Step 7: Set Up 5-Minute Monitoring (Recommended)
By default, the GitHub Actions workflow runs every 30 minutes. This is because GitHub Actions scheduled workflows can be delayed during high load periods, making shorter intervals unreliable.
For more frequent monitoring, use a free external cron service like cron-job.org to trigger the workflow via GitHub's API.
Create a Fine-Grained Access Token
- Go to GitHub Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Click Generate new token
- Give it a name (e.g., "Status Page Cron")
- Set Repository access to "Only select repositories" and choose your status page repo
- Under Permissions, expand Repository permissions and set Actions to "Read and write"
- Click Generate token and copy it
Configure cron-job.org
- Create a free account at cron-job.org
- Click Create cronjob and configure:
| Setting | Value |
|---|---|
| Title | Status Page Monitor |
| URL | https://api.github.com/repos/YOUR_USERNAME/YOUR_REPO/actions/workflows/monitor-checks.yml/dispatches |
| Schedule | Every 5 minutes |
| Request Method | POST |
- Go to the Advanced tab and add these Headers:
Authorization: Bearer YOUR_GITHUB_TOKEN
Accept: application/vnd.github+v3+json
Content-Type: application/json
- Set the Request Body:
{ "ref": "main" }
- Click Create to save
The GitHub Actions workflow will continue running every 30 minutes as a fallback in case the external cron service fails.