Changelog

All changes and updates to this site.

Light mode code blocks and site improvements

  • Code blocks now use a light theme (github-light) in light mode, dark theme (github-dark) in dark mode
  • Replaced runtime highlight.js with Shiki build-time syntax highlighting for faster page loads
  • Copy button on code blocks adapts styling for light and dark modes
  • Added missing excerpt to queue safety article for the articles listing page
  • Added comprehensive Playwright test suite (76 tests across 8 files)

Site improvements: fonts, favicon, SEO, and more

  • Updated typeface to Inter (body) and system-ui (headings)
  • Added JS favicon and default OG image for social sharing
  • Added robots.txt and llms.txt for search engine and AI crawler discoverability
  • Added OG meta tags on all article pages
  • Fixed redirect chains (302 to 301, trailing slashes)
  • Added changelog page
  • Improved RSS feed with full article content
  • Auto-calculated reading time on article cards
  • Added recent article suggestions to 404 page
  • Added redirect for truncated Twitter URL
  • Excluded future-dated articles from builds

Published: Improving Queue Safety in Laravel

  • Published queue safety audit with 14 findings and 9 community-reported issues
  • All verified against Laravel Framework v13.4.0 with links to real GitHub issues spanning 2015 to 2026
  • Includes SafeJob base class, AI audit prompt, and actionable safeguards
  • Documents root cause of two Vapor billing incidents ($140 in 2019, $218.90 in 2023)

Updated developer bio

Removed "full-stack" from developer bio on index and about pages.

Published: Why Your Laravel Jobs Might Retry Forever After an OOM

Published a fact-checked blog post documenting Laravel Issue #58207 with end-to-end proof on Laravel 13.4.0. Includes before/after test results, source code verification, and links to the public reproduction repo.

Share button on articles

Added a copy-to-clipboard button next to article titles. Copies the short link URL with a toast notification.

Dynamic short link redirects

Short links are now generated at build time from article frontmatter instead of being hardcoded in netlify.toml. Adding `shortLink: "/my-link"` to any article automatically creates the redirect.

Site polish and mobile fixes

  • Animated JS logo with hover typing effect
  • Clickable topic tags
  • Tag filter bar on articles page
  • Tech filter on projects page
  • Collapsible table of contents
  • TLDR summaries
  • Service worker for offline support
  • Lazy-loaded syntax highlighting
  • Fixed touch targets for mobile accessibility
  • Fixed dark mode flash on navigation

Site rebuilt from Statamic to Astro

  • Complete rebuild using Astro 6 with React islands
  • Migrated 14 articles from Statamic SSG
  • WebGL hero canvas
  • Spotify-inspired dark theme with 8 colour themes
  • Ctrl+K search with Fuse.js
  • Reading progress bar
  • Table of contents
  • Copy-to-clipboard code blocks
  • RSS feed and sitemap
  • Konami code easter egg
  • 301 redirects for all old URLs

Final articles on Statamic

  • "Windows vs Mac for Claude Code: The Benchmark That Changed How I Work"
  • "14 More PRs Merged Into Laravel"
  • "Laravel PR #59323 Post-Mortem"

Published Laravel contribution articles

  • "FragHub.gg" project showcase
  • "25 Laravel Bug Fixes, Tested, Verified, Ready to Merge"
  • "Update: Unblocked, 25 Laravel Fixes and What's Next"
  • "20 PRs Merged Into Laravel in 12 Days"

Published project showcases

  • "I Built a Free Poker Timer App"
  • "Barcoder: A Free Barcode Scanner and Creator"

Published two career articles

  • "Why KPIs Work Best When People and Customers Come First"
  • "Why I Chose to Build My Own Apps Instead of Taking a Traditional Job for Now"

Published: Dark mode selector with Alpine.js and Tailwind

Tutorial on adding a dark mode selector to Alpine.js and Tailwind CSS apps.

Site launched on Statamic

  • Launched joshsalway.com using Statamic SSG on Netlify
  • Published first two articles: "Using Laravel Constants in React with Inertia.js" and "Using Laravel Enums in React with Inertia.js"