Endpoint Guardian
Endpoint Guardian
Proactive API health monitoring for indie hackers and small teams, without the enterprise price tag.
Solo developers and small teams heavily rely on internal and third-party APIs (Stripe, Twilio, OpenAI, microservices) for their applications to function. When these APIs experience downtime or performance degradation, it directly impacts their app's reliability, user experience, and revenue. Current solutions are often reactive (waiting for user reports), manual (checking status pages), or prohibitively expensive and complex (enterprise monitoring tools like Datadog). This leads to hours wasted debugging obscure issues, significant user frustration, and potential revenue loss. They need a simple, affordable, and proactive way to know immediately when a critical API is failing, without the overhead.
Endpoint Guardian offers a streamlined, developer-friendly platform to monitor any HTTP API endpoint. Users can easily add URLs, specify HTTP methods, custom headers, request bodies, expected status codes, and even regex patterns for response body content. Our system periodically pings these endpoints from multiple global locations, recording status, response time, and success/failure. If a predefined threshold is breached (e.g., 4xx/5xx status, slow response time, unexpected content), immediate alerts are dispatched via email (Resend) or custom webhooks (Slack, Discord). The intuitive dashboard provides a quick overview of all monitored endpoints, historical performance graphs, and a log of recent incidents, ensuring small teams can stay ahead of API issues without breaking the bank.
Tech Stack
System Architecture
ββββββββββββββββββββ ββββββββββββββββββββββββββ ββββββββββββββββββββ
β Client β β Next.js App β β Supabase β
β (Web Browser) β β (Frontend & API Routes)β β (PostgreSQL DB, β
βββββββββ¬βββββββββββ βββββββββββββ¬βββββββββββββ β Auth, Storage) β
β HTTPS β² β HTTPS ββββββββββββ¬ββββββββ
β β β β
β Requests β β API Calls β DB Reads/Writes
β β β β
βΌ β βΌ βΌ
ββββββββββββββββββββ β βββββββββββββββββββββββββββββ βββββββββββββββββ
β User Interaction β β β API Routes (Auth, Monitorsβ β Table: users β
β (Dashboard, β β β Alerts CRUD) β β Table: monitorsβ
β Configuration) β β βββββββββββββ¬ββββββββββββββββ β Table: checksβ
ββββββββββββββββββββ β β β Table: alert_channelsβ
β β Trigger (Vercel Cron Jobs) β Table: alertsβ
β β βββββββββββββββββ
β βΌ
β ββββββββββββββββββββββββββββ
β β Monitor Worker Service β
β β (Vercel Edge Function) β
β βββββββββββββ¬βββββββββββββββ
β β
β β HTTP Requests to monitored APIs
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββ
β External APIs (Monitored) β
βββββββββββββββββββββββββββββββββββββββ
β
β Alerts (Email, Webhook)
βΌ
βββββββββββ βββββββββββββ βββββββββββββ
β Resend β β Slack β β Discord β
β (Email) β β (Webhook) β β (Webhook) β
βββββββββββ βββββββββββββ βββββββββββββDatabase Schema
-- Enable UUID generation if not already enabled
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- users table for authentication
CREATE TABLE users (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
email text UNIQUE NOT NULL,
password_hash text NOT NULL, -- Stored securely, e.g., bcrypt hash
stripe_customer_id text, -- For Stripe billing integration
subscription_status text DEFAULT 'free', -- 'free', 'pro', 'canceled'
created_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE users IS 'Stores user authentication and subscription details.';
-- monitors table to define what API endpoints to check
CREATE TABLE monitors (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name text NOT NULL,
url text NOT NULL,
method text NOT NULL DEFAULT 'GET', -- e.g., 'GET', 'POST', 'PUT'
headers jsonb DEFAULT '{}', -- Custom headers for the request
body text, -- Request body for POST/PUT requests
expected_status integer DEFAULT 200, -- Expected HTTP status code
expected_body_regex text, -- Regex to match in the response body
check_interval_seconds integer DEFAULT 60, -- How often to check (e.g., 60 for 1 minute)
is_active boolean DEFAULT TRUE,
last_checked_at timestamp WITH time zone,
created_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP,
UNIQUE (user_id, name) -- User can't have two monitors with the same name
);
CREATE INDEX idx_monitors_user_id ON monitors(user_id);
CREATE INDEX idx_monitors_is_active_interval ON monitors(is_active, check_interval_seconds);
COMMENT ON TABLE monitors IS 'Defines API endpoints to be monitored.';
-- checks table to store the results of each monitor run
CREATE TABLE checks (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
monitor_id uuid NOT NULL REFERENCES monitors(id) ON DELETE CASCADE,
status_code integer NOT NULL,
response_time_ms integer NOT NULL,
is_successful boolean NOT NULL,
error_message text, -- Detailed error message if check failed
checked_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_checks_monitor_id ON checks(monitor_id);
CREATE INDEX idx_checks_checked_at ON checks(checked_at DESC);
COMMENT ON TABLE checks IS 'Records the results of each monitor check.';
-- alert_channels table to store user's preferred notification methods
CREATE TABLE alert_channels (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE,
type text NOT NULL, -- e.g., 'email', 'slack', 'discord'
config jsonb NOT NULL, -- e.g., {'email': 'user@example.com'} or {'webhook_url': 'https://hooks.slack.com/...', 'channel': '#alerts'}
is_active boolean DEFAULT TRUE,
created_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_alert_channels_user_id ON alert_channels(user_id);
COMMENT ON TABLE alert_channels IS 'Stores user notification channels (email, webhooks).';
-- alerts table to log sent alerts
CREATE TABLE alerts (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
monitor_id uuid NOT NULL REFERENCES monitors(id) ON DELETE CASCADE,
check_id uuid REFERENCES checks(id) ON DELETE SET NULL, -- Link to the specific check that triggered the alert
alert_channel_id uuid NOT NULL REFERENCES alert_channels(id) ON DELETE CASCADE,
message text NOT NULL,
status text NOT NULL DEFAULT 'sent', -- e.g., 'sent', 'failed'
sent_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_alerts_monitor_id ON alerts(monitor_id);
CREATE INDEX idx_alerts_alert_channel_id ON alerts(alert_channel_id);
COMMENT ON TABLE alerts IS 'Logs all triggered and sent alerts.';API Endpoints
/api/auth/registerRegisters a new user with email and password./api/auth/loginAuthenticates a user and returns a session token./api/user/meRetrieves the authenticated user's profile and subscription status./api/monitorsFetches all API monitors for the authenticated user./api/monitorsCreates a new API monitor for the authenticated user./api/monitors/[id]Retrieves a specific API monitor by ID for the authenticated user./api/monitors/[id]Updates an existing API monitor by ID for the authenticated user./api/monitors/[id]Deletes an API monitor by ID for the authenticated user./api/monitors/[id]/checksFetches historical checks for a specific monitor, with optional pagination./api/alert-channelsFetches all alert channels for the authenticated user./api/alert-channelsCreates a new alert channel (email, Slack, Discord) for the authenticated user./api/alert-channels/[id]Updates an existing alert channel by ID for the authenticated user./api/alert-channels/[id]Deletes an alert channel by ID for the authenticated user./api/dashboard/overviewProvides a summary of all monitors (status, last check, recent alerts) for the dashboard./api/webhooks/stripeHandles Stripe webhook events for subscription changes./api/cron/monitor-triggerInternal endpoint triggered by Vercel Cron to initiate the monitoring worker process. Requires API key for security.Start Building with AI
Copy this prompt for Cursor, v0, Bolt, or any AI coding assistant
BuilderDaily Team
VerifiedIndie hackers and full-stack engineers creating validated Micro-SaaS blueprints with production-ready tech stacks.
Related Blueprints
More Micro-SaaS ideas you might like to build
MediBrief AI
AI-powered clinical note summarization for healthcare professionals.
AssessGenius AI
Instantly create engaging quizzes from any text using AI.
DevWallet
Automate tracking and optimize your SaaS & cloud spending as a developer.
Gap Alert
Today's gap expires in ~14 hours
Get tomorrow's blueprint delivered to your inbox so you never miss a profitable idea.
(Email delivery launching soon β sign up to be first!)