Skip to content

prateeks007/PulseWatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

54 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PulseWatch

πŸš€ Use the hosted version (no setup required):

Free uptime & status monitoring. Sign up β†’ Add your first site β†’ Get alerts.

How it works:

  1. Sign up - Create your free account
  2. Add websites - Monitor your sites and APIs
  3. Get alerts - Discord notifications when sites go down

Or self-host using the instructions below.


PulseWatch is a professional-grade website uptime and health monitoring platform built with Go and React. Monitor multiple websites, track performance metrics, and get instant alerts when issues occur. Features a stunning dashboard and public status pages that rival industry leaders like GitHub Status and Vercel Status.

πŸš€ Features

Core Monitoring

  • βœ… HTTP/HTTPS uptime monitoring - Real-time website health checks
  • ⏰ Configurable intervals - Custom check frequency per website
  • πŸ“Š Response time tracking - Monitor performance trends
  • πŸ”’ SSL certificate monitoring - Track certificate expiry dates
  • πŸ“ˆ Uptime statistics - 24h and 7-day uptime percentages

Alerting & Notifications

  • 🚨 Discord alerts - Instant notifications when sites go up/down
  • πŸ›‘οΈ Smart alerting - Only alerts on status changes (no spam)
  • πŸ“± Real-time updates - Live dashboard updates every 10 seconds

Dashboard & UI

  • πŸ“ Modern React dashboard - Beautiful, responsive admin interface
  • πŸŒ™ Dark/light themes - Automatic theme switching with user preference
  • πŸ“Š Interactive charts - Response time graphs and uptime analytics
  • πŸ” Search & filtering - Find websites quickly with advanced filters
  • πŸ“± Mobile responsive - Works perfectly on all devices

Authentication & Security

  • πŸ” JWT authentication - Secure user sessions with Supabase
  • πŸ‘₯ Multi-user support - Each user sees only their websites
  • πŸ›‘οΈ Protected admin APIs - JWT validation on all admin endpoints
  • 🌐 Public status pages - No authentication required for status viewing
  • πŸ”’ User data isolation - Complete separation between user accounts

Public Status Pages

  • 🌐 Professional status pages - Public-facing status like GitHub/Vercel
  • 🎨 Stunning animations - 3D effects, gradients, and smooth transitions
  • πŸ“Š Service history - Click any service to see detailed 24h history
  • πŸ”„ Auto-refresh - Real-time updates every 30 seconds
  • 🎯 No authentication required - Perfect for sharing with customers

Architecture & Deployment

  • πŸ“¦ MongoDB Atlas integration - Scalable cloud database storage
  • πŸ”„ Cron-based execution - Reliable background monitoring
  • πŸ’‘ Pluggable storage - Easily extend to other databases
  • πŸš€ Production ready - Deployed on Render with auto-scaling
  • πŸ”§ Keep-alive system - Prevents free tier spin-downs

πŸ“¦ Requirements

  • Go 1.18+ - Backend API and monitoring service
  • Node.js 16+ - Frontend React application
  • MongoDB Atlas - Cloud database (Free tier supported)
  • Supabase - Authentication service (Free tier supported)
  • Discord Webhook - For notifications (Optional)

πŸ› οΈ Setup & Run

1. Clone the Repo

git clone https://github.com/prateeks007/PulseWatch.git
cd PulseWatch

2. Setup MongoDB Atlas

  • Create a free cluster: https://cloud.mongodb.com
  • Add a user and whitelist your IP (or use 0.0.0.0/0 for development)
  • Copy your connection string:
mongodb+srv://<user>:<pass>@cluster0.mongodb.net/?retryWrites=true&w=majority

3. Setup Supabase Authentication

  • Create a free project: https://supabase.com
  • Go to Settings β†’ API to get your keys
  • Copy the Project URL and anon public key

4. Environment Configuration

Create a .env file in the root directory:

# MongoDB Configuration
MONGO_URI="your-mongodb-connection-string"
MONGO_DB_NAME="pulsewatch_db_local"  # Use different names for local/prod

# Supabase Authentication
SUPABASE_URL="https://your-project.supabase.co"
SUPABASE_JWT_SECRET="your-jwt-secret-from-supabase-settings"

# Discord Notifications (Optional)
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/your-webhook-url"

Create monitor/frontend/.env.local for frontend:

VITE_API_BASE_URL="http://localhost:3000"
VITE_SUPABASE_URL="https://your-project.supabase.co"
VITE_SUPABASE_ANON_KEY="your-anon-public-key"

5. Setup and Run the Backend

# Install Go dependencies
go mod tidy

# Run the backend server
go run ./monitor/backend

This starts:

  • πŸ”„ Cron scheduler - Monitors websites every minute
  • 🌐 API server - REST API on http://localhost:3000
  • πŸ’“ Keep-alive service - Prevents deployment spin-downs
  • πŸ”’ SSL monitoring - Daily certificate checks

6. Setup and Run the Frontend

# Navigate to frontend directory
cd monitor/frontend

# Install dependencies
npm install

# Start development server
npm run dev

This opens:

  • πŸ“Š Admin Dashboard - http://localhost:5173/dashboard
  • 🌐 Public Status Page - http://localhost:5173/status

🧩 Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   React Frontend    β”‚    β”‚    Go Backend API    β”‚    β”‚   External Services β”‚
β”‚                     β”‚    β”‚                      β”‚    β”‚                     β”‚
β”‚ β€’ Admin Dashboard   │◄──►│ β€’ Fiber REST API     │◄──►│ β€’ MongoDB Atlas     β”‚
β”‚ β€’ Public Status     β”‚    β”‚ β€’ JWT Validation     β”‚    β”‚ β€’ Supabase Auth     β”‚
β”‚ β€’ Authentication    β”‚    β”‚ β€’ Cron Scheduler     β”‚    β”‚ β€’ Discord Webhooks  β”‚
β”‚ β€’ Real-time Updates β”‚    β”‚ β€’ Monitor Service    β”‚    β”‚ β€’ SSL Certificates  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Multi-User Data Flow

1. User authenticates β†’ Supabase returns JWT token
2. Frontend sends JWT with API requests β†’ Go backend
3. Backend validates JWT β†’ Extracts user_id
4. Database queries filtered by user_id β†’ MongoDB Atlas
5. User sees only their websites and data

Environment Separation

Local Development:  MongoDB "pulsewatch_db_local"  + Supabase Cloud Auth
Production:         MongoDB "pulsewatch_db_prod"   + Supabase Cloud Auth
                    (Same auth, separate data)

🎯 Current Status & Roadmap

βœ… Completed Features

  • Web dashboard with charts βœ… DONE
  • Alerting: Discord βœ… DONE
  • SSL certificate monitoring βœ… DONE
  • Public status pages βœ… DONE
  • Dark/light themes βœ… DONE
  • Real-time updates βœ… DONE
  • Data cleanup and retention βœ… DONE
  • Production deployment βœ… DONE
  • User authentication (Supabase integration) βœ… DONE
  • Multi-tenant architecture βœ… DONE

🚧 In Progress

  • Custom status page domains

πŸ“‹ Future Plans

  • Email, Slack, SMS alerts
  • Incident management system
  • API rate limiting
  • Monitoring optimization - Shared monitoring for popular sites to prevent rate limiting
  • Docker + Helm deployment
  • Prometheus + Grafana exporter
  • Mobile app (React Native)
  • Advanced analytics & reporting

🌐 Try PulseWatch Now

πŸš€ Deployment

Frontend (Vercel)

# Build and deploy
npm run build
vercel --prod

Backend (Render)

# Auto-deploys from GitHub
# Set environment variables in Render dashboard

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the project
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors