// event types

Event Types

Events are the heart of customer.log. Get the shape right and everything downstream — the feed, Slack messages, and AI summaries — gets better.

Channels

A channel is a user-defined grouping: "signups", "payments", "errors", or anything you invent. Every event belongs to exactly one channel, and channels are how you filter the feed.

Channels are auto-created the first time you log to them — no schema to register upfront. Predefined types (signups, payments, projects, navigation, events, errors) come with sensible defaults out of the box.

Anatomy of an event

event.ts
{ channel: "signups", // grouping title: "User signed up", // short, human-readable message: "Came in via Google OAuth", // free-text detail metadata: { user_id: "usr_123", email: "jane@doe.com", source: "google" }, tags: ["oauth", "growth"], icon: "🚀", notify: true, // whether to push via channels level: "success", // info | success | warning | error createdAt: "2026-07-31T09:00:00.000Z" }

Designing for AI summaries

The daily digest and weekly report are generated from your events, so write them for both humans and models:

  • Write titles as plain sentences: "Payment failed", not "chrg_fail_204".
  • Use message for context that can't fit in metadata.
  • Put repeatable facts in metadata — amounts, plans, sources, IDs.
  • Keep tags consistent ("oauth", "growth") so patterns become visible.

Good vs. noisy events

"Payment succeeded""Annual plan, card charged" — metadata: email, plan, amount. This is an upsell signal.
"cron ran"Logging every background job with no metadata just adds noise to the feed and the AI digest.