External monitoring for your projects
Drop the SDK into car-coating, apolloOne, or any Next.js app and route errors, metrics, web vitals, and audit events to either a Supabase Edge Function or a Firebase Cloud Function — swap backends without changing application code.
1. Install
Copy lib/monitor/ into your project, or publish it as a private package.
2. Pick an adapter
Supabase, Firebase, raw HTTP, or write your own — anything that implements StorageAdapter.
3. Boot once
Call initMonitor() in a top-level client component and wrap server actions with withMonitor().
Quick integration (car-coating / apolloOne)
// app/monitor-provider.tsx (client component)
"use client";
import { useEffect } from "react";
import {
initMonitor,
installBrowserHandlers,
SupabaseAdapter,
// FirebaseAdapter,
} from "meetsentry";
export function MonitorProvider({ children }) {
useEffect(() => {
initMonitor({
projectId: "car-coating",
environment: process.env.NEXT_PUBLIC_APP_ENV,
adapter: new SupabaseAdapter({
url: process.env.NEXT_PUBLIC_SUPABASE_URL!,
anonKey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
mode: "edge",
functionName: "ingest",
}),
// OR:
// adapter: new FirebaseAdapter({
// functionUrl: process.env.NEXT_PUBLIC_FIREBASE_INGEST_URL!,
// }),
});
installBrowserHandlers();
}, []);
return children;
}Try it
The /demo page fires client + server events into the in-memory store and renders them on /dashboard.
Dashboard
Issues grouped by hash, with recent event payloads expanded inline.
What ships
- · Pluggable
StorageAdapterinterface - · Supabase (REST or Edge Function) adapter
- · Firebase Cloud Function adapter
- · Generic HTTP adapter for self-hosting
- · PII scrubber (regex + key-name) before transport
- · Token-bucket rate limit (burst-friendly)
- · Batch flushing on size + interval + pagehide
- · Stable issue hashing for deduplication
- ·
withMonitor()Server Action wrapper - ·
withMonitorRoute()Route Handler wrapper - · Auto Web Vitals (LCP, INP, CLS, FCP, TTFB)
- · 30-day retention via
expires_at(TTL / pg_cron)