|
1 | 1 | # pendragon-coding |
2 | 2 |
|
| 3 | +## 2.8.0 |
| 4 | + |
| 5 | +### Minor Changes |
| 6 | + |
| 7 | +- 11225a7: Rewrite about section to reposition as AI/Context engineer. Updated homepage and API bio copy to reflect current focus on LLM-enabled workflows, agentic systems, and developer tooling. Added Voice DNA documentation for consistent site voice. |
| 8 | +- 0a33359: Add AI section to bookshelf page. Curated entries for agent workflows, AI tooling, and research automation resources. |
| 9 | +- 9062c7c: Remove proficiency indicators from skills section. Simplified skills display by removing proficiency dots, category descriptions, and scale hover effects for a more compact, readable layout. |
| 10 | + |
| 11 | +### Patch Changes |
| 12 | + |
| 13 | +- 333646e: Persist design context for future sessions in `.impeccable.md` and `.cursorrules`. |
| 14 | + |
| 15 | + This captures the portfolio's users, brand personality, aesthetic direction, and design principles so future work stays visually and experientially consistent. |
| 16 | + |
| 17 | +- 44328f7: Add build artifact directories to tsconfig exclude list to prevent type-checking dist, playwright-report, and test-results. |
| 18 | + |
3 | 19 | ## 2.7.1 |
4 | 20 |
|
5 | 21 | ### Patch Changes |
|
15 | 31 |
|
16 | 32 | - b125efa: Add breadcrumb navigation component for multi-level page context (Home > Blog > Article Title) |
17 | 33 | - d90e7c4: feat: add visual system design tokens for shadows, transitions, and easing |
| 34 | + |
18 | 35 | - Define shadow presets (card, card-hover, heading, glow-green) in Tailwind v4 @theme block |
19 | 36 | - Define transition duration scale (fast/normal/slow) and easing curves (default/in-out/spring) |
20 | 37 | - Mirror tokens in tailwind.config.js extend for editor intellisense support |
21 | 38 |
|
22 | 39 | - 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. |
23 | 40 | - d6bd63b: refactor: deepen frontend architecture — extract utilities, fix bugs, consolidate components |
| 41 | + |
24 | 42 | - Extract shared slug utility (toSlug) from 4 duplicated implementations, fixing a regex ordering bug in CollectionPageLayout |
25 | 43 | - Consolidate 4 duplicate component pairs (Card, Skill, Skills, Navigation) into canonical locations |
26 | 44 | - Merge HTMX attributes and active-page detection into Navigation (was missing from live site) |
|
44 | 62 | - 741c97c: fix: resolve remaining WCAG AA contrast violations on 404 page in both light and dark modes |
45 | 63 | - 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 |
46 | 64 | - bc17a2c: fix(a11y): blog sort button and prose link contrast for WCAG AA |
| 65 | + |
47 | 66 | - 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 |
48 | 67 | - `.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` |
49 | 68 | - Closes pendragon-coding-we9: all 16 axe-core contrast audit tests pass across 8 pages × 2 modes |
|
163 | 182 | 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. |
164 | 183 |
|
165 | 184 | **New Features:** |
| 185 | + |
166 | 186 | - Theme toggle button with sliding animation positioned at the right edge of the header |
167 | 187 | - Sun and moon icons that smoothly transition based on the selected theme |
168 | 188 | - localStorage persistence to remember user's theme preference across sessions |
169 | 189 | - System preference detection on first visit (respects `prefers-color-scheme`) |
170 | 190 | - Smooth color transitions throughout the site when switching themes (300ms duration) |
171 | 191 |
|
172 | 192 | **Improvements:** |
| 193 | + |
173 | 194 | - Light mode uses a clean gray-50 background with dark text for improved readability during daytime |
174 | 195 | - Dark mode maintains the existing green-950 background with light text optimized for low-light environments |
175 | 196 | - Navigation underlines adapt to theme: green-600 in light mode, green-400 in dark mode |
176 | 197 | - Footer links have theme-aware hover states for better visual feedback |
177 | 198 | - Accessible implementation with proper ARIA attributes and keyboard focus states |
178 | 199 |
|
179 | 200 | **Technical Details:** |
| 201 | + |
180 | 202 | - Created ThemeToggle.astro component with inline script for theme management |
181 | 203 | - Configured Tailwind CSS with class-based dark mode strategy |
182 | 204 | - Added tailwind.config.js with dark mode enabled |
|
188 | 210 |
|
189 | 211 | - 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. |
190 | 212 | - b090c8e: Add GitHub Action for opencode integration on issue comments |
| 213 | + |
191 | 214 | - Add .github/workflows/opencode.yml to enable opencode AI assistance |
192 | 215 | - Triggers on issue comments containing '/oc' or '/opencode' commands |
193 | 216 | - Uses sst/opencode/github action with opencode/big-pickle model |
194 | 217 | - Includes proper permissions for repository access |
195 | 218 |
|
196 | 219 | - 201f90b: Migrate blog and testimonials to Astro Content Collections API |
| 220 | + |
197 | 221 | - Create content config with Zod schemas for type safety |
198 | 222 | - Move markdown files from pages to content directory |
199 | 223 | - Standardize blog dates to ISO format |
|
205 | 229 |
|
206 | 230 | - 930f48e: Add article on DORA metrics misuse to bookshelf |
207 | 231 | - b090c8e: Refactor testimonials to use ContentSection component like myWork page |
| 232 | + |
208 | 233 | - Convert testimonials from Astro Content Collections to static TypeScript data file |
209 | 234 | - Update testimonials page to use ContentContainer and BaseLayout instead of CollectionPageLayout |
210 | 235 | - Remove individual testimonial markdown files and dynamic routing |
|
226 | 251 | This release introduces a modern navigation system using HTMX that provides a single-page application experience while maintaining progressive enhancement and SEO-friendly fallbacks. |
227 | 252 |
|
228 | 253 | **New Features:** |
| 254 | + |
229 | 255 | - HTMX-powered navigation that swaps content without full page reloads |
230 | 256 | - Smooth transitions between pages using HTMX's built-in transition system |
231 | 257 | - Browser history and URL preservation with `hx-push-url` |
232 | 258 | - Seven new API endpoints (`/api/*.html`) returning HTML fragments for HTMX requests |
233 | 259 | - Progressive enhancement: navigation works with and without JavaScript |
234 | 260 |
|
235 | 261 | **Improvements:** |
| 262 | + |
236 | 263 | - Fixed animation stutter by eliminating conflicting CSS animations during HTMX transitions |
237 | 264 | - Added `noAnimation` prop system to Skills and Skill components for conditional animation control |
238 | 265 | - Faster page navigation with reduced bandwidth usage (only content updates, not full page) |
239 | 266 | - Maintained SEO compatibility with full-page fallbacks for search engine crawlers |
240 | 267 |
|
241 | 268 | **Code Quality Refactors:** |
| 269 | + |
242 | 270 | - Refactored Navigation component to use data-driven link array, reducing code from ~93 lines to ~38 lines |
243 | 271 | - Extracted HTMX configuration into reusable constants for maintainability |
244 | 272 | - Created ApiContentLayout wrapper to eliminate duplication across API endpoints |
245 | 273 | - Improved code maintainability: adding/removing navigation links now requires only updating the data array |
246 | 274 |
|
247 | 275 | **Technical Details:** |
| 276 | + |
248 | 277 | - Navigation links use `hx-get`, `hx-target`, `hx-swap`, and `hx-push-url` attributes |
249 | 278 | - Original page routes remain unchanged for direct access and SEO |
250 | 279 | - API endpoints share components with full pages, ensuring consistency |
|
0 commit comments