db/rate_limit.sql
CREATE TABLE IF NOT EXISTS rate_limit ( key_hash TEXT NOT NULL, bucket TEXT NOT NULL, -- 'signup', etc. count INT NOT NULL DEFAULT 0, window_start TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (key_hash, bucket) ); CREATE INDEX IF NOT EXISTS idx_rate_limit_window ON rate_limit(window_start);