Service page upgrade

This commit is contained in:
knuthtimo-lab 2025-08-28 13:35:13 +02:00
parent 035d17b3ac
commit 6f1f18199d
8 changed files with 1129 additions and 993 deletions

6
next-env.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference types="next/navigation-types/compat/navigation" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.

2047
package-lock.json generated

File diff suppressed because it is too large Load Diff

0
public/Faster_Devices_Happier_Teams.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

0
public/logo_bayarea.svg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

0
public/placeholder.svg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

0
public/serverroom.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
public/service_background.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -2,8 +2,24 @@ import Navigation from '@/components/Navigation';
import Footer from '@/components/Footer'; import Footer from '@/components/Footer';
import { Monitor, Wifi, Cloud, Shield, Database, Settings, CheckCircle } from 'lucide-react'; import { Monitor, Wifi, Cloud, Shield, Database, Settings, CheckCircle } from 'lucide-react';
import ScrollReveal from '@/components/ScrollReveal'; import ScrollReveal from '@/components/ScrollReveal';
import { useEffect, useRef } from 'react';
const Services = () => { const Services = () => {
const imageRef = useRef<HTMLImageElement>(null);
useEffect(() => {
const handleScroll = () => {
if (imageRef.current) {
const scrolled = window.pageYOffset;
const parallax = scrolled * 0.5;
imageRef.current.style.transform = `translateY(${parallax}px) scale(1.1)`;
}
};
window.addEventListener('scroll', handleScroll, { passive: true });
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const services = [ const services = [
{ {
icon: Monitor, icon: Monitor,
@ -126,28 +142,59 @@ const Services = () => {
<Navigation /> <Navigation />
<main> <main>
{/* Hero section */} {/* Hero section with image background */}
<section className="pt-32 pb-16 bg-background relative overflow-hidden"> <section className="relative h-screen flex items-center justify-center overflow-hidden">
<div className="absolute inset-0 grid-overlay opacity-10"></div> {/* Background image with parallax */}
<div className="absolute inset-0 overflow-hidden">
<img
ref={imageRef}
src="/service_background.png"
alt="IT services background"
className="w-full h-[110%] object-cover will-change-transform"
style={{ transform: 'translateY(0px) scale(1.1)' }}
/>
</div>
<div className="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> {/* Overlay for better text readability */}
<div className="absolute inset-0 bg-black/40"></div>
{/* Hero content */}
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
<ScrollReveal> <ScrollReveal>
<div className="max-w-3xl"> <div className="max-w-4xl mx-auto">
<h1 className="font-heading font-bold text-5xl sm:text-6xl text-foreground mb-6"> <h1 className="font-heading font-bold text-5xl sm:text-6xl lg:text-7xl text-white mb-6 text-balance drop-shadow-[0_0_20px_rgba(255,255,255,0.3)]">
Complete IT solutions for{' '} Complete IT solutions for{' '}
<span className="text-neon">your business</span> <span className="text-neon text-glow drop-shadow-[0_0_30px_rgba(51,102,255,0.8)]">your business</span>
</h1> </h1>
<p className="text-xl text-foreground-muted leading-relaxed"> <p className="text-xl sm:text-2xl text-white/95 mb-8 max-w-3xl mx-auto leading-relaxed drop-shadow-[0_0_15px_rgba(255,255,255,0.2)]">
From desktop support to enterprise infrastructure, we provide the technology From desktop support to enterprise infrastructure, we provide the technology
foundation your business needs to thrive in the Coastal Bend. foundation your business needs to thrive in the Coastal Bend.
</p> </p>
{/* CTA button */}
<div className="flex justify-center">
<a
href="#services"
className="btn-neon group flex items-center space-x-2"
>
<span>Explore our services</span>
<CheckCircle className="w-5 h-5 transition-transform group-hover:scale-110" />
</a>
</div>
</div> </div>
</ScrollReveal> </ScrollReveal>
</div> </div>
{/* Scroll indicator */}
<div className="absolute bottom-8 left-1/2 transform -translate-x-1/2">
<div className="w-6 h-10 border-2 border-neon/60 rounded-full flex justify-center drop-shadow-[0_0_10px_rgba(51,102,255,0.3)]">
<div className="w-1 h-3 bg-neon rounded-full mt-2 animate-bounce"></div>
</div>
</div>
</section> </section>
{/* Services detail */} {/* Services detail */}
<section className="py-24 bg-background-deep"> <section id="services" className="py-24 bg-background-deep">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="space-y-24"> <div className="space-y-24">
{services.map((service, index) => { {services.map((service, index) => {