Changelog
156 total commits
My Tinkering Log
I know I should stop "playing" with my site all the time and focus on writing; but I am having so much fun learning and experimenting with Astro. Want to see what I've been messing with on the webbed site, instead of actually writing content? Here's a list of changes I've made to my Astro site:
2026
50307e1 fix: default ogImage to social-preview.png in Layout
asce1062
View on GitHub
Commit details
Use SEO.ogImage as fallback when ogImage prop is not provided,
preventing blank social preview images on pages without explicit ogImage.
preventing blank social preview images on pages without explicit ogImage.
b1cb699 feat: add changelog page with GitHub commit history
asce1062
View on GitHub
Commit details
- Add /changelog page displaying all commits fetched at build time
- fetchAllGitHubCommits() with pagination support
- getChangelogEntries(), formatChangelogDate(), renderMarkdownToHtml()
- getRepoSlugFromUrl(), getBaseRepoUrl() helpers
- Features:
- Shows 25 commits initially with "Load more" button
- Year grouping with sticky headers
- Expandable commit details for multi-line messages
- Graceful error handling for API failures
- Uses GITHUB_PAT for higher rate limits (5000/hr vs 60/hr)
- Add changelog link to navigation and colophon page
ca5d9e1 feat: add palette page with design tokens and click-to-copy
asce1062
View on GitHub
Commit details
- Add /palette page with tabbed Swatches/Ingredients views
- Implement CSS-only tab switching with accessibility (ARIA roles)
- Add click-to-copy for computed colors and OKLCH values
- Add palette to header navigation between Colophon and Meta
- Update icon font with palette icons
- Link palette from colophon Typography & Design section
2ec25be feat: add colophon/meta pages, refactor config to grouped exports
asce1062
View on GitHub
Commit details
Add colophon/meta pages:
- /meta: diagnostic, minimal, noindex (build info, package versions, SEO defaults)
- /colophon: narrative credits, philosophy, tech stack with icons
Config architecture improvements:
- Create deps-info.ts (centralized package.json access)
- Create build-info.ts (build timestamp, Node version)
- Create site-utils.ts (helper functions)
- Create index.ts barrel export
- Remove all legacy individual exports from site-config.ts
- Migrate all consumers to grouped exports (SITE, BLOG, SOCIAL, SEO, PWA, etc.)
SEO/meta tag fixes:
- OpenGraphTags: WebPage schema for non-articles, stable WebSite name,
Twitter meta uses name attr, title-case breadcrumbs, add isPartOf
- MetaTags: remove fake Atom feed, inaccurate geo metadata, obsolete tags
- Layout: safe Astro.site fallback, fix duplicate id on main element
Misc:
- Add /humans.txt following humanstxt.org standard
- Add .txt to service worker navigateFallbackDenylist
- Add Colophon and Meta to site navigation
Housekeeping:
- Icon font updates
- Remove trailing design-tokens.mjs and tailwind.config.mjs since tailwindCSS v4 update
- /meta: diagnostic, minimal, noindex (build info, package versions, SEO defaults)
- /colophon: narrative credits, philosophy, tech stack with icons
Config architecture improvements:
- Create deps-info.ts (centralized package.json access)
- Create build-info.ts (build timestamp, Node version)
- Create site-utils.ts (helper functions)
- Create index.ts barrel export
- Remove all legacy individual exports from site-config.ts
- Migrate all consumers to grouped exports (SITE, BLOG, SOCIAL, SEO, PWA, etc.)
SEO/meta tag fixes:
- OpenGraphTags: WebPage schema for non-articles, stable WebSite name,
Twitter meta uses name attr, title-case breadcrumbs, add isPartOf
- MetaTags: remove fake Atom feed, inaccurate geo metadata, obsolete tags
- Layout: safe Astro.site fallback, fix duplicate id on main element
Misc:
- Add /humans.txt following humanstxt.org standard
- Add .txt to service worker navigateFallbackDenylist
- Add Colophon and Meta to site navigation
Housekeeping:
- Icon font updates
- Remove trailing design-tokens.mjs and tailwind.config.mjs since tailwindCSS v4 update
7cc0187 feat: enhance project cards, theming, and navigation UX
asce1062
View on GitHub
Commit details
Project Cards:
- Add contributors, issues, and forks counts with icons
- Fetch contributor count via GitHub API
- Conditional color styling (warning for 0, info for >= 1)
- Separate stats row from project name link
Theme System:
- Add URL parameter support (?theme=dark or ?theme=light)
- Add keyboard shortcut (Ctrl/Cmd + Shift + L) for theme toggle
- Export setTheme() for programmatic theme control
Navigation & Footer:
- Replace inline SVG with icon-git-commit in footer
- Add hover pause for blink animation on nav links
- Add contributors, issues, and forks counts with icons
- Fetch contributor count via GitHub API
- Conditional color styling (warning for 0, info for >= 1)
- Separate stats row from project name link
Theme System:
- Add URL parameter support (?theme=dark or ?theme=light)
- Add keyboard shortcut (Ctrl/Cmd + Shift + L) for theme toggle
- Export setTheme() for programmatic theme control
Navigation & Footer:
- Replace inline SVG with icon-git-commit in footer
- Add hover pause for blink animation on nav links
7052393 feat: update 0xProto font, sticky TOC, and code block styling
asce1062
View on GitHub
Commit details
- Update 0xProto font to complete set (Regular, Bold, Italic) with
- Remove unused Josefin Sans and Poppins fonts
- Add sticky table of contents that shows on scroll-up only,
with auto-close on link click
- Add scroll-margin-top to headings for proper anchor positioning
- Set heading font weights (h1-h3 bold, h4-h6 semibold)
- Style .btn and .link-action with 0xProto italic
- Italicize footer build info text
- Update rehype-pretty-code config with grid option for full-width
line highlighting
- Fix code block theme switching to use data-theme attribute
- Add border and improved styling to code blocks
- Fix resume page fallback to fit content instead of fixed height
e301759 feat: upgrade to Tailwind CSS v4 with CSS-first configuration
asce1062
View on GitHub
Commit details
BREAKING CHANGE: Tailwind CSS v3 → v4 migration
Core Changes
- Replace @tailwind directives with @import "tailwindcss"
- Migrate to @tailwindcss/postcss plugin
- Convert theme config to CSS-first approach with @theme directive
- Replace custom utilities with @utility directive syntax
Component Refactoring
- Extract CollapsibleNav as reusable component with:
- Height-based animation
- Full keyboard accessibility (Tab, Enter, Space)
- ARIA attributes for screen readers
- Smooth transitions with reduced-motion support
Bug Fixes
- Remove FOUC prevention that caused blank pages in tailwind v4
- Fix Card component flex layout with flex! override
- Fix breadcrumb inline wrapping with inline! override
- Fix nav text color inheritance from parent link
- Remove unused collapsibleNav.ts script
## Config Updates
- Update postcss.config.mjs for @tailwindcss/postcss
- Add autoprefixer and postcss-nesting to knip ignore list
Core Changes
- Replace @tailwind directives with @import "tailwindcss"
- Migrate to @tailwindcss/postcss plugin
- Convert theme config to CSS-first approach with @theme directive
- Replace custom utilities with @utility directive syntax
Component Refactoring
- Extract CollapsibleNav as reusable component with:
- Height-based animation
- Full keyboard accessibility (Tab, Enter, Space)
- ARIA attributes for screen readers
- Smooth transitions with reduced-motion support
Bug Fixes
- Remove FOUC prevention that caused blank pages in tailwind v4
- Fix Card component flex layout with flex! override
- Fix breadcrumb inline wrapping with inline! override
- Fix nav text color inheritance from parent link
- Remove unused collapsibleNav.ts script
## Config Updates
- Update postcss.config.mjs for @tailwindcss/postcss
- Add autoprefixer and postcss-nesting to knip ignore list
2a498a4 refactor: more theming updates and migrations pre tailwindcss v4 upgrade
asce1062
View on GitHub
Commit details
Finalize the migration to a semantic CSS variable system that eliminates
light/dark theme duplication across the codebase.
Key changes:
- Fix CSS variable references in global.css to use correct theme paths
- Update tailwind.config.mjs to expose design tokens for theme() function
- Refactor entire codebase to use theme aware semantic variables
- Implement transparency support via color-mix() in project and blog cards
- Unify behavior for buttons and action links
light/dark theme duplication across the codebase.
Key changes:
- Fix CSS variable references in global.css to use correct theme paths
- Update tailwind.config.mjs to expose design tokens for theme() function
- Refactor entire codebase to use theme aware semantic variables
- Implement transparency support via color-mix() in project and blog cards
- Unify behavior for buttons and action links
18bbbc9 chore: migrate from @astrojs/tailwind to PostCSS + Tailwind v3
asce1062
View on GitHub
114188a feat: establish retro design token system and theme infrastructure
asce1062
View on GitHub
Commit details
Major overhaul of the color system:
- Support semantic theme colors (brand, neutral, secondary, accent)
- Support backward compatibility with palette/light numbered scales
Design Token Updates:
- Expand design-tokens.mjs with full light/dark theme color scales
- Add documentation with usage patterns and examples
- Include semantic colors (brand-primary, default-font, subtext-color, etc.)
- Maintain backward compatibility with palette/light numbered scales
Theme Configuration:
- Update tailwind.config.mjs to expose new semantic color utilities
- Add theme.css for Tailwind CSS v4 compatibility
Component & Config Updates:
- Fix guestbook textarea placeholder visibility issue
- Update Prettier config htmlWhitespaceSensitivity setting to respect whitespace properly
- "ignore" to "strict" to preserve whitespaces as written
- Refactor components to use new design token references
- Update topography SVG variants for light/dark themes
This commit establishes the foundation for migrating away from legacy palette/light
numbered scales to a more maintainable semantic color system. These changes maintain
backward compatibility while preparing for future migration.
- Support semantic theme colors (brand, neutral, secondary, accent)
- Support backward compatibility with palette/light numbered scales
Design Token Updates:
- Expand design-tokens.mjs with full light/dark theme color scales
- Add documentation with usage patterns and examples
- Include semantic colors (brand-primary, default-font, subtext-color, etc.)
- Maintain backward compatibility with palette/light numbered scales
Theme Configuration:
- Update tailwind.config.mjs to expose new semantic color utilities
- Add theme.css for Tailwind CSS v4 compatibility
Component & Config Updates:
- Fix guestbook textarea placeholder visibility issue
- Update Prettier config htmlWhitespaceSensitivity setting to respect whitespace properly
- "ignore" to "strict" to preserve whitespaces as written
- Refactor components to use new design token references
- Update topography SVG variants for light/dark themes
This commit establishes the foundation for migrating away from legacy palette/light
numbered scales to a more maintainable semantic color system. These changes maintain
backward compatibility while preparing for future migration.
2025
efce735 update: footer resume icon
asce1062
View on GitHub
6e67114 fix: prevent service worker from intercepting PDF navigation on mobile
asce1062
View on GitHub
Commit details
- Fix issue where clicking "Open Resume" fallback on mobile showed offline page
74ac388 fix: global search focus when not in view
asce1062
View on GitHub
53b52e2 feat: improve PDF resume viewer with browser detection
asce1062
View on GitHub
Commit details
- Add fallback overlay for browsers without inline PDF support
- Add iOS and in-app browser detection
- Show download button and text version link when PDF can't render inline
- Hide text version link when fallback overlay is displayed
- Update CSP headers in netlify.toml to allow PDF iframe loading
- Add 'self' to frame-src directive
- Change frame-ancestors from 'none' to 'self'
- Update X-Frame-Options from DENY to SAMEORIGIN
Fixes issues where:
- Some browsers showed blank iframes
- Some browsers displayed "contact site owner" errors
Browser support:
- Desktop: Shows inline PDF viewer (all modern browsers)
- iOS/Mobile: Shows fallback with download button immediately
- In-app browsers: Shows fallback automatically
- Legacy browsers: Falls back based on mobile detection
91d704d fix: update CSP frame-src directive to allow self
asce1062
View on GitHub
ed1da27 feat: add floating search modal with responsive positioning
asce1062
View on GitHub
Commit details
Add a global floating search modal that can be triggered from anywhere on
the site via the search icon or Ctrl+K/Cmd+K keyboard shortcut.
- Create FloatingSearch.astro component with dynamic positioning
- Positions at first HR divider in header
- Width matches body container responsively across all viewports
- Uses separate pagefind instance to avoid conflicts with search page
- Hidden on /search page to prevent duplication
- Extract reusable SearchBox.astro component
- Shared by both search page and floating modal
- Accepts searchId prop for unique pagefind instances
- Add search trigger button to Header
- Positioned below theme switcher toggle
- Only visible when not on search page
- Update search page to use SearchBox component
- Maintains existing functionality with new architecture
- Uses dedicated page-searchbox instance
- Update search.css to support both search contexts
- Styles apply to #pagefind-search and #pagefind-search-floating
- Consistent appearance across page and modal
Technical improvements:
- TypeScript null safety fixes in FloatingSearch
- ResizeObserver for responsive width updates
- Debounced resize handlers for performance
the site via the search icon or Ctrl+K/Cmd+K keyboard shortcut.
- Create FloatingSearch.astro component with dynamic positioning
- Positions at first HR divider in header
- Width matches body container responsively across all viewports
- Uses separate pagefind instance to avoid conflicts with search page
- Hidden on /search page to prevent duplication
- Extract reusable SearchBox.astro component
- Shared by both search page and floating modal
- Accepts searchId prop for unique pagefind instances
- Add search trigger button to Header
- Positioned below theme switcher toggle
- Only visible when not on search page
- Update search page to use SearchBox component
- Maintains existing functionality with new architecture
- Uses dedicated page-searchbox instance
- Update search.css to support both search contexts
- Styles apply to #pagefind-search and #pagefind-search-floating
- Consistent appearance across page and modal
Technical improvements:
- TypeScript null safety fixes in FloatingSearch
- ResizeObserver for responsive width updates
- Debounced resize handlers for performance
cdfe807 feat: Add resume viewer page and UI enhancements
asce1062
View on GitHub
Commit details
- Create dedicated Resume page with PDF iframe viewer (/resume)
- Enhance header breadcrumb navigation
- Add "/alex/" to path structure (~/ home / alex /)
- Implement grouped hover effect for home/alex links
- Improve UI
- Make BackToTop button position responsive (bottom-4 md:bottom-8)
- Replace footer commit text with Git commit SVG icon
- Remove rounded corners site-wide for sharper design
47cb447 updates: bold header, fix footer contact information first row alignment
asce1062
View on GitHub
5a5767a updates: add terraform icon
asce1062
View on GitHub
42f60d0 updates
asce1062
View on GitHub
45c14ee updates:
asce1062
View on GitHub
Commit details
- fix header nav items rotation
350cc59 fix: resolve unparsable JSON-LD structured data in search console
asce1062
View on GitHub
Commit details
- Fix JSON-LD schema parsing errors reported by Google Search Console
- Add is:inline directive to all JSON-LD scripts to silence Astro warnings
- Add security documentation explaining safe use of set:html with JSON.stringify()
- JSON.stringify() automatically escapes dangerous characters (< > & " ')
- All data comes from controlled sources (MDX frontmatter, config files)
- No user input from forms or URL parameters
- Disable astro/no-set-html-directive ESLint rule at file level with justification
- Added a helper function formatBreadcrumbName() that:
- Returns "Blog" if the segment is "blog"
- Removes the date prefix matching the pattern YYYY-MM-DD- (e.g., 2025-08-13-)
- Converts remaining hyphens to spaces
The issue was that set:text was HTML-escaping quotes to ", making the
JSON unparsable. Using set:html with JSON.stringify() is safe because:
1. JSON.stringify() escapes all dangerous characters
2. We control all data sources (no user input)
3. Characters like < and > are converted to \u003c and \u003e
Fixes Google Search Console error:
"Parsing error: Missing '}' or object member name"
cbff541 feat: implement collapsible navigation with dynamic row detection
asce1062
View on GitHub
Commit details
- Add chevron-bar-down icon to icomoon font set
- Dynamically detects first row items based on viewport width
- Automatically shows/hides toggle button when items wrap
- Smooth 180° rotation animation on expand/collapse
- Update Header component with collapsible navigation
- Add nav-toggle button with chevron icon
- Use Tailwind transition-transform for smooth animations
- Center toggle button on all screen sizes
- Maintain min-height to prevent layout shift
- Update navigation layout for better responsive behavior
- Change from center to left alignment on desktop (sm:justify-start)
- Tighten spacing from gap-1 to gap-0.5
- Reduce padding: px-1.5 (mobile), sm:px-1 (desktop)
- Improve horizontal rule visibility
- Change from bg-palette-700 to bg-palette-900
- Add border-0 to prevent border conflicts
43024d0 feat: add multi-path icon support and improve navigation layout
asce1062
View on GitHub
Commit details
- Switch around header and footer content
- Update Header layout to wrap from left edge in desktop mode
- Tighten navigation spacing to prevent RSS feed wrapping
- Add 8biticon link to main navigation with proper icon rendering
e87e538 update: packages
asce1062
View on GitHub
Commit details
@astrojs/check ^0.9.4 → ^0.9.5
@astrojs/mdx ^4.37 → ^4.3.8
@astrojs/rss ^4.0.12 → ^4.0.13
astro ^5.14.5 → ^5.15.1
astro-og-canvas ^0.7.0 → ^0.7.2
astro-themes ^0.2.6 → ^0.2.7
@eslint/js ^9.37.0 → ^9.38.0
@types/node ^24.6.2 → ^24.9.1
@typescript-eslint/eslint-plugin ^8.46.1 → ^8.46.2
@typescript-eslint/parser ^8.46.1 → ^8.46.2
astro-og-canvas ^0.7.0 → ^0.7.2
astro-themes ^0.2.6 → ^0.2.7
eslint ^9.37.0 → ^9.38.0
knip ^5.64.1 → ^5.66.2
lint-staged ^16.2.4 → ^16.2.6
netlify-cli ^23.9.1 → ^23.9.5
@astrojs/mdx ^4.37 → ^4.3.8
@astrojs/rss ^4.0.12 → ^4.0.13
astro ^5.14.5 → ^5.15.1
astro-og-canvas ^0.7.0 → ^0.7.2
astro-themes ^0.2.6 → ^0.2.7
@eslint/js ^9.37.0 → ^9.38.0
@types/node ^24.6.2 → ^24.9.1
@typescript-eslint/eslint-plugin ^8.46.1 → ^8.46.2
@typescript-eslint/parser ^8.46.1 → ^8.46.2
astro-og-canvas ^0.7.0 → ^0.7.2
astro-themes ^0.2.6 → ^0.2.7
eslint ^9.37.0 → ^9.38.0
knip ^5.64.1 → ^5.66.2
lint-staged ^16.2.4 → ^16.2.6
netlify-cli ^23.9.1 → ^23.9.5
All 156 commits loaded