Bartłomiej Janczak
26247fd94a
Release v2.0.0: SVG QR Code Designer, visit counter buffering, Geo-IP and browser language tracking, dashboard redesign
2026-06-03 13:52:31 +02:00
Bartłomiej Janczak
67ce293685
Optimize counter buffering, add reactive settings callouts, and resolve audit bugs
2026-06-02 19:33:19 +02:00
Bartłomiej Janczak
911e98a2e3
Release v1.5.1: Rest API toggle, webhook fault tolerance, time-boundary aggregation fix, pixel loading UI, and resolveRedirectUrl targeting rules alignment
2026-06-02 13:17:42 +02:00
Bartłomiej Janczak
e5437dd0a6
Audit fixes: device targeting, query index optimizations, translation gaps, rate-limiting, and path consistency
2026-06-02 07:51:45 +02:00
Bartłomiej Janczak
f0d76ff03b
fix: memory-safe aggregation via chunking + allow 0 retention days
...
- Replace ->get() with ->chunk(1000) in AggregateAndPruneVisitsCommand
to avoid loading entire day's visits into PHP RAM (critical at scale)
- Stats are now accumulated incrementally via a hash-keyed array,
unique visits counted via ip_hash deduplication key
- Fix pruning_retention_days minValue(1) → minValue(0) in Settings form;
0 was documented to disable pruning but form validation blocked it
2026-06-01 14:20:43 +02:00
Bartłomiej Janczak
eda4794cac
feat: v1.2.0 — password protection, warning pages, smart targeting, rate limiting, daily stats aggregation
...
- Add password-protected links with session-based unlock flow
- Add redirect warning (interstitial) pages before external URLs
- Add smart targeting rules: device-based, country/geo, A/B weighted rotation
- Add configurable per-IP rate limiting with 429 + Retry-After headers
- Add daily stats aggregation & log pruning (short-url:aggregate-and-prune)
- Add IncrementVisitJob as queue-based counter buffering fallback
- Add ShortUrlDailyStats model with JSON stat columns per day
- Add two new migrations: targeting/security fields, daily_stats table
- Add password-prompt.blade.php and warning.blade.php views
- Extend Settings GUI with Performance & Security tab (aggregation + rate limiting)
- Extend ShortUrlForm with Targeting & Security section
- Add POST route for password form submission (was GET-only → 405)
- Replace enum(device_type) with string(20) for cross-DB compatibility
- Remove ->after() MySQL-only hints from ALTER TABLE migrations
- Fix aggregation test: use whereDate() instead of assertDatabaseHas for date column
- Extend en/pl translations for all new features
- Expand README.md with full v1.2.0 documentation (476 lines)
2026-06-01 13:54:13 +02:00