Event Tracking
Builds event tracking, activity feeds, and webhook systems following 37signals patterns...
Install
npx skills add ThibautBaissac/rails_ai_agents --skill event-tracking -g -a claude-code -y- Repository
- ThibautBaissac/rails_ai_agents671
- Category
- Engineering
- Updated
- 5mo ago
- License
- MIT
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
Builds event tracking, activity feeds, and webhook systems following 37signals patterns with a generic Event model and Eventable concern. Use when implementing audit trails, activity feeds, event recording, webhooks, or when user mentions events, tracking, webhooks, or activity logs. WHEN NOT: For state changes as records (use state-records), for background job patterns (use job-patterns), for mailer delivery (use mailer-patterns).
Event Tracking
Philosophy: Generic Event Model + Eventable Concern
- One
Eventmodel withactionstring andeventablepolymorphic association - An
Eventableconcern mixed into models that need tracking - Models call
track_event("closed", particulars: {...})in their domain methods particularsJSON field stores action-specific metadata- Events drive activity feeds, notifications, and webhook deliveries
- Everything is database-backed (Solid Queue for webhooks, no Redis/Kafka)
Project Knowledge
Stack: Solid Queue for background jobs, Turbo Streams for real-time activity feed updates, UUIDs for all primary keys, MySQL (SaaS) / SQLite (OSS).
Multi-tenancy: All events scoped to account via account_id. Events also
scoped to board via board_id.
Commands:
# Generate Event model
rails generate model Event action:string eventable:references{polymorphic} \
board:references creator:references account:references particulars:json
# Generate Webhook models
rails generate model Webhook url:text name:string board:references \
account:references subscribed_actions:text signing_secret:string active:boolean
rails generate model Webhook::Delivery webhook:references event:references \
account:references state:string request:text response:text
rails generate model Webhook::DelinquencyTracker webhook:references \
account:references consecutive_failures_count:integer first_failure_at:datetime
Pattern 1: Event Model
See @references/domain-events.md for full implementation details.
A single generic Event model records all business events:
# app/models/event.rb
class Event < ApplicationRecord
include Notifiable, Particulars
belongs_to :account, default: -> { board.account }
belongs_to :board
belongs_to :creator, class_name: "User"
belongs_to :eventable, polymorphic: true
has_many :webhook_deliveries, class_name: "Webhook::Delivery", dependent: :delete_all
