Skip to content
aliacollinsPublic

About

Open-source API monitoring & testing platform. Self-hostable, no limits, free forever.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Toastman

Open-source API monitoring & testing platform.
Self-hostable. No limits. Free forever.

Features · Quick Start · Development · Self-Hosting · Contributing


Toastman combines API monitoring (like UptimeRobot) with API testing (like Postman) in a single self-hosted platform. Monitor your endpoints, test your APIs, get instant alerts when things break, and share status pages with your users -- all from one place.

No pricing tiers. No feature gates. No vendor lock-in. Just run docker-compose up and you're done.

Features

API Monitoring

  • HTTP/HTTPS endpoint checks with configurable intervals (down to 10 seconds)
  • Custom headers, body, and authentication per monitor
  • Expected status code validation
  • Response time tracking with historical graphs
  • Rolling uptime percentage (24h, 7d, 30d)
  • Automatic UP/DOWN status change detection

API Testing

  • Postman-like request builder (GET, POST, PUT, PATCH, DELETE, HEAD)
  • Tabbed interface for headers, body, auth, and params
  • JSON, form-data, and raw body types
  • Pretty-printed response viewer with status badges
  • Server-side proxy to avoid CORS issues
  • Environment variables with {{variable}} substitution

Collections & Environments

  • Organize requests into named collections
  • Reusable environments (Development, Staging, Production)
  • Variable substitution across URLs, headers, and body

Alerts

  • Email (Resend or SMTP)
  • Slack (incoming webhooks)
  • Discord (webhooks)
  • Webhooks (JSON payloads to any URL)
  • 15-minute cooldown to prevent alert storms
  • Per-monitor channel configuration

Public Status Pages

  • Custom URL slug (/status/your-service)
  • Choose which monitors to display
  • Live green/red/gray status indicators
  • Rolling 30-day uptime percentages
  • No authentication required for viewers

Admin Dashboard

  • Platform-wide stats (users, monitors, checks/day, DB size)
  • User management (search, disable, delete)
  • Full audit log with timestamps and IP addresses
  • Brute-force protected with separate passphrase

Tech Stack

Layer Technology
Framework Next.js 16 (App Router, TypeScript)
UI Tailwind CSS v4 + shadcn/ui
Database PostgreSQL 16
ORM Prisma v7
Queue BullMQ + Redis 7
Auth NextAuth.js v5
Charts Recharts
Container Docker + docker-compose

Quick Start

Docker (recommended)

git clone https://github.com/aliacollins/ToastMan.git
cd toastman
cp .env.example .env
# Edit .env — at minimum set JWT_SECRET, NEXTAUTH_SECRET, and ADMIN_SECRET
docker-compose up

Open http://localhost:3000, create an account, and start monitoring.

What's running

Service Port Purpose
app 3000 Next.js web app
worker — Background monitor check processor
postgres 5432 PostgreSQL database
redis 6379 BullMQ job queue

Development

If you want to run locally without Docker:

Prerequisites: Node.js 20+, PostgreSQL 16, Redis 7

# Install dependencies
npm install

# Generate Prisma client
npx prisma generate

# Push schema to database
npx prisma db push

# Seed sample data (optional)
npx tsx prisma/seed.ts

# Start the dev server
npm run dev

In a separate terminal, start the background worker:

npx tsx src/worker/index.ts

Open http://localhost:3000. The seed creates a test account: test@example.com / password123.

Self-Hosting

Environment Variables

Copy .env.example and configure:

Variable Required Description
DATABASE_URL Yes PostgreSQL connection string
JWT_SECRET Yes Random string for JWT signing
NEXTAUTH_URL Yes Your app URL (e.g. https://monitor.example.com)
NEXTAUTH_SECRET Yes Random string for NextAuth encryption
REDIS_URL Yes Redis connection string
ADMIN_SECRET Yes Passphrase for the admin panel
RESEND_API_KEY No For email alerts via Resend
SMTP_HOST No SMTP server for email alerts
SMTP_PORT No SMTP port (default: 587)
SMTP_USER No SMTP username
SMTP_PASS No SMTP password
ADMIN_ALLOWED_IPS No Comma-separated IP allowlist for admin panel
NEXT_PUBLIC_APP_URL No Public-facing URL

Production Tips

  • Set strong random values for JWT_SECRET, NEXTAUTH_SECRET, and ADMIN_SECRET
  • Use ADMIN_ALLOWED_IPS to restrict admin panel access
  • Configure at least one alert channel (email or webhook) to get notified of downtime
  • The worker runs cleanup daily, keeping 365 days of check history
  • Status pages are cached for 30 seconds to handle traffic spikes

Updating

git pull
docker-compose build
docker-compose up -d

Project Structure

src/
├── app/
│   ├── (auth)/              # Login & signup
│   ├── (dashboard)/         # Dashboard pages (monitors, alerts, collections, etc.)
│   ├── admin/               # Admin panel
│   ├── api/                 # API routes
│   └── status/[slug]/       # Public status pages
├── components/              # React components (shadcn/ui + custom)
├── lib/                     # Core logic (auth, plans, validators, alerts)
└── worker/                  # Background job processor

Contributing

Contributions are welcome! Feel free to open issues and pull requests.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Make your changes
  4. Run the dev server and verify everything works
  5. Commit and push
  6. Open a pull request

License

MIT

About

Open-source API monitoring & testing platform. Self-hostable, no limits, free forever.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages