Skip to content

feat(landing): add CtaSection and analytics previews#30

Merged
rafia9005 merged 19 commits into
mainfrom
dev
Jun 22, 2026
Merged

feat(landing): add CtaSection and analytics previews#30
rafia9005 merged 19 commits into
mainfrom
dev

Conversation

@rafia9005

@rafia9005 rafia9005 commented Jun 22, 2026

Copy link
Copy Markdown
Member

This pull request merges the landing page updates, specifically the new CtaSection component and the analytics preview images, from dev into main.

Summary by CodeRabbit

Release Notes

  • New Features

    • API tokens for programmatic access and automation
    • System backup and restore functionality for configuration management
    • SSL certificate monitoring with expiration tracking
    • Team collaboration with role-based access control
    • Third-party integrations via webhooks
    • Notification delivery logs and history
    • Uptime analytics and performance reports
    • Monitor organization with tags and labels
  • Documentation

    • Complete API reference and OpenAPI 3.0 specification

rafia9005 and others added 19 commits June 18, 2026 10:49
- Add GetSubscribers endpoint to subscriber handler (admin, auth)
- Create Pinia store, composable, and view for subscriber management
- Status page selector + search + unsubscribe in table view

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New ssl_monitors Go module with TLS dial cert checking
- Entity: SSLCert with expiry tracking and status badges
- Frontend page: cert table with expiring-soon alerts
- Check now / check all endpoints for manual triggers

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New api_tokens Go module with SHA256 token hashing
- Generate pu_ prefixed tokens, return raw token once
- Token list view with copy-once dialog and revoke
- Admin sees all tokens, users manage own

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New tags Go module with Tag + MonitorTag entities (many2many)
- CRUD endpoints + attach/detach to monitors
- Tag color presets with visual swatch picker
- Reusable tag-badge component for inline display

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New NotificationLog entity in notifications module
- Hook logging into notification sending (future senders)
- GET /notification-logs endpoint with channel/status/date filters
- Frontend: log table with channel icons, status badges, search

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New GET /analytics/report endpoint with from/to query params
- Frontend: date range picker, monitor filter, stats cards
- Export CSV/JSON download buttons

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New teams Go module: Team + TeamMember entities
- Full CRUD teams, invite/accept/reject members
- Role management (admin/member) with status tracking
- Frontend: team list cards, member table, invite dialog

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New integrations Go module: Slack, Discord, Webhook, GitHub, PagerDuty
- CRUD + test integration (sends test payload via webhook)
- Frontend: card-based layout with type icons, connect dialog
- Enable/disable toggle and delete with confirmation

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- New backup Go module: export all data (9 tables) as JSON
- Import with validation (version check, transactional restore)
- File download via Content-Disposition header
- Frontend: export/download buttons, drag-drop file upload
- Backup history tracking and record management

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Register 7 new modules in main.go (ssl, api_tokens, tags, teams, integrations, backup)
- Restructure sidebar into 5 groups: Monitoring, Status & Reports,
  Alerts & Incidents, Notifications, Administration (19 menu items total)
- Add all new routes with admin protection where needed

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Change heartbeat_token from string to *string so NULL not empty string
  avoids UNIQUE constraint violation for non-heartbeat monitors
- Fix monitor_response DTO to match *string type
- Fix monitors.ts frontend type to allow null
- Fix NotificationLogs view: XCircle -> X (icon not in lucide-vue)

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
…orts

- reka-ui SelectItem rejects empty string value
- Change to sentinel ('all-channels', 'all-status', 'all')
- Update filter logic to skip filtering on sentinel

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Add SQL migration to cleanup existing heartbeat_token empty strings → NULL
- Add fallback refetch in StatusPages create dialog when monitors list empty
- Prevents 'No monitors available' when user has monitors

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
… scroll handling

- Fix AppNavbar anchor navigation to detect current route before
  scrolling — when on a non-landing page (e.g. /contributing), navigate
  to the landing page with the hash first instead of trying to find
  non-existent DOM elements
- Add scroll-to-hash handler in LandingPage onMount so that navigating
  from another page with a hash (e.g. /#hero) smoothly scrolls to the
  target section after the page renders
- Add scrollBehavior to vue-router to automatically scroll to top on
  every page navigation, handle hash-based scrolling, and restore
  scroll position on browser back/forward
feat(landing): improve navigation between pages with hash routing and…
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3ef50fdc-0612-4147-b533-9439cd3f62b4

📥 Commits

Reviewing files that changed from the base of the PR and between dee74c6 and ff0335f.

⛔ Files ignored due to path filters (2)
  • landing/public/analytics_preview_dark.png is excluded by !**/*.png
  • landing/public/analytics_preview_light.png is excluded by !**/*.png
📒 Files selected for processing (99)
  • docs/api-reference.md
  • docs/openapi.yaml
  • landing/src/components/AppFooter.vue
  • landing/src/components/AppNavbar.vue
  • landing/src/components/BenefitsSection.vue
  • landing/src/components/ContactSection.vue
  • landing/src/components/CtaSection.vue
  • landing/src/components/FeaturesSection.vue
  • landing/src/components/HeroSection.vue
  • landing/src/components/ServicesSection.vue
  • landing/src/components/TeamSection.vue
  • landing/src/components/TestimonialsSection.vue
  • landing/src/router/index.ts
  • landing/src/views/LandingPage.vue
  • main.go
  • modules/analytics/handler/analytics_handler.go
  • modules/api_tokens/domain/entity/api_token.go
  • modules/api_tokens/domain/repository/api_token_repository.go
  • modules/api_tokens/domain/repository/api_token_repository_impl.go
  • modules/api_tokens/domain/service/api_token_service.go
  • modules/api_tokens/dto/request/api_token_request.go
  • modules/api_tokens/dto/response/api_token_response.go
  • modules/api_tokens/handler/api_token_handler.go
  • modules/api_tokens/module.go
  • modules/backup/domain/entity/backup_record.go
  • modules/backup/domain/repository/backup_repository.go
  • modules/backup/domain/repository/backup_repository_impl.go
  • modules/backup/domain/service/backup_service.go
  • modules/backup/handler/backup_handler.go
  • modules/backup/module.go
  • modules/integrations/domain/entity/integration.go
  • modules/integrations/domain/repository/integration_repository.go
  • modules/integrations/domain/repository/integration_repository_impl.go
  • modules/integrations/domain/service/integration_service.go
  • modules/integrations/dto/request/integration_request.go
  • modules/integrations/dto/response/integration_response.go
  • modules/integrations/handler/integration_handler.go
  • modules/integrations/module.go
  • modules/monitors/domain/entity/monitor.go
  • modules/monitors/dto/response/monitor_response.go
  • modules/monitors/module.go
  • modules/notifications/domain/entity/notification_log.go
  • modules/notifications/domain/repository/notification_log_repository.go
  • modules/notifications/domain/repository/notification_log_repository_impl.go
  • modules/notifications/handler/notification_log_handler.go
  • modules/notifications/module.go
  • modules/ssl_monitors/domain/entity/ssl_cert.go
  • modules/ssl_monitors/domain/repository/ssl_repository.go
  • modules/ssl_monitors/domain/repository/ssl_repository_impl.go
  • modules/ssl_monitors/domain/service/ssl_service.go
  • modules/ssl_monitors/handler/ssl_handler.go
  • modules/ssl_monitors/module.go
  • modules/subscribers/handler/subscriber_handler.go
  • modules/tags/domain/entity/monitor_tag.go
  • modules/tags/domain/entity/tag.go
  • modules/tags/domain/repository/tag_repository.go
  • modules/tags/domain/repository/tag_repository_impl.go
  • modules/tags/domain/service/tag_service.go
  • modules/tags/handler/tag_handler.go
  • modules/tags/module.go
  • modules/teams/domain/entity/team.go
  • modules/teams/domain/entity/team_member.go
  • modules/teams/domain/repository/team_repository.go
  • modules/teams/domain/repository/team_repository_impl.go
  • modules/teams/domain/service/team_service.go
  • modules/teams/dto/request/team_request.go
  • modules/teams/dto/response/team_response.go
  • modules/teams/handler/team_handler.go
  • modules/teams/module.go
  • web/src/components/tag-badge.vue
  • web/src/composables/useApiTokens.ts
  • web/src/composables/useBackup.ts
  • web/src/composables/useIntegrations.ts
  • web/src/composables/useNotificationLogs.ts
  • web/src/composables/useSslMonitors.ts
  • web/src/composables/useSubscribers.ts
  • web/src/composables/useTags.ts
  • web/src/composables/useTeams.ts
  • web/src/content/sidebar.ts
  • web/src/router/index.ts
  • web/src/stores/apiTokens.ts
  • web/src/stores/backup.ts
  • web/src/stores/integrations.ts
  • web/src/stores/monitors.ts
  • web/src/stores/notificationLogs.ts
  • web/src/stores/sslMonitors.ts
  • web/src/stores/subscribers.ts
  • web/src/stores/tags.ts
  • web/src/stores/teams.ts
  • web/src/views/App.ApiTokens.vue
  • web/src/views/App.Backup.vue
  • web/src/views/App.Integrations.vue
  • web/src/views/App.NotificationLogs.vue
  • web/src/views/App.Reports.vue
  • web/src/views/App.SSLMonitors.vue
  • web/src/views/App.StatusPages.vue
  • web/src/views/App.Subscribers.vue
  • web/src/views/App.Tags.vue
  • web/src/views/App.Teams.vue

📝 Walkthrough

Walkthrough

This PR adds new backend modules and admin pages for API tokens, SSL monitoring, tags, integrations, backups, teams, reports, and subscribers, publishes full API documentation, updates related routing and migrations, and refreshes the landing page navigation, hero, footer, and marketing sections.

Changes

Platform API and admin surface

Layer / File(s) Summary
Published API reference
docs/api-reference.md, docs/openapi.yaml
Adds a full API reference and OpenAPI 3.0.3 specification covering the existing and newly added REST and SSE endpoints, security schemes, and schemas.
App registration and admin shell
main.go, web/src/router/index.ts, web/src/content/sidebar.ts, web/src/views/App.StatusPages.vue
Registers new backend modules, adds admin app routes and sidebar entries for the new pages, and loads monitors before opening the status page editor dialog.
Reporting and status support
modules/analytics/..., modules/subscribers/..., modules/monitors/..., web/src/stores/subscribers.ts, web/src/composables/useSubscribers.ts, web/src/views/App.Subscribers.vue, web/src/views/App.Reports.vue, web/src/stores/monitors.ts
Adds analytics report and subscriber listing endpoints, makes heartbeat tokens nullable with migration cleanup, and adds reports and subscribers views in the web app.
API token management
modules/api_tokens/..., web/src/stores/apiTokens.ts, web/src/composables/useApiTokens.ts, web/src/views/App.ApiTokens.vue
Introduces API token storage, service logic, authenticated routes, and a web UI for listing, creating, showing, and revoking tokens.
SSL monitor checks
modules/ssl_monitors/..., web/src/stores/sslMonitors.ts, web/src/composables/useSslMonitors.ts, web/src/views/App.SSLMonitors.vue
Adds SSL certificate persistence and check endpoints, including single-monitor, bulk, expiring, and delete flows, plus a matching web management page.
Tags and monitor labels
modules/tags/..., web/src/components/tag-badge.vue, web/src/stores/tags.ts, web/src/composables/useTags.ts, web/src/views/App.Tags.vue
Adds tag CRUD and monitor-tag association endpoints, module wiring, tag store/composable support, and a tags management page.
Integrations and notification history
modules/integrations/..., modules/notifications/..., web/src/stores/integrations.ts, web/src/composables/useIntegrations.ts, web/src/views/App.Integrations.vue, web/src/stores/notificationLogs.ts, web/src/composables/useNotificationLogs.ts, web/src/views/App.NotificationLogs.vue
Adds integrations CRUD and test routes, notification log persistence and listing routes, and corresponding web pages for integrations and notification history.
Backup import export
modules/backup/..., web/src/stores/backup.ts, web/src/composables/useBackup.ts, web/src/views/App.Backup.vue
Adds backup export, import, download, and history endpoints with admin routes, and a web page for running backups and managing history records.
Teams and membership
modules/teams/..., web/src/stores/teams.ts, web/src/composables/useTeams.ts, web/src/views/App.Teams.vue
Adds team and team-member entities, invitation and membership handlers, admin and member actions, and a web page for team and member management.

Landing page refresh

Layer / File(s) Summary
Anchor navigation and scroll state
landing/src/components/AppNavbar.vue, landing/src/router/index.ts, landing/src/views/LandingPage.vue
Replaces navbar scroll handling with observers and adds smooth hash navigation across landing-page routes.
Hero, CTA, and footer
landing/src/components/HeroSection.vue, landing/src/components/CtaSection.vue, landing/src/components/AppFooter.vue
Updates hero copy and visuals, adds a CTA section, and refines footer branding and social link layout.
Marketing section content refresh
landing/src/components/BenefitsSection.vue, landing/src/components/ContactSection.vue, landing/src/components/FeaturesSection.vue, landing/src/components/ServicesSection.vue, landing/src/components/TeamSection.vue, landing/src/components/TestimonialsSection.vue
Reworks several landing sections with revised copy, simplified headers, and updated card or list layouts.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • terarush/ping-uptime#28: Also touches monitor heartbeat handling and SSL-monitoring-related backend paths.
  • terarush/ping-uptime#29: Updates the same landing-page hash navigation flow in AppNavbar.vue, the landing router, and LandingPage.vue.

Poem

🐇 I hopped through routes both old and new,
With tokens, tags, and SSL in view.
Teams now gather, backups sleep,
Reports and logs their ledgers keep.
On the landing page I softly spring—
fresh dots, smooth scrolls, and a brighter ping.

✨ 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 dev

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.

@rafia9005 rafia9005 merged commit 14731cc into main Jun 22, 2026
2 of 3 checks passed
@rafia9005 rafia9005 deployed to production June 22, 2026 09:19 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants