Skip to content

feat(frontend): add status page, changelog tabs, book demo CTA, and footer status badge#130

Merged
omsherikar merged 1 commit intomainfrom
feat/status-page-changelog-tabs-book-demo
Mar 31, 2026
Merged

feat(frontend): add status page, changelog tabs, book demo CTA, and footer status badge#130
omsherikar merged 1 commit intomainfrom
feat/status-page-changelog-tabs-book-demo

Conversation

@omsherikar
Copy link
Copy Markdown
Collaborator

@omsherikar omsherikar commented Mar 31, 2026

  • Add /status page fetching real data from Betterstack via backend proxy
  • Add Web App tab to /changelog with real git history compiled into 7 versions
  • Add Book a Demo CTA to hero section and enterprise pricing card
  • Add live status badge to footer (fallbacks to status.refactron.dev if API unreachable)
  • Add /status route to App.tsx without PageLayout wrapper
  • Add Status link to footer Company section

Summary by CodeRabbit

  • New Features
    • Added a dedicated Status page displaying real-time system health, service uptime metrics, incident tracking, and historical incident logs.
    • Changelog now features separate tabs to view Web App and CLI Package release history independently.
    • Added a live system status badge in the footer with auto-refresh every 60 seconds.
    • Updated call-to-action links to "Book a Demo" across the site.

…ooter status badge

- Add /status page fetching real data from Betterstack via backend proxy
- Add Web App tab to /changelog with real git history compiled into 7 versions
- Add Book a Demo CTA to hero section and enterprise pricing card
- Add live status badge to footer (fallbacks to status.refactron.dev if API unreachable)
- Add /status route to App.tsx without PageLayout wrapper
- Add Status link to footer Company section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 31, 2026 13:12
@github-actions
Copy link
Copy Markdown

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 1a16012.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

Scanned Files

None

@github-actions github-actions bot added type:refactor Code refactoring type:feature New feature labels Mar 31, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 31, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR introduces a new system status page with live API status tracking and auto-refresh, splits the changelog into web and CLI versions with a tabbed UI, adds a status badge to the footer, and updates demo CTAs across the site to point to a calendar booking system instead of static links.

Changes

Cohort / File(s) Summary
Routing & Status Display
src/App.tsx, src/components/StatusPage.tsx
Added /status route and new StatusPage component that fetches live system status from API with 60-second auto-refresh, displays overall status banner, incidents list, service uptime charts (90-day visualization), and incident history.
Changelog Data & Tabbed UI
src/components/Changelog.tsx, src/data/webChangelog.ts
Introduced new web changelog dataset and added tab switcher to Changelog component allowing users to toggle between "Web App" and "CLI Package" changelog entries with animated transitions.
Footer Enhancement
src/components/Footer.tsx
Added StatusBadge component that fetches /api/status endpoint with error fallback, displays real-time operational status with pulse animation, integrated badge into footer layout, added /status link under Company section, and updated Discord social URL.
Demo CTA Updates
src/components/HeroSection.tsx, src/components/PricingSection.tsx
Changed secondary CTA in hero from "Read Docs" to "Book a Demo" with updated link to calendar booking URL; updated Enterprise pricing tier CTA from mailto to calendar booking in a new browser tab.

Sequence Diagram

sequenceDiagram
    participant User
    participant App as App/StatusPage
    participant API as Backend API
    participant UI as UI Components

    User->>App: Navigate to /status
    App->>API: GET /api/status (initial load)
    API-->>App: Return {data: {overall, services, incidents}}
    App->>UI: Render status banner, services list, incidents
    UI-->>User: Display live status page
    
    par Auto-refresh loop
        Note over App: Every 60 seconds
        App->>API: GET /api/status
        API-->>App: Updated status data
        App->>UI: Update with fresh data & timestamps
        UI-->>User: Display updated status
    end
    
    User->>User: View incident details
    App->>UI: Toggle incident expand/collapse
    UI-->>User: Show/hide incident timestamps & duration
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~70 minutes

Possibly related PRs

Suggested labels

type:feature

Poem

🐰 A status badge hops into view, ✨
With calendars and changelogs split in two,
The footer gleams with a real-time glow,
As services dance and incidents show—
The web now tracks what's up and through!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.22% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately summarizes the main changes: adding a status page, changelog tabs with web app data, book demo CTAs, and a footer status badge.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/status-page-changelog-tabs-book-demo

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 31, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
refactron Ready Ready Preview, Comment Mar 31, 2026 1:13pm

@github-actions
Copy link
Copy Markdown

👋 Thanks for opening this pull request! A maintainer will review it soon. Please make sure all CI checks pass.

@omsherikar omsherikar merged commit bf688f0 into main Mar 31, 2026
15 of 17 checks passed
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a public status surface and enhances marketing/navigation CTAs by introducing a /status page (fed via backend proxy), adding a Web App tab to the /changelog, and updating primary CTAs plus the footer with a live status badge and link.

Changes:

  • Introduce /status page UI that polls /api/status and renders services + incident history.
  • Add Web App vs CLI tabs on /changelog with a new webChangelog dataset.
  • Update “Book a Demo” CTAs and add footer status link + live status badge with external fallback.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/data/webChangelog.ts Adds static Web App changelog entries used by the new changelog tab.
src/components/StatusPage.tsx Implements the new /status page UI, polling logic, and incident/service rendering.
src/components/Changelog.tsx Adds tab switching between web and CLI changelog datasets.
src/components/PricingSection.tsx Updates Enterprise CTA to open a demo booking link.
src/components/HeroSection.tsx Changes secondary hero CTA from docs to “Book a Demo”.
src/components/Footer.tsx Adds “Status” link and a live status badge (with fallback URL).
src/App.tsx Registers the /status route without the PageLayout wrapper.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +393 to +396
const overall: Overall | 'checking' = loading
? 'checking'
: (data?.overall ?? 'operational');
const banner = BANNER_CFG[overall];
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

overall is derived from loading only, which causes two user-facing inconsistencies: (1) every auto-refresh sets loading=true and flips the banner to the “Checking…” state even when previous data exists (visual flicker), and (2) if the initial fetch fails (error=true and data=null), the banner falls back to “operational” while the error message says the API is unreachable. Consider separating “refreshing” from “initial load”, and compute overall to reflect error/missing data (e.g., keep last known data.overall during refresh; show an explicit unknown/outage state when error && !data).

Copilot uses AI. Check for mistakes.
Comment on lines +499 to +500
{ label: 'Avg 90-day uptime', value: `${avgUptime}%` },
{
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When data is null, avgUptime is set to '—', but the stats strip always renders it as ${avgUptime}%, producing a UI value like —%. It would be clearer to only append % when you have numeric uptime data (or keep avgUptime numeric and format at render time).

Suggested change
{ label: 'Avg 90-day uptime', value: `${avgUptime}%` },
{
{
label: 'Avg 90-day uptime',
value: data ? `${avgUptime}%` : '—',
},
{

Copilot uses AI. Check for mistakes.
const [loading, setLoading] = useState(true);
const [error, setError] = useState(false);
const [secondsAgo, setSecondsAgo] = useState(0);
const timerRef = useRef<NodeJS.Timeout | null>(null);
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The interval ref is typed as NodeJS.Timeout, which is a Node type and can be awkward/inaccurate in a browser React app (and inconsistent with other components here that use window.setInterval). Prefer ReturnType<typeof setInterval> (or number with window.setInterval) to avoid type mismatches across TS lib/type configurations.

Suggested change
const timerRef = useRef<NodeJS.Timeout | null>(null);
const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);

Copilot uses AI. Check for mistakes.
Comment on lines +31 to +39
useEffect(() => {
const apiBase = getApiBaseUrl();
fetch(`${apiBase}/api/status`)
.then(r => r.json())
.then(json => setStatus(json?.data?.overall ?? 'operational'))
.catch(() => {
setStatus('operational');
setHref(FALLBACK_URL);
});
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

StatusBadge treats any response as success (no r.ok check) and on fetch failure it sets status to 'operational'. Both cases can incorrectly display “All systems operational.” when the status API is unreachable or returning an error. Consider checking r.ok and, on error, rendering a distinct state/label (e.g. “Status unavailable”) while still linking to the external fallback URL.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:feature New feature type:refactor Code refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants