Promote beta (73 commits) to production, as requested.
Changes
Gyms with brand colour/logo, per-gym SEO, JPEG XL uploads + optimizer, gallery multi-upload, navbar/hero redesign, Instagram community section, dev toolbar (inert in production: platform-tools main has no functions_dev.php).
Deploy
Migrations pending in prod: migration_20261013_gym_brand_color.sql, migration_20261026_gym_logo.sql (both idempotent). Prod DB + uploads backed up to /srv/data/fitme.andmore.pt/backups/pre-dev-sync-20261026.
## Summary
Promote beta (73 commits) to production, as requested.
## Changes
Gyms with brand colour/logo, per-gym SEO, JPEG XL uploads + optimizer, gallery multi-upload, navbar/hero redesign, Instagram community section, dev toolbar (inert in production: platform-tools main has no functions_dev.php).
## Deploy
Migrations pending in prod: migration_20261013_gym_brand_color.sql, migration_20261026_gym_logo.sql (both idempotent). Prod DB + uploads backed up to /srv/data/fitme.andmore.pt/backups/pre-dev-sync-20261026.
## Risks/rollback
Revert the merge on main and restore the backup.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Register the icons packs in platform_connect, add fit_icon_assets() with local
fallback, and add a sysadmin 'Pacotes de icones' link to platform?tool=icons.
img_optimize() decodes .jxl with djxl or Imagick, resizes with GD, re-encodes
with cjxl and writes foto.jxl.webp beside it; skips cleanly without a decoder.
Gallery, hero, navbar logos and JSON-LD serve the JXL with the fallback, and
trash/removal move the fallback with its .jxl.
The match head is painted in the other gym's colours with a strip in this site's accent; below 992px it is a slashed band at the bottom of the open menu (menu height from the real header height). The CrossFit page gets the centred logo crossfade, the hero logo has a fixed 52px height, and the hero h1 shadow is softer with the frosted blur at .8.
- Generated SEO titles/descriptions per gym; gym seo fields override each on its own
- Keywords, author, og:site_name, favicon and JSON-LD logo follow the gym
- CrossFit page 404s before output for gyms without a box
- Events: «Mostrar em» gym selector; event page uses its gym's brand
- Hero event button text colour from the event colour (--ev-on)
- Navbar bottom line stops at the other-gym head (--switch-w)
- Diagonal hero blur mask; remove the trial link
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Promote beta (73 commits) to production, as requested.
Changes
Gyms with brand colour/logo, per-gym SEO, JPEG XL uploads + optimizer, gallery multi-upload, navbar/hero redesign, Instagram community section, dev toolbar (inert in production: platform-tools main has no functions_dev.php).
Deploy
Migrations pending in prod: migration_20261013_gym_brand_color.sql, migration_20261026_gym_logo.sql (both idempotent). Prod DB + uploads backed up to /srv/data/fitme.andmore.pt/backups/pre-dev-sync-20261026.
Risks/rollback
Revert the merge on main and restore the backup.
🤖 Generated with Claude Code