PingVista is an open-source API monitoring dashboard for developers. It helps you check endpoints, track latency, validate responses, review incidents, export reports, and optionally run checks through a small Python backend.
PingVista is ready for local use, private demos, portfolio review, and small self-hosted deployments. It can run as a browser-only tool for free, or with the Python backend for server-side checks, webhook alerts, health reporting, per-user local workspaces behind optional Supabase Auth, and basic scheduled checks while the backend is running.
- Demo mode with sample endpoints, latency history, and an example resolved incident
- Manual checks for one endpoint or all endpoints
- Browser-based automatic monitoring
- Optional Python backend checks
- Optional backend scheduler while the Python service is running
- Optional Supabase Auth foundation with separate local workspaces per authenticated user
- Endpoint groups for Production, Staging, and Development
- HTTP methods:
GET,POST,PUT,PATCH, andDELETE - Custom headers and JSON request bodies
- Expected status and response body validation
- Latency charts built with SVG
- Uptime, status, latency, and incident summaries
- Incident open/recovery tracking
- Webhook alerts for incident and recovery events
- Search and filters by status or group
- CSV report export
- JSON backup/import
- Dark mode
- Backend health endpoint at
/api/health - Security validation for public URL checks, DNS-resolved private IP blocking, redirect blocking, and remote response size limits
- Rate limits, endpoint limits, and request body limits
- GitHub Actions CI for syntax and security tests
Open index.html in a modern browser.
This mode is fully free. It stores data in localStorage and runs checks from the browser, so some APIs may fail because of CORS.
pip install -r requirements.txt
python3 app.pyYou can also use the npm wrapper:
npm startThen open:
http://127.0.0.1:4175
Backend mode stores local data in:
data/pingvista-db.json
Auth is in foundation stage. It provides separate local JSON workspaces for authenticated users under data/users/. Full Supabase Postgres persistence is planned and the starter schema is available in supabase/schema.sql.
- Create a Supabase project.
- Run
supabase/schema.sqlin the Supabase SQL editor. - Copy
.env.exampleto.env. - Fill these values:
PORT=4175
HOST=0.0.0.0
SUPABASE_URL=
SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
SCHEDULER_INTERVAL_MS=300000When these variables are present, PingVista can proxy Supabase sign-up and sign-in from the Settings tab. The Python backend keeps local JSON as the default persistence layer until the Postgres integration is completed.
python3 app.py
npm start
npm run check
npm run test:security
npm run deploy:checkThe backend exposes:
GET /api/health
It returns service status, storage mode, scheduler status, Supabase availability, and active safety limits.
The health response also reports whether data is running as a single local workspace or per-user local JSON mode.
PingVista can be deployed for free as a public demo:
- Frontend: GitHub Pages, Vercel Hobby, Netlify Free, or Render Static Site
- Backend: optional Render/Railway free or trial service
- Database/Auth: Supabase Free
Read the full guide:
docs/FREE_DEPLOYMENT.md
docs/DAY3_PUBLIC_DEPLOYMENT.md
For real monitoring, self-host the backend so scheduled checks continue while your browser is closed.
Read:
docs/SELF_HOSTING.md
PingVista/
├── .github/workflows/ci.yml
├── assets/
│ ├── pingvista-og.svg
│ └── pingvista-screenshot.svg
├── data/
├── docs/
│ ├── FREE_DEPLOYMENT.md
│ ├── DAY3_PUBLIC_DEPLOYMENT.md
│ └── SELF_HOSTING.md
├── supabase/
│ └── schema.sql
├── tests/
│ └── python-backend.test.py
├── .env.example
├── CONTRIBUTING.md
├── LICENSE
├── Procfile
├── README.md
├── ROADMAP.md
├── SECURITY.md
├── app.py
├── index.html
├── package.json
├── render.yaml
├── requirements.txt
├── runtime.txt
├── scripts/
│ ├── start.sh
│ └── verify_deployment.py
├── script.js
└── styles.css
- Browser-only checks are affected by CORS.
- Free hosting may sleep, pause, or limit background checks.
- Scheduler and background checks only run while the Python backend process is running. There is no persistent worker or queue yet.
- Data persistence is primarily local JSON files, with separate files per authenticated user when Supabase Auth is configured.
- Local JSON data is best for private use, demos, and self-hosted experiments. It is not suitable for high-scale or multi-region production without completing the Postgres integration.
- PingVista is not a replacement for enterprise observability platforms yet.
- Run
npm run checkbefore every commit. - Run
npm run test:securityafter backend changes. - Confirm private URLs, metadata IPs, credentials, and non-HTTP URLs are blocked.
- Keep
.envout of git and use.env.examplefor documentation only.
MIT License. See LICENSE.