Compare commits

...

3 Commits

Author SHA1 Message Date
a1e3e14f7b Merge remote-tracking branch 'origin/main' 2025-12-18 21:04:12 +01:00
52f5d7aac5 Added whitespace 2025-12-18 21:03:55 +01:00
296a17ebbc Updated obfuscation in hero section 2025-12-18 20:59:35 +01:00
3 changed files with 13 additions and 19 deletions

View File

@@ -13,7 +13,7 @@ export const Navbar = () => {
<div className="max-w-7xl mx-auto px-6 h-20 flex items-center justify-between"> <div className="max-w-7xl mx-auto px-6 h-20 flex items-center justify-between">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<BrandLogo className="w-8 h-8 text-[#00A3FF]" /> <BrandLogo className="w-8 h-8 text-[#00A3FF]" />
<span className="font-bold text-lg md:text-xl tracking-wider text-white">LIQUID<span className="text-[#00A3FF]">DEVELOPMENT</span></span> <span className="font-bold text-lg md:text-xl tracking-wider text-white">LIQUID <span className="text-[#00A3FF]">DEVELOPMENT</span></span>
</div> </div>
<div className="hidden md:flex gap-6 text-sm font-medium text-gray-300 items-center"> <div className="hidden md:flex gap-6 text-sm font-medium text-gray-300 items-center">
{NAV_LINKS.map((item) => ( {NAV_LINKS.map((item) => (

View File

@@ -1,24 +1,19 @@
import React, { useState } from 'react'; import React from 'react';
export const ObfuscatedMail = ({ email, className, children, title }) => { export const ObfuscatedMail = ({ email, className, children, title }) => {
// Start with a dummy link so bots don't see 'mailto:' const handleClick = (e) => {
const [href, setHref] = useState("#"); e.preventDefault();
window.location.href = `mailto:${email}`;
// Only reveal the real email when the user hovers or focuses
const reveal = () => {
setHref(`mailto:${email}`);
}; };
return ( return (
<a <button
href={href} onClick={handleClick}
onMouseEnter={reveal}
onFocus={reveal}
onClick={reveal}
className={className} className={className}
title={title || "Send email"} title={title || "Send email"}
type="button"
> >
{children} {children}
</a> </button>
); );
}; };

View File

@@ -19,12 +19,11 @@ export const Hero = () => {
</motion.div> </motion.div>
<motion.div initial={{ y: 20, opacity: 0 }} animate={{ y: 0, opacity: 1 }} transition={{ delay: 0.2 }}> <motion.div initial={{ y: 20, opacity: 0 }} animate={{ y: 0, opacity: 1 }} transition={{ delay: 0.2 }}>
{/* Obfuscated Title Link */} <h1 className="text-4xl md:text-7xl font-extrabold tracking-tighter mb-6">
<ObfuscatedMail email={rawEmail} className="block cursor-pointer hover:opacity-80 transition-opacity duration-300"> <ObfuscatedMail email={rawEmail} className="cursor-pointer hover:opacity-80 transition-opacity duration-300 bg-transparent border-none p-0 font-extrabold tracking-tighter text-4xl md:text-7xl text-white">
<h1 className="text-4xl md:text-7xl font-extrabold tracking-tighter mb-6">
LIQUID <span className="text-transparent bg-clip-text bg-gradient-to-r from-[#00A3FF] to-cyan-200">DEVELOPMENT</span> LIQUID <span className="text-transparent bg-clip-text bg-gradient-to-r from-[#00A3FF] to-cyan-200">DEVELOPMENT</span>
</h1> </ObfuscatedMail>
</ObfuscatedMail> </h1>
</motion.div> </motion.div>
<motion.p initial={{ y: 20, opacity: 0 }} animate={{ y: 0, opacity: 1 }} transition={{ delay: 0.4 }} className="text-lg md:text-2xl text-gray-400 mb-10 max-w-2xl mx-auto font-light">German Development Team</motion.p> <motion.p initial={{ y: 20, opacity: 0 }} animate={{ y: 0, opacity: 1 }} transition={{ delay: 0.4 }} className="text-lg md:text-2xl text-gray-400 mb-10 max-w-2xl mx-auto font-light">German Development Team</motion.p>