|
41 | 41 |
|
42 | 42 | - b125efa: Add breadcrumb navigation component for multi-level page context (Home > Blog > Article Title) |
43 | 43 | - d90e7c4: feat: add visual system design tokens for shadows, transitions, and easing |
44 | | - |
45 | 44 | - Define shadow presets (card, card-hover, heading, glow-green) in Tailwind v4 @theme block |
46 | 45 | - Define transition duration scale (fast/normal/slow) and easing curves (default/in-out/spring) |
47 | 46 | - Mirror tokens in tailwind.config.js extend for editor intellisense support |
48 | 47 |
|
49 | 48 | - 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. |
50 | 49 | - d6bd63b: refactor: deepen frontend architecture — extract utilities, fix bugs, consolidate components |
51 | | - |
52 | 50 | - Extract shared slug utility (toSlug) from 4 duplicated implementations, fixing a regex ordering bug in CollectionPageLayout |
53 | 51 | - Consolidate 4 duplicate component pairs (Card, Skill, Skills, Navigation) into canonical locations |
54 | 52 | - Merge HTMX attributes and active-page detection into Navigation (was missing from live site) |
|
72 | 70 | - 741c97c: fix: resolve remaining WCAG AA contrast violations on 404 page in both light and dark modes |
73 | 71 | - 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 |
74 | 72 | - bc17a2c: fix(a11y): blog sort button and prose link contrast for WCAG AA |
75 | | - |
76 | 73 | - 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 |
77 | 74 | - `.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` |
78 | 75 | - Closes pendragon-coding-we9: all 16 axe-core contrast audit tests pass across 8 pages × 2 modes |
|
192 | 189 | 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. |
193 | 190 |
|
194 | 191 | **New Features:** |
195 | | - |
196 | 192 | - Theme toggle button with sliding animation positioned at the right edge of the header |
197 | 193 | - Sun and moon icons that smoothly transition based on the selected theme |
198 | 194 | - localStorage persistence to remember user's theme preference across sessions |
199 | 195 | - System preference detection on first visit (respects `prefers-color-scheme`) |
200 | 196 | - Smooth color transitions throughout the site when switching themes (300ms duration) |
201 | 197 |
|
202 | 198 | **Improvements:** |
203 | | - |
204 | 199 | - Light mode uses a clean gray-50 background with dark text for improved readability during daytime |
205 | 200 | - Dark mode maintains the existing green-950 background with light text optimized for low-light environments |
206 | 201 | - Navigation underlines adapt to theme: green-600 in light mode, green-400 in dark mode |
207 | 202 | - Footer links have theme-aware hover states for better visual feedback |
208 | 203 | - Accessible implementation with proper ARIA attributes and keyboard focus states |
209 | 204 |
|
210 | 205 | **Technical Details:** |
211 | | - |
212 | 206 | - Created ThemeToggle.astro component with inline script for theme management |
213 | 207 | - Configured Tailwind CSS with class-based dark mode strategy |
214 | 208 | - Added tailwind.config.js with dark mode enabled |
|
220 | 214 |
|
221 | 215 | - 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. |
222 | 216 | - b090c8e: Add GitHub Action for opencode integration on issue comments |
223 | | - |
224 | 217 | - Add .github/workflows/opencode.yml to enable opencode AI assistance |
225 | 218 | - Triggers on issue comments containing '/oc' or '/opencode' commands |
226 | 219 | - Uses sst/opencode/github action with opencode/big-pickle model |
227 | 220 | - Includes proper permissions for repository access |
228 | 221 |
|
229 | 222 | - 201f90b: Migrate blog and testimonials to Astro Content Collections API |
230 | | - |
231 | 223 | - Create content config with Zod schemas for type safety |
232 | 224 | - Move markdown files from pages to content directory |
233 | 225 | - Standardize blog dates to ISO format |
|
239 | 231 |
|
240 | 232 | - 930f48e: Add article on DORA metrics misuse to bookshelf |
241 | 233 | - b090c8e: Refactor testimonials to use ContentSection component like myWork page |
242 | | - |
243 | 234 | - Convert testimonials from Astro Content Collections to static TypeScript data file |
244 | 235 | - Update testimonials page to use ContentContainer and BaseLayout instead of CollectionPageLayout |
245 | 236 | - Remove individual testimonial markdown files and dynamic routing |
|
261 | 252 | This release introduces a modern navigation system using HTMX that provides a single-page application experience while maintaining progressive enhancement and SEO-friendly fallbacks. |
262 | 253 |
|
263 | 254 | **New Features:** |
264 | | - |
265 | 255 | - HTMX-powered navigation that swaps content without full page reloads |
266 | 256 | - Smooth transitions between pages using HTMX's built-in transition system |
267 | 257 | - Browser history and URL preservation with `hx-push-url` |
268 | 258 | - Seven new API endpoints (`/api/*.html`) returning HTML fragments for HTMX requests |
269 | 259 | - Progressive enhancement: navigation works with and without JavaScript |
270 | 260 |
|
271 | 261 | **Improvements:** |
272 | | - |
273 | 262 | - Fixed animation stutter by eliminating conflicting CSS animations during HTMX transitions |
274 | 263 | - Added `noAnimation` prop system to Skills and Skill components for conditional animation control |
275 | 264 | - Faster page navigation with reduced bandwidth usage (only content updates, not full page) |
276 | 265 | - Maintained SEO compatibility with full-page fallbacks for search engine crawlers |
277 | 266 |
|
278 | 267 | **Code Quality Refactors:** |
279 | | - |
280 | 268 | - Refactored Navigation component to use data-driven link array, reducing code from ~93 lines to ~38 lines |
281 | 269 | - Extracted HTMX configuration into reusable constants for maintainability |
282 | 270 | - Created ApiContentLayout wrapper to eliminate duplication across API endpoints |
283 | 271 | - Improved code maintainability: adding/removing navigation links now requires only updating the data array |
284 | 272 |
|
285 | 273 | **Technical Details:** |
286 | | - |
287 | 274 | - Navigation links use `hx-get`, `hx-target`, `hx-swap`, and `hx-push-url` attributes |
288 | 275 | - Original page routes remain unchanged for direct access and SEO |
289 | 276 | - API endpoints share components with full pages, ensuring consistency |
|
0 commit comments