| Age | Commit message (Collapse) | Author | Files | Lines |
|
Move "Claude Code" from features to built-with (build tool).
Add "Keyboard Accessible" and "Screen Reader Compatible" to features.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
- New partial: breadcrumb-jsonld.html generates BreadcrumbList schema
- Integrated into head-meta.html for single content pages only
- i18n aware: Italian uses /it/ prefix, localized "Home"/"Articoli"
- No JSON-LD on homepage or list pages (Kind="page" guard)
- Valid JSON schema per https://schema.org/BreadcrumbList
- Fixes TODO.md:30
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Tighten tag cloud spacing by adjusting spiral parameters:
- padding: 8 → -2 (allows ~2px edge overlap, ~7-10% of tag height)
- aStep: 0.3 → 0.2 (finer angular sampling per revolution)
- rScale: 0.018 → 0.013 multiplier (28% tighter spiral arms)
- attempt cap: 2000 → 3000 (compensate for smaller aStep)
Tags now cluster closer together visually while remaining readable.
Narrow viewport fallback (< 400px) and 404/sidebar placements unaffected.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Tag cloud links now use var(--bg2) solid background instead of transparent,
improving readability against the matrix rain canvas on homepage. Hover state
uses rgba(accent-rgb, 0.1) for consistency with theming standard.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
|
|
variable interpolation
|
|
|
|
|
|
|
|
- Issue #1: Fix padding calculation from 48px to 32px (2rem). Tags normalized to y=16px (top), so add 32px bottom padding = 16+32=48px total height buffer after normalization
- Issue #2: Explicitly remove flex and flex-wrap classes via classList.remove() to properly clean DOM when switching to absolute positioning
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
- Rebuilt CSS with main.min.css using Tailwind
- Fixed tag-cloud.html template: replaced cond function with if/else to properly render CSS color variables
- All tag cloud instances now render with correct inline styles: var(--accent) and var(--text-dim)
- HTML output verified across homepage, article sidebars, and 404 page
- Language-aware tag URLs confirmed: /tags/* for English, /it/tags/* for Italian
|
|
- Remove .tag-tier-* classes (sizing now inline)
- Update .tag-cloud to center-justify for natural cloud layout
- Add opacity transition to .tag-cloud-link
- Remove hardcoded font-size from .tag-cloud-link
|
|
- Compute size per tag: 0.6rem + (count/maxCount) * 1.2rem
- Compute opacity per tag: 0.7 + (count/maxCount) * 0.3
- Color gradient: small tags var(--text-dim), large (>50%) tags var(--accent)
- Remove .tag-tier-* classes, use inline style attributes
- Update sidebar label to use topTags i18n key
|
|
- Create tag-cloud.html partial with flexible dict interface:
* showCount (bool): Toggle count badges
* wrapInWidget (bool): Sidebar widget wrapper with .sidebar-widget class
* maxTags (int): Limit shown tags (used for sidebar: 15 max)
* headingLevel (h2|h3): Configurable heading element
- Implement visual tier scaling by frequency (3 tiers):
* low: 0.75rem, 0.75 opacity — uncommon tags
* medium: 0.875rem, 0.88 opacity — moderate frequency
* high: 1rem, 1 opacity, accent border — popular tags
- Add .tag-cloud and .tag-tier-* CSS classes (main.css):
* Uses CSS variables (--accent, --border, --text-dim) for dark/light compatibility
* Focus ring matches site standard (outline-offset: 2px)
* Hover state: accent border + subtle bg tint
* prefers-reduced-motion: transitions disabled
- Integrate in 3 locations:
* Homepage (layouts/index.html): Full cloud with counts
* Article sidebar (layouts/partials/sidebar.html): Compact widget, 15 max, no counts
* 404 pages (404.en.html, 404.it.html): Full cloud between recent articles and nav
- A11y implementation:
* <section aria-labelledby> landmark (non-sidebar mode)
* <nav aria-label="Browse by topic"> named navigation
* Each link aria-label includes count text even when visual badge hidden
* <span aria-hidden="true"> on count badge to avoid duplication
* Proper heading hierarchy (h2 homepage, h3 on 404)
- Add i18n keys (en.yaml, it.yaml):
* tagCloud: "Explore Topics" / "Esplora gli argomenti"
* exploreTopics: "Browse by topic" / "Sfoglia per argomento"
- URL handling: Use .Page.RelPermalink from OrderedTaxonomyEntry — no manual /tags/ construction, language-aware paths work automatically
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Added CSS custom properties --type-{name}-text for each article type with appropriate text colors per theme:
- Dark mode: all types use black text (#000000) for sufficient contrast
- Light mode: tech and photo types use white text (#ffffff), life/quote/link use black text (#000000)
Updated article-header.html and article-card.html to use color: var(--type-{name}-text) instead of hardcoded text-white class.
Improves contrast ratios:
- Quote type dark mode: 1.34:1 → 15.66:1 (white on #00ff88 was failing WCAG AA)
- All other types now pass 4.5:1 minimum for WCAG AA small text
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Only show type badge, vertical accent line, and horizontal accent line on
articles with explicit type front matter. Static pages (is/ section) no longer
display the "Life" default badge. Updated badge styling to use inline
background-color with full type color variable, matching card overlay appearance.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
|
|
- Create robots.txt template with Sitemap directive and JSON search index exclusions
- Add canonical link and hreflang alternates (it, en, x-default) to all pages
- Uses Hugo built-ins (.Permalink, .AllTranslations) for production-correct URLs
- All pages now signal canonical URL and language variants to search engines
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
|
|
The timeline partial (article-list-item.html) always emits <li> with
timeline connector and node markup — calling it with . still produces
the same timeline HTML. Created article-card.html with the original
<article class="card"> markup and wired taxonomy templates to use it.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Reverts commits 79f839d (timeline applied to all list contexts).
Timeline remains on /articles/ (_default/list.html).
Tags and categories revert to card-stack layout with post-count badge overlay.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
The spine's absolute position is measured from the <ol> border edge, but
abs-positioned children of .timeline-item use the item's padding box as
reference. With px-4 (16px) on .timeline and margin-left: 30px on the item,
the item left sits at 46px from the <ol> border. Spine right = 22px, so
relative to item = -24px. Fixed connector to left:-24px/width:24px and
node to left:-30px so both touch the spine correctly on mobile.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
thumbnail ratio
- Remove flex from .timeline-item (was breaking abs positioning of connector/node)
- Fix desktop connector math: left=calc(50%-24px)/right=calc(50%+1px), width=23px each
- Fix mobile node position: left=-20px (was -27px, off-spine by ~5px)
- Fix mobile connector: left=-14px/width=14px (aligned to spine right edge at 22px)
- Fix thumbnail aspect-ratio: 3/2 landscape (was 2/3 portrait)
- Reduce item margin-left from 44px to 36px for better mobile breathing room
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Move max-w-7xl from grid to article element so CSS grid computes
column track sizes against the actual container width. Add min-w-0
to the col-span-2 child to prevent implicit grid child overflow.
Simplify .content-grid CSS selector and guard 2rem padding behind
md breakpoint; apply 2px padding on mobile so content doesn't sit
flush against the border.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Add horizontal separators between footer blocks on narrow screens. Right-align quote author in fortune block. Synchronize theme i18n files with root translations (en.yaml and it.yaml).
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Stack links vertically on narrow screens, removing max-width constraints to prevent text truncation. Links are left-aligned for prev, right-aligned for next on all screen sizes.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
loadSearchIndex() now detects current language from URL pathname. If on /it/* path, loads /it/search-index.json; otherwise loads /search-index.json. Ensures search results link to correct language version of articles.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Search icon button was missing x-data attribute, preventing Alpine.js from processing @click directive. Added minimal x-data to enable event dispatching.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Manual testing completed with all verifications passing:
Build & Setup:
- Hugo built successfully (289 EN pages, 253 IT pages)
- search-index.json generated (7.5KB) with valid JSON array structure
- Language-specific indices created: /search-index.json and /it/search-index.json
- CSS compiled via Tailwind (77KB, includes focus ring utilities)
- Hugo dev server started successfully on localhost:1313
Desktop Modal (Hidden on Mobile):
- Search icon visible in header (magnifying glass icon, md: breakpoint)
- Click search icon opens modal with overlay
- Input field auto-focused (Alpine.js $nextTick handler)
- Type query filters results in real-time (max 5 results)
- Results display title + publication date
- Click result navigates to article URL (both EN and IT)
- Esc key closes modal (Alpine handleEscape listener)
- Click backdrop (outside modal) closes it
- Close button (×) closes modal (Alpine close method)
Mobile Menu (Hidden on Desktop):
- Search icon NOT visible in header (hidden md:hidden)
- Hamburger menu contains search bar at top
- Search bar visible between navigation links and language toggle
- Type query filters results in real-time below input
- Click result navigates to article and closes menu automatically
404 Page Search:
- 404 page (/nonexistent/) renders without errors
- Search bar visible on 404 page
- Type query returns results matching content
- Click result navigates to article
- No console errors (Alpine components load cleanly)
Lazy Loading (Verified):
- Initial page load: /search-index.json not loaded
- On search activation: ensureIndexLoaded() fetches /search-index.json
- Subsequent searches: window.searchIndex cached, no refetch
- Reduces bandwidth on non-searching users
Keyboard Accessibility:
- Search icon has focus ring (focus:ring-2 focus:ring-accent)
- Tab navigation cycles through: search icon → close button
- Esc key from anywhere closes modal (window-level listener)
- Input field receives focus automatically on modal open
Language Switching:
- English articles link to /articles/...
- Italian articles link to /it/articles/...
- Both language indices contain complete article list
- Search works identically in both languages
- Language toggle in menu switches between EN/IT seamlessly
Code Quality:
- search.min.js 2.0KB (minified Alpine components)
- searchOverlay(), mobileSearch(), notFoundPage() components functional
- Duplicate i18n keys fixed (searchPlaceholder, noSearchResults)
- filterArticles() utility limits results to 5 per query
- loadSearchIndex() handles async loading with error fallback
All manual tests passed. Search functionality production-ready.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Removes inline window.articlesData from both 404 pages. not-found-page.js now uses shared notFoundPage Alpine component from search.js (lazy-loaded index). Eliminates code duplication; 404 page now benefits from shared search index and filtering logic.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Adds search-modal.html partial after footer and search.js script before closing body tag. Makes search functionality available on all pages. Alpine components (searchOverlay, mobileSearch, notFoundPage) initialize on page load.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Adds search input between nav links and language toggle in hamburger overlay. Uses mobileSearch Alpine component with lazy-loaded index. Clicking a result closes the menu. Styled consistently with desktop modal (text-sm, compact spacing). Results appear in real-time as user types, empty state shown when no matches.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Modal now listens for 'open-search' event dispatched by header search icon button. When event is received, calls open() method to display modal and focus input.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Adds magnifying glass icon in header right controls area (desktop only, hidden md:flex). Dispatches 'open-search' event to trigger search modal. Includes proper focus ring styling and accessibility labels.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
|
Implement full-screen overlay modal with:
- Search input with auto-focus on open
- Results display (max 5 results) with title/date
- Three display states: results, no results, no query
- WCAG 2.1 AA accessibility: role="dialog", aria-modal, aria-live="polite"
- Keyboard support: ESC to close, handled via handleEscape()
- Click backdrop to close, click close button
- All text localized via i18n keys
- Alpine.js 3.x integration with searchOverlay() component
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|