Introducing Stentorosaur: Status Monitoring Meets Documentation
The Problem: Status Page Infrastructure Sprawl
If you run a SaaS product or developer platform, you need a status page. The standard approach? Subscribe to Statuspage.io ($29-$99/month), spin up a separate domain, configure separate auth, and maintain another deployment pipeline—all to tell users when your actual service is down.
That's a lot of infrastructure to maintain just to communicate outages.
For teams already using Docusaurus for documentation, this creates additional friction:
- Separate hosting: Another domain to configure and renew
- Separate deployments: Another CI/CD pipeline to maintain
- Fragmented UX: Users bounce between docs and status page
- Duplicate theming: Keep two sites visually consistent
The Solution: Status Monitoring Inside Docusaurus
Stentorosaur is a Docusaurus plugin built on Upptime's architecture. It uses GitHub Issues for incident tracking and GitHub Actions for automated health checks—no servers, no databases, no separate subscriptions.
Install the plugin:
npm install @amiable-dev/docusaurus-plugin-stentorosaur
Configure your endpoints in docusaurus.config.js:
module.exports = {
plugins: [
[
'@amiable-dev/docusaurus-plugin-stentorosaur',
{
owner: 'your-org',
repo: 'your-repo',
entities: [
{ name: 'api', type: 'system', displayName: 'API' },
{ name: 'website', type: 'system', displayName: 'Website' },
],
// Uses GitHub token from environment
token: process.env.GITHUB_TOKEN,
// Optional: Configure runtime data fetching (v0.16+)
dataSource: {
strategy: 'github',
owner: 'your-org',
repo: 'your-repo',
},
},
],
],
};
New in v0.16: The
dataSourceoption enables runtime data fetching with four strategies:github(public repos),http(custom APIs/proxies),static(local files), andbuild-only(no runtime fetch). Private repository users can use thehttpstrategy with a server-side proxy. See ADR-001 for details.
Define health check endpoints in .monitorrc.json:
{
"systems": [
{
"system": "api",
"url": "https://api.yoursite.com/health",
"method": "GET",
"expectedCodes": [200],
"timeout": 10000
}
]
}
Your docs site now has a /status route showing:
- System health from automated polling (configurable intervals, typically 5-60 minutes)
- Active incidents pulled from GitHub Issues
- Scheduled maintenance windows
- Historical uptime metrics and response time charts
How It Works
GitHub Actions runs your health checks on a cron schedule. Results are committed as JSON to your repository. When a check fails, the workflow automatically opens a GitHub Issue with labels like status, critical, and system:api. When the system recovers, the issue is auto-closed with a recovery comment.
The Docusaurus plugin reads this committed data at build time and renders the status page. No runtime API calls to GitHub during page loads—just static data generated during your normal build process.
Data flow:
GitHub Actions (cron) → Health checks → JSON committed to repo
↓
Docusaurus build → Static status page
Trade-offs and Limitations
Be aware of the constraints:
- Monitoring frequency: GitHub Actions cron jobs run at minimum 5-minute intervals. This isn't sub-second monitoring.
- GitHub API rate limits: 5,000 requests/hour with authentication. The plugin commits data to avoid hitting limits during builds.
- Action minutes: Public repos get unlimited minutes; private repos use your Actions quota.
- Build latency: Status updates appear after your next site build/deploy, not instantly.
For teams needing sub-minute alerting or complex escalation policies, this isn't a replacement for PagerDuty or Datadog. It's for teams who want a status page without the operational overhead.
Why It Matters
1. Zero Additional Infrastructure No servers. No databases. No separate SaaS subscription. Your status page deploys with your docs.
2. GitHub-Native Workflow
Incidents are GitHub Issues—your team already knows how to create, assign, and close them. Use labels for severity (critical, major, minor) and systems (system:api, system:database).
3. Beyond System Uptime
Track business processes alongside infrastructure. Label an issue as process:checkout when the checkout flow breaks, even if all servers are "up." Your status page shows what users actually care about: "Can I complete my task?"
4. Automated Notifications Configure Slack, Telegram, Email, or Discord alerts. When health checks fail or issues open, your team knows.
Who Should Use It?
- Docusaurus users: If your docs are already on Docusaurus, adding status monitoring is trivial
- Small teams: No budget for Statuspage? Use GitHub (free for public repos)
- Open source projects: Public incident tracking via GitHub Issues
- Internal tools teams: Monitor processes and SLAs, not just servers
What's Next?
Upcoming posts cover:
- Architecture decisions: Why GitHub Issues? Data storage patterns.
- Quick start guide: Full setup walkthrough
- Process monitoring: Tracking business workflows
- Contributing: How to get involved
GitHub Repository | npm Package
Acknowledgments
Stentorosaur builds on Upptime by Anand Chowdhary. Upptime pioneered the GitHub-native, infrastructure-free approach to status monitoring. We've ported those concepts to work inside Docusaurus. If you want a standalone status page (not embedded in docs), use Upptime directly.

