Recent Activities

This page shows what are we working on.

breezefront / module-breeze-content-builder

5 hours ago success

swissup / navigationpro

5 hours ago success

swissup / module-navigationpro

6 hours ago success

swissup / module-dynamic-base-url

6 hours ago success

breezefront / theme-frontend-breeze-enterprise-blank

7 hours ago success

breezefront / theme-frontend-breeze-enterprise-apollo

10 hours ago success
  • head
    • Prevent zoom om mobile devices when focusing quantity field 0de256

    • Limit upsell and related products to 6 items on the product page 94dd46

    • Added BLB installation: Testimonials widget on category pages 60339b

    • Testimonials and BCB slider styles bb8fa5

    • Fixed qty overlap with actions in minicart on small screens, see #16 96cd74

    • Enabled mobile slider layout for columns and grid 77cb58

    • Created separate mobile slider 8880b4

    • Sync products widget styles with product list. Closes #13 241874

  • 3.1.2

swissup / module-pagespeed

10 hours ago success
  • 1.18.1
    • Version 1.18.1 31e2a3

    • Merge pull request #98 from swissup/fix/directmatch-mbstrpos-perf

      Fix DirectMatch O(n*m) mb_strpos on large non-ASCII patches f71c7a

    • Fix DirectMatch O(n*m) mb_strpos on large non-ASCII patches

      DirectMatchStrategy::findAndReplace branched to mb_strpos()/mb_substr() for
      any non-ASCII oldHtml. On PHP 8.2 mbstring that path is ~O(n*m): a Breeze
      enterprise product page produced three merged body-level patches (~310-388KB,
      containing "£"), each taking ~8s in DirectMatch (which then failed the match
      anyway), accounting for ~24s of the ~29s page-generation time.

      Use byte-based strpos()/substr_replace() unconditionally. This is correct for
      UTF-8 because UTF-8 is self-synchronising: a valid substring's byte sequence
      only matches at a character boundary, and substr_replace() operates on byte
      offsets. Also removes the now-dead charPosToBytePos() helper.

      Verified on staging: page generation 32s -> 6.6s. Full module test suite green.

      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 779231

    • fix(preload): default missing as attribute to style on existing links

      In-place update (1.18.1) stopped writing the "as" attribute that the
      old re-create path always set. rel="preload" without a valid "as"
      triggers browser warnings and may double-fetch the resource.

      - add regression test for the missing-as default
      - rename testProcessRemovesDuplicatePreloadLinks to match the
      keep-in-place semantics; drop stale comments

      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 47d617

    • fix(preload): keep existing preload links in place to preserve CSS order

      AddLinkPreload removed every existing rel="preload" link and re-inserted
      it right after <title>, above the critical <style>. Deferred stylesheets
      (converted by DeferCss, with onload flipping them back to
      rel="stylesheet") ended up before critical CSS in the DOM, inverting the
      cascade: critical CSS overrode the full theme CSS after load.

      - Existing preload links keep their DOM position; per-type rel,
      fetchpriority (within limits) and crossorigin are updated in place
      - Only new preloader assets are inserted after <title>; href dedupe
      against existing links and the live-script prefetch guard are kept
      - Replace applyPreloadChanges() with updatePreloadLinkInPlace() +
      insertPreloadLinks()

      Tests: add regression tests for link position relative to critical
      <style>; suite OK (644 tests, 1944 assertions).

      Fixes #97

      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 07ef75

    • fix: replace deprecated SplObjectStorage::contains() for PHP 8.5

      PHP 8.5 deprecates SplObjectStorage::contains(); with an error handler
      that escalates deprecations (e.g. Ignition) this kills page rendering
      inside the optimizer pipeline. Use offsetExists() — identical
      semantics, available since PHP 5.3.

      Fixes #96

      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> cee3e2

  • 1.18.0
    • Version 1.18.0 75bd79

    • test: add attribute metadata for PHPUnit 12 discovery

      PHPUnit 12 dropped doc-comment metadata: @dataProvider providers were
      not applied and @test snake_case methods were not discovered. Add
      #[DataProvider]/#[Test] attributes while keeping the annotations so
      the suite still runs on PHPUnit 9.6 (CI) and 10.5 (local), which
      ignore unknown attribute classes.

      Also accept the unused third data-set argument in testGetFilename —
      PHPUnit 12 warns when a provider passes more arguments than the test
      method accepts.

      Verified: PHPUnit 12.5.31 exit 0 (631 tests), PHPUnit 10.5.47 OK.

      Refs #92 5b20fe

    • feat!: remove Expire Header feature

      BREAKING CHANGE: Body\Expire optimizer, `pagespeed/expire/*` config
      and its admin section are removed.

      The feature set `Cache-Control: public, max-age=31536000` on document
      HTML for guest pages. Browsers and hosting-side proxies (invisible to
      the Varnish config check) cache such pages beyond any server-side
      flush, so merchants could not push content/price updates to returning
      visitors for up to a year. No PageSpeed/CWV benefit to offset that.
      Orphaned core_config_data rows are harmless.

      Closes #91 f659e6

    • chore: ignore phpunit cache and playwright artifacts be8bda

    • test: drop APIs removed in PHPUnit 12 from Test/Unit

      - replace getMockBuilder('stdClass')->addMethods() with createMock()
      of real classes (Store, Minify_HTML, HeaderInterface)
      - validate optimizers before logger init in Pipeline so expected
      InvalidArgumentException surfaces even without logger classes
      - register module-logger, module-image, mrclay/minify in tests
      bootstrap autoloader (absent from standalone test autoload)

      Refs #92 5393a1

    • fix(preload): prevent double download of scripts already in DOM

      DeferJs: remove addPreloadLinks() entirely — every external <script src>
      stayed live in the DOM while also getting a <link rel=prefetch> hint,
      causing the browser to fetch the file twice (confirmed: CookiePal,
      Elfsight, requirejs-config-breeze on mobile).

      - Remove Preload dependency, preload property, addPreloadLinks() method
      and all 4 call-sites from DeferJs
      - Remove script src collection in prepareElement()

      AddLinkPreload: add defensive liveScriptSrcs guard — skip any script
      href that already exists as a <script src> tag in the DOM, regardless
      of how it ended up in the Preload singleton.

      Tests: remove preloaderMock from DeferJsTest + DeferJsRegressionTest;
      add testScriptsAlreadyInDomAreNotPrefetched and
      testScriptsNotInDomCanGetPrefetchHint to AddLinkPreloadTest.

      Fixes #95 4b539f

    • fix(preload): per-type rel/fetchpriority; honor isEnabled config

      - Replace global priority counter with per-type counters
      - ALWAYS_PRELOAD_TYPES: font/style/image always rel=preload; scripts=prefetch
      - FETCHPRIORITY_LIMIT_BY_TYPE: null=unlimited (fonts), 2 styles, 1 image (LCP), 0 scripts
      - Fix isEnabled() hardcoded true -> config->isLinkPreloadEnabled()
      - Use array_key_exists to correctly handle null sentinel vs missing key (null??0 bug)
      - Add tests: image=preload, scripts=prefetch, per-type fetchpriority limits, isEnabled toggle

      Fixes #93 #94 84b155

    • feat: add dedicated cache type to isolate optimizer entries from block_html

      - Add Model/Cache/Type.php: new Magento cache type (swissup_pagespeed)
      - Add etc/cache.xml: register type with label/description
      - Update CacheManager: use Type::TYPE_IDENTIFIER instead of block_html,
      add Type::CACHE_TAG to entry tags for proper TagScope scoping

      Fixes Redis Default Cache pollution where 1.2M+ SWISSUP_PAGESPEED entries
      were mixed into the block_html cache type. Optimizer cache is now
      independently manageable in Stores > Cache Management. 9a552e

breezefront / theme-frontend-breeze-blank

12 hours ago success

breezefront / module-breeze-weltpixel-ga4

13 hours ago success

breezefront / theme-frontend-breeze-enterprise-eir

22 hours ago success
  • head
    • Keep working on prodcut listing and category page. 411088

    • Keep working on product listing toolbar. ebcfac

    • Working on product listing and toolbar look. 1ab39d

    • Add Cooper* font 132906

    • Add listing item styles and variables e725b5

    • Product lisnting in progress - grey bg and border radius. 4e7c35

    • Add new variable files for colors, typography, header, footer, icons, navigation, popover, minisearch, and gradient ba122c

    • Refactor footer and newsletter styles for improved consistency and responsiveness d831e4

    • Footer top newsletter - some updates. 452ca5

    • Add footer top content block and styles for newsletter integration (WIP) 128131

    • Footer bottom. 8d58ea

    • Add footer content block and styles for enhanced footer layout 4d6b1b

    • Header. Hide menu on medium screens. Update search look on monile. e0146d

    • Installer. Add navigation slideout menu a89fd5

    • Add EasySlide functionality for header panel with custom slides and styles e55b0b

    • Add minisearch layout and styles to enhance search functionality 5c5aec

    • Update config.xml and LESS files for theme adjustments and styling improvements of search field 09f88d

    • Add Lexend font and related styles to the theme 0100e8

    • Create config.xml a78b04

    • Create installer.xml 073f18

    • Create view.xml baa3b6

    • Create theme.xml 440a18

    • Create registration.php 119b4f

    • Create README.md 2a5862

    • Create composer.json 16ec29