v3.7.0: Public Changelog & Spotlight Improvements
Highlights
Public Changelog Page
A new /changelog page is now live on the site. It lists the 10 most recent GitHub releases in a Linear-inspired vertical timeline, with each release date sticky on the left while scrolling through a release body, and a page-level sticky sidebar on the right listing every contributor to the project since day one.
Why this matters — in most open source projects, contributors become invisible once their PR is merged. On laravel.cm, anyone who has ever contributed to the code base now gets their avatar and GitHub handle displayed on a permanent wall of fame. For early-career developers in the francophone African ecosystem, the page is a living CV backed by code.
The page auto-syncs with GitHub releases (3-to-5-day cache with stale-while-revalidate) and with project contributors (7-to-14-day cache), so each new release automatically updates the page with zero maintenance.
Accessible from:
- Footer → Resources → Changelog
- Spotlight command palette (
Cmd+K) → type "changelog", "release", "mises à jour"
Language Switcher in the Spotlight
The command palette now exposes a Switch language command next to Toggle theme. Toggling the language:
- Persists the choice in user settings when authenticated — follows you across all your devices
- Falls back to session storage for guests
Both entry points (spotlight and the existing sidebar toggle) now share the same sanitisation logic.
Security Hardening
Fixed a latent open-redirect vulnerability in the locale switch handlers. url()->previous() falls back to the Referer header which is client controlled — a crafted request could have redirected visitors to an attacker-controlled domain after switching language. A new safe_previous_url() helper now enforces a strict same-origin check across every redirect target.
Added
- Public
/changelogpage with Linear-inspired timeline (#529) GetGithubReleasesActionandGetGithubContributorsActionwithCache::flexibleSWR (#529)ReleaseBodyRendererservice that hardens release bodies against XSS (stripsjavascript:,data:,vbscript:schemes, enforcestarget="_blank" rel="noopener noreferrer nofollow"on external links, linkifies PR references) (#529)- Per-release contributors block with stacked avatars and translated counter (#529)
- Sticky page-level "All contributors" sidebar with
flux:tooltipon hover (#529) GoToChangelogSpotlight command (navigation group, synonyms in fr/en) (#529)ToggleLocaleSpotlight command (commands group, persists in user settings) (#529)- Footer link to the changelog under Resources (#529)
/changelogentry insitemap.xmlwithlastmodpulled from the latest release,priority 0.3,changefreq monthly(#529)safe_previous_url()helper inapp/helpers.php, inline-documented, covered by 6 tests (#529)
Changed
- Extracted shared GitHub API logic into
AbstractGithubApiActionto remove ~60% of duplicated HTTP + error-handling code between the two actions (#529) - Contributor avatars now use the native
avatar_urlreturned by the GitHub API (avatars.githubusercontent.com) instead of proxying throughunavatar.io— one less external dependency (#529) ReleaseData::$published_attyped asCarbonInterfaceinstead of the concreteCarbonclass, matching the rest of the codebase (#529)- Route
/changelograte-limited to 60 requests per minute (#529)
Fixed
- Open-redirect through
url()->previous()inChangeLocaleandToggleLocale: the previous URL is now validated against the app host before being used as a redirect target (#529)