Documentation Index
Fetch the complete documentation index at: https://docs.getsabo.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
A status page is a dedicated public page that shows the operational status of your services. It’s essential for:- Building trust - Show users you’re transparent about service health
- Reducing support tickets - Users check status before contacting support
- Professional image - Demonstrates operational maturity
- Incident communication - Keep users informed during outages
- Real-time status badge embedded in footer
- Automatic theme matching (light/dark mode)
- Hosted status page at your custom domain (e.g.,
status.yourdomain.com) - Historical uptime data with visual graphs
- Powered by Better Stack - Industry-leading status page provider
Quick Start
Create Better Stack account
- Visit Better Stack
- Create a free account (no credit card required)
- You’ll be redirected to the dashboard
Create your status page
- In Better Stack dashboard, go to Status Pages
- Click Create Status Page
- Configure:
- Name: Your company/product name (e.g., “Acme”)
- Subdomain: Choose a subdomain (e.g.,
acme→acme.betteruptime.com) - Custom domain (optional):
status.yourdomain.com
- Click Create
Add monitors
- Go to Monitors → Add Monitor
- Configure your first monitor:
- Monitor Type: HTTP(S)
- URL: Your main site (e.g.,
https://yourdomain.com) - Name: “Main Website”
- Check Frequency: Every 1 minute (free tier)
- Click Create Monitor
https://demo.yourdomain.com→ “Demo Site”https://docs.yourdomain.com→ “Documentation”https://api.yourdomain.com→ “API”
Get your status badge URL
- Go to Status Pages → Your status page
- Click Settings → Badge
- Copy the badge URL (format:
https://your-subdomain.betteruptime.com/badge)
Update status badge URL in Sabo
src/components/shared/status-badge.tsx and update line 29 with your badge URL:your-subdomain with your actual Better Stack subdomain.Verify integration
- Restart your dev server:
pnpm dev - Visit
http://localhost:3000 - Scroll to footer
- You should see the status badge next to the theme toggle
- Light mode: Badge with light background
- Dark mode: Badge with dark background
- Status text: “All services operational” (or current status)
How It Works
Status Badge Component
Sabo’s status badge is implemented insrc/components/shared/status-badge.tsx:
Key Features
Theme Synchronization
Theme Synchronization
next-themes:useTheme()hook detects current themeresolvedThemereturns “dark” or “light” (handles system preference)- Badge URL includes
?theme=parameter - Better Stack serves appropriate badge design
light- Light background, dark textdark- Dark background, light text
Hydration Mismatch Prevention
Hydration Mismatch Prevention
- Server renders a placeholder
<div>(same dimensions as badge) - Client renders the actual iframe after hydration
- Prevents “Expected server HTML to contain…” errors
- Uses
startTransitionfor smoother rendering
Footer Integration
Footer Integration
iframe Security
iframe Security
- Sandboxed execution: Badge cannot access your site’s cookies or data
- CSP friendly: Content Security Policy compatible
- No JavaScript required: Pure iframe embed
- Automatic updates: Better Stack updates badge without code changes
titleattribute provides screen reader context- Fixed dimensions prevent layout shift
- No scrolling (compact design)
Better Stack Setup
Creating Monitors
Monitors check your services at regular intervals and update status automatically.- Website Monitor
- API Monitor
- Database Monitor
- HTTP response status code
- Response time
- SSL certificate validity
- DNS resolution
Incident Management
When a monitor detects an issue, Better Stack creates an incident automatically. Incident workflow:- Detection: Monitor fails X consecutive checks (configurable)
- Alert: Better Stack sends notifications (email, Slack, PagerDuty, etc.)
- Status page: Incident appears on your status page
- Resolution: Monitor recovers, incident auto-resolves
- Post-mortem: Incident history retained for analysis
- Go to Status Pages → Settings → Incidents
- Configure:
- Which monitors trigger public incidents
- Incident title format
- Automatic status updates
- Resolution messages
Custom Domain Setup
Use your own domain for a professional status page.Add CNAME record
- Cloudflare
- Vercel DNS
- Namecheap
- Dashboard → DNS → Add record
- Type: CNAME
- Name:
status - Target:
status.betteruptime.com - Proxy status: DNS only (orange cloud OFF)
- Save
Configure in Better Stack
- Go to Status Pages → Settings → Domain
- Enter:
status.yourdomain.com - Click Save
- Wait for DNS propagation (up to 24 hours, usually 15 minutes)
Customization
Badge Appearance
Better Stack provides several badge designs:Status Page Branding
Customize your status page’s appearance in Better Stack dashboard: Settings → Branding:- Logo: Upload your company logo (PNG, SVG, max 2MB)
- Favicon: Custom favicon for status page
- Primary color: Brand color (hex code)
- Background: Light/dark mode backgrounds
- Custom CSS: Advanced styling (paid plans)
- Header text: Replace “System Status” with your text
- Footer links: Add links to main site, support, etc.
- About section: Company description
- Contact info: Support email, Twitter handle
Alternative Placements
The status badge can be placed anywhere in your app:Best Practices
1. Monitor critical user paths
1. Monitor critical user paths
- Landing page
- Sign-up/login page
- Dashboard/app
- API endpoints
- Payment processing
- Database connectivity
2. Set appropriate check intervals
2. Set appropriate check intervals
- Critical services (auth, payments): 1 minute
- Main website: 3 minutes
- Documentation: 5 minutes
- Internal tools: 10 minutes
- Free tier has limited checks per month
- More frequent checks = higher costs on paid plans
- Not all services need real-time monitoring
3. Use meaningful monitor names
3. Use meaningful monitor names
- Monitor 1
- Test
- Website
- Main Website (getsabo.com)
- API - Production
- Stripe Webhook Endpoint
- Clear incident messages on status page
- Easier alert triage
- Better analytics and reporting
4. Configure alert thresholds
4. Configure alert thresholds
- Prevents false positives (network blips)
- Confirms actual outages
- Reduces notification noise
5. Communicate during incidents
5. Communicate during incidents
- Update every 15-30 minutes during incidents
- Be specific about what’s affected
- Provide estimated resolution time (if known)
- Apologize and explain after resolution
Troubleshooting
Status badge not appearing
Status badge not appearing
- Incorrect badge URL in
status-badge.tsx - Better Stack status page not created
- Ad blocker blocking iframe
- CSP headers blocking iframe
- Verify URL: Check line 29 in
status-badge.tsxhas correct subdomain - Check Better Stack: Visit your status page URL directly in browser
- Test without ad blocker: Disable uBlock Origin, Privacy Badger, etc.
- Check CSP: If using Content Security Policy, allow Better Stack:
next.config.ts
- Check console: Browser DevTools → Console for iframe errors
Badge shows wrong theme
Badge shows wrong theme
- Missing
?theme=${badgeTheme}parameter - Theme not resolving correctly
- Server-side render mismatch
- Verify parameter: Ensure URL includes
?theme=${badgeTheme} - Check theme hook:
resolvedThemeshould be “dark” or “light” - Test mounting: Badge should show placeholder until
mounted === true - Check
next-themes: EnsureThemeProviderwraps your app inlayout.tsx
Custom domain not working
Custom domain not working
status.yourdomain.com shows DNS error.Causes:- CNAME record not created
- DNS not propagated
- Wrong CNAME target
- Cloudflare proxy enabled (should be DNS only)
-
Verify CNAME: Use DNS Checker to verify:
- Wait for propagation: DNS can take up to 24 hours (usually 15 min)
-
Check target: Must point to
status.betteruptime.comexactly - Disable Cloudflare proxy: Orange cloud should be OFF (gray cloud)
-
Test with dig:
Badge not updating in real-time
Badge not updating in real-time
- Browser cache
- iframe caching
- CDN caching
- Hard refresh: Ctrl+Shift+R (Windows/Linux) or Cmd+Shift+R (Mac)
- Clear iframe cache: Better Stack badges have 60-second cache
- Wait 1-2 minutes: Badge auto-refreshes every 60 seconds
- Check Better Stack: Verify status page shows correct status
Monitors showing false positives
Monitors showing false positives
- Too aggressive timeout (< 10 seconds)
- Checking from single region
- Rate limiting from monitoring checks
- SSL certificate issues
- Firewall blocking Better Stack IPs
- Increase timeout: Set to 30 seconds minimum
- Multi-region checks: Enable in monitor settings
- Whitelist Better Stack: Allow IPs
35.186.224.0/24and35.197.128.0/24 - Check SSL: Ensure certificate is valid and not expired
- Alert threshold: Set to 3 consecutive failures instead of 1
- Test manually: Visit URL from different locations (VPN, mobile network)
Going Further
Integrations
Better Stack integrates with popular tools: Alerting:- Slack - Real-time incident notifications
- Discord - Status updates in your server
- PagerDuty - On-call management
- Microsoft Teams - Enterprise communications
- Webhooks - Custom integrations
- Better Stack → Integrations
- Select your tool
- Authorize connection
- Configure alert rules
Advanced Monitoring
Multi-step checks:- Simulate real user interactions
- Test complete user flows
- Validate complex workflows
- Paid plans only
- Test from 10+ regions worldwide
- Detect regional outages
- Optimize CDN performance
- Available on all plans
Alternative Solutions
If Better Stack doesn’t fit your needs:| Solution | Pros | Cons | Price |
|---|---|---|---|
| Better Stack | Easy setup, generous free tier | Fewer regions on free plan | Free - $29/mo |
| Statuspage.io | Atlassian ecosystem, powerful | Expensive, complex | 699/mo |
| StatusCast | Simple, affordable | Limited features | 99/mo |
| Instatus | Beautiful design, fast | Newer, smaller team | 49/mo |
| Self-hosted | Full control, no cost | Maintenance burden, setup time | Free |
status-badge.tsx.