]> danix's work - danix.xyz-2.git/log
danix.xyz-2.git
13 days agodocs: add Week 6 implementation plan and update progress status (83% complete, Week...
Danilo M. [Fri, 17 Apr 2026 07:51:18 +0000 (09:51 +0200)] 
docs: add Week 6 implementation plan and update progress status (83% complete, Week 5 done)

13 days agodocs: add Week 6+ TODO list for pages, testing, and future enhancements
Danilo M. [Fri, 17 Apr 2026 07:46:31 +0000 (09:46 +0200)] 
docs: add Week 6+ TODO list for pages, testing, and future enhancements

13 days agodocs: finalize Week 5 completion status in HANDOFF.md (Task 23)
Danilo M. [Fri, 17 Apr 2026 07:36:28 +0000 (09:36 +0200)] 
docs: finalize Week 5 completion status in HANDOFF.md (Task 23)

13 days agodocs: add comprehensive accessibility audit report (WCAG 2.1 AA compliant)
Danilo M. [Fri, 17 Apr 2026 07:34:50 +0000 (09:34 +0200)] 
docs: add comprehensive accessibility audit report (WCAG 2.1 AA compliant)

13 days agodocs: add Week 5 comprehensive testing report (73 tests, 100% pass rate)
Danilo M. [Fri, 17 Apr 2026 07:32:05 +0000 (09:32 +0200)] 
docs: add Week 5 comprehensive testing report (73 tests, 100% pass rate)

13 days agodocs: add Week 5 implementation guide (animations, focus management, accessibility)
Danilo M. [Fri, 17 Apr 2026 07:29:47 +0000 (09:29 +0200)] 
docs: add Week 5 implementation guide (animations, focus management, accessibility)

13 days agofeat: verify semantic HTML - replace div with button in toast-close
Danilo M. [Fri, 17 Apr 2026 07:27:53 +0000 (09:27 +0200)] 
feat: verify semantic HTML - replace div with button in toast-close

Replace div element with actual button element for toast notification close
control. Adds type='button' and aria-label for accessibility. Maintains all
Alpine.js functionality via @click handler.

WCAG 2.1 AA compliance: 1.3.1 Info and Relationships

13 days agofeat: ensure all form inputs have associated labels (for/id attributes)
Danilo M. [Fri, 17 Apr 2026 07:27:05 +0000 (09:27 +0200)] 
feat: ensure all form inputs have associated labels (for/id attributes)

- Added id to checkbox: agree-terms
- Added id/for to checkboxes: interest-tech, interest-design
- Added id/for to radio buttons: preference-option-a, preference-option-b
- All 13 form inputs now have matching label associations
- Improves WCAG 2.1 AA compliance (3.3.2 Labels or Instructions)

13 days agofeat: ensure i18n-based aria-labels on all icon-only buttons
Danilo M. [Fri, 17 Apr 2026 07:26:26 +0000 (09:26 +0200)] 
feat: ensure i18n-based aria-labels on all icon-only buttons

Standardize aria-labels across form-components, hamburger-menu, and header
partials to use i18n keys for multilingual support. Modal close buttons now
consistently use the 'closeMenu' i18n key across all three modals, matching
the accessibility pattern used for menu and theme toggle buttons.

- form-components.html: Update modal close buttons (alert, confirm, content)
- hamburger-menu.html: Already has aria-label with i18n
- header.html: Theme toggle and hamburger menu already have aria-labels

Co-Authored-By: Claude Haiku 4.5 <redacted>
13 days agofeat: enhance modal focus trap with JavaScript and ARIA attributes
Danilo M. [Fri, 17 Apr 2026 07:25:33 +0000 (09:25 +0200)] 
feat: enhance modal focus trap with JavaScript and ARIA attributes

Implements focus trap function that cycles Tab/Shift+Tab within modal boundaries,
adds ARIA attributes (role, aria-modal, aria-labelledby) for accessibility
compliance, and integrates focus initialization on modal display.

- Focus trap prevents tab escape from modal dialog
- ARIA attributes: role=dialog, aria-modal=true, aria-labelledby linking title
- Backdrop marked aria-hidden=true to exclude from accessibility tree
- Close buttons have aria-label for screen readers
- Focus initialization calls createFocusTrap on modal show

Co-Authored-By: Claude Haiku 4.5 <redacted>
13 days agofeat: add prefers-reduced-motion support (disable animations when motion-reduced)
Danilo M. [Fri, 17 Apr 2026 07:24:39 +0000 (09:24 +0200)] 
feat: add prefers-reduced-motion support (disable animations when motion-reduced)

Adds a CSS media query that respects user motion preferences by:
- Disabling all animations and transitions when prefers-reduced-motion: reduce
- Using !important to override all animation/transition declarations
- Ensuring focus-visible outline remains visible for keyboard navigation

This improves accessibility for users with motion sensitivity.

Co-Authored-By: Claude Haiku 4.5 <redacted>
13 days agofeat: add focus management styles (:focus-visible, button hover, form input focus)
Danilo M. [Fri, 17 Apr 2026 07:23:58 +0000 (09:23 +0200)] 
feat: add focus management styles (:focus-visible, button hover, form input focus)

13 days agofeat: add animation utility classes (.animate-fade-in, .animate-slide-up, .animate...
Danilo M. [Fri, 17 Apr 2026 07:23:16 +0000 (09:23 +0200)] 
feat: add animation utility classes (.animate-fade-in, .animate-slide-up, .animate-spin-loader)

13 days agofeat: add CSS keyframe animations (fadeIn, slideUp, refine modalSlideUp, spin)
Danilo M. [Fri, 17 Apr 2026 07:22:33 +0000 (09:22 +0200)] 
feat: add CSS keyframe animations (fadeIn, slideUp, refine modalSlideUp, spin)

2 weeks agodocs: add Week 5 implementation plan (24 tasks, detailed steps)
Danilo M. [Thu, 16 Apr 2026 15:10:28 +0000 (17:10 +0200)] 
docs: add Week 5 implementation plan (24 tasks, detailed steps)

2 weeks agodocs: add Week 5 design spec (animations & a11y audit)
Danilo M. [Thu, 16 Apr 2026 15:06:02 +0000 (17:06 +0200)] 
docs: add Week 5 design spec (animations & a11y audit)

Design covers:
- Subtle, professional entrance animations (fade-in, slide-up, 200-300ms)
- Motion-safe alternatives (prefers-reduced-motion support)
- Focused accessibility audit (focus management, keyboard nav, ARIA basics)
- 60+ test cases covering animations, keyboard navigation, focus indicators
- Success criteria: WCAG 2.1 AA compliance, 60fps performance
- Deliverables: WEEK5-IMPLEMENTATION.md, WEEK5-TESTING.md, A11Y-AUDIT-REPORT.md

Scope: No page transition animations (KISS), no advanced ARIA patterns, focused audit areas only.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agodocs: update progress status to reflect Week 4 completion (67% overall)
Danilo M. [Thu, 16 Apr 2026 14:58:45 +0000 (16:58 +0200)] 
docs: update progress status to reflect Week 4 completion (67% overall)

2 weeks agodocs: add Week 5 ready status and cumulative progress tracking
Danilo M. [Thu, 16 Apr 2026 14:57:23 +0000 (16:57 +0200)] 
docs: add Week 5 ready status and cumulative progress tracking

2 weeks agodocs: add Week 4 comprehensive testing report (64 tests, all pass)
Danilo M. [Thu, 16 Apr 2026 14:56:34 +0000 (16:56 +0200)] 
docs: add Week 4 comprehensive testing report (64 tests, all pass)

2 weeks agofeat: add Week 4 documentation (implementation guide, component examples, HANDOFF...
Danilo M. [Thu, 16 Apr 2026 14:55:50 +0000 (16:55 +0200)] 
feat: add Week 4 documentation (implementation guide, component examples, HANDOFF update)

2 weeks agofeat: add form component templates, i18n strings, and Alpine.js utilities
Danilo M. [Thu, 16 Apr 2026 14:54:19 +0000 (16:54 +0200)] 
feat: add form component templates, i18n strings, and Alpine.js utilities

2 weeks agofeat: add form component styles (inputs, textarea, checkbox, radio)
Danilo M. [Thu, 16 Apr 2026 14:53:21 +0000 (16:53 +0200)] 
feat: add form component styles (inputs, textarea, checkbox, radio)

2 weeks agofix: header sticky positioning regression
Danilo M. [Thu, 16 Apr 2026 14:49:36 +0000 (16:49 +0200)] 
fix: header sticky positioning regression

Changed header from sticky to fixed positioning and added proper margin offset
(mt-20) to main element to prevent content from being covered. The fixed header
now stays at the top during scroll while content renders below it properly.

- Fixed header: changed from sticky to fixed with left-0 right-0 full width
- Main spacing: added mt-20 margin-top with relative z-10 preserved
- Restored z-index layering for content positioning

Also added Week 3 completion documentation and Week 4 planning files:
- WEEK3-COMPLETION.md: Comprehensive audit of Week 3 implementation
- WEEK3-4-TRANSITION.md: Handoff document with git workflow
- WEEK4-PLAN.md: Full technical roadmap for Week 4 forms & interactions
- PROGRESS-STATUS-WEEK4.txt: Updated cumulative progress tracking
- Updated HANDOFF.md with Week 3 summary and Week 4 readiness

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: logo link now respects current language
Danilo M. [Thu, 16 Apr 2026 14:29:11 +0000 (16:29 +0200)] 
fix: logo link now respects current language

The header logo link was hardcoded to '/' which always returned to the
English homepage when clicked from Italian pages. Now uses language-aware
routing: IT pages link to /it/, EN pages link to /

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agochore: update HANDOFF and settings after breadcrumb fix
Danilo M. [Thu, 16 Apr 2026 14:26:11 +0000 (16:26 +0200)] 
chore: update HANDOFF and settings after breadcrumb fix

- Updated HANDOFF.md to reflect breadcrumb fix completion
- Added GitHub WebFetch permission for future reference lookups

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: make breadcrumb navigation multilingual with proper links
Danilo M. [Thu, 16 Apr 2026 14:23:50 +0000 (16:23 +0200)] 
feat: make breadcrumb navigation multilingual with proper links

- Added language-aware breadcrumb links (IT uses /it/ subdir, EN uses root)
- Added 'home' translation key to both i18n files
- Breadcrumb now displays translated labels and correct URLs for each language

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: breadcrumb navigation now renders in article pages
Danilo M. [Thu, 16 Apr 2026 14:21:15 +0000 (16:21 +0200)] 
fix: breadcrumb navigation now renders in article pages

The breadcrumb partial was being called but producing no output. Investigation
revealed the issue: Hugo was using layouts/_default/single.html instead of
layouts/articles/single.html. Added the breadcrumb partial call to the actual
layout being used (_default/single.html), fixing the missing navigation.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agochore: update Italian translations
Danilo M. [Thu, 16 Apr 2026 14:06:54 +0000 (16:06 +0200)] 
chore: update Italian translations

- Update readMore: "Leggi di più" → "Continua a leggere"
- Update quote: "Citazione" → "Citazioni"

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: add x-cloak to prevent menu flash on page load
Danilo M. [Thu, 16 Apr 2026 14:01:56 +0000 (16:01 +0200)] 
fix: add x-cloak to prevent menu flash on page load

- Add [x-cloak] { display: none } CSS rule
- Add x-cloak attribute to menu overlay div
- This hides the menu until Alpine.js initializes
- Prevents the menu from appearing briefly on page refresh/load
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: prevent menu flicker when navigating to new page
Danilo M. [Thu, 16 Apr 2026 13:59:51 +0000 (15:59 +0200)] 
fix: prevent menu flicker when navigating to new page

- Add beforeunload event listener to close menu before page navigation
- This prevents the menu from briefly appearing on the new page
- Menu state is explicitly set to false before unload
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: rewrite hamburger menu using Alpine.js event dispatcher
Danilo M. [Thu, 16 Apr 2026 13:57:37 +0000 (15:57 +0200)] 
fix: rewrite hamburger menu using Alpine.js event dispatcher

- Replace vanilla JS click handlers with Alpine.js @toggle-menu event
- Hamburger button dispatches toggle-menu event on click
- Menu overlay listens to toggle-menu and toggles menuOpen state
- Alpine controls visibility via :class bindings (opacity/invisible)
- Alpine controls panel slide via :class bindings (translate-x)
- All menu interactions (close button, links, ESC, backdrop) use Alpine
- Remove complex vanilla JS that wasn't working reliably
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: hamburger menu click handler and horizontal scroll issues
Danilo M. [Thu, 16 Apr 2026 13:51:55 +0000 (15:51 +0200)] 
fix: hamburger menu click handler and horizontal scroll issues

- Improve hamburger menu JS with better error handling and console warnings
- Add preventDefault() to button click handlers for reliability
- Handle document ready state check (in case script runs before DOMContentLoaded)
- Add overflow-x-hidden to html and body to prevent horizontal scrolling on mobile
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: refactor homepage buttons to use btn component classes
Danilo M. [Thu, 16 Apr 2026 13:45:37 +0000 (15:45 +0200)] 
feat: refactor homepage buttons to use btn component classes

- Update index.html to use .btn .btn-primary .btn-lg and .btn .btn-outline .btn-lg
- Update CLAUDE.md documentation
- Update settings.local.json with additional permissions

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: simplify breadcrumb component (WIP - rendering issue to investigate)
Danilo M. [Thu, 16 Apr 2026 13:43:54 +0000 (15:43 +0200)] 
fix: simplify breadcrumb component (WIP - rendering issue to investigate)

2 weeks agofeat: add breadcrumb navigation component
Danilo M. [Thu, 16 Apr 2026 13:29:38 +0000 (15:29 +0200)] 
feat: add breadcrumb navigation component

- Create breadcrumb.html partial with Home > Articles > Title structure
- Support both English and Italian language versions
- Add breadcrumb and breadcrumb-separator CSS classes
- Integrate breadcrumb into article detail pages
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: add header nav and hamburger menu styling with JS handlers
Danilo M. [Thu, 16 Apr 2026 13:28:23 +0000 (15:28 +0200)] 
feat: add header nav and hamburger menu styling with JS handlers

- Add header, nav-link, header-actions component CSS
- Add menu-overlay and menu-nav component CSS
- Update hamburger-menu.html with vanilla JS handlers:
  - openMenu/closeMenu functions
  - ESC key support
  - Click outside to close (backdrop click)
  - Menu link auto-close
  - Scroll lock when menu open
- Replace Alpine @click with id-based event listeners
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: add card component with hover lift and glow effects
Danilo M. [Thu, 16 Apr 2026 13:27:05 +0000 (15:27 +0200)] 
feat: add card component with hover lift and glow effects

- Add .card base component with border, rounded corners, glow shadow
- Add .card:hover state with translateY(-2px) lift and enhanced glow
- Add .card-image, .card-body, .card-title, .card-excerpt, .card-footer semantic classes
- Refactor article-list-item.html to use card component classes
- Rebuild CSS: main.min.css updated

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: import 36 articles with assets and create supporting shortcodes
Danilo M. [Thu, 16 Apr 2026 12:52:16 +0000 (14:52 +0200)] 
feat: import 36 articles with assets and create supporting shortcodes

- Migrate all English articles from old site to content/en/articles/
- Organize article assets in static/uppies/year/month/ structure
- Create Italian article stubs with draft=true status
- Add 7 new shortcodes: strike, em, dropcap, figure, highlight, img, youtube, gal-img
- Update article image paths to reference /uppies/ locations
- All 36 articles now build successfully without errors

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: i18n singular/plural post count on taxonomy list fix/taxonomy-layouts
Danilo M. [Thu, 16 Apr 2026 10:54:14 +0000 (12:54 +0200)] 
feat: i18n singular/plural post count on taxonomy list

Replace hardcoded "Posts: N" with i18n "postCount" key using Hugo's
pluralization support (one/other forms). Renders "1 post" or "N posts"
in English, "1 articolo" or "N articoli" in Italian.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofeat: add article count badge to taxonomy list items
Danilo M. [Thu, 16 Apr 2026 10:49:38 +0000 (12:49 +0200)] 
feat: add article count badge to taxonomy list items

Each term card on the tags/categories list page now shows a count
badge (top-right) with the number of articles in that term.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agofix: restore articles to taxonomy pages and fix i18n headings
Danilo M. [Thu, 16 Apr 2026 10:44:04 +0000 (12:44 +0200)] 
fix: restore articles to taxonomy pages and fix i18n headings

Fixed two critical bugs in taxonomy layouts:

1. Pinned/unpinned filter was silently hiding all articles. The filter
   only matched pages that explicitly set pinned=false, dropping all
   articles that omitted the parameter (most articles have nil, not false).
   Added the nil/empty fallback from _default/list.html.

2. Missing i18n keys caused blank headings on some taxonomy pages:
   - Added 'tag' key for /tags/term/ pages
   - Added 'categories' key for /categories/ list page

3. Harmonized spacing with main article list for visual consistency:
   Changed from space-y-2 max-w-2xl to space-y-6 max-w-3xl

Changes:
- i18n/en.yaml: Added 'tag' and 'categories' keys
- i18n/it.yaml: Added 'tag' and 'categories' keys
- taxonomy/list.html: Added nil fallback + spacing fix
- taxonomy/term.html: Added nil fallback + spacing fix

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agorefactor: remove footer-specific backdrop-filter rule for consistency
Danilo M. [Thu, 16 Apr 2026 10:20:56 +0000 (12:20 +0200)] 
refactor: remove footer-specific backdrop-filter rule for consistency

2 weeks agofix: restore relative z-20 classes to footer for backdrop-filter to work feature/footer-frosted-glass
Danilo M. [Thu, 16 Apr 2026 10:19:46 +0000 (12:19 +0200)] 
fix: restore relative z-20 classes to footer for backdrop-filter to work

2 weeks agorefactor: remove positioning classes from footer for consistency with header
Danilo M. [Thu, 16 Apr 2026 10:19:00 +0000 (12:19 +0200)] 
refactor: remove positioning classes from footer for consistency with header

2 weeks agorefactor: use frosted-bar class on footer with stronger blur variant
Danilo M. [Thu, 16 Apr 2026 10:16:46 +0000 (12:16 +0200)] 
refactor: use frosted-bar class on footer with stronger blur variant

2 weeks agoadjust: reduce footer background opacity to 0.6 for better frosted glass visibility
Danilo M. [Thu, 16 Apr 2026 10:15:28 +0000 (12:15 +0200)] 
adjust: reduce footer background opacity to 0.6 for better frosted glass visibility

2 weeks agofix: add position and z-index to footer for backdrop-filter to work
Danilo M. [Thu, 16 Apr 2026 10:14:41 +0000 (12:14 +0200)] 
fix: add position and z-index to footer for backdrop-filter to work

2 weeks agofix: add backdrop-filter blur to footer via CSS with vendor prefix
Danilo M. [Thu, 16 Apr 2026 10:13:55 +0000 (12:13 +0200)] 
fix: add backdrop-filter blur to footer via CSS with vendor prefix

2 weeks agofix: use CSS variables in footer inline styles for theme-aware colors
Danilo M. [Thu, 16 Apr 2026 10:12:45 +0000 (12:12 +0200)] 
fix: use CSS variables in footer inline styles for theme-aware colors

2 weeks agofix: apply frosted glass styling to footer via inline styles instead of CSS class
Danilo M. [Thu, 16 Apr 2026 10:10:48 +0000 (12:10 +0200)] 
fix: apply frosted glass styling to footer via inline styles instead of CSS class

2 weeks agotest: set footer background to red to check if inline styles work at all
Danilo M. [Thu, 16 Apr 2026 10:10:09 +0000 (12:10 +0200)] 
test: set footer background to red to check if inline styles work at all

2 weeks agotest: add inline style to footer background for debugging
Danilo M. [Thu, 16 Apr 2026 10:08:20 +0000 (12:08 +0200)] 
test: add inline style to footer background for debugging

2 weeks agotest: set footer background to fully opaque (1) to debug styling
Danilo M. [Thu, 16 Apr 2026 10:07:09 +0000 (12:07 +0200)] 
test: set footer background to fully opaque (1) to debug styling

2 weeks agofix: add frosted-bar-strong class to footer for stronger frosting and opacity
Danilo M. [Thu, 16 Apr 2026 10:05:48 +0000 (12:05 +0200)] 
fix: add frosted-bar-strong class to footer for stronger frosting and opacity

2 weeks agofix: increase footer backdrop blur from 10px to 20px for stronger frosting effect
Danilo M. [Thu, 16 Apr 2026 09:53:15 +0000 (11:53 +0200)] 
fix: increase footer backdrop blur from 10px to 20px for stronger frosting effect

2 weeks agofix: increase footer opacity to 0.88 for better visual balance with header
Danilo M. [Thu, 16 Apr 2026 09:51:46 +0000 (11:51 +0200)] 
fix: increase footer opacity to 0.88 for better visual balance with header

2 weeks agofix: reduce frosted-bar background opacity from 0.92 to 0.75 for better readability
Danilo M. [Thu, 16 Apr 2026 09:50:05 +0000 (11:50 +0200)] 
fix: reduce frosted-bar background opacity from 0.92 to 0.75 for better readability

2 weeks agodocs: update handoff notes with frosted glass implementation details
Danilo M. [Thu, 16 Apr 2026 09:47:42 +0000 (11:47 +0200)] 
docs: update handoff notes with frosted glass implementation details

2 weeks agorefactor: update internal footer divider to match frosted-bar border styling
Danilo M. [Thu, 16 Apr 2026 09:34:09 +0000 (11:34 +0200)] 
refactor: update internal footer divider to match frosted-bar border styling

2 weeks agorefactor: apply frosted-bar component to footer
Danilo M. [Thu, 16 Apr 2026 09:32:52 +0000 (11:32 +0200)] 
refactor: apply frosted-bar component to footer

2 weeks agorefactor: remove border from frosted-bar component, let templates control border...
Danilo M. [Thu, 16 Apr 2026 09:32:03 +0000 (11:32 +0200)] 
refactor: remove border from frosted-bar component, let templates control border direction

2 weeks agorefactor: apply frosted-bar component to header
Danilo M. [Thu, 16 Apr 2026 09:23:54 +0000 (11:23 +0200)] 
refactor: apply frosted-bar component to header

2 weeks agorefactor: extract bg2 RGBA values to CSS variables for frosted-bar component
Danilo M. [Thu, 16 Apr 2026 09:23:17 +0000 (11:23 +0200)] 
refactor: extract bg2 RGBA values to CSS variables for frosted-bar component

2 weeks agofeat: add frosted-bar CSS component for header and footer
Danilo M. [Thu, 16 Apr 2026 09:21:35 +0000 (11:21 +0200)] 
feat: add frosted-bar CSS component for header and footer

2 weeks agodocs: add frosted glass implementation plan
Danilo M. [Thu, 16 Apr 2026 09:20:50 +0000 (11:20 +0200)] 
docs: add frosted glass implementation plan

2 weeks agoAdd padding and glow effects to content sections feature/matrix-rain-background
Danilo M. [Thu, 16 Apr 2026 09:11:18 +0000 (11:11 +0200)] 
Add padding and glow effects to content sections

- Add 2rem padding, border, and soft glow to single page content grid
- Add matching glow effect to article list items with full-opacity border
- Uses theme-aware CSS variables for consistent styling across dark/light modes

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoComplete matrix rain background effect implementation
Danilo M. [Wed, 15 Apr 2026 22:24:58 +0000 (00:24 +0200)] 
Complete matrix rain background effect implementation

- Add canvas-based matrix rain animation with ASCII + katakana characters
- Implement per-column animation with varied drop speeds (2-4 frame throttle)
- Theme-aware colors: purple and green accents with live switching
- Homepage: 28% opacity (dark) / 35% opacity (light) for prominent hero effect
- Inner pages: 13% opacity (dark) / 18% opacity (light) for subtle side gutters
- Respect prefers-reduced-motion system setting
- Add opaque background to content grids to block rain under text
- Add .content-grid class to differentiate single pages from list pages
- Add solid background to article list item cards
- Update article list item with bg-bg class for readability
- Z-index stack: canvas (z-1), content grid (z-9), main content (z-10)

Files modified:
- matrix-rain.js: new IIFE animation script with MutationObserver for theme switching
- baseof.html: add canvas element and script tag with guard
- main.css: add canvas positioning, opacity rules, content grid background
- _default/single.html: add max-w-7xl and .content-grid class
- articles/single.html: add max-w-7xl and .content-grid class
- is/list.html: add max-w-7xl and .content-grid class
- article-list-item.html: add bg-bg class for solid background

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoImplement article type colors, reading progress bar, and optimize layout
Danilo M. [Wed, 15 Apr 2026 21:39:11 +0000 (23:39 +0200)] 
Implement article type colors, reading progress bar, and optimize layout

- Add colored type pills to article list items (overlay on thumbnails, top-right)
- Add type accent corner (L-shaped) to single article headers with colored pill badge in metadata
- Implement smooth reading progress bar at viewport top (violet→green gradient)
- Progress bar only appears on single pages/articles, not on lists or homepage
- Constrain article width to max-w-7xl for comfortable reading with side gutters
- Use CSS variables for all colors to support dark/light theme switching
- Add reading-progress.js with requestAnimationFrame throttling for performance
- Update HANDOFF.md with current progress

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoDocument video, quote, and actions shortcodes in SHORTCODES.md
Danilo M. [Wed, 15 Apr 2026 20:56:55 +0000 (22:56 +0200)] 
Document video, quote, and actions shortcodes in SHORTCODES.md

- Add comprehensive Video shortcode documentation with parameters and examples
- Document page bundle video resolution for automatic URL generation
- Add browser compatibility notes for WebM, MP4, and Ogg formats
- Document Quote shortcode with source attribution and optional links
- Document Actions shortcode for download buttons and CTAs
- Update Future Shortcodes section to reflect implemented features

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoResolve page bundle video paths using Resources API
Danilo M. [Wed, 15 Apr 2026 20:55:05 +0000 (22:55 +0200)] 
Resolve page bundle video paths using Resources API

- Use .Page.Resources.GetMatch to resolve video files in page bundles
- For videos in the same directory as index.md, use src="filename.webm"
- Template automatically resolves to correct permalink (/articles/slug/filename.webm)
- Falls back to literal path if resource not found (for external URLs)

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoAllow custom sizing in image shortcode
Danilo M. [Wed, 15 Apr 2026 20:41:41 +0000 (22:41 +0200)] 
Allow custom sizing in image shortcode

- Move w-full h-auto into default class parameter instead of hardcoding
- Users can now override sizing with custom class parameter
- Default still applies w-full h-auto if no class specified
- Update SHORTCODES.md documentation with sizing examples
- Add CSS class reference tables for common sizing patterns

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix article shortcode issues and add actions shortcode
Danilo M. [Wed, 15 Apr 2026 20:30:46 +0000 (22:30 +0200)] 
Fix article shortcode issues and add actions shortcode

- Fix gify-back-to-bash-scripting article: replace figure shortcode with image
- Add actions shortcode for download/action buttons with icon and styling
- Actions shortcode accepts: url (required), desc, outclass, inclass parameters
- Rendered as styled link with feather download icon

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoResolve page bundle image paths correctly
Danilo M. [Wed, 15 Apr 2026 20:25:01 +0000 (22:25 +0200)] 
Resolve page bundle image paths correctly

- Use Hugo Resources API to resolve image paths for page bundles
- For images in the same directory as index.md, use image = "filename.jpg"
- Template automatically resolves to correct permalink (/articles/slug/filename.jpg)
- Falls back to literal image path if resource not found (for external URLs)

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix article list template to display articles without pinned parameter
Danilo M. [Wed, 15 Apr 2026 20:21:22 +0000 (22:21 +0200)] 
Fix article list template to display articles without pinned parameter

- Handle undefined .Params.pinned gracefully by checking for nil/"" values
- This allows articles without explicit pinned param to appear in regular posts section
- Added check: if where clause returns no unpinned posts, search for nil/empty params
- Articles test index now has proper TOML frontmatter with title

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoAdd thumbnail support to article listings
Danilo M. [Wed, 15 Apr 2026 20:14:02 +0000 (22:14 +0200)] 
Add thumbnail support to article listings

- Add 'image' front matter parameter for article thumbnails
- Redesign article-list-item.html as semantic article card:
  - Large thumbnail (aspect-video, object-cover) at top if image is present
  - Title linked to article page
  - Publication date and type badge
  - Excerpt (from .Description or .Summary with plainify)
  - "Read more" CTA button with arrow icon and hover animation
- Increase list container width (max-w-2xl → max-w-3xl) and spacing (space-y-2 → space-y-6)
- Thumbnail image has subtle scale-up hover effect
- Arrow icon animates on hover
- All three clickable elements (.image, title, CTA) link to article

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoImplement taxonomy system for tags and categories
Danilo M. [Wed, 15 Apr 2026 20:05:38 +0000 (22:05 +0200)] 
Implement taxonomy system for tags and categories

- Enable tags and categories taxonomies in hugo.toml
- Create taxonomy/list.html for archive pages (/tags, /categories)
- Create taxonomy/term.html for individual term pages (/tags/example)
- Add quote shortcode for quote-type articles
- Both templates reuse article-list-item partial for consistent styling

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix theme toggle icon to always sync with actual page theme
Danilo M. [Wed, 15 Apr 2026 19:48:54 +0000 (21:48 +0200)] 
Fix theme toggle icon to always sync with actual page theme

Replace Alpine.js conditional rendering with plain JavaScript that:
- Reads the actual theme class from the html element on page load
- Updates icon visibility based on the real DOM state, not internal state
- Handles navigation correctly since it checks the current class every time

This fixes the issue where navigating between pages caused the icon to
become out of sync with the actual theme being displayed.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix theme toggle icon state sync on page navigation
Danilo M. [Wed, 15 Apr 2026 19:46:40 +0000 (21:46 +0200)] 
Fix theme toggle icon state sync on page navigation

The Alpine.js state was reading from localStorage instead of the actual
class on the html element, causing the icon to be out of sync with the
actual theme. Now we initialize the Alpine state by checking the current
html classList, which is set by the page-load script in baseof.html.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix design system compliance: CSS variables, accessibility, and theme system
Danilo M. [Wed, 15 Apr 2026 19:42:04 +0000 (21:42 +0200)] 
Fix design system compliance: CSS variables, accessibility, and theme system

Core CSS improvements:
- Add --surface-rgb, --type-* (tech, life, quote, link, photo) custom properties
- Add --type-* semantic color classes for article badges
- Convert article badges from inline styles to CSS variable system
- Add prefers-color-scheme light fallback for no-JS users
- Add prefers-reduced-motion support to respect user accessibility settings
- Replace *:focus with *:focus-visible (keyboard-only outlines)
- Add clamp() fluid typography for hero-title and section-title
- Refactor container rules to mobile-first with 1060px breakpoint

Theme & Icon fixes:
- Fix theme toggle icon display with Alpine.js (was broken with Tailwind dark: classes)
- Add aria-hidden="true" to icon elements
- Update header with proper ARIA attributes on menu toggle

Accessibility enhancements:
- Add skip-to-main-content link in baseof.html
- Update hamburger menu with aria-expanded, aria-controls, aria-hidden
- Implement focus trap (Tab loops) within mobile menu
- Return focus to trigger button on menu close
- Add menu open/close state management with proper ARIA

Semantic HTML:
- Wrap article pages in <article> element (articles/single.html, _default/single.html)
- Fix quote article to use --type-quote border color instead of generic accent

Image optimization:
- Add loading="lazy" to profile image in index.html
- Add loading="lazy" to featured image in photo.html

Template fixes:
- Remove broken os.Getenv "THEME" runtime check from article-list-item.html
- Replace inline color styles with semantic .type-* classes
- Add 1060px lg: breakpoint to tailwind.config.js

i18n updates:
- Add skipToContent translations (en, it)

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoComplete multilingual theme implementation with language-aware menus
Danilo M. [Wed, 15 Apr 2026 19:18:40 +0000 (21:18 +0200)] 
Complete multilingual theme implementation with language-aware menus

- Refactor hugo.toml to define menus separately for each language using pageRef
- Simplify header and hamburger-menu templates to use Hugo-native language handling
- Update content structure with proper language prefix organization
- Remove JavaScript language-switcher in favor of Hugo's native approach
- Add new layout templates for /is/ section with list view
- Update HANDOFF.md with current implementation status
- Rebuild minified CSS with updated template changes

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix gravatar shortcode and about page ref links
Danilo M. [Wed, 15 Apr 2026 15:50:16 +0000 (17:50 +0200)] 
Fix gravatar shortcode and about page ref links

- Fix gravatar.html: replace trim() with strings.TrimSpace()
- Fix about pages: replace {{< ref "legal" >}} with relative path ../legal
- Both English and Italian about pages now build without errors

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoUpdate SHORTCODES.md to reflect contact form shortcode name change
Danilo M. [Wed, 15 Apr 2026 15:46:46 +0000 (17:46 +0200)] 
Update SHORTCODES.md to reflect contact form shortcode name change

- Change {{< contact_form >}} → {{< contact >}} in all documentation
- Update contributing section with correct theme directory path
- Contact shortcode example now matches implementation

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix contact form shortcode: rename from contact-form.html to contact.html
Danilo M. [Wed, 15 Apr 2026 15:46:10 +0000 (17:46 +0200)] 
Fix contact form shortcode: rename from contact-form.html to contact.html

Problem: Hugo v0.160 doesn't find shortcode as 'contact_form' when filename is contact-form.html
Solution: Rename to contact.html so shortcode is {{< contact >}}

- Rename shortcodes/contact-form.html → contact.html
- Update contact pages to use {{< contact >}} shortcode
- Remove unused dict initialization line from contact shortcode
- Contact form now works on both English and Italian contact pages

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoExtract contact form JavaScript to separate file and remove shortcode from contact...
Danilo M. [Wed, 15 Apr 2026 15:43:32 +0000 (17:43 +0200)] 
Extract contact form JavaScript to separate file and remove shortcode from contact pages

- Move contact form Alpine.js logic to assets/js/contact-form.js
- Simplify contact-form.html shortcode by removing inline script
- Load contact-form.js in baseof.html after Alpine.js
- Temporarily remove {{< contact_form >}} shortcode from contact pages
  (shortcode parsing issue to investigate later)
- Contact pages now display with placeholder text

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoRemove unnecessary type field from static pages
Danilo M. [Wed, 15 Apr 2026 15:39:02 +0000 (17:39 +0200)] 
Remove unnecessary type field from static pages

The 'type' field is unused for static pages. Hugo automatically sets
the type based on directory structure. The 'type' custom parameter is
only used for articles (Life, Photo, Link, Quote, Tech).

Static pages no longer need:
  type = "page"

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix language switcher to preserve current page path
Danilo M. [Wed, 15 Apr 2026 15:33:26 +0000 (17:33 +0200)] 
Fix language switcher to preserve current page path

- Update language switcher to translate current page path instead of redirecting to root
- When switching languages, preserve the page you're on (e.g., /articles/ → /it/articles/)
- Works for both desktop header and mobile hamburger menu
- Uses Hugo's string functions to manipulate URL paths

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoAdd language toggle to desktop header
Danilo M. [Wed, 15 Apr 2026 15:31:52 +0000 (17:31 +0200)] 
Add language toggle to desktop header

- Add language switcher (IT/EN) visible on desktop only
- Language buttons show in header next to theme toggle
- Current language highlighted with accent background
- Mobile still uses hamburger menu for language toggle
- Responsive design: hidden on mobile (md:hidden), visible on desktop

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoRemove Alpine.js dependency from menu toggle, use vanilla JavaScript
Danilo M. [Wed, 15 Apr 2026 15:30:01 +0000 (17:30 +0200)] 
Remove Alpine.js dependency from menu toggle, use vanilla JavaScript

- Replace Alpine.js directives (@click, x-ref) with vanilla JS
- Update hamburger-menu.html to use id selectors instead of x-ref
- Rewrite menu.js to work without Alpine.js
- Menu now opens/closes on click with proper event handling
- Language toggle now accessible in hamburger menu

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix Hugo v0.160 compatibility: remove os.Getenv and fix template syntax
Danilo M. [Wed, 15 Apr 2026 15:25:14 +0000 (17:25 +0200)] 
Fix Hugo v0.160 compatibility: remove os.Getenv and fix template syntax

- Remove os.Getenv("THEME") call that violates security policy
- Use CSS variables and data attributes for theme-aware badge colors
- Update theme-toggle.js to update badge colors on theme switch
- Fix .LastMod → .Lastmod (correct API)
- Fix template syntax for date comparison in article-header.html

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoFix shortcode location: move from shortcodes/ to layouts/shortcodes/
Danilo M. [Wed, 15 Apr 2026 14:38:12 +0000 (16:38 +0200)] 
Fix shortcode location: move from shortcodes/ to layouts/shortcodes/

Hugo v0.156.0+ requires shortcodes to be in layouts/shortcodes/ directory.
Moved all shortcodes (gravatar, image, gallery, contact-form) to correct location.

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoupdated gitignore
Danilo M. [Wed, 15 Apr 2026 14:32:44 +0000 (16:32 +0200)] 
updated gitignore

2 weeks agoSet up Tailwind CSS build pipeline and bilingual homepage content
Danilo M. [Wed, 15 Apr 2026 14:18:41 +0000 (16:18 +0200)] 
Set up Tailwind CSS build pipeline and bilingual homepage content

- Install and configure Tailwind CSS with tailwind.config.js
- Create npm scripts for building Tailwind (build/watch)
- Add .gitignore to exclude node_modules and build artifacts
- Create bilingual homepage content (content/it/_index.md, content/en/_index.md)
- Update baseof.html to use compiled main.min.css
- Fix .ByDate deprecation in list.html template (use sort function)
- Fix main.css pre element to support rgba with opacity
- Homepage now displays with full dark/light theme styling

Co-Authored-By: Claude Haiku 4.5 <redacted>
2 weeks agoadded contact form backend
Danilo M. [Wed, 15 Apr 2026 13:58:26 +0000 (15:58 +0200)] 
added contact form backend

2 weeks agodocs: update AGENTS.md with comprehensive content management guide
Danilo M. [Wed, 15 Apr 2026 13:54:19 +0000 (15:54 +0200)] 
docs: update AGENTS.md with comprehensive content management guide

2 weeks agodocs: create comprehensive shortcodes documentation
Danilo M. [Wed, 15 Apr 2026 13:54:18 +0000 (15:54 +0200)] 
docs: create comprehensive shortcodes documentation

2 weeks agofeat: add contact.php placeholder for form handling
Danilo M. [Wed, 15 Apr 2026 13:52:18 +0000 (15:52 +0200)] 
feat: add contact.php placeholder for form handling

2 weeks agofeat: create contact-form shortcode with Alpine.js AJAX
Danilo M. [Wed, 15 Apr 2026 13:52:17 +0000 (15:52 +0200)] 
feat: create contact-form shortcode with Alpine.js AJAX

2 weeks agofeat: create gallery shortcode with responsive columns
Danilo M. [Wed, 15 Apr 2026 13:52:15 +0000 (15:52 +0200)] 
feat: create gallery shortcode with responsive columns

2 weeks agofeat: create image shortcode with lazy-loading and captions
Danilo M. [Wed, 15 Apr 2026 13:52:14 +0000 (15:52 +0200)] 
feat: create image shortcode with lazy-loading and captions

2 weeks agofeat: create gravatar shortcode with MD5 hashing
Danilo M. [Wed, 15 Apr 2026 13:52:12 +0000 (15:52 +0200)] 
feat: create gravatar shortcode with MD5 hashing