Skip to content

Commit d9d7ff8

Browse files
committed
Update apps, gallery images, and improve UI
Added new gallery images (18.webp, 19.webp) and updated the gallery to use .webp files. Refined the AppsSection with new app (ZapTweaks), updated download/repo URLs, improved card layout for horizontal scrolling, and enhanced button styling. Adjusted CSS to allow marquee animation even with reduced motion preferences.
1 parent c536ee0 commit d9d7ff8

5 files changed

Lines changed: 49 additions & 37 deletions

File tree

client/public/18.webp

113 KB
Loading

client/public/19.webp

117 KB
Loading

client/src/components/AppsSection.tsx

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,30 +26,39 @@ const handlePayPalClick = () => {
2626
const AppsSection = () => {
2727
const apps: App[] = [
2828
{
29-
name: "TreadPilot",
29+
name: "ThreadPilot",
3030
description:
3131
"Alternativa open source a Process Lasso per Windows. Modifiche di sistema per utenti esperti.",
3232
features: ["Open-source", "Affinità processi su core", "Gestione powerplans"],
33-
url: "https://github.com/PrimeBuild-pc/TreadPilot/releases/download/beta/ThreadPilot-v1.0-Windows-x64-Portable.zip",
34-
repoUrl: "https://github.com/PrimeBuild-pc/TreadPilot",
33+
url: "https://github.com/PrimeBuild-pc/ThreadPilot/releases/download/v0.1.0-beta/ThreadPilot_Setup.exe",
34+
repoUrl: "https://github.com/PrimeBuild-pc/ThreadPilot",
3535
comingSoon: false,
3636
},
3737
{
3838
name: "LightCrosshair",
3939
description:
4040
"Overlay di mirino leggero e personalizzabile per migliorare la precisione nei giochi FPS.",
4141
features: ["Overlay trasparente", "Mirino personalizzabile", "Profilo per gioco"],
42-
url: "https://github.com/PrimeBuild-pc/LightCrosshair/releases/download/beta/LightCrosshair-beta-win-x64-portable.zip",
43-
repoUrl: "https://github.com/PrimeBuild-pc/LightCrosshair",
42+
url: "https://github.com/PrimeBuild-pc/LightCrosshair/releases/download/v1.0.0/LightCrosshair-Setup.exe",
43+
repoUrl: "https://github.com/PrimeBuild-pc/LightCrosshair",
4444
comingSoon: false,
4545
},
4646
{
4747
name: "TweakHub",
4848
description:
4949
"Centro di controllo all-in-one per modifiche e ottimizzazioni di Windows 11.",
5050
features: ["Affinità processi su core", "Gestione powerplans", "Controllo estremo"],
51-
url: "https://github.com/PrimeBuild-pc/TweakHub/releases/download/beta/TweakHub-v1.0.0-win-x64-portable.zip",
52-
repoUrl: "https://github.com/PrimeBuild-pc/TweakHub",
51+
url: "https://github.com/PrimeBuild-pc/TweakHub/releases/download/v0.1.0-beta/TweakHub-Setup-0.1.0-beta.exe",
52+
repoUrl: "https://github.com/PrimeBuild-pc/TweakHub",
53+
comingSoon: false,
54+
},
55+
{
56+
name: "ZapTweaks",
57+
description:
58+
"App per veloci tweaks su Windows 11, ideale per ottimizzazioni base su una fresh install.",
59+
features: ["Tweaks rapidi", "Ottimizzazione Win11", "Fresh install"],
60+
url: "https://github.com/PrimeBuild-pc/ZapTweaks/releases/download/v1.0.0/ZapTweaks_v1.0.0_Setup.exe",
61+
repoUrl: "https://github.com/PrimeBuild-pc/ZapTweaks",
5362
comingSoon: false,
5463
},
5564
];
@@ -66,11 +75,12 @@ const AppsSection = () => {
6675
</p>
6776
</AnimatedElement>
6877

69-
<div className="grid md:grid-cols-3 gap-8 max-w-6xl mx-auto">
78+
<div className="flex gap-6 max-w-6xl mx-auto overflow-x-auto pb-4 snap-x snap-mandatory no-scrollbar md:grid md:grid-cols-2 lg:grid-cols-4 md:overflow-visible">
7079
{apps.map((app, index) => (
7180
<AnimatedElement
7281
key={index}
73-
className="glow-card relative pb-14 bg-neutral-900 rounded-xl overflow-hidden h-full flex flex-col
82+
className="glow-card relative bg-neutral-900 rounded-xl overflow-hidden flex flex-col
83+
flex-shrink-0 w-[280px] snap-center md:w-auto
7484
focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-[#ff7514]
7585
transition-transform hover:scale-105 focus-within:scale-105"
7686
delay={0.1 * index}
@@ -88,17 +98,17 @@ const AppsSection = () => {
8898
))}
8999
</ul>
90100

91-
{/* spinge il blocco pulsante in fondo alla card; download centrato e repo in basso a destra */}
92-
<div className="mt-auto relative pt-4">
93-
{/* Repo button - bottom-left (always shown when repoUrl exists) */}
101+
{/* Pulsanti in fondo alla card */}
102+
<div className="mt-auto pt-4 flex items-center justify-between gap-2">
103+
{/* Repo button */}
94104
{app.repoUrl && (
95105
<a
96106
href={app.repoUrl}
97107
target="_blank"
98108
rel="noopener noreferrer"
99109
onClick={() => handleRepoClick(app.name, app.repoUrl!)}
100110
aria-label={`Visualizza repository GitHub di ${app.name}`}
101-
className="absolute left-4 bottom10 inline-flex items-center gap-2 bg-[#24292f] hover:bg-[#444d56] text-white px-4 py-1.5 rounded-md text-sm min-h-[32px]"
111+
className="inline-flex items-center gap-1.5 bg-[#24292f] hover:bg-[#444d56] text-white px-3 py-1.5 rounded-md text-sm min-h-[32px]"
102112
>
103113
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
104114
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />
@@ -107,9 +117,9 @@ const AppsSection = () => {
107117
</a>
108118
)}
109119

110-
{/* Download button - bottom-right (only when available) */}
120+
{/* Download button */}
111121
{app.comingSoon ? (
112-
<span className="absolute right-1 bottom10 inline-block bg-neutral-800 text-neutral-300 px-4 py-2 rounded-md text-sm min-h-[32px]">
122+
<span className="inline-block bg-neutral-800 text-neutral-300 px-3 py-1.5 rounded-md text-sm min-h-[32px]">
113123
In arrivo
114124
</span>
115125
) : (
@@ -120,9 +130,9 @@ const AppsSection = () => {
120130
rel="noopener noreferrer"
121131
onClick={() => handleDownloadClick(app.name, app.url)}
122132
aria-label={`Scarica ${app.name}`}
123-
className="absolute right-4 bottom10 inline-flex items-center gap-2 bg-[#ff7514] hover:bg-[#e06500] text-black font-semibold px-4 py-1.5 rounded-md min-h-[32px] text-sm transition-transform hover:scale-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#ff7514] focus-visible:ring-offset-2 focus-visible:ring-offset-neutral-900"
133+
className="inline-flex items-center gap-1.5 bg-[#ff7514] hover:bg-[#e06500] text-black font-semibold px-3 py-1.5 rounded-md min-h-[32px] text-sm transition-transform hover:scale-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#ff7514] focus-visible:ring-offset-2 focus-visible:ring-offset-neutral-900"
124134
>
125-
<FaDownload className="inline mr-2" aria-hidden="true" /> Download
135+
<FaDownload aria-hidden="true" /> Download
126136
</a>
127137
)
128138
)}

client/src/components/GallerySection.tsx

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,25 @@ const SCROLL_SPEED_PX_PER_SEC = 300; // configurabile (px/s)
99

1010
export default function GallerySection() {
1111
const images: GalleryImage[] = [
12-
{ src: "/1.jpg", alt: "Workstation potente assemblata a Montegrotto Terme" },
13-
{ src: "/2.jpg", alt: "Dettaglio interno PC gaming RGB Padova" },
14-
{ src: "/3.jpg", alt: "Setup gaming compatto custom build" },
15-
{ src: "/4.jpg", alt: "Illuminazione LED laterale PC gaming Veneto" },
16-
{ src: "/5.jpg", alt: "Cable management ordinato Prime Build" },
17-
{ src: "/6.jpg", alt: "Ventole RGB sincronizzate assemblaggio PC Padova" },
18-
{ src: "/7.jpg", alt: "Case mid tower in vetro temperato" },
19-
{ src: "/8.jpg", alt: "Raffreddamento a liquido AIO installato a Montegrotto" },
20-
{ src: "/9.jpg", alt: "Setup produttività multi-monitor professionale" },
21-
{ src: "/10.jpg", alt: "Scheda video gaming alta fascia" },
22-
{ src: "/11.jpg", alt: "PC gaming minimalista bianco" },
23-
{ src: "/12.jpg", alt: "Dissipatore ad aria ottimizzato" },
24-
{ src: "/13.jpg", alt: "Build PC full white custom" },
25-
{ src: "/14.jpg", alt: "Case high airflow per massime prestazioni" },
26-
{ src: "/15.jpg", alt: "Cavi sleevati custom PC Padova" },
27-
{ src: "/16.jpg", alt: "Installazione SSD NVMe veloce" },
28-
{ src: "/17.jpg", alt: "Postazione gaming completa Prime Build" }
12+
{ src: "/1.webp", alt: "Workstation potente assemblata a Montegrotto Terme" },
13+
{ src: "/2.webp", alt: "Dettaglio interno PC gaming RGB Padova" },
14+
{ src: "/3.webp", alt: "Setup gaming compatto custom build" },
15+
{ src: "/4.webp", alt: "Illuminazione LED laterale PC gaming Veneto" },
16+
{ src: "/5.webp", alt: "Cable management ordinato Prime Build" },
17+
{ src: "/6.webp", alt: "Ventole RGB sincronizzate assemblaggio PC Padova" },
18+
{ src: "/7.webp", alt: "Case mid tower in vetro temperato" },
19+
{ src: "/8.webp", alt: "Raffreddamento a liquido AIO installato a Montegrotto" },
20+
{ src: "/9.webp", alt: "Setup produttività multi-monitor professionale" },
21+
{ src: "/10.webp", alt: "Scheda video gaming alta fascia" },
22+
{ src: "/11.webp", alt: "PC gaming minimalista bianco" },
23+
{ src: "/12.webp", alt: "Dissipatore ad aria ottimizzato" },
24+
{ src: "/13.webp", alt: "Build PC full white custom" },
25+
{ src: "/14.webp", alt: "Case high airflow per massime prestazioni" },
26+
{ src: "/15.webp", alt: "Cavi sleevati custom PC Padova" },
27+
{ src: "/16.webp", alt: "Installazione SSD NVMe veloce" },
28+
{ src: "/17.webp", alt: "Postazione gaming completa Prime Build" },
29+
{ src: "/18.webp", alt: "PC gaming con illuminazione LED arancione e GeForce RTX" },
30+
{ src: "/19.webp", alt: "PC gaming con illuminazione LED rossa e Radeon" },
2931
];
3032

3133
// Duplicate once for seamless CSS marquee
@@ -87,7 +89,7 @@ export default function GallerySection() {
8789
<style>{`
8890
@keyframes marqueeX { from { transform: translateX(0); } to { transform: translateX(calc(-1 * var(--marquee-distance))); } }
8991
`}</style>
90-
<div ref={trackRef} className="flex gap-4 flex-nowrap will-change-transform" style={{ ...styleVars, animation: `marqueeX var(--marquee-duration) linear infinite` }}>
92+
<div ref={trackRef} className="marquee-animate flex gap-4 flex-nowrap will-change-transform" style={{ ...styleVars, animation: `marqueeX var(--marquee-duration) linear infinite` }}>
9193
{loopImages.map((img, i) => (
9294
<div
9395
key={i}

client/src/index.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
@apply font-sans antialiased bg-background text-foreground;
1212
}
1313

14-
/* Respect user's reduced motion preferences */
14+
/* Respect user's reduced motion preferences (except marquee gallery) */
1515
@media (prefers-reduced-motion: reduce) {
16-
*,
16+
*:not(.marquee-animate),
1717
*::before,
1818
*::after {
1919
animation-duration: 0.01ms !important;

0 commit comments

Comments
 (0)