|
72 | 72 |
|
73 | 73 | - b125efa: Add breadcrumb navigation component for multi-level page context (Home > Blog > Article Title) |
74 | 74 | - d90e7c4: feat: add visual system design tokens for shadows, transitions, and easing |
75 | | - |
76 | 75 | - Define shadow presets (card, card-hover, heading, glow-green) in Tailwind v4 @theme block |
77 | 76 | - Define transition duration scale (fast/normal/slow) and easing curves (default/in-out/spring) |
78 | 77 | - Mirror tokens in tailwind.config.js extend for editor intellisense support |
79 | 78 |
|
80 | 79 | - 74b4c32: Add Playwright-based WCAG AA contrast regression tests using axe-core. Tests 8 pages in both light and dark mode (16 test cases). Includes Playwright config, scoped tsconfig for Playwright types, and test:contrast npm script. |
81 | 80 | - d6bd63b: refactor: deepen frontend architecture — extract utilities, fix bugs, consolidate components |
82 | | - |
83 | 81 | - Extract shared slug utility (toSlug) from 4 duplicated implementations, fixing a regex ordering bug in CollectionPageLayout |
84 | 82 | - Consolidate 4 duplicate component pairs (Card, Skill, Skills, Navigation) into canonical locations |
85 | 83 | - Merge HTMX attributes and active-page detection into Navigation (was missing from live site) |
|
103 | 101 | - 741c97c: fix: resolve remaining WCAG AA contrast violations on 404 page in both light and dark modes |
104 | 102 | - e2ffb40: fix: 404 page heading text contrast — ensure h2 "Page Not Found" uses gray-900/gray-100 for WCAG AA compliance in both light and dark modes |
105 | 103 | - bc17a2c: fix(a11y): blog sort button and prose link contrast for WCAG AA |
106 | | - |
107 | 104 | - Sort button active state: `bg-green-600 text-white` (3.21:1) → `bg-green-800 text-green-50` (passes 4.5:1) in both light and dark modes |
108 | 105 | - `.content a` prose links: `text-blue-300` in light mode (1.5:1 on bg-green-200) → `text-blue-700` (passes 4.5:1); dark mode stays `text-blue-300` |
109 | 106 | - Closes pendragon-coding-we9: all 16 axe-core contrast audit tests pass across 8 pages × 2 modes |
|
223 | 220 | Implemented a theme toggle component that allows users to switch between light and dark modes with a smooth sliding animation. The theme preference is persisted in localStorage and respects system preferences on first visit. |
224 | 221 |
|
225 | 222 | **New Features:** |
226 | | - |
227 | 223 | - Theme toggle button with sliding animation positioned at the right edge of the header |
228 | 224 | - Sun and moon icons that smoothly transition based on the selected theme |
229 | 225 | - localStorage persistence to remember user's theme preference across sessions |
230 | 226 | - System preference detection on first visit (respects `prefers-color-scheme`) |
231 | 227 | - Smooth color transitions throughout the site when switching themes (300ms duration) |
232 | 228 |
|
233 | 229 | **Improvements:** |
234 | | - |
235 | 230 | - Light mode uses a clean gray-50 background with dark text for improved readability during daytime |
236 | 231 | - Dark mode maintains the existing green-950 background with light text optimized for low-light environments |
237 | 232 | - Navigation underlines adapt to theme: green-600 in light mode, green-400 in dark mode |
238 | 233 | - Footer links have theme-aware hover states for better visual feedback |
239 | 234 | - Accessible implementation with proper ARIA attributes and keyboard focus states |
240 | 235 |
|
241 | 236 | **Technical Details:** |
242 | | - |
243 | 237 | - Created ThemeToggle.astro component with inline script for theme management |
244 | 238 | - Configured Tailwind CSS with class-based dark mode strategy |
245 | 239 | - Added tailwind.config.js with dark mode enabled |
|
251 | 245 |
|
252 | 246 | - e5e448b: Add Bun test runner tooling to the project. Includes test scripts in package.json (test, test:watch, test:coverage), example test file demonstrating Bun's test syntax, and updated documentation in CLAUDE.md with testing commands and conventions. |
253 | 247 | - b090c8e: Add GitHub Action for opencode integration on issue comments |
254 | | - |
255 | 248 | - Add .github/workflows/opencode.yml to enable opencode AI assistance |
256 | 249 | - Triggers on issue comments containing '/oc' or '/opencode' commands |
257 | 250 | - Uses sst/opencode/github action with opencode/big-pickle model |
258 | 251 | - Includes proper permissions for repository access |
259 | 252 |
|
260 | 253 | - 201f90b: Migrate blog and testimonials to Astro Content Collections API |
261 | | - |
262 | 254 | - Create content config with Zod schemas for type safety |
263 | 255 | - Move markdown files from pages to content directory |
264 | 256 | - Standardize blog dates to ISO format |
|
270 | 262 |
|
271 | 263 | - 930f48e: Add article on DORA metrics misuse to bookshelf |
272 | 264 | - b090c8e: Refactor testimonials to use ContentSection component like myWork page |
273 | | - |
274 | 265 | - Convert testimonials from Astro Content Collections to static TypeScript data file |
275 | 266 | - Update testimonials page to use ContentContainer and BaseLayout instead of CollectionPageLayout |
276 | 267 | - Remove individual testimonial markdown files and dynamic routing |
|
292 | 283 | This release introduces a modern navigation system using HTMX that provides a single-page application experience while maintaining progressive enhancement and SEO-friendly fallbacks. |
293 | 284 |
|
294 | 285 | **New Features:** |
295 | | - |
296 | 286 | - HTMX-powered navigation that swaps content without full page reloads |
297 | 287 | - Smooth transitions between pages using HTMX's built-in transition system |
298 | 288 | - Browser history and URL preservation with `hx-push-url` |
299 | 289 | - Seven new API endpoints (`/api/*.html`) returning HTML fragments for HTMX requests |
300 | 290 | - Progressive enhancement: navigation works with and without JavaScript |
301 | 291 |
|
302 | 292 | **Improvements:** |
303 | | - |
304 | 293 | - Fixed animation stutter by eliminating conflicting CSS animations during HTMX transitions |
305 | 294 | - Added `noAnimation` prop system to Skills and Skill components for conditional animation control |
306 | 295 | - Faster page navigation with reduced bandwidth usage (only content updates, not full page) |
307 | 296 | - Maintained SEO compatibility with full-page fallbacks for search engine crawlers |
308 | 297 |
|
309 | 298 | **Code Quality Refactors:** |
310 | | - |
311 | 299 | - Refactored Navigation component to use data-driven link array, reducing code from ~93 lines to ~38 lines |
312 | 300 | - Extracted HTMX configuration into reusable constants for maintainability |
313 | 301 | - Created ApiContentLayout wrapper to eliminate duplication across API endpoints |
314 | 302 | - Improved code maintainability: adding/removing navigation links now requires only updating the data array |
315 | 303 |
|
316 | 304 | **Technical Details:** |
317 | | - |
318 | 305 | - Navigation links use `hx-get`, `hx-target`, `hx-swap`, and `hx-push-url` attributes |
319 | 306 | - Original page routes remain unchanged for direct access and SEO |
320 | 307 | - API endpoints share components with full pages, ensuring consistency |
|
0 commit comments