@gridscoot/observability
v0.1.1
Published
Stderr-emitting structured logger + DB-backed rate-limit helpers used by @gridscoot/mcp and the Gridscoot Next.js app.
Maintainers
Readme
packages/observability
Status: scaffold only (Phase 3). Filled at Phase 6.0 (MVS).
Shared client factories + setup for our 3-way observability stack: Sentry (errors), PostHog (product analytics), Supabase audit_log (structured action history).
Why a dedicated package
11+ external services means a lot of integration glue. Pulling Sentry + PostHog setup into one package means:
- One place to configure DSNs, environment tagging, sampling
- One place to enforce privacy rules (no PII in error payloads; hashed user IDs only)
- One place to reason about cost (Sentry quota, PostHog event quota)
- Other packages import a configured client; they don't repeat config
Phase fill scope
Phase 6.0 (MVS)
- Sentry client factory (errors + performance)
- PostHog client factory (events + feature flags)
- Audit-log helper (wraps Supabase
audit_logtable insert with consistent envelope) - Privacy guard: a
redactPII()helper that strips email, name, phone, IP from any payload before Sentry/PostHog send
Post-MVS
- Cron health dashboard (lifted from Mateprice's
cron_healthtable + admin UI) - Cost dashboard (Sentry + PostHog usage against quotas)
Files
src/
├── sentry.ts # client factory + privacy guard
├── posthog.ts # client factory
├── audit-log.ts # Supabase audit_log helper
├── privacy.ts # redactPII()
└── index.tsDonor patterns
- Sentry setup:
mateprice/sentry.*.config.ts(lift verbatim) - PostHog setup:
mateprice/src/lib/posthog.ts(lift verbatim) - audit_log row shape:
mateprice/supabase/migrations/<audit_log>.sql(the schema gets lifted as a migration; this package wraps inserts) - Privacy guard: net-new — sibling projects don't have a unified PII redactor
