What we've shipped.
Changes to the product and the public site, newest first. User-visible items only — no whitespace cleanups, no sitemap regenerations.
No more WordPress dependency SECURITY
All assets (favicons, logos, screenshots, install graphics) now live on RDS infrastructure. The console survives the upcoming WordPress corporate-site decommission.
Cookie banner sits above the mobile bottom-nav UPDATE
The cookie consent banner's action buttons are no longer hidden behind the app-style bottom navigation on phones.
Map view: properly sized on phones FIX
/pantalles.php?vista=mapa now measures the available viewport and hides UI chrome that was obstructing the map on phones.
List views: column widths tidied FIX
Every column fits in any screen width with no horizontal scroll. Name column pinned to 280px for stable rendering.
Recycle bin for media NEW
Deleted images and videos move to a recycle bin and stay 30 days before being purged. Recoverable.
Drag-and-drop upload NEW
Modern dropzone with preview, real MIME validation on the server, 2 MB image cap, and an extension whitelist.
Stripe webhook: replay protection SECURITY
Every Stripe event is recorded in an idempotency ledger; if the webhook fires twice, it is not processed twice.
Library cleanup UPDATE
jQuery 3.1.0 → 3.7.1, jQuery UI 1.12.0 → 1.13.3, PHPMailer 6.0.5 → 6.9.3, blueimp File Upload → 10.32.0. nuSOAP and PHPMailer 5.2 retired.
Security audit completed SECURITY
Full audit cycle: Critical, High, Medium and Low items remediated across three phases. Tenant boundary (cf_empresa) enforced on every gestió endpoint.
Security headers on every response SECURITY
HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy and Permissions-Policy applied to every server response.
App-style mobile experience NEW
New bottom navigation on ≤1024px (Devices / Content / Playlist / Profile / More). Device, video, image and playlist lists render as compact cards on phones. jQuery UI dialogs fit any phone viewport.
Strong password policy SECURITY
NIST-style: 12-character minimum, blocks 1,197 breached passwords, no trivial sequences or username/email reuse. Enforced on every password form.
Strength meter + show/hide password NEW
Live meter (bar + label + rule checklist) on every password form. Detects breached passwords client-side. Eye toggle to show/hide.
Token-based password reset SECURITY
One-time SHA-256-hashed reset token, 1-hour TTL, rate-limited (1 reset per 3 minutes), no account enumeration. Replaces the old plaintext-password-email flow.
Bot protection on register NEW
Honeypot + 3-second time-trap. Blocks automated signups before any DB write.
Configurable bulk send NEW
Bulk send to all subscribers with configurable From and Reply-To. Per-user GDPR-aligned unsubscribe link included.
"Resume subscription" button on Profile UPDATE
For canceled subscriptions, a green button reactivates with a single click instead of re-running the full signup flow.
Restyled error page NEW
New error page in the app style, translated to all 5 languages (EN/ES/CA/FR/PT).
