← Back to home

Changelog

A complete history of changes, updates, and improvements to URLBouncer.

January 21, 2026

v1.3.2
  • Bug FixKeep QR camera video mounted to ensure the camera start button always triggers and the preview can initialize reliably
  • Bug FixAdded missing 32x32 and 48x48 favicon PNGs and icon metadata for better search engine favicon pickup

January 20, 2026

v1.3.1
  • Bug FixFixed QR camera error handling - now surfaces specific error types (NotAllowedError, NotFoundError, NotReadableError, OverconstrainedError) with targeted user guidance
  • Bug FixAdded 8-second timeout for camera permission requests to prevent stuck 'requesting' state with retry/cancel options
  • Bug FixImproved iOS/Safari camera compatibility with proper video attributes (playsInline, muted, autoPlay) and constraint fallback handling
  • New FeatureAdded debug diagnostics panel (accessible via ?debug=1) showing secure context, permissions, userAgent, state, and error details for troubleshooting
  • ImprovementEnhanced video playback error handling with proper metadata loading and play() error catching for better mobile device support
  • ImprovementAdded automated test suite for QR camera functionality with mocked getUserMedia to verify all camera states and error scenarios

January 19, 2026

v1.3.0
  • New FeatureEnhanced QR scanner UX with explicit camera on/off controls - camera now off by default for better privacy
  • New FeatureAdded auto-stop camera functionality - camera automatically stops after successful QR scan or after 45 seconds of inactivity
  • ImprovementAdded manual URL paste fallback option in QR scanner for users who prefer typing URLs directly
  • ImprovementAdded clear camera state indicators and privacy notice to QR scanner interface
  • ImprovementImproved camera cleanup - ensures camera stream is properly stopped on page navigation, tab changes, and component unmount

January 18, 2025

v1.2.0
  • New FeatureEnhanced URL-level detection with keyword group analysis (WALLET, AUTH, REWARD, URGENCY) across hostname, path, and query
  • New FeatureAdded brand mismatch detection - flags when brand names appear in URL path/query but domain doesn't match
  • ImprovementImproved Safe verdict gating - red flags (keywords, brand mismatch, suspicious TLD) now properly block incorrect Safe labels
  • ImprovementReduced scoring variance for legitimate sites by adjusting failure penalties for exact brand matches
  • Bug FixFixed hydration error in result cards when switching languages

January 11, 2025

  • ImprovementDisabled all LLM usage - scoring now uses deterministic security signals only for fully explainable results
  • DocumentationUpdated documentation to reflect deterministic scoring approach with no generative AI

January 19, 2025

v1.1.0
  • New FeatureAdded sponsored security tool recommendations (Bitwarden, YubiKey, Cloudflare DNS) under Safe/Caution results
  • New FeatureAdded educational security tips on home page and QR scanner page
  • DocumentationCreated comprehensive scoring documentation page explaining the algorithm and factors

January 15, 2025

  • ImprovementEnhanced redirect chain tracking to follow up to 7 hops
  • ImprovementImproved brand lookalike detection with homoglyph support

January 10, 2025

  • New FeatureAdded QR code scanner with camera and upload support
  • New FeatureAdded batch URL scanning for up to 100 URLs at once
  • New FeatureAdded CSV export functionality for batch scan results

January 5, 2025

  • ImprovementEnhanced HTML content analysis for phishing detection
  • ImprovementImproved certificate age checking via crt.sh integration
  • Bug FixFixed URL normalization for edge cases with special characters

December 20, 2025

v1.0.0
  • New FeatureInitial release of URLBouncer
  • New FeatureSingle URL safety scanning with instant verdicts
  • New FeatureMulti-factor scoring algorithm (brand, domain, HTML, cert, DNS)
  • New FeaturePermalink sharing for scan results

How to update this changelog

To add a new entry, edit web/app/changelog/page.tsx and add a new entry at the top of the changelogEntries array.

{
  date: "YYYY-MM-DD",
  version: "1.x.x", // optional
  changes: [
    {
      type: "feature" | "improvement" | "fix" | "documentation",
      description: "What changed"
    }
  ]
}