Version 0.1.0
A lightweight, client-side application health monitoring dashboard for tracking service availability across multiple environments. Monitor applications in real-time with health checks, uptime tracking, and status visualizationβall running entirely in the browser with no backend required.
HealthBoard provides DevOps and engineering teams with a simple, self-hosted solution to monitor the health and availability of web applications across different environments (Dev, Stage, UAT, Preprod, Production). Built as a static Next.js application, it performs client-side health checks and displays real-time status information with historical uptime tracking.
Key Features:
- π Zero Backend - Runs entirely in the browser as a static site
- π Real-time Monitoring - Automatic health checks with configurable intervals
- π Uptime Tracking - Historical data stored locally in browser
- π¨ Modern UI - Clean, responsive interface built with React and Tailwind CSS
- π³ Docker Ready - Easy deployment with Docker and nginx
- β‘ Fast & Lightweight - Static export with minimal dependencies
This project is licensed under the Apache License 2.0 - see the LICENSE file for full terms.
Copyright 2024β2025 Devify LLC
- Node.js 18.x or higher (recommended: 22.x)
- npm 9.x or higher
- Docker (optional, for containerized deployment)
- Next.js 15.1.0+
- React 19.0.0+
- TypeScript 5.7.2+
- Tailwind CSS 4.0.0+
The application is configured through the config/environments.ts file, which defines the environments and applications to monitor.
import { EnvironmentConfig } from '@/lib/types'
export const environments: EnvironmentConfig[] = [
{
name: 'dev', // Environment identifier
label: 'Dev', // Display name
applications: [
{
id: 'app-dev', // Unique application ID
name: 'My Application', // Display name
url: 'https://dev.example.com', // Application URL
healthEndpoint: '/health' // Optional: custom health check path
}
]
}
]name: Environment identifier (used internally)label: Display name shown in the UIapplications: Array of applications to monitor in this environmentid: Unique identifier for the applicationname: Display name for the applicationurl: Base URL of the application to monitorhealthEndpoint(optional): Custom path for health checks (defaults to the base URL)
export const environments: EnvironmentConfig[] = [
{
name: 'dev',
label: 'Development',
applications: [
{
id: 'api-dev',
name: 'API Service',
url: 'https://api-dev.example.com',
healthEndpoint: '/api/health'
},
{
id: 'web-dev',
name: 'Web Application',
url: 'https://web-dev.example.com'
}
]
},
{
name: 'prod',
label: 'Production',
applications: [
{
id: 'api-prod',
name: 'API Service',
url: 'https://api.example.com',
healthEndpoint: '/api/health'
},
{
id: 'web-prod',
name: 'Web Application',
url: 'https://www.example.com'
}
]
}
]Since HealthBoard runs in the browser, the monitored applications must allow CORS requests from the HealthBoard origin. If an application blocks CORS, you have these options:
- Configure the application to allow the HealthBoard origin in
Access-Control-Allow-Origin - Use a proxy server to bypass CORS restrictions
- Exclude the application from monitoring
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser: Navigate to http://localhost:3111
The development server includes hot-reload, so changes to the code will automatically refresh the browser.
-
Build the static site:
npm run build
-
Start the production server:
npm start
Or serve the
out/directory with any static file server.
Run TypeScript type checking without building:
npm run type-checkCheck code quality with ESLint:
npm run lintHealthBoard includes Docker support for easy deployment with nginx.
-
Build and start the container:
docker-compose up -d
-
Access the application: Navigate to http://localhost:8080
-
Stop the container:
docker-compose down
-
Build the image:
docker build -t healthboard:latest . -
Run the container:
docker run -d -p 8080:80 --name healthboard healthboard:latest
-
Stop and remove the container:
docker stop healthboard docker rm healthboard
The Docker setup uses a multi-stage build:
- Stage 1: Builds the Next.js static export
- Stage 2: Serves the static files with nginx
The nginx configuration (nginx.conf) is optimized for serving the static site with proper caching headers.
healthboard/
βββ app/ # Next.js app directory
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
β βββ page.tsx # Main page
βββ components/ # React components
β βββ AppCard.tsx # Application status card
β βββ EnvironmentSection.tsx # Environment grouping
β βββ Header.tsx # Page header
β βββ Sidebar.tsx # Navigation sidebar
β βββ StatusPill.tsx # Status indicator
β βββ SummaryBar.tsx # Summary statistics
β βββ index.ts # Component exports
βββ config/ # Configuration files
β βββ constants.ts # App constants
β βββ environments.ts # Environment definitions
βββ hooks/ # React hooks
β βββ useHealthMonitor.ts # Health monitoring logic
βββ lib/ # Utility libraries
β βββ health-checker.ts # Health check implementation
β βββ status.ts # Status utilities
β βββ storage.ts # Local storage management
β βββ types.ts # TypeScript types
βββ Dockerfile # Docker build configuration
βββ docker-compose.yml # Docker Compose setup
βββ nginx.conf # nginx configuration
βββ next.config.ts # Next.js configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes and test thoroughly
- Run type checking:
npm run type-check - Run linting:
npm run lint - Commit your changes with clear messages
- Push to your fork and submit a pull request
For issues, questions, or feature requests, please open an issue on the GitHub repository.
Built with β€οΈ by Devify LLC