Unreleased
#In progressAdded
- Terminal Tab completes
catfilenames andlang en|esarguments (falls through to normal focus movement when nothing completes) - Terminal suggests the closest command on a typo ("Did you mean 'skills'?", EN/ES)
?theme=dark|lightis the source of truth for color scheme (URL → localStorage → OSprefers-color-scheme→ dark); the header toggle and command-palette actionreplaceUrlthe query- Theme and language toggles announce the new mode/language through the existing live region (Dark/Light and English/Español), without noisy announcements on init
- Sitemap
lastmod(W3C Datetime) for/,/changelog, and/colophongenerated from the build timestamp at deploy time - Post-deploy S3 header smoke (
scripts/smoke-s3-headers.js): after header rewrite, assertindex.htmlismax-age=0, must-revalidate, one hashed*.jsis 1yimmutable, and one*.woff2isfont/woff2(non-zero exit on mismatch) - CI coverage floors for
ng test --coverage(statements 70%, branches 65%, functions 70%, lines 70%) with ajson-summaryartifact - Checked-in
coverage-baseline/json-summary floor and CI job-summary comparison so reviewers can compare PRs without running tests locally - Featured project UA 571-C (live WASM console + GitHub) on the home showcase and terminal
projectscommand /changelogpage (lazy, prerendered) rendering this file in Kinetic Grid style, with command palette + footer links- Scroll-depth indicator: max explored percent in the footer and command palette (reuses the existing progress-bar listener)
- Dismissible PWA update banner when the service worker reports
VERSION_READY(Reload / Dismiss, EN/ES, reduced-motion safe)
Changed
- Bump
sharpto ^0.35.4 andvitest/@vitest/coverage-v8to ^4.1.11 (Dependabot #16/#17/#19) - npm overrides for
js-yaml4.3.2,smol-toml1.7.1,svgo4.1.0, andhono4.13.5 (Dependabot #11–#15, #18, #20) - Web Vitals tracking now observes real INP via Event Timing (
event) instead of a FID/first-inputapproximation, and exposes last LCP/INP/CLS values for a future overlay - Replaced Space Grotesk and Inter with IBM Plex Sans across the site, including the loading and offline experiences.
- Shell loading spinner is a sharp Kinetic Grid square (was circular) and pauses when
prefers-reduced-motionis set. - Cut main-bundle weight from Helm paths:
hlm()no longer shipstailwind-merge, and[hlmTooltip]uses a Kinetic Grid body-portal instead of CDK overlay. Budgets unchanged. - Globe canvas stays static (one paint, no continuous rAF spin) when
prefers-reduced-motion, Save-Data, or coarse low device memory is set.
Fixed
- Command palette category labels (Navigation/Social/Action) are translated in Spanish mode and searchable in the active language
- Command palette keeps the keyboard-selected (↓/↑) command scrolled into view (#200)
- Back-to-top keeps keyboard focus (moves it to
#main-contentafter activation) and honorsprefers-reduced-motion(instant scroll, no view transition) - Command palette restores focus on close, marks the background
inert/aria-hidden, and keeps Tab inside the dialog - Lazy route navigations (colophon, changelog, 404) show an in-outlet loading state instead of a blank content pane
- Lazy-route loading hides the previous page instead of stacking the spinner above it
- Route loading indicator is gated to
loadComponentpath changes (fragment/query-only jumps no longer flash it) - Command palette empty state uses translated copy (EN/ES)
- Opening the mobile menu moves keyboard focus into the menu and restores it to the toggle on close
- Translation API failures show a polite "Showing offline translations" notice while keeping the static fallback
- Header and command palette Home/About/Connect/Projects links now go to
/#sectionwhen those ids are not on the current page (e.g./changelog,/colophon) - Restored floating positioning on the back-to-top button (
fixed bottom-6 right-6 z-40) - Skip-to-social-links now goes to
/#social-linkswhen that id is not on the current page - Skip links become visible on keyboard focus (
focus-within:not-sr-onlyon the skip-nav wrapper)