sexyjekyll-theme 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +82 -0
  3. data/LICENSE +21 -0
  4. data/README.de.md +276 -0
  5. data/README.es.md +276 -0
  6. data/README.fr.md +276 -0
  7. data/README.it.md +219 -0
  8. data/README.md +276 -0
  9. data/_includes/critical-css.html +4 -0
  10. data/_includes/footer.html +81 -0
  11. data/_includes/head.html +88 -0
  12. data/_includes/nav.html +21 -0
  13. data/_includes/related-posts.html +75 -0
  14. data/_includes/social-icon.html +98 -0
  15. data/_includes/structured-data-article.html +55 -0
  16. data/_includes/structured-data-breadcrumb.html +28 -0
  17. data/_includes/structured-data-person.html +82 -0
  18. data/_includes/structured-data-website.html +23 -0
  19. data/_layouts/blog.html +101 -0
  20. data/_layouts/category.html +66 -0
  21. data/_layouts/contact.html +26 -0
  22. data/_layouts/default.html +13 -0
  23. data/_layouts/home.html +30 -0
  24. data/_layouts/llms.txt +34 -0
  25. data/_layouts/post.html +99 -0
  26. data/_plugins/auto_related_posts.rb +153 -0
  27. data/_plugins/category_generator.rb +27 -0
  28. data/_plugins/llms_txt_generator.rb +45 -0
  29. data/_plugins/localized_date.rb +52 -0
  30. data/assets/bg.jpeg +0 -0
  31. data/assets/bg.webp +0 -0
  32. data/assets/debug/blocco.png +0 -0
  33. data/assets/debug/categorie.jpeg +0 -0
  34. data/assets/debug/categorie.png +0 -0
  35. data/assets/debug/codice.png +0 -0
  36. data/assets/debug/contrasto.jpeg +0 -0
  37. data/assets/debug/dipendenze.png +0 -0
  38. data/assets/debug/h1.png +0 -0
  39. data/assets/debug/pagespeed.png +0 -0
  40. data/assets/debug/ricerca.png +0 -0
  41. data/assets/debug/richieste.png +0 -0
  42. data/assets/favicon/android-icon-144x144.png +0 -0
  43. data/assets/favicon/android-icon-192x192.png +0 -0
  44. data/assets/favicon/android-icon-36x36.png +0 -0
  45. data/assets/favicon/android-icon-48x48.png +0 -0
  46. data/assets/favicon/android-icon-72x72.png +0 -0
  47. data/assets/favicon/android-icon-96x96.png +0 -0
  48. data/assets/favicon/apple-icon-114x114.png +0 -0
  49. data/assets/favicon/apple-icon-120x120.png +0 -0
  50. data/assets/favicon/apple-icon-144x144.png +0 -0
  51. data/assets/favicon/apple-icon-152x152.png +0 -0
  52. data/assets/favicon/apple-icon-180x180.png +0 -0
  53. data/assets/favicon/apple-icon-57x57.png +0 -0
  54. data/assets/favicon/apple-icon-60x60.png +0 -0
  55. data/assets/favicon/apple-icon-72x72.png +0 -0
  56. data/assets/favicon/apple-icon-76x76.png +0 -0
  57. data/assets/favicon/apple-icon-precomposed.png +0 -0
  58. data/assets/favicon/apple-icon.png +0 -0
  59. data/assets/favicon/favicon-16x16.png +0 -0
  60. data/assets/favicon/favicon-32x32.png +0 -0
  61. data/assets/favicon/favicon-96x96.png +0 -0
  62. data/assets/favicon/favicon.ico +0 -0
  63. data/assets/favicon/ms-icon-144x144.png +0 -0
  64. data/assets/favicon/ms-icon-150x150.png +0 -0
  65. data/assets/favicon/ms-icon-310x310.png +0 -0
  66. data/assets/favicon/ms-icon-70x70.png +0 -0
  67. data/assets/images/aiact.jpeg +0 -0
  68. data/assets/images/aiethics.jpeg +0 -0
  69. data/assets/images/green.jpeg +0 -0
  70. data/assets/images/jekyll.webp +0 -0
  71. data/assets/images/parenting.jpeg +0 -0
  72. data/assets/images/seo-generativo.jpeg +0 -0
  73. data/assets/images/upskilling-ai.jpeg +0 -0
  74. data/assets/pic.jpeg +0 -0
  75. data/assets/screens/screen.jpeg +0 -0
  76. data/assets/screens/screen2.jpeg +0 -0
  77. data/css/animations.css +404 -0
  78. data/css/style.css +2250 -0
  79. data/css/syntax-dark.css +157 -0
  80. data/css/syntax-light.css +157 -0
  81. data/js/main.js +706 -0
  82. data/js/simple-jekyll-search.min.js +6 -0
  83. metadata +254 -0
@@ -0,0 +1,98 @@
1
+ {% case include.type %}
2
+ {% when 'email' %}
3
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
4
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
5
+ <polyline points="22,6 12,13 2,6"></polyline>
6
+ </svg>
7
+
8
+ {% when 'linkedin' %}
9
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10
+ <path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path>
11
+ <rect x="2" y="9" width="4" height="12"></rect>
12
+ <circle cx="4" cy="4" r="2"></circle>
13
+ </svg>
14
+
15
+ {% when 'bluesky' %}
16
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
17
+ <path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565.139 1.908 0 3.08 0 3.768c0 .69.378 5.65.624 6.479.815 2.736 3.713 3.66 6.383 3.364.136-.02.275-.038.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387 2.005-2.83 7.078 5.013 5.19 6.87-1.113 7.823-4.308.953 3.195 2.05 9.271 7.733 4.308 4.267-4.308 1.172-6.498-2.74-7.078a8.741 8.741 0 0 1-.415-.056c.14.018.279.036.415.056 2.67.297 5.568-.628 6.383-3.364.246-.828.624-5.79.624-6.478 0-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z"/>
18
+ </svg>
19
+
20
+ {% when 'twitter' %}
21
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
22
+ <path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>
23
+ </svg>
24
+
25
+ {% when 'github' %}
26
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
27
+ <path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>
28
+ </svg>
29
+
30
+ {% when 'instagram' %}
31
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
32
+ <rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect>
33
+ <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path>
34
+ <line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line>
35
+ </svg>
36
+
37
+ {% when 'facebook' %}
38
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
39
+ <path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path>
40
+ </svg>
41
+
42
+ {% when 'youtube' %}
43
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
44
+ <path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path>
45
+ <polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon>
46
+ </svg>
47
+
48
+ {% when 'mastodon' %}
49
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
50
+ <path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z"/>
51
+ </svg>
52
+
53
+ {% when 'telegram' %}
54
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
55
+ <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 0 0-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.63-.2-1.12-.31-1.08-.66.02-.18.27-.36.74-.55 2.92-1.27 4.86-2.11 5.83-2.51 2.78-1.16 3.35-1.36 3.73-1.36.08 0 .27.02.39.12.1.08.13.19.14.27-.01.06.01.24 0 .38z"/>
56
+ </svg>
57
+
58
+ {% when 'whatsapp' %}
59
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
60
+ <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z"/>
61
+ </svg>
62
+
63
+ {% when 'medium' %}
64
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
65
+ <path d="M13.54 12a6.8 6.8 0 01-6.77 6.82A6.8 6.8 0 010 12a6.8 6.8 0 016.77-6.82A6.8 6.8 0 0113.54 12zM20.96 12c0 3.54-1.51 6.42-3.38 6.42-1.87 0-3.39-2.88-3.39-6.42s1.52-6.42 3.39-6.42 3.38 2.88 3.38 6.42M24 12c0 3.17-.53 5.75-1.19 5.75-.66 0-1.19-2.58-1.19-5.75s.53-5.75 1.19-5.75C23.47 6.25 24 8.83 24 12z"/>
66
+ </svg>
67
+
68
+ {% when 'reddit' %}
69
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
70
+ <path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z"/>
71
+ </svg>
72
+
73
+ {% when 'discord' %}
74
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
75
+ <path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/>
76
+ </svg>
77
+
78
+ {% when 'tiktok' %}
79
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
80
+ <path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"/>
81
+ </svg>
82
+
83
+ {% when 'twitch' %}
84
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
85
+ <path d="M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z"/>
86
+ </svg>
87
+
88
+ {% when 'slack' %}
89
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
90
+ <path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"/>
91
+ </svg>
92
+
93
+ {% else %}
94
+ <svg class="contact-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
95
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path>
96
+ <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
97
+ </svg>
98
+ {% endcase %}
@@ -0,0 +1,55 @@
1
+ {% if page.layout == 'post' %}
2
+ <script type="application/ld+json">
3
+ {
4
+ "@context": "https://schema.org",
5
+ "@type": "BlogPosting",
6
+ "headline": "{{ page.title | escape }}",
7
+ {% if page.subtitle %}
8
+ "alternativeHeadline": "{{ page.subtitle | escape }}",
9
+ {% endif %}
10
+ "description": "{{ page.description | default: page.excerpt | strip_html | strip_newlines | truncate: 160 | escape }}",
11
+ "image": {
12
+ "@type": "ImageObject",
13
+ "url": "{{ page.image | default: '/assets/img/default-post.jpg' | absolute_url }}",
14
+ "width": 1200,
15
+ "height": 630
16
+ },
17
+ "datePublished": "{{ page.date | date_to_xmlschema }}",
18
+ "dateModified": "{{ page.last_modified_at | default: page.date | date_to_xmlschema }}",
19
+ "author": {
20
+ "@type": "Person",
21
+ "name": "{{ site.author.name }}",
22
+ "url": "{{ site.url }}",
23
+ "sameAs": [
24
+ "{{ site.author.linkedin }}",
25
+ "{{ site.author.bluesky }}"
26
+ ]
27
+ },
28
+ "publisher": {
29
+ "@type": "Person",
30
+ "name": "{{ site.author.name }}",
31
+ "logo": {
32
+ "@type": "ImageObject",
33
+ "url": "{{ '/assets/img/logo.png' | absolute_url }}",
34
+ "width": 600,
35
+ "height": 600
36
+ }
37
+ },
38
+ "mainEntityOfPage": {
39
+ "@type": "WebPage",
40
+ "@id": "{{ page.url | absolute_url }}"
41
+ },
42
+ {% if page.categories %}
43
+ "articleSection": "{{ page.categories | first | capitalize }}",
44
+ "keywords": "{{ page.categories | join: ', ' }}",
45
+ {% endif %}
46
+ "inLanguage": "it-IT",
47
+ "isAccessibleForFree": "True",
48
+ "isPartOf": {
49
+ "@type": "Blog",
50
+ "@id": "{{ '/blog/' | absolute_url }}",
51
+ "name": "{{ site.title }} Blog"
52
+ }
53
+ }
54
+ </script>
55
+ {% endif %}
@@ -0,0 +1,28 @@
1
+ {% if page.layout == 'post' %}
2
+ <script type="application/ld+json">
3
+ {
4
+ "@context": "https://schema.org",
5
+ "@type": "BreadcrumbList",
6
+ "itemListElement": [
7
+ {
8
+ "@type": "ListItem",
9
+ "position": 1,
10
+ "name": "Home",
11
+ "item": "{{ site.url }}"
12
+ },
13
+ {
14
+ "@type": "ListItem",
15
+ "position": 2,
16
+ "name": "Blog",
17
+ "item": "{{ site.url }}/blog"
18
+ },
19
+ {
20
+ "@type": "ListItem",
21
+ "position": 3,
22
+ "name": "{{ page.title }}",
23
+ "item": "{{ page.url | absolute_url }}"
24
+ }
25
+ ]
26
+ }
27
+ </script>
28
+ {% endif %}
@@ -0,0 +1,82 @@
1
+ {% unless page.layout == 'post' %}
2
+ <script type="application/ld+json">
3
+ {
4
+ "@context": "https://schema.org",
5
+ "@type": "Person",
6
+ "name": "{{ site.author.name }}",
7
+ "url": "{{ site.url }}",
8
+ "image": {
9
+ "@type": "ImageObject",
10
+ "url": "{{ '/assets/img/profile.jpg' | absolute_url }}",
11
+ "width": 400,
12
+ "height": 400
13
+ },
14
+ "jobTitle": "Head of Technology Solutions",
15
+ "worksFor": {
16
+ "@type": "Organization",
17
+ "name": "Oltrematica",
18
+ "url": "https://oltrematica.com"
19
+ },
20
+ "description": "{{ site.description | escape }}",
21
+ "email": "{{ site.author.email }}",
22
+ "sameAs": [
23
+ "{{ site.author.linkedin }}",
24
+ "{{ site.author.bluesky }}",
25
+ "{{ site.url }}"
26
+ ],
27
+ "knowsAbout": [
28
+ "Product Design",
29
+ "Technology Solutions",
30
+ "Digital Product Development",
31
+ "UX Design",
32
+ "Software Engineering",
33
+ "Team Management",
34
+ "Innovation"
35
+ ]
36
+ }
37
+ </script>
38
+
39
+ <script type="application/ld+json">
40
+ {
41
+ "@context": "https://schema.org",
42
+ "@type": "WebSite",
43
+ "url": "{{ site.url }}",
44
+ "name": "{{ site.title }}",
45
+ "description": "{{ site.description | escape }}",
46
+ "publisher": {
47
+ "@type": "Person",
48
+ "name": "{{ site.author.name }}"
49
+ },
50
+ "potentialAction": {
51
+ "@type": "SearchAction",
52
+ "target": {
53
+ "@type": "EntryPoint",
54
+ "urlTemplate": "{{ site.url }}/search?q={search_term_string}"
55
+ },
56
+ "query-input": "required name=search_term_string"
57
+ },
58
+ "inLanguage": "it-IT"
59
+ }
60
+ </script>
61
+
62
+ {% if page.url == '/' or page.url == '/index.html' %}
63
+ <script type="application/ld+json">
64
+ {
65
+ "@context": "https://schema.org",
66
+ "@type": "ProfilePage",
67
+ "dateCreated": "{{ site.time | date_to_xmlschema }}",
68
+ "dateModified": "{{ site.time | date_to_xmlschema }}",
69
+ "mainEntity": {
70
+ "@type": "Person",
71
+ "name": "{{ site.author.name }}",
72
+ "description": "{{ site.description | escape }}",
73
+ "image": "{{ '/assets/img/profile.jpg' | absolute_url }}",
74
+ "sameAs": [
75
+ "{{ site.author.linkedin }}",
76
+ "{{ site.author.bluesky }}"
77
+ ]
78
+ }
79
+ }
80
+ </script>
81
+ {% endif %}
82
+ {% endunless %}
@@ -0,0 +1,23 @@
1
+ {% if page.url == '/' or page.url == '/index.html' %}
2
+ <script type="application/ld+json">
3
+ {
4
+ "@context": "https://schema.org",
5
+ "@type": "WebSite",
6
+ "name": "{{ site.title }}",
7
+ "url": "{{ site.url }}",
8
+ "description": "{{ site.description }}",
9
+ "potentialAction": {
10
+ "@type": "SearchAction",
11
+ "target": {
12
+ "@type": "EntryPoint",
13
+ "urlTemplate": "{{ site.url }}/blog?search={search_term_string}"
14
+ },
15
+ "query-input": "required name=search_term_string"
16
+ },
17
+ "author": {
18
+ "@type": "Person",
19
+ "@id": "{{ site.url }}/#person"
20
+ }
21
+ }
22
+ </script>
23
+ {% endif %}
@@ -0,0 +1,101 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ {% assign t = site.data.i18n[site.lang] %}
5
+ <main id="main-content">
6
+ <section class="blog-section">
7
+ <div class="blog-container">
8
+ <div class="blog-header">
9
+ <h1 class="section-title">{{ site.blog.title }}</h1>
10
+ <p class="blog-description">
11
+ {{ site.blog.description }}
12
+ </p>
13
+ </div>
14
+
15
+ <!-- Search Box -->
16
+ <div class="search-container">
17
+ <div class="search-wrapper">
18
+ <svg class="search-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
19
+ <circle cx="11" cy="11" r="8"></circle>
20
+ <path d="m21 21-4.35-4.35"></path>
21
+ </svg>
22
+ <input type="search" id="search-input" class="search-input" placeholder="{{ t.blog.search_placeholder }}" aria-label="{{ t.blog.search_aria_label }}">
23
+ <button type="button" id="search-clear" class="search-clear" aria-label="{{ t.blog.clear_search }}" style="display: none;">
24
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
25
+ <line x1="18" y1="6" x2="6" y2="18"></line>
26
+ <line x1="6" y1="6" x2="18" y2="18"></line>
27
+ </svg>
28
+ </button>
29
+ </div>
30
+ <div id="search-results-count" class="search-results-count" style="display: none;"></div>
31
+ </div>
32
+
33
+ <!-- Search Results (hidden by default) -->
34
+ <div id="search-results" class="blog-posts search-results" style="display: none;"></div>
35
+
36
+ <!-- Regular Posts -->
37
+ <div id="regular-posts" class="blog-posts">
38
+ {% for post in paginator.posts %}
39
+ <article class="blog-post-card">
40
+ <div class="post-card-content">
41
+ <time class="post-date" datetime="{{ post.date | date_to_xmlschema }}">
42
+ {{ post.date | localized_date }}
43
+ </time>
44
+ <h2 class="post-card-title">
45
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
46
+ </h2>
47
+ {% if post.excerpt %}
48
+ <p class="post-card-excerpt">{{ post.excerpt | strip_html | truncatewords: 30 }}</p>
49
+ {% endif %}
50
+ <div class="post-card-footer">
51
+ {% if post.categories %}
52
+ <div class="post-categories">
53
+ {% for category in post.categories %}
54
+ <a href="{{ '/categories/' | append: category | relative_url }}" class="post-category">{{ category }}</a>
55
+ {% endfor %}
56
+ </div>
57
+ {% endif %}
58
+ <a href="{{ post.url | relative_url }}" class="read-more">
59
+ {{ t.blog.read_more }}
60
+ </a>
61
+ </div>
62
+ </div>
63
+ </article>
64
+ {% endfor %}
65
+ </div>
66
+
67
+ <!-- Pagination (hidden during search) -->
68
+ {% if paginator.total_pages > 1 %}
69
+ <div id="pagination" class="pagination">
70
+ {% if paginator.previous_page %}
71
+ <a href="{{ paginator.previous_page_path | relative_url }}" class="pagination-link pagination-prev">
72
+ {{ t.blog.previous }}
73
+ </a>
74
+ {% else %}
75
+ <span class="pagination-link pagination-prev disabled">{{ t.blog.previous }}</span>
76
+ {% endif %}
77
+
78
+ <div class="pagination-pages">
79
+ {% for page in (1..paginator.total_pages) %}
80
+ {% if page == paginator.page %}
81
+ <span class="pagination-link pagination-current">{{ page }}</span>
82
+ {% elsif page == 1 %}
83
+ <a href="{{ '/blog/' | relative_url }}" class="pagination-link">{{ page }}</a>
84
+ {% else %}
85
+ <a href="{{ site.paginate_path | relative_url | replace: ':num', page }}" class="pagination-link">{{ page }}</a>
86
+ {% endif %}
87
+ {% endfor %}
88
+ </div>
89
+
90
+ {% if paginator.next_page %}
91
+ <a href="{{ paginator.next_page_path | relative_url }}" class="pagination-link pagination-next">
92
+ {{ t.blog.next }}
93
+ </a>
94
+ {% else %}
95
+ <span class="pagination-link pagination-next disabled">{{ t.blog.next }}</span>
96
+ {% endif %}
97
+ </div>
98
+ {% endif %}
99
+ </div>
100
+ </section>
101
+ </main>
@@ -0,0 +1,66 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ {% assign t = site.data.i18n[site.lang] %}
5
+ <main id="main-content">
6
+ <section class="blog-section">
7
+ <div class="blog-container">
8
+ <div class="blog-header">
9
+ <div class="category-breadcrumb">
10
+ <a href="{{ '/blog' | relative_url }}" class="breadcrumb-link">{{ t.categories.breadcrumb_blog }}</a>
11
+ <span class="breadcrumb-separator">/</span>
12
+ <a href="{{ '/categories' | relative_url }}" class="breadcrumb-link">{{ t.categories.breadcrumb_categories }}</a>
13
+ </div>
14
+ <h1 class="section-title">{{ page.category | replace: '-', ' ' | capitalize }}</h1>
15
+ <p class="blog-description">
16
+ {{ page.description | default: t.categories.posts_in_category }}
17
+ </p>
18
+ </div>
19
+
20
+ <div class="blog-posts">
21
+ {% assign posts = site.categories[page.category] %}
22
+ {% if posts.size > 0 %}
23
+ {% for post in posts %}
24
+ <article class="blog-post-card">
25
+ <div class="post-card-content">
26
+ <time class="post-date" datetime="{{ post.date | date_to_xmlschema }}">
27
+ {{ post.date | localized_date }}
28
+ </time>
29
+ <h2 class="post-card-title">
30
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
31
+ </h2>
32
+ {% if post.subtitle %}
33
+ <p class="post-card-excerpt">{{ post.subtitle }}</p>
34
+ {% elsif post.excerpt %}
35
+ <p class="post-card-excerpt">{{ post.excerpt | strip_html | truncatewords: 30 }}</p>
36
+ {% endif %}
37
+ <div class="post-card-footer">
38
+ {% if post.categories %}
39
+ <div class="post-categories">
40
+ {% for category in post.categories %}
41
+ <a href="{{ '/categories/' | append: category | relative_url }}" class="post-category">{{ category }}</a>
42
+ {% endfor %}
43
+ </div>
44
+ {% endif %}
45
+ <a href="{{ post.url | relative_url }}" class="read-more">
46
+ {{ t.categories.read_more }}
47
+ </a>
48
+ </div>
49
+ </div>
50
+ </article>
51
+ {% endfor %}
52
+ {% else %}
53
+ <div class="no-posts">
54
+ <p>{{ t.categories.no_posts }}</p>
55
+ </div>
56
+ {% endif %}
57
+ </div>
58
+
59
+ <div class="back-to-categories">
60
+ <a href="{{ '/categories' | relative_url }}" class="btn btn-secondary">
61
+ {{ t.categories.all_categories }}
62
+ </a>
63
+ </div>
64
+ </div>
65
+ </section>
66
+ </main>
@@ -0,0 +1,26 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <!-- Contact Section -->
6
+ <main id="main-content">
7
+ <section class="contact">
8
+ <div class="contact-container">
9
+ <div class="contact-content">
10
+ <h1 class="section-title">{{ site.contact.title }}</h1>
11
+ <p class="contact-description">
12
+ {{ site.contact.description }}
13
+ </p>
14
+
15
+ <div class="contact-links">
16
+ {% for link in site.contact.links %}
17
+ <a href="{{ link.url }}" class="contact-link" target="_blank" rel="noopener noreferrer">
18
+ {% include social-icon.html type=link.type %}
19
+ <span>{{ link.name }}</span>
20
+ </a>
21
+ {% endfor %}
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </section>
26
+ </main>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="it">
3
+ {% include head.html %}
4
+ <body>
5
+ {% include nav.html %}
6
+
7
+ {{ content }}
8
+
9
+ {% include footer.html %}
10
+
11
+ <script src="{{ '/js/main.js' | relative_url }}?v={{ site.time | date: '%s' }}" defer></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,30 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ {% assign t = site.data.i18n[site.lang] %}
5
+ <!-- Hero Section -->
6
+ <main id="main-content">
7
+ <section id="hero" class="hero">
8
+ <div class="hero-container">
9
+ <div class="hero-content">
10
+ <h1 class="hero-title">
11
+ <span class="hero-name">{{ site.hero.name }}</span>
12
+ <span class="hero-role">{{ site.hero.role }}</span>
13
+ </h1>
14
+ <p class="hero-subtitle">
15
+ {{ site.hero.subtitle }}
16
+ </p>
17
+ <p class="hero-tagline">
18
+ {{ site.hero.tagline }}
19
+ </p>
20
+ <p class="hero-description">
21
+ {{ site.hero.description }}
22
+ </p>
23
+ <div class="hero-cta">
24
+ <a href="{{ '/contact' | relative_url }}" class="btn btn-primary">{{ t.home.contact_me }}</a>
25
+ <a href="{{ '/blog' | relative_url }}" class="btn btn-secondary">{{ t.home.read_blog }}</a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </section>
30
+ </main>
data/_layouts/llms.txt ADDED
@@ -0,0 +1,34 @@
1
+ ---
2
+ ---
3
+ {% assign t = site.data.i18n[site.lang] %}# {{ page.title }}
4
+
5
+ > {{ page.subtitle }}
6
+
7
+ ## {{ t.llms.metadata }}
8
+
9
+ - **{{ t.llms.author }}**: {{ site.author.name }}
10
+ - **{{ t.llms.published }}**: {{ page.date | localized_date }}
11
+ - **{{ t.llms.url }}**: {{ site.url }}{{ page.url | remove: '/llms.txt' }}
12
+ - **{{ t.llms.categories }}**: {% for category in page.categories %}{{ category }}{% unless forloop.last %}, {% endunless %}{% endfor %}
13
+
14
+ ## {{ t.llms.summary }}
15
+
16
+ {{ page.subtitle }}
17
+
18
+ ## {{ t.llms.post_full_content }}
19
+
20
+ {{ content | strip_html | normalize_whitespace }}
21
+
22
+ ## {{ t.llms.the_author }}
23
+
24
+ {{ site.author.name }} - {{ site.description }}
25
+
26
+ ## {{ t.llms.contacts }}
27
+
28
+ - {{ t.llms.web_site }}: {{ site.url }}
29
+ {% for link in site.contact.links %}- {{ link.name }}: {{ link.url }}
30
+ {% endfor %}
31
+
32
+ ## {{ t.llms.related_content }}
33
+
34
+ {{ t.llms.visit_blog_prefix }} {{ site.url }}/blog/ {{ t.llms.visit_blog_suffix }}