initial commit

This commit is contained in:
Daniel Noulet 2026-10-07 15:21:47 +02:00
commit e7987e88a7
70 changed files with 13661 additions and 0 deletions

View file

@ -0,0 +1,122 @@
import { Link } from 'react-router-dom'
import { Code, Github, Linkedin, Twitter, Mail, MapPin, Phone } from 'lucide-react'
const footerLinks = {
services: [
{ label: 'Web Development', href: '#services' },
{ label: 'Backend & APIs', href: '#services' },
{ label: 'Cloud & DevOps', href: '#services' },
{ label: 'Architecture', href: '#services' },
{ label: 'Modernization', href: '#services' },
{ label: 'Advisory', href: '#services' },
],
company: [
{ label: 'About', href: '#experience' },
{ label: 'Projects', href: '#projects' },
{ label: 'Skills', href: '#skills' },
{ label: 'Contact', href: '#contact' },
],
legal: [
{ label: 'Privacy Policy', href: '/privacy' },
{ label: 'Terms of Service', href: '/terms' },
{ label: 'Cookie Policy', href: '/cookies' },
],
}
const socialLinks = [
{ icon: Github, href: 'https://github.com/urpi', label: 'GitHub' },
{ icon: Linkedin, href: 'https://linkedin.com/company/urpi', label: 'LinkedIn' },
{ icon: Twitter, href: 'https://twitter.com/urpi_be', label: 'Twitter' },
{ icon: Mail, href: 'mailto:contact@urpi.be', label: 'Email' },
]
export function Footer() {
return (
<footer className="bg-dark-900 text-dark-300" role="contentinfo">
<div className="container py-16 lg:py-24">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12">
<div className="lg:col-span-2">
<Link to="/" className="flex items-center gap-2 text-xl font-display font-bold text-white mb-4" aria-label="URPI Home">
<Code className="h-8 w-8 text-brand-500" />
<span>URPI</span>
</Link>
<p className="text-dark-400 mb-6 max-w-xs">
Web application & backend development experts. Building scalable, maintainable software solutions with Go, Java, React, and cloud-native technologies.
</p>
<div className="flex gap-4">
{socialLinks.map(({ icon: Icon, href, label }) => (
<a
key={label}
href={href}
target="_blank"
rel="noopener noreferrer"
className="p-2 rounded-lg bg-dark-800 text-dark-400 hover:bg-brand-500/20 hover:text-brand-400 transition-all duration-200"
aria-label={label}
>
<Icon className="h-5 w-5" />
</a>
))}
</div>
</div>
<div>
<h3 className="text-sm font-semibold text-white uppercase tracking-wider mb-4">Services</h3>
<ul className="space-y-3">
{footerLinks.services.map((link) => (
<li key={link.label}>
<Link to={link.href} className="text-dark-400 hover:text-brand-400 transition-colors">
{link.label}
</Link>
</li>
))}
</ul>
</div>
<div>
<h3 className="text-sm font-semibold text-white uppercase tracking-wider mb-4">Company</h3>
<ul className="space-y-3">
{footerLinks.company.map((link) => (
<li key={link.label}>
<a href={link.href} className="text-dark-400 hover:text-brand-400 transition-colors">
{link.label}
</a>
</li>
))}
</ul>
</div>
<div>
<h3 className="text-sm font-semibold text-white uppercase tracking-wider mb-4">Contact</h3>
<address className="not-italic space-y-3 text-dark-400">
<div className="flex items-start gap-3">
<MapPin className="h-5 w-5 mt-0.5 text-brand-500 flex-shrink-0" />
<span>Belgium</span>
</div>
<div className="flex items-start gap-3">
<Mail className="h-5 w-5 mt-0.5 text-brand-500 flex-shrink-0" />
<a href="mailto:contact@urpi.be" className="hover:text-brand-400 transition-colors">contact@urpi.be</a>
</div>
<div className="flex items-start gap-3">
<Phone className="h-5 w-5 mt-0.5 text-brand-500 flex-shrink-0" />
<a href="tel:+32470000000" className="hover:text-brand-400 transition-colors">+32 470 00 00 00</a>
</div>
</address>
</div>
</div>
<div className="mt-12 pt-8 border-t border-dark-800 flex flex-col md:flex-row items-center justify-between gap-4">
<p className="text-dark-500 text-sm">
© {new Date().getFullYear()} URPI. All rights reserved.
</p>
<div className="flex items-center gap-6">
{footerLinks.legal.map((link) => (
<Link key={link.label} to={link.href} className="text-sm text-dark-500 hover:text-brand-400 transition-colors">
{link.label}
</Link>
))}
</div>
</div>
</div>
</footer>
)
}