8 Commits

Author SHA1 Message Date
6d80983360 Merge version_7_1776773032685 into main
Merge version_7_1776773032685 into main
2026-04-21 12:04:55 +00:00
41c93b1d4f Bob AI: Modify the NavbarCentered component to be a floating navigat 2026-04-21 15:04:47 +03:00
1034ff2459 Merge version_6_1776768625786 into main
Merge version_6_1776768625786 into main
2026-04-21 10:52:14 +00:00
536fc821cd Bob AI: Add an 'Active Now' tag with a green pulsing light effect to 2026-04-21 13:52:02 +03:00
9fd8e43953 Merge version_5_1776768529458 into main
Merge version_5_1776768529458 into main
2026-04-21 10:49:54 +00:00
eb62fd34cc Bob AI: Modify the NavbarCentered component to be a floating navigat 2026-04-21 13:49:45 +03:00
410fd1e658 Merge version_4_1776717966773 into main
Merge version_4_1776717966773 into main
2026-04-20 20:48:48 +00:00
2d98c8e419 Bob AI: to each section add glassmorphic badge with random funny fac 2026-04-20 23:48:40 +03:00
11 changed files with 47 additions and 11 deletions

View File

@@ -30,6 +30,9 @@ const AboutMediaOverlay = ({
<div className="relative z-10 flex items-center justify-center px-5 py-10 mx-auto min-h-100 md:min-h-120 md:w-1/2 w-content-width">
<div className="flex flex-col items-center gap-3 md:gap-1 text-center">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-white/20 backdrop-blur-sm border border-white/30 text-foreground">We have a rubber duck for debugging. His name is Sir Quacks-A-Lot.</div>
</div>
<motion.span
initial={{ opacity: 0, y: 10 }}
whileInView={{ opacity: 1, y: 0 }}

View File

@@ -79,6 +79,9 @@ const ContactSplitForm = ({
<div className="p-5 md:p-10 card rounded">
<form onSubmit={handleSubmit} className="flex flex-col gap-5">
<div className="flex flex-col items-center gap-1 text-center">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Our contact form is powered by a hamster on a wheel. Please be patient.</div>
</div>
<span className="card rounded px-3 py-1 text-sm">{tag}</span>
<TextAnimation

View File

@@ -40,6 +40,9 @@ const FaqSplitMedia = ({
<section aria-label="FAQ section" className="py-20">
<div className="w-content-width mx-auto flex flex-col gap-8">
<div className="flex flex-col items-center gap-3 md:gap-2">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">FAQ: Do you sleep? Answer: Rarely.</div>
</div>
<span className="card rounded px-3 py-1 text-sm">{tag}</span>
<TextAnimation

View File

@@ -30,6 +30,9 @@ const FeaturesMediaCards = ({
<section aria-label="Features section" className="py-20">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center w-content-width mx-auto gap-3 md:gap-2">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Our secret feature is a button that orders pizza. It's still in beta.</div>
</div>
<span className="px-3 py-1 text-sm card rounded">{tag}</span>
<TextAnimation

View File

@@ -36,6 +36,9 @@ const FooterBasic = ({
return (
<footer aria-label="Site footer" className="w-full pt-20 pb-10">
<div className="w-content-width mx-auto">
<div className="w-full flex justify-center mb-8">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Made with and too many energy drinks.</div>
</div>
<div className="w-full flex flex-wrap justify-between gap-y-10 mb-10">
{columns.map((column) => (
<div key={column.title} className="w-1/2 md:w-auto flex flex-col items-start gap-3">

View File

@@ -36,6 +36,9 @@ const HeroBrand = ({
<div className="relative z-10 w-content-width mx-auto pb-5">
<div className="flex flex-col">
<div className="mb-4">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-white/20 backdrop-blur-sm border border-white/30 text-primary-cta-text">Powered by caffeine and the occasional reboot.</div>
</div>
<div className="w-full flex flex-col md:flex-row md:justify-between items-start md:items-end gap-3 md:gap-5">
<TextAnimation
text={description}

View File

@@ -30,6 +30,9 @@ const MetricsGradientCards = ({
<section aria-label="Metrics section" className="py-20">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center gap-3 md:gap-2 w-content-width mx-auto">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Our uptime is 99.9%, but our coffee machine's is closer to 50%.</div>
</div>
<span className="px-3 py-1 text-sm card rounded">{tag}</span>
<TextAnimation

View File

@@ -21,6 +21,9 @@ const SocialProofMarquee = ({
<section aria-label="Social proof section" className="py-20">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center gap-3 md:gap-2 w-content-width mx-auto">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Even our CEO's mom thinks we're a big deal.</div>
</div>
<span className="px-3 py-1 text-sm rounded card">{tag}</span>
<TextAnimation

View File

@@ -28,6 +28,9 @@ const TestimonialQuoteCards = ({
<section aria-label="Testimonials section" className="py-20">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center gap-3 md:gap-2 w-content-width mx-auto">
<div className="mb-2">
<div className="inline-block px-3 py-1 text-sm rounded-full bg-card/20 backdrop-blur-sm border border-card/30 text-foreground">Our clients love us. We have the thank-you cards to prove it.</div>
</div>
<span className="px-3 py-1 text-sm card rounded">{tag}</span>
<TextAnimation

View File

@@ -1,4 +1,4 @@
import { useState, useEffect } from "react";
import { useState } from "react";
import { Link } from "react-router-dom";
import { motion, AnimatePresence } from "motion/react";
import { Plus, ArrowRight } from "lucide-react";
@@ -46,25 +46,23 @@ const NavLink = ({
};
const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => {
const [isScrolled, setIsScrolled] = useState(false);
const [menuOpen, setMenuOpen] = useState(false);
useEffect(() => {
const handleScroll = () => setIsScrolled(window.scrollY > 50);
window.addEventListener("scroll", handleScroll, { passive: true });
return () => window.removeEventListener("scroll", handleScroll);
}, []);
return (
<>
<nav
className={cls(
"fixed z-1000 top-0 left-0 w-full transition-all duration-500 ease-in-out",
isScrolled ? "h-15 bg-background/80 backdrop-blur-sm" : "h-20 bg-background/0 backdrop-blur-0"
"sticky top-0 z-50 w-full transition-all duration-500 ease-in-out h-20 bg-background/80 backdrop-blur-md border-b border-foreground/10"
)}
>
<div className="relative flex items-center justify-between h-full w-content-width mx-auto">
<Link to="/" className="text-xl font-medium text-foreground">{logo}</Link>
<div className="flex items-center gap-4">
<Link to="/" className="text-xl font-medium text-foreground">{logo}</Link>
<div className="flex items-center gap-1 px-2 py-1 rounded-full bg-green-100 text-green-800 text-xs font-medium">
<span className="w-2 h-2 rounded-full bg-green-500 animate-[pulse-green_2s_infinite]"></span>
Active Now
</div>
</div>
<div className="hidden md:flex absolute left-1/2 items-center gap-6 -translate-x-1/2">
{navItems.map((item) => (

View File

@@ -169,3 +169,14 @@
.animate-progress {
animation: progress linear forwards;
}
@keyframes pulse-green {
0%, 100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.7;
}
}