Changelog
A running log of changes to mattrugamas.com since the April 2026 redesign.
June 22, 2026
Added
- Custom
404.htmlnot-found page for missing URLs on GitHub Pages — later replaced with the codec-style FOX page (see Changed). .ruby-versionpinning Ruby 3.2.0 to match the GitHub Actions workflow.- Shared
_includes/post-list.htmlpartial for the year-grouped blog index markup.
Changed
- Replaced the plain
404.htmlwith a codec-style not-found page: a hand-traced SVG of the FOX unit insignia (full silhouette including the detached mouth and front leg) in_includes/fox-logo.html, Colonel/Snake dialogue personalized to the site's actual pages and Jekyll setup, live requested-path readout via client-side script, and recovery links to the homepage, Still on Jekyll, Probably Forever, and a fallback post. Styled in new_sass/not-found.scss. - Expanded
README.mdinto a maintainer guide: project structure, data files, URL shapes, site features (theme, Giscus, analytics, obfuscated email), asset scripts, and workflows for adding posts and tags. - Extracted duplicate blog-list markup from
index.htmland_layouts/tag.liquidintopost-list.html. - Tag archive pages under
tags/now inheritlayout: tagfrom a_config.ymldefault instead of repeating it in every stub file. - Closed two gaps left by the prior interface-polish pass. The nav menu link pills now scale to
scale(0.96)on press, matching the press feedback already on the adjacent icon controls and glass buttons (previously they cross-faded color only). Andtext-wrap: prettynow extends to blog-post list items, so bulleted and numbered body copy gets the same orphan-avoidance the prose paragraphs already had. - Renamed the development branch from
tmp-checkpointtomainand documented the deploy loop inREADME.mdand the Cursor deploy rule: pushmain, thengit push origin main:releaseso both branches stay aligned without merge-commit drift. Renamed the frozen Travis-era site branch frommastertoarchive/legacy-site. - Bumped GitHub Pages workflow actions to Node 24–native majors (
checkout@v5,configure-pages@v6,upload-pages-artifact@v5,deploy-pages@v5) to clear runner deprecation warnings ahead of GitHub’s Node 20 removal.
Fixed
- 404 codec transmission card no longer overflows right on mobile:
box-sizing: border-boxon.not-found-codecsowidth: 100%includes its padding, plusmin-width: 0on the section flex child andoverflow-wrap: anywhereon inlinecodein the dialogue. - Google Analytics stopped initializing in production because the CodeQL-driven
.js.liquidrename caused Jekyll to emitga-bootstrap.js.liquidinstead of/assets/js/ga-bootstrap.js, so the layout’s script tag 404’d. Inlined the four-line bootstrap inbase.liquid, revertedrandom-posttoassets/js/random-post.jswithlayout: null, and narrowed the CodeQLpaths-ignoreto that file only. - Bumped
concurrent-rubyfrom 1.3.5 to 1.3.7 inGemfile.lock(Dependabot security update). - Fixed GitHub CodeQL parse errors on Jekyll-templated JavaScript by renaming
ga-bootstrap.jsandrandom-post.jsto.js.liquid(build output URLs unchanged) and excluding those templates in.github/codeql/codeql-config.yml. - Hardened client-side email link assembly in
site.js:data-u/data-dvalues are trimmed, regex-validated, and passed throughencodeURIComponentbeforesetAttribute('href', …), clearing a CodeQL DOM XSS warning. - Replaced
href.includes(…)platform detection inanalytics.jswith hostname parsing viaURLand an allowlist, fixing CodeQL incomplete URL substring sanitization warnings on music and link-hub click tracking.
June 21, 2026
Changed
- Applied interface-polish fixes from a design-engineering skills audit: normalized press feedback to
scale(0.96)on glass buttons, link-hub cards, and nav icon controls; enlarged nav icon hit areas to 40×40px; retuned the theme-toggle sun/moon crossfade toscale(0.25)with ablur(4px)enter/exit andcubic-bezier(0.2, 0, 0, 1); swapped tinted image borders for pure black/white--img-outlineon the About photo, link-hub avatar, and post figures; addedtext-wrap: balanceon headings andtext-wrap: prettyon prose viacontent-base; appliedtabular-numsto dates and footer years; switched music-project hovers to a::beforeopacity cross-fade; and completed thenav-item-inkeyframetoblock.
June 17, 2026
Added
- Published a new post, "Glass, and the Machine That Built It" (
_posts/2026-06-10-glass-and-the-machine.md), on the latest redesign and on letting an AI model carry out the implementation while the direction and taste stayed human. The post leads with a generated abstract image — a frosted glass pane refracting a teal wash, assembling itself from drifting shards — atassets/img/posts/glass-and-the-machine.png, placed after the opening paragraph so the homepage excerpt stays text. Taggedwebsiteandideas.
Changed
- Aligned the homepage and tag-archive blog index with a shared date gutter: year headings now right-align in the same fixed column as post dates, and each date vertically centers on its title row via matched header padding plus a cap-height offset. Fixed a selector leak where nested tag
<li>s were inheriting the post-row subgrid layout. - Softened a word in the About page's second paragraph, changing "hobbyist road cyclist" to "recreational road cyclist".
June 16, 2026
Added
- Added a social share card so links to the site render a rich preview in iMessage and on social platforms. A new
scripts/generate-social-card.pyrenders a 1200×630 card from the site's own type and palette — the MR monogram, the name in Geist, "customers, product & code" in Instrument Serif Italic, and a Geist Mono footer — toassets/img/site/social-card.png. It is wired intojekyll-seo-tagthrough a front-matter defaultimage(with width and height) in_config.yml, which every page inherits and which upgrades the Twitter card tosummary_large_image.
Changed
- Polished the homepage lede and the About and Music copy. The lede now reads "help support teams scale"; the About opener leads with the remote Cursor role and closes with a more self-aware take on defining good support as technology enters a new paradigm, with tightened phrasing and a pronoun fix; and the Music intro tightens the instrument progression to guitar, drums, and bass and refines the collaboration line. The About opener was further tightened to drop the "quietly" qualifier and the closing "as daunting as it is exciting" line.
- Updated the site
descriptionandtaglinein_config.ymlto reflect the current Technical Support Engineer role and the "customers, product, and code" ordering used throughout the new copy. - Rewrote the homepage lede beneath the name to reflect current work: it now frames the role around the intersection of customers, product, and code, with a drive to help young support teams scale and define what support looks like in an AI-native world. Renamed the element from
#taglineto#ledeinindex.htmland its style block in_sass/_settings.scss, since the paragraph functions as an introductory lede rather than a tagline. - Rewrote the About page in a tighter, more self-aware voice. The opening paragraph now leads with the current Cursor role and the customers/product/code intersection, including the work of scaling young support teams and defining support in an AI-native environment; the remaining paragraphs trim corporate phrasing, add a note on a love for art and life, and drop em dashes and colons in favor of plainer punctuation.
- Rewrote the Music page intro, replacing the previous "Playing music has been a constant" opener with a more personal account: making and collaborating on music since sixteen, moving from guitar to drums to bass, framing collaboration as one of the joys of music and an open invitation to new projects, and presenting the page as a rough archive of projects.
- Redesigned per-post tags on the homepage, tag archives, and blog post layouts as a quiet metadata line — lowercase monospace labels in the muted dates color with middot separators, rendered through a shared
_includes/post-tags.htmlpartial. On listing rows the tags sit below the excerpt and the date column is pinned to a fixed width, so titles and rows stay aligned no matter how many tags a post carries; on post pages the tags sit on their own line beneath the date. The interactive filter-nav pills are unchanged. - The Google Analytics loader now reads the measurement ID from
G-EC57RQ9MNYin_config.ymlinstead of a hardcodedG-ID in the base layout, making the config the single source of truth for both thegtag.jstag and the bootstrap script.
Fixed
- On iOS Safari, the ambient bottom glow on the homepage and other full-chrome pages left a flat seam above the floating bottom toolbar. The glow is anchored to a fixed (layout-viewport) layer, so it can't track the toolbar as it expands, and
env(safe-area-inset-*)only accounts for the home indicator rather than the toolbar height. The bottom wash is now dropped on iOS phones (@supports (-webkit-touch-callout: none)at narrow widths) while the two top washes remain; the bottom simply renders as clean base color. An earlier attempt to close the seam with site-wideviewport-fit=coverand safe-area bleeds was reverted because it could not reach past the toolbar. - Google Analytics stopped initializing because
ga-bootstrap.jswas being wrapped in the default layout at build time, so the browser received a full HTML page instead of JavaScript. Addedlayout: nullto the file's front matter so Jekyll emits only the processed bootstrap script.
June 12, 2026
Added
- About page CTAs are now driven by
_data/findme.ymlvia, so contact and social links can be edited in one place without touching HTML. - Post pages now hide the Giscus comments section when the embed reports an unrecoverable error (for example a giscus.app outage), instead of leaving a broken widget on the page.
- Added blog tags (website, projects, ideas, music) with archive pages at
/tags/<tag>/, tag front matter on every post, and a homepage filter nav driven by_data/tags.yml.
Changed
- Collapsed
_layouts/minimal.liquidintodefault.liquid; the links hub now setsminimal_chrome: truein front matter instead of a separate layout. - Renamed legacy post files to kebab-case and added explicit
layout: postanddate:front matter to every post. - Split
assets/img/intoassets/img/site/(photos and UI images) andassets/img/posts/(blog figures). - Excluded
scripts/from the Jekyll build so favicon tooling no longer ships to production. - Replaced the terminal-style favicon set with an MR wordmark that matches the nav home mark — Instrument Serif italic on the site charcoal base, across every size in the package (
favicon.ico, PNGs, Apple touch icon, Android chrome icons, Safari pinned tab, and Windows tile). Cache-bust query bumped to?v=3; manifest and tile theme colors now use the current palette.
Removed
- Deleted unused
_includes/pagetitles.html; page titles are handled byjekyll-seo-tag.
Fixed
- Link hub hovers felt sluggish because entrance animations were applying
transformandwill-change: transformto.link-hub-sectionparents of glass link cards, and hover was repaintingbackground-colorinsidebackdrop-filtersurfaces. Sections now use an opacity-only entrance (animate-fade-only), link hovers cross-fade a::beforeoverlay like the nav, andanimationendhandlers only detach after the entrance animation on the target element itself. - On
/links/, Safari 26+ was tinting the tab/status bar from the animated aurora and the nav'sbackdrop-filterinstead of the active theme. The aurora now carries an explicit--color-basefill plus a neutralbackdrop-filterto opt out of toolbar sampling; the links nav's glass moved to an absolute::afterso the fixed bar stays transparent; ambient washes moved tohtml::beforeso they aren't buried bybodybackground; andviewport-fit=coveris scoped to the links layout only. - On iOS Safari (
/links/), Liquid Glass left a seam between the URL bar tint and page paint. The aurora bleeds intoenv(safe-area-inset-*)and hidden mobile sampling strips pin toolbar tint to the theme base. - On Chromium (
/links/, e.g. Dia), the title bar was still tracking the animated aurora. A fixed top.link-chrome-edgestrip pins sampling to--color-base, site-wide html washes are suppressed behind the aurora, and the links nav opts out of backdrop sampling.
June 11, 2026
Added
- Résumé experience timeline — each role is now a chapter card on a vertical rail with mono index + dates eyebrows, scroll-triggered reveal, and a breathing marker on the current role. Section headings, skill cards, and recommendation cards share the same soft surface vocabulary (
--card-bg, hairline border,--radius-md). - Sequenced page entrance animations (
_sass/animations.scss,site.js): main content blocks float in on load with staggered timing. Animation classes are stripped onanimationendso compositor layers don't linger and post-load hovers stay responsive.
Changed
- Restyled the résumé beyond the timeline: profile opens with a lead paragraph, recommendations collapsed into one section of serif quote cards, and skills became a two-column grid of capability cards with mono labels. Print styles collapse cards back to plain stacked copy.
- Nav and blog post hovers now fade a
::beforeoverlay (opacity) instead of repaintingbackground-colorinside the glass nav — faster interaction onbackdrop-filtersurfaces.
June 10, 2026
Fixed
- Opening the mobile menu no longer shifts the nav's top-row controls. The bar relied on
min-heightcentering, so when the menu wrapped in as a second flex row the first row collapsed to content height, squeezing the MR mark, RSS, theme, and close controls against the nav edge. The first row is now pinned to a fixed height (--nav-row) that the scrolled state compresses instead, so the controls hold position whether the menu is open or not. - Mobile menu items now have proper spacing (
gap) between the stacked pills, so a tapped item's focus ring no longer touches the active item's lozenge.
Removed
- Deleted the unfinished
link-in-bio-platform-who.mddraft in favor of an upcoming post introducing the redesign.
Changed
- Shipped a full Liquid Glass redesign across every page, guided by Apple's Human Interface Guidelines. The fixed full-width nav became a floating glass pill — inset from the top, centred, capped at 760px — built from real glass material (
backdrop-filterblur + saturate, hairline border, inner top bevel, soft depth shadow) with an opaque fallback whenbackdrop-filteris unsupported. The bar compresses and strengthens its material once the page scrolls (anIntersectionObserversentinel, no scroll listeners), nav links became sentence-case lozenge pills with a soft active highlight, and the mobile menu expands the pill into a glass sheet with staggered item entrances. - New type pairing: Instrument Serif for display headings (with italic accent words in the hero, page titles, and the new serif-italic "MR" home mark) and Geist for body and UI, with Geist Mono replacing Source Code Pro for code, dates, and metadata. The scale was rebuilt around clamp-based display sizes with tighter heading tracking.
- Evolved the palette: the charcoal base deepened to near-black with layered surface tints, cream text softened toward warm off-white, and the old pink/cyan pair was demoted to a single refined teal accent (pink survives only decoratively — code strings and background washes). Both themes pick up faint fixed radial ambient washes behind the content for the glass to refract.
- Reskinned every page on the new system: blog rows trade the hard
border-lefthover for soft rounded surfaces, tag chips became quiet glass pills, music entries became cards, the about CTAs and résumé print button became glass buttons, code blocks picked up rounded hairline borders, heavy accent rules were replaced with hairlines throughout, and the/links/hub cards upgraded to the shared glass material. The iOS-style theme switch was replaced with a single sun/moon icon button that cross-fades and rotates between modes. - New shared design tokens in
_settings.scss: glass material (--glass-*), motion (--ease-glass, duration steps), shape (12/20/28px radii + pill), and card/hairline surfaces. All animation respectsprefers-reduced-motion, the résumé print stylesheet is untouched, andtheme-colormetas track the new base colours.
June 5, 2026
Fixed
- Smoothed out scroll jank on the
/links/mesh-gradient background. Three culprits were making the field feel "glitchy" while scrolling: themix-blend-mode: screenlayers were reading the scrolling page as their blend backdrop, forcing the heavily-blurred mesh to re-rasterise every frame; the layer usedinset: 0, so its height tracked the dynamic viewport and the centred mesh lurched as mobile browser chrome collapsed on scroll; and the oversized, blurred fields were expensive to repaint. Fixed by addingisolation: isolate(so the blend stays within the two gradient layers instead of the page behind them), pinning the layer to the large viewport (height: 100lvhwith avhfallback, viatop/left/rightinstead ofinset), and promoting each field to its own GPU layer (contain: layout paint+backface-visibility: hidden) so the animation is a pure composited transform. No visual change — the look is identical, just steady while scrolling.
June 4, 2026
Changed
- Reworked the
/links/aurora background into a full-viewport flowing mesh gradient. The four discrete drifting colour blobs were replaced with two oversized, heavily-blurred multi-stop radial layers (rendered on.link-aurora's::before/::after) that slowly counter-rotate and pulse-scale, so the palette-derived colour wells bleed into one continuous, morphing field rather than reading as separate orbs. The layer now spans the entire viewport (inset: 0) instead of a top-of-page band, the previous vertical fade was swapped for a soft radial vignette that frames and gently dims the reading column while melting the field into the screen edges, the brand hues were punched up a notch in both themes, and the motion runs roughly twice as fast. Link buttons also picked up a frosted-glass treatment (backdrop-filterblur + a translucent base) so they stay legible over the brighter full-bleed field. The whole effect still holds still underprefers-reduced-motion.
June 3, 2026
Added
- Added an animated aurora background to the
/links/page: four slow-drifting, palette-derived colour blobs (the brand rose and teal, plus a periwinkle bridge and a warm amber glow) rendered as a fixed, negativez-indexlayer behind the hub. The layer is masked with a vertical gradient so the glow concentrates above the fold and dissolves into the page around the first link, and it scales fluidly from mobile to desktop viaclamp()-sized blobs. Intensity is tuned per theme — gentler on dark, more vivid and saturated on light — and the whole effect holds still underprefers-reduced-motion.
Changed
- Replaced the link hub's static
--link-hub-washradial gradient with the new aurora layer, promotingmain:has(.link-hub)to a stacking context (isolation: isolate) so the animated background paints above the opaque base colour but below both the links and the fixed nav.
June 2, 2026
Changed
- Updated about.html to reflect the new role as Technical Support Engineer at Cursor. Removed the "open to new opportunities" paragraph.
- Updated resume.html: added Cursor as the current position (Technical Support Engineer, June 2026 – Present, no bullet points yet), updated the page meta description, header tagline, and profile blurb to reflect the role change.
- Updated index.html homepage intro to read "Support Engineer based in Los Angeles", keeping the homepage line minimal while role details live on About and Résumé.
May 15, 2026
Added
- Added an inline Discord glyph to any link-hub item whose URL points to
discord.ggordiscord.com, using the same sizing/coloring conventions as the Instagram and Steam icons.
Changed
- Expanded the link-hub click-tracking platform detection to recognize Steam and Discord as named platforms instead of bucketing them under
other, so the GA breakdown stays consistent with the icons rendered on the page. - Refreshed the
README.mdso it actually describes the project: replaced the dead Travis CI badge with a live GitHub Actions deploy badge, updated the stack and plugin list to match the currentGemfileand_config.yml, documented thetmp-checkpoint→releasedeploy workflow, and removed the long-stale "Goals" list. - Audited
_config.yml: split the homepage identity into a shorttagline("Customers, code, and product") that jekyll-seo-tag uses for the homepage<title>concat, and a longerdescriptionreserved for the meta description and social cards. Removed staletwitter_usernameandcodepen_usernameentries, deleted a no-opdefaultsrule that setimage: trueon every file underassets/img/, and added an explicitexcludeblock soREADME.md,LICENSE,Gemfile(.lock),vendor/, and.github/stop getting copied into the built site. - Audited
.gitignore: addedvendor/and.bundle/for bundler vendoring directories that don't belong in version control, and tightened the existing*swppattern to*.swpso it only matches the actual vim swap extension.
Fixed
- Styled lists inside blog posts. The global reset strips bullets and indent from every
<ul>, and no rule restored them insidearticle.blogpost, so<ul>/<ol>/<li>fell back to the browser-default serif (Times New Roman) with no markers. Added matching$fonts-body, indent, bullets, and item spacing inside the post article. The issue was latent until the first post that actually used a list.
Added
- Added a citations / footnotes treatment for posts: kramdown's
.footnotesblock now renders as a muted, smaller-type section below the post body with a thin top divider, an inline-rendered paragraph per item (so the marker stays inline with the text), and a subtly styled↩back-reference. Inlinesup a.footnotereference markers also get a small bump in weight so they read as citations rather than orphan numerals. - Backfilled inline links and footnotes in The Redesign and Still on Jekyll, Probably Forever: brand names (Jekyll, GitHub Pages, Next.js, Astro, Netlify, Cloudflare Pages) now link to their respective homepages, and each post picks up a single explanatory footnote where the original prose was lightly hand-waving a technical claim.
May 14, 2026
Changed
- Extracted the inline body scripts from the base layout and event-tracking include into external files at
/assets/js/site.jsand/assets/js/analytics.js, loaded withdefer. Keeps the HTML cleaner, lets the browser cache the scripts across pages, and is friendlier to a future Content Security Policy. The pre-paint theme-flash script in<head>intentionally stays inline so it can run before first paint. - Extracted the Google Analytics bootstrap into a Jekyll-processed
/assets/js/ga-bootstrap.js(theG-EC57RQ9MNYtoken still gets substituted at build), and dissolved the now-redundantevent-tracking.htmlandGoogleAnalytics.htmlincludes back into the base layout. - Extracted the post-layout inline scripts into
/assets/js/giscus-loader.js(comments embed) and/assets/js/random-post.js(Jekyll-processed so the full post list is still rendered at build, but filtering of the current page now happens client-side againstwindow.location.pathname). - Merged the standalone
syntax.cssRouge theme into_sass/posts.scssand dropped the extra stylesheet link from the base layout, so syntax tokens now compile into the mainstyles.cssbundle alongside the rest of the post styles.
May 13, 2026
Added
- Added a links hub at
/links/: a stacked, mobile-first profile page that pulls sections and items from_data/links.yml, rendered through the minimal layout. Includes outbound-click tracking with platform detection (Spotify / YouTube / SoundCloud / Instagram). - Added an inline Instagram glyph to any link-hub item whose URL points to
instagram.com, sized inemso it tracks the button's font size and inherits the link color on hover. - Added an inline Steam glyph to any link-hub item whose URL points to
steamcommunity.comorsteampowered.com, using the same sizing/coloring conventions as the Instagram icon.
Changed
- Swapped the link-hub's radial wash from rose to teal in light mode (via a new
--link-hub-washcustom property), so the page sits inside the rest of the site's light-mode palette instead of fighting it.
Fixed
- Associated each link's optional hint text with its anchor via
aria-describedby, so screen readers announce the hint as part of the link's accessible description instead of as orphaned text below it. - Aligned the links-hub avatar's
width/heightattributes (88×88) with its rendered CSS size to prevent a small layout shift on slow connections.
May 10, 2026
Changed
- Aligned the theme toggle with proper switch semantics: the control is now named Dark mode and its
aria-checkedstate matches the active theme (true when dark mode is on). - Improved the mobile navigation behavior by scoping toggling logic to the header nav (so it doesn't interact with the tag filter nav) and adding Escape-to-close with focus return to the toggle.
- Upgraded date markup across the site to use semantic
<time>elements with machine-readabledatetimeattributes (homepage listing, tag archives, and post headers). - Refactored the post footer navigation from a
<table>to a semantic definition list (<dl>) inside a labeled<nav>, preserving the same visual layout while improving meaning. - Removed inline JS on the résumé print button and attached printing behavior via the site script instead, keeping markup cleaner and more CSP-friendly.
Added
- Added an accessibility stylesheet with consistent
:focus-visiblerings and aprefers-reduced-motionmode to reduce animations and transitions for motion-sensitive users. - Labeled the Giscus container as a Comments region so it’s discoverable as a landmark/region for assistive tech.
Fixed
- Fixed the Skip to Main Content link on post and tag pages by ensuring the target exists everywhere (
id="mainContent") and is focusable for reliable keyboard navigation. - Fixed the post footer random post link for no-JS / script-failure scenarios by giving it a real server-rendered fallback URL and title.
April 25, 2026
Changed
- Rewrote the code syntax theme to align with the site's brand palette. Block code (
pre.highlight) and inline code (code.highlighter-rouge) now consume CSS variables, so light and dark modes share one cohesive scheme: keywords use highlight (cyan in dark / deep teal in light), strings use links (pink / deep rose), numbers and names use dates (sage / dark teal), and comments use a mode-specific muted tone. - Added
--code-bg,--code-comment,--inline-code-bg, and--inline-code-bordercustom properties to_settings.scss, with values defined for dark, light, and print modes. - Removed the hardcoded rose border on
pre.highlightblocks; the themed background now defines the well on its own. - Redesigned the post footer. The two-column flex layout is now a
1fr autogrid: the left rail (next/previous/random) absorbs slack, the right rail (RSS / about / reply via email) sits flush at content width. Section headings are dropped — structure carries the meaning. The left rail is now a<table>with Next/Previous/Random labels and post-title links; the right rail is an<ol>with visible numerals. - The post footer's random link now picks a post on page load and renders its actual title in the footer (rather than a generic "Random post" label that picks at click time).
Fixed
- Fixed inline code chips (
--safe,.travis.yml, etc.) rendering as cream text on a dark slab in light mode, failing WCAG contrast. Light mode now uses dark text on a near-transparent$light-selectedtint with a hairline$light-inactiveborder.
April 23, 2026
Added
- Added a post footer below Giscus comments on every blog post with two columns: Navigate (next/previous/random post links) and Elsewhere (RSS, about page, reply via email).
- Added tag system infrastructure: tag filter bar include, tag archive page layout, and inline tag display on posts and homepage. Ready to use once tags are assigned to posts.
- Added email obfuscation across the site. Contact email is now constructed at runtime via JavaScript data attributes, keeping it out of the HTML source to deter scrapers. Falls back to the about page for no-JS visitors.
- Added event tracking for tag filter clicks and post footer link clicks.
- Added an RSS icon (SVG) to the navigation bar actions, to the left of the theme toggle. Visible on all screen sizes.
- Added a "MR" home wordmark on the left side of the mobile navigation bar for quick tap-to-home navigation. Hidden on desktop where the full nav is visible.
Changed
- Replaced the plaintext
mailto:link on the about page with the new obfuscated email include. - Replaced the sun/moon theme toggle icons with an iOS-style toggle switch. Pill-shaped track with a sliding circular thumb; track highlights on light mode.
- Moved the RSS link from the site footer to the navigation bar.
- Scoped site navigation CSS from bare
navtoheader > navto prevent styles leaking into the tag filter<nav>element. - Bumped
addressablefrom 2.8.7 to 2.9.0 andjsonfrom 2.15.1 to 2.15.2.1 (transitively pullingpublic_suffixfrom 6.0.2 to 7.0.5). - Resized the navigation RSS icon from 16px to 20px so it visually matches the height of the theme toggle track.
Fixed
- Fixed the nav link hover underline animation appearing on touch devices (phones/tablets) where hover is not supported. Wrapped the
::afterunderline in@media (hover: hover).
April 21, 2026
Fixed
- Browser URL bar now matches the active color scheme. The
theme-colormeta tag updates on page load (from stored preference) and on every toggle click, so the chrome reflects dark or light mode in real time.
April 20, 2026
Added
- Added a third Résumé testimonial from Daren Nkomo (Software Engineer – Trello, Atlassian) highlighting resilience, energy, and ownership under pressure.
Fixed
- Fixed résumé print output on iOS Safari rendering with a black background and black text when the device is in dark mode. Added
color-schemedeclarations and forced light-palette CSS custom properties in the print media query.
Changed
- Tightened wording across five résumé Skills rows for clarity and industry-standard terminology: Frontend now reads "step-through debugging" instead of "live breakpoint tracing," Local development replaced the task-description phrasing with "Full-stack local environments, codebase navigation, feature branch UAT," Observability splits out "distributed tracing" as its own keyword, Incidents leads with "Critical incidents (Sev-1/2)" for context, and Product uses "Pre-release validation" and "release readiness" instead of the redundant "UAT (pre-release testing)" and vague "release feedback."
April 16, 2026
Changed
- Rebuilt the About page as a single-column layout on all viewports. The previous CSS grid (text-left / image-right on desktop) was replaced with a simple flex column ordered H1 → photo → body. The hero photo now spans the full container width and preserves its native 4:3 aspect ratio at every breakpoint. Container max-width is 900px.
- Updated the About page H1 to "Hey, I'm Matthew Rugamas," and lightly polished the body copy: combined the opener into a value-forward sentence, surfaced a quantified outcome from the Atlassian role (15% YoY escalation reduction), and added a one-line tools/keywords mention (Splunk, Jira, Postman, LaunchDarkly, MongoDB).
- Revised the Résumé across most sections: tightened the profile opener to match the About page voice, broadened the tagline with a "debugging, escalations, customer engineering" keyword bridge, dropped a page-specific SEO
descriptioninto the front matter, tightened the Atlassian role summary to remove duplication with the first bullet, reordered the Atlassian summary bullets so enterprise customer impact leads, trimmed long bullets on incidents and product-influence, and swept verbs so Reduced no longer opens consecutive bullets. - Specific dates across the résumé are now month + year on every role for consistency: Atlassian March 2022 – March 2026, Accessibility Lead (Edlio) February 2020 – February 2022, Lead Technical Support Engineer (Edlio) February 2019 – January 2020. Tenure framing on both the résumé profile and the About page moved from "8 years" to "nearly a decade" to match the actual timeline.
- Expanded the résumé Skills section with a clearer breakdown that surfaces work done on Halp / JSM Chat: added Languages (TypeScript, JavaScript, HTML, CSS, SQL, Bash), Frontend (React, GraphQL, Chrome DevTools, live breakpoint tracing), Local development (running product instances locally, tracing through code, UAT against feature branches), and Observability rows, and split Accessibility (WCAG 2.1 AA, ADA, ARIA) out of the old "Web" row so a full role of accessibility work isn't undersold.
- Consolidated the Accessibility Lead bullets from 8 to 5, merged overlap, and folded in concrete scale (50+ templates, 100+ audits, 100+ districts).
- Flipped the Lead Technical Support Engineer opener so ownership of the hardest escalations leads and case volume (80–120 / month) trails as a qualifier. Named the stakeholder type ("non-technical school district administrators and IT staff") on the translation bullet for Customer/Solutions Engineer keyword coverage.
- Constrained the résumé
.cv-taglinetomax-width: 75%at themdbreakpoint and above so the now-longer tagline ("Senior Support Engineer · Debugging, escalations, customer engineering · Los Angeles, CA") no longer runs the full header width on desktop. Mobile layout is unchanged. - Narrowed prose containers to portfolio-standard widths: About page container
900px → 720px, and blog post article container1000px → 760px. The Giscus.post-commentswidget was re-pegged to match the article body. The About hero photo (#selfie) is now capped atmax-width: 480pxand centered viaalign-self: center, so it no longer pushes the body copy below the fold on desktop. Post images (figure.shadow_image img.img-responsive) got amax-height: 75vhcap so tall screenshots can't dominate the viewport. - Introduced content-width design tokens as CSS custom properties in
:root:--content-hero(675px),--content-prose(720px),--content-post(760px),--content-cv(800px),--content-wide(1000px). Replaced all magic-numbermax-widthvalues across_settings.scss,about.scss,posts.scss,index.scss,resume.scss, andchangelog.scsswith the corresponding token. Content widths are now defined in one place and reusable sitewide. - Scoped
posts.scssfrom barearticleselectors toarticle.blogpostso blog-post styles no longer bleed into homepage article cards. The.blogpostclass was added to the<article>element inpost.html. Backfilled explicitfont-sizeandline-heighton the homepagearticle header prule inindex.scssto replace values that were previously leaking from the unscopedposts.scss.
Added
- Added a primary "Get in touch →" CTA (mailto:) and a secondary LinkedIn button to the About page so visitors hiring out of the page have an unambiguous next action.
- Added a print-only expanded contact row to the résumé header (email, site URL, GitHub) so the saved/printed PDF stands on its own even though screen viewers already have those links on the About page. Implemented via a
.print-onlyutility that's hidden on screen and inline inside@media print. - Added two short testimonial blocks to the résumé, pulled from LinkedIn recommendations. The first (Don Pierce, Manager of Cloud Growth Products, Atlassian) sits between Profile and Skills as an opening hook. The second (Al Lawlor, Director / Sr. Manager, CX & Support Operations, Atlassian) closes the page after Experience, introducing a concrete project reference — legacy product sunset ownership and customer migration — that doesn't appear elsewhere on the page. Styled as left-bordered blockquotes on screen with a tightened variant in print. Each citation links to the LinkedIn recommendations page (
view on LinkedIn) so readers can verify the quotes; the URL suffix otherwise appended to print links is suppressed for these to keep the printed attribution line readable. - Added an
@page { margin: 0.6in; }rule andbreak-inside: avoidon testimonials to keep print margins comfortable and prevent quotes from orphaning across a page break.
Removed
- Removed the "See what I've been playing →" music link from the About page. The Music page is already reachable from the nav, and the contact CTAs now occupy that visual slot.
April 11, 2026
Added
- Added Giscus reactions and comments to all blog posts, powered by GitHub Discussions. Visitors with a GitHub account can leave emoji reactions (👍 ❤️ 🎉 etc.) and comments directly on each post. The widget reads from
localStorageon load and responds to the dark/light theme toggle via the GiscuspostMessageAPI. Data lives entirely in the repository's Discussions tab — no third-party tracking.
Fixed
- Centered code blocks in blog posts and constrained them to the same 1000px max-width as prose content. Previously
pre.highlighthad no width constraint and appeared left-aligned relative to body text. - Changed
pre.highlightfromoverflow: scrolltooverflow: autoso scrollbars only appear when content actually overflows. On macOS this restores the native overlay scrollbar behavior — bars appear on scroll and fade when idle. - Constrained
.post-comments(Giscus widget) to 1000px max-width so it aligns with post content rather than stretching to full container width.
Updated
- Updated résumé: revised Skills section to use more concise, role-aligned categories (Debugging, Incidents, Enablement, Product, Tools, Web). Expanded Accessibility Lead role with a summary paragraph and additional detail bullets. Refreshed Lead Technical Support Engineer bullet wording. Updated Atlassian start date to March 2022.
April 10, 2026
Fixed
- Eliminated a chained CSS request that was adding ~120ms to the critical render path.
styles.scsswas using@import "syntax.css", which SASS passes through as a literal CSS@import— causing the browser to downloadsyntax.csssequentially afterstyles.css. Removed the@importand addedsyntax.cssas a direct<link>inbase.htmlso both files download in parallel. - Fixed render-blocking Google Fonts. Replaced
rel="stylesheet"with therel="preload"+onloadnon-blocking pattern (with a<noscript>fallback) inbase.html. Fonts now load asynchronously and do not block initial render. - Moved
preconnecthints forfonts.googleapis.comandfonts.gstatic.combefore the stylesheet links inbase.htmlso connections warm up earlier in the page load sequence.
April 9, 2026
Changed
- Switched the site font from the OS system stack to Inter (Google Fonts) across all pages. Both
$fonts-bodyand$fonts-titlesin_sass/_settings.scssnow use Inter with the system stack as a fallback. Weights 400, 500, 600, and 700 are loaded via a single Google Fonts request in the base layout alongside Source Code Pro. Source Code Pro is retained as the monospace face for code and CV metadata. A--font-weight-medium: 500token was added to the design-token set in:root.
April 8, 2026
Changed
- Résumé content fully updated. Profile rewritten to position as Senior Support Engineer with 8 years of experience; split into two paragraphs leading with the value proposition. Header tagline updated from "Support Engineer" to "Senior Support Engineer".
- Atlassian role rewritten with a new structure: opening summary paragraph, three high-signal overview bullets, then three sub-sections — Debugging & Incident Ownership, Product & Engineering Impact, and Process & Team Impact. Dates simplified to 2022–2026. Old sub-sections (Core Responsibilities, Product & Engineering Partnership, Process & Impact, Team Enablement) removed.
- Accessibility Lead and Lead Technical Support Engineer roles at Edlio condensed: removed summary paragraphs from both, updated bullets to match tighter, outcome-focused copy.
April 7, 2026 · fa87257
Added
- GA4 custom event tracking across all pages via
_includes/event-tracking.html, injected through the base layout. Tracks: navigation link clicks (with desktop vs. hamburger context), theme toggle direction, blog post clicks from the homepage listing, music page external link clicks with platform detection (Spotify / YouTube / SoundCloud / Instagram), social link clicks from the Elsewhere section, the About page music CTA, the résumé LinkedIn link, footer links, the résumé print button, and scroll depth at 25 / 50 / 75 / 100%. Allgtag()calls are guarded with a typeof check, making the script a no-op in local development. - Save/Print button on the résumé page, placed inside the
cv-headergrid alongside the name. Triggerswindow.print()and fires aresume_print_clickGA4 event. Styled to match the existing CTA button pattern from the About page. Hidden in print. @media printstylesheet for the résumé. Hides site chrome, resets to black-on-white, sets print-appropriate font sizes and spacing, and appends full link URLs inline — suppressed on the contact link, which already displays as a URL.- This changelog page (
/changelog), styled in the site theme with a dedicated SCSS partial (_sass/changelog.scss).
Changed
- Résumé
.cv-headerrestructured from a flexbox row into a two-column CSS grid. Name and Save/Print button share the top row; tagline and LinkedIn link sit below. Mobile stacks all items centered. - Footer year is now rendered dynamically via
{{ 'now' | date: '%Y' }}instead of a hardcoded value. - All external links on the Music page and in the Elsewhere section on About now include
target="_blank" rel="noopener noreferrer". Previously, clicking any of them navigated away from the site with no new-tab behavior.
Fixed
- Hardcoded
<link rel="canonical" href="https://mattrugamas.com"/>removed frombase.html. Every page was incorrectly declaring the homepage as its canonical URL. Thejekyll-seo-tagplugin already handles per-page canonicals correctly via the{% seo %}tag. - Print stylesheet was targeting
header { display: none }, which hid all semantic<header>elements on the résumé — including the name/contact row and every job title header. Corrected tobody > headerto target only the site navigation wrapper. - Résumé
.cv-roleentries hadbreak-inside: avoidset, which caused the Atlassian role (the longest entry) to push entirely to page two, leaving a blank gap on page one. Removed the rule from roles; addedbreak-after: avoidon.cv-role-headerinstead, keeping each role's title attached to its content without blocking mid-role page breaks.
April 3, 2026 · 99181d7
Changed
- Converted all SCSS placeholder selectors (
%content-base,%link-setup,%nav-animate, etc.) to@mixinand added@use 'settings' as *imports to every SCSS partial, aligning with the Dart Sass module system. - Added
--text-2xl,--text-3xl, and--content-gapto the design token set in_settings.scss. - Content area padding switched to
clamp()for fluid responsive spacing instead of a fixed value. - Homepage blog listing redesigned: posts are now grouped by year, each row shows the date in a right-aligned aside alongside the post title and excerpt, and the full row gets a left-border highlight on hover at desktop widths. Markup in
index.htmlrestructured withgroup_by_expto generate the year groups. scrollbar-gutter: stableadded to the root to prevent layout shift when the scrollbar appears on long pages.- Site description in
_config.ymlupdated to reflect current role and location.
April 2, 2026 · 94e6ffa
Changed
- Added
--font-weight-normal,--font-weight-semi, and--font-weight-boldtokens; replaced all hardcodedfont-weightvalues with token references. - Corrected
--text-smfrom0.875remto0.8125rem. - Blog post typography overhauled: explicit h2/h3 styles with correct size, weight, and spacing; post date styled using
--color-datesand body font; paragraph line-height set to 1.7; removed legacy breakpoint overrides that were fighting the new system. - Both blog posts converted from bold-text section headings (
**Bold**) to proper Markdown H2s, which now render with the correct semantic hierarchy and visual treatment.
April 2, 2026 · c063f77
Added
- Music page (
music.html) with a full archive of projects, roles, and links to Spotify, YouTube, SoundCloud, and Instagram. - Résumé page (
resume.html) as a proper web CV: semantic HTML with<article>per role, a<dl>for skills, and full employment history replacing placeholder content. - Music and Résumé added to site navigation in
_data/navigation.yml. - Light/dark mode theme toggle with
localStoragepersistence. A flash-prevention script in<head>reads the stored preference before first paint. Systemprefers-color-schemeis used as the default when no stored value exists. - Hamburger navigation for mobile viewports, with animated icon,
aria-expandedstate tracking, and close-on-outside-click behavior. - Skip-to-main-content link for keyboard and assistive technology navigation.
- Two blog posts: The Redesign (March 31) and Still on Jekyll, Probably Forever (April 2).
- Music-specific SCSS partial (
_sass/music.scss) and corresponding@useimport inmain.scss.
Changed
- Full CSS rebuild. All stylesheets converted to mobile-first, all color values replaced with CSS custom properties, a spacing scale and type scale established. Dark mode is the default; light mode maps the same palette to warm-background equivalents via a
data-themeattribute on the root element. - About page rebuilt with CSS Grid (heading → photo → text on mobile; two-column on desktop) in place of the previous
column-reverseflexbox approach. - Font stack simplified: removed Rubik and Work Sans, retained Source Code Pro for monospace use only. Body and UI text now use the system font stack.
- Google Fonts loading updated to use
preconnecthints and the moderndisplay=swapAPI. - Jekyll updated from 4.2.0 to 4.4.1.
jekyll-sass-converterupdated from 2.x to 3.x (Dart Sass viasass-embedded). Rouge updated from 3.x to 4.x. Various other dependency bumps inGemfile.lock.