CHANGELOG.md

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.0.2] - 2025-12-28

### Fixed

- **Nested route support** - InboxLive now correctly handles URLs when mounted in nested scopes (e.g., `/admin/fyi` instead of just `/fyi`)
  - Event detail URLs now respect the route prefix where the LiveView is mounted
  - Navigation between index and detail views works correctly regardless of scope nesting

## [1.0.1] - 2025-12-27

### Added

- **Automatic HTTP retries** - `FYI.Client` module with exponential backoff for sink delivery
  - Retries transient failures (network errors, 5xx status codes) up to 3 times
  - Exponential backoff with delays of 1s, 2s, 4s
  - Respects `Retry-After` response headers
  - Configurable via `:http_client` config (max_retries, retry_delay)

### Changed

- Sinks now use `FYI.Client.post/2` for HTTP requests instead of raw `Req.post/2`

## [1.0.0] - 2024-12-26

### Added

- **Event emission** - `FYI.emit/3` for emitting events with payload, actor, source, tags, and emoji
- **Ecto.Multi integration** - `FYI.Multi.emit/3` for transactional event emission
- **Slack webhook sink** - Send notifications to Slack channels
- **Telegram bot sink** - Send notifications to Telegram chats
- **Event routing** - Route events to specific sinks based on glob patterns
- **Event persistence** - Optional database storage via Ecto
- **Admin inbox UI** - LiveView-based event viewer with:
  - Activity histogram with time-based tooltips
  - Time range filtering (5 minutes to all time)
  - Event type filtering
  - Search by event name or actor
  - Event detail panel
  - Real-time updates via PubSub
- **Feedback component** - Customizable feedback widget installed into your codebase
- **Igniter installer** - `mix fyi.install` for one-command setup
- **Emoji support** - Per-event, pattern-based, and default emoji configuration
- **App name identification** - Identify events when multiple apps share channels