# 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.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.1.0] - 2026-01-25 ### Added - Shared HTML footer template injected into all pages. - Structured log file handler with rotation, append-only writes, and stats parsing support. - Upload size guard using `MAX_ASSET_SIZE_BYTES`. - Unit tests for core storage and rate limiting behavior. ### Changed - Asset storage cleanup and capacity checks are now race-safe. - Stats aggregation now reads from the structured log file helper. ## [1.0.1] - 2026-01-16 ### Fixed - Asset addition logging now displays immediately instead of being buffered (changed `print!` to `println!`). - Upload functionality blocked after first successful upload - users can now only upload once per page session. - Paste, drag & drop, and file selection disabled after successful upload to prevent confusion. - JavaScript syntax errors in event listener registration that prevented copy/paste functionality. - Removed nested and duplicated event listeners that caused unexpected behavior. ### Changed - Added `uploadCompleted` flag to track upload state and prevent multiple uploads per session. - Reset button now properly clears the `uploadCompleted` flag to allow new uploads. ## [1.0.0] - 2026-01-14 ### Added - UI error banner for failed uploads, including retry timing. - `retry_after_seconds` in the upload error response to inform clients when to retry. - Server-side duration clamping for uploads (1-60 minutes). ### Changed - Upload throttling now tracks active assets per user using asset expiration times. - Upload error responses are consistently JSON. ### Removed - `Retry-After` response header on upload limit errors. ## [0.3.0] - 2026-01-13 ### Added - Favicon set and web manifest for site branding. - Syntax-highlighted rendering for code-like text content in the viewer. - Startup log rotation that archives the previous log with a timestamp. ### Changed - Access logs now write to `data/logs/log.txt` instead of `access.log`. ## [0.2.0] - 2026-01-11 ### Added - Default implementation for the asset model to simplify log parsing fallbacks. - Basic UI polish for the stats page (background glow and hover highlight on recent activity). ### Changed - Asset logging now records serialized values without cloning asset content. - Release workflow uses tag-based versioning and caches Rust/toolchain artifacts. ## [0.1.1] - 2026-01-09 ## [0.1.0] - 2026-01-09 ### Added - **Statistics Dashboard** (`/stats.html`) with real-time metrics: - Active assets count - Total uploads and deletions - Storage usage - Image vs text breakdown - Average server response time - Total request count - Recent activity feed (last 20 events) - Auto-refresh every 30 seconds - **Statistics API** (`GET /api/stats`) returning JSON metrics - **Enhanced logging** for asset events: - Upload events with uploader IP, MIME type, size, duration, timestamps - Delete events with full asset metadata - Request timing (`dur_ms`) in access logs - **Uploader IP tracking** stored with each asset for audit purposes - Stats link in index page footer - Ephemeral image and text sharing with configurable TTL (1-60 minutes) - Drag/drop, paste, and file picker upload support - Base64 encoding for images, raw text for plain text - UUID-based asset storage as JSON files - Background cleanup task (every 60 seconds) - Dark theme UI with zoom overlay - View page for shared content - Access logging with timing, IPs, and user agent - Docker and docker-compose support with Traefik labels - Environment variables for bind address and port - Access logging with timing, IPs, and user agent - Docker and docker-compose support with Traefik labels - Environment variables for bind address and port