|
1 | 1 | # pendragon-coding |
2 | 2 |
|
| 3 | +## 2.9.0 |
| 4 | + |
| 5 | +### Minor Changes |
| 6 | + |
| 7 | +- eda2781: Add sticky Share bar on blog post pages (copy URL, LinkedIn, X, Facebook) and minimal per-post OG metadata (description excerpt, canonical URL). |
| 8 | + |
| 9 | +### Patch Changes |
| 10 | + |
| 11 | +- cada961: Wire blog CollectionPageLayout to shared CardList stack layout (one post per row). Content pages keep CardList grid with auto-fill columns; remove viewport aspect-ratio rules that forced single-column grids on non-blog pages. |
| 12 | +- cada961: Add section sidebar navigation to the blog listing page and HTMX `/api/blog.html` partial, matching myWork, bookshelf, and testimonials. |
| 13 | +- a0c8515: Add Cursor `stop` hook that runs `bun vet` and reopens the agent with fix instructions when the quality gate fails (up to 3 follow-up loops, 15 min timeout). Pin `devalue` and `ws` via overrides so `bun audit` passes. Run Playwright e2e on port 3456 against a fresh preview build so vet does not collide with `astro dev` on 4321. |
| 14 | +- ba3c45f: Add six GitHub project cards to My Work (Python SDET demo, mutate4ts, crap4ts, rule-validator, Playwright parameterized users, stepdown-rule). |
| 15 | +- 1c0a384: Update homepage About section copy to reflect AI enablement, QA, accessibility focus, career path, SecurityScorecard work, and target roles. |
| 16 | +- 9117845: Tighten SectionList layout: full-width CSS grid for card sections, remove viewport-capped short-form card width, and use vertical-only card margins in grid cells to prevent horizontal overflow past main-content. |
| 17 | + |
3 | 18 | ## 2.8.2 |
4 | 19 |
|
5 | 20 | ### Patch Changes |
|
48 | 63 |
|
49 | 64 | - b125efa: Add breadcrumb navigation component for multi-level page context (Home > Blog > Article Title) |
50 | 65 | - d90e7c4: feat: add visual system design tokens for shadows, transitions, and easing |
| 66 | + |
51 | 67 | - Define shadow presets (card, card-hover, heading, glow-green) in Tailwind v4 @theme block |
52 | 68 | - Define transition duration scale (fast/normal/slow) and easing curves (default/in-out/spring) |
53 | 69 | - Mirror tokens in tailwind.config.js extend for editor intellisense support |
54 | 70 |
|
55 | 71 | - 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. |
56 | 72 | - d6bd63b: refactor: deepen frontend architecture — extract utilities, fix bugs, consolidate components |
| 73 | + |
57 | 74 | - Extract shared slug utility (toSlug) from 4 duplicated implementations, fixing a regex ordering bug in CollectionPageLayout |
58 | 75 | - Consolidate 4 duplicate component pairs (Card, Skill, Skills, Navigation) into canonical locations |
59 | 76 | - Merge HTMX attributes and active-page detection into Navigation (was missing from live site) |
|
77 | 94 | - 741c97c: fix: resolve remaining WCAG AA contrast violations on 404 page in both light and dark modes |
78 | 95 | - 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 |
79 | 96 | - bc17a2c: fix(a11y): blog sort button and prose link contrast for WCAG AA |
| 97 | + |
80 | 98 | - 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 |
81 | 99 | - `.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` |
82 | 100 | - Closes pendragon-coding-we9: all 16 axe-core contrast audit tests pass across 8 pages × 2 modes |
|
196 | 214 | 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. |
197 | 215 |
|
198 | 216 | **New Features:** |
| 217 | + |
199 | 218 | - Theme toggle button with sliding animation positioned at the right edge of the header |
200 | 219 | - Sun and moon icons that smoothly transition based on the selected theme |
201 | 220 | - localStorage persistence to remember user's theme preference across sessions |
202 | 221 | - System preference detection on first visit (respects `prefers-color-scheme`) |
203 | 222 | - Smooth color transitions throughout the site when switching themes (300ms duration) |
204 | 223 |
|
205 | 224 | **Improvements:** |
| 225 | + |
206 | 226 | - Light mode uses a clean gray-50 background with dark text for improved readability during daytime |
207 | 227 | - Dark mode maintains the existing green-950 background with light text optimized for low-light environments |
208 | 228 | - Navigation underlines adapt to theme: green-600 in light mode, green-400 in dark mode |
209 | 229 | - Footer links have theme-aware hover states for better visual feedback |
210 | 230 | - Accessible implementation with proper ARIA attributes and keyboard focus states |
211 | 231 |
|
212 | 232 | **Technical Details:** |
| 233 | + |
213 | 234 | - Created ThemeToggle.astro component with inline script for theme management |
214 | 235 | - Configured Tailwind CSS with class-based dark mode strategy |
215 | 236 | - Added tailwind.config.js with dark mode enabled |
|
221 | 242 |
|
222 | 243 | - 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. |
223 | 244 | - b090c8e: Add GitHub Action for opencode integration on issue comments |
| 245 | + |
224 | 246 | - Add .github/workflows/opencode.yml to enable opencode AI assistance |
225 | 247 | - Triggers on issue comments containing '/oc' or '/opencode' commands |
226 | 248 | - Uses sst/opencode/github action with opencode/big-pickle model |
227 | 249 | - Includes proper permissions for repository access |
228 | 250 |
|
229 | 251 | - 201f90b: Migrate blog and testimonials to Astro Content Collections API |
| 252 | + |
230 | 253 | - Create content config with Zod schemas for type safety |
231 | 254 | - Move markdown files from pages to content directory |
232 | 255 | - Standardize blog dates to ISO format |
|
238 | 261 |
|
239 | 262 | - 930f48e: Add article on DORA metrics misuse to bookshelf |
240 | 263 | - b090c8e: Refactor testimonials to use ContentSection component like myWork page |
| 264 | + |
241 | 265 | - Convert testimonials from Astro Content Collections to static TypeScript data file |
242 | 266 | - Update testimonials page to use ContentContainer and BaseLayout instead of CollectionPageLayout |
243 | 267 | - Remove individual testimonial markdown files and dynamic routing |
|
259 | 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. |
260 | 284 |
|
261 | 285 | **New Features:** |
| 286 | + |
262 | 287 | - HTMX-powered navigation that swaps content without full page reloads |
263 | 288 | - Smooth transitions between pages using HTMX's built-in transition system |
264 | 289 | - Browser history and URL preservation with `hx-push-url` |
265 | 290 | - Seven new API endpoints (`/api/*.html`) returning HTML fragments for HTMX requests |
266 | 291 | - Progressive enhancement: navigation works with and without JavaScript |
267 | 292 |
|
268 | 293 | **Improvements:** |
| 294 | + |
269 | 295 | - Fixed animation stutter by eliminating conflicting CSS animations during HTMX transitions |
270 | 296 | - Added `noAnimation` prop system to Skills and Skill components for conditional animation control |
271 | 297 | - Faster page navigation with reduced bandwidth usage (only content updates, not full page) |
272 | 298 | - Maintained SEO compatibility with full-page fallbacks for search engine crawlers |
273 | 299 |
|
274 | 300 | **Code Quality Refactors:** |
| 301 | + |
275 | 302 | - Refactored Navigation component to use data-driven link array, reducing code from ~93 lines to ~38 lines |
276 | 303 | - Extracted HTMX configuration into reusable constants for maintainability |
277 | 304 | - Created ApiContentLayout wrapper to eliminate duplication across API endpoints |
278 | 305 | - Improved code maintainability: adding/removing navigation links now requires only updating the data array |
279 | 306 |
|
280 | 307 | **Technical Details:** |
| 308 | + |
281 | 309 | - Navigation links use `hx-get`, `hx-target`, `hx-swap`, and `hx-push-url` attributes |
282 | 310 | - Original page routes remain unchanged for direct access and SEO |
283 | 311 | - API endpoints share components with full pages, ensuring consistency |
|
0 commit comments