berrypod/priv/repo/migrations/20260222112942_create_analytics_events.exs
jamey 2bd2e613c7
All checks were successful
deploy / deploy (push) Successful in 3m20s
add privacy-first analytics with progressive event collection
Three-layer pipeline: Plug for all HTTP requests (no JS needed), LiveView
hook for SPA navigations, JS hook for screen width. ETS-backed buffer
batches writes to SQLite every 10s. Daily-rotating salt for visitor hashing.
Includes admin dashboard with date ranges, visitor trends, top pages,
sources, devices, and e-commerce conversion funnel. Oban cron for 12-month
data retention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 12:50:55 +00:00

31 lines
1006 B
Elixir

defmodule Berrypod.Repo.Migrations.CreateAnalyticsEvents do
use Ecto.Migration
def change do
create table(:analytics_events, primary_key: false) do
add :id, :binary_id, primary_key: true
add :name, :string, null: false
add :pathname, :string, null: false
add :visitor_hash, :binary, null: false
add :session_hash, :binary, null: false
add :referrer, :string
add :referrer_source, :string
add :utm_source, :string
add :utm_medium, :string
add :utm_campaign, :string
add :country_code, :string, size: 2
add :screen_size, :string
add :browser, :string
add :os, :string
add :revenue, :integer
timestamps(type: :utc_datetime, updated_at: false)
end
create index(:analytics_events, [:inserted_at])
create index(:analytics_events, [:name, :inserted_at])
create index(:analytics_events, [:session_hash, :inserted_at])
create index(:analytics_events, [:pathname, :inserted_at])
end
end