A Laravel-based uptime monitoring application that helps you track website availability and receive instant notifications when your sites go down or recover.
- π HTTP Monitoring - Periodic checks of website availability with configurable intervals
- π§ Email Notifications - Receive detailed alerts via email when status changes
- π± Pushover Integration - Get instant push notifications on your mobile device
- π Uptime Statistics - Track reliability with 24-hour, 7-day, and 30-day uptime percentages
- π Check History - View detailed history of all checks with timestamps, status codes, and response times
- β‘ Background Processing - Asynchronous checks using Laravel queues for optimal performance
- π Controlled Registration - Secure access with optional public registration control
- π¨ Modern UI - Clean, responsive interface built with Tailwind CSS and Alpine.js
- PHP 8.2 or higher
- Composer 2
- Node.js and NPM
- DDEV (for local development)
- MySQL 8.4 or SQLite
-
Clone the repository
git clone <repository-url> uptimer cd uptimer
-
Start DDEV environment
ddev start
-
Run setup
ddev composer run setup
-
Create an admin user
ddev artisan user:create-admin
-
Start development environment
ddev composer run dev
-
Access the application
Open your browser to the URL shown by DDEV (typically
https://kiro-laravel-ddev-skeleton-template.ddev.site)
Comprehensive documentation is available in the documentation directory:
- Setup Guide - Complete installation and configuration instructions
- Usage Guide - How to monitor sites and configure notifications
- Deployment Guide - Production deployment instructions
- Environment Variables - Configuration reference
- Add Monitors - Configure URLs you want to monitor with custom check intervals
- Automatic Checks - Laravel scheduler triggers checks every minute, queuing jobs for each monitor
- Background Processing - Queue workers execute HTTP checks asynchronously
- Status Tracking - Results are stored with timestamps, status codes, and response times
- Smart Notifications - Receive alerts only when status changes (up β down or down β up)
- View Statistics - Dashboard displays current status, uptime percentages, and check history
- Backend: Laravel 12 (PHP 8.4)
- Frontend: Blade templates, Tailwind CSS 4, Alpine.js, Vite 7
- Database: SQLite (default) or MySQL 8.4
- Queue: Database driver (easily migrated to Redis)
- Development: DDEV local environment with nginx-fpm
ddev composer run dev # Start all services (server, queue, logs, vite)
ddev artisan serve # Laravel development server only
ddev npm run dev # Vite dev server onlyddev artisan user:create-admin # Create admin user via CLIddev artisan queue:work --tries=1 # Start queue worker
ddev artisan schedule:run # Run scheduled tasks manually
ddev artisan pail # View real-time logsddev composer run test # Run test suite
ddev artisan test # Run PHPUnit testsddev exec ./vendor/bin/pint # Format code with Laravel PintKey environment variables in .env:
# Public Registration Control
ALLOW_PUBLIC_REGISTRATION=false
# HTTP Check Timeout (seconds)
CHECK_TIMEOUT=30
# Check History Retention (days)
CHECK_RETENTION_DAYS=30
# Email Configuration
MAIL_MAILER=smtp
MAIL_FROM_ADDRESS="[email protected]"
# Pushover Notifications (optional)
PUSHOVER_USER_KEY=your-user-key
PUSHOVER_API_TOKEN=your-api-tokenSee Environment Variables for complete reference.
By default, check history is automatically deleted after 30 days to prevent database growth. This runs daily at 2:00 AM.
- Configure retention: Set
CHECK_RETENTION_DAYSin.env(default: 30) - Manual cleanup:
ddev artisan checks:prune - Custom retention:
ddev artisan checks:prune --days=7 - Keep all history: Set
CHECK_RETENTION_DAYS=0(not recommended)
See CHECK_RETENTION_POLICY.md for detailed documentation.
The application follows Laravel's MVC architecture with service layers:
Web Interface (Blade + Tailwind CSS)
β
Controllers
β
Service Layer
- MonitorService (CRUD operations)
- CheckService (HTTP checks)
- NotificationService (Email & Pushover)
β
Models & Queue Jobs
β
Database
- Monitors - Store URL, check interval, and current status
- Checks - Record each check result with timestamp and details
- Queue Jobs - Background processing for HTTP checks
- Scheduler - Triggers checks every minute based on intervals
- Notifications - Email and Pushover alerts on status changes
- Controlled Registration - Public registration disabled by default
- Admin User Creation - CLI command for creating users without web access
- Authentication - Laravel Breeze for secure user authentication
- Environment Variables - Sensitive data stored in
.env(not committed)
This project follows Laravel best practices:
- PSR-12 code style (enforced with Laravel Pint)
- Type-safe code with strict typing (
declare(strict_types=1)) - Comprehensive test coverage (unit, feature, and property-based tests)
- Service layer architecture for maintainability
- Clear separation of concerns
This project is open-sourced software licensed under the MIT license.
- Documentation: Start with the Setup Guide
- Issues: Check application logs with
ddev artisan pail - Troubleshooting: See Setup Guide - Troubleshooting
This application was built using Kiro, an AI-powered IDE that helps developers build Laravel applications faster. The project structure and steering documents are optimized for Kiro's spec-driven development workflow.
Ready to monitor your sites? Start with the Setup Guide to get up and running in minutes.
