Enhance community features and newsletter signup with visual improvements

Updates community section testimonials, newsletter design, and imports/adds section dividers.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: acaf01d7-65a7-4fc5-901d-853488e196e8
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/af8dabca-e746-4e53-9c29-d8d4d9cf30f5/d7fc08fa-d3ab-4a73-a920-a0982caef9d7.jpg
This commit is contained in:
JeffEmmett 2025-05-09 23:22:55 +00:00
parent 1f84fe542d
commit 0a1ac84a3f
3 changed files with 200 additions and 139 deletions

View File

@ -2,7 +2,6 @@ import { useState, useEffect } from "react";
import { Testimonial } from "./testimonial"; import { Testimonial } from "./testimonial";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
import { Link } from "wouter"; import { Link } from "wouter";
import { ArabicDecoration } from "@/components/ui/arabic-decoration";
import { Card, CardContent } from "@/components/ui/card"; import { Card, CardContent } from "@/components/ui/card";
import { SectionDivider, SectionDividerBottom, StarDivider } from "@/components/ui/section-divider"; import { SectionDivider, SectionDividerBottom, StarDivider } from "@/components/ui/section-divider";
import { IslamicPattern } from "@/components/ui/section-divider"; import { IslamicPattern } from "@/components/ui/section-divider";
@ -17,21 +16,21 @@ export function CommunitySection() {
author: "Sarah H.", author: "Sarah H.",
memberSince: "2021", memberSince: "2021",
initials: "SH", initials: "SH",
color: "teal", color: "teal" as const,
}, },
{ {
quote: "As someone recovering from back surgery, I was hesitant to try Pilates. Fadia's expertise made me feel safe and I've gained strength I never thought possible.", quote: "As someone recovering from back surgery, I was hesitant to try Pilates. Fadia's expertise made me feel safe and I've gained strength I never thought possible.",
author: "Michael K.", author: "Michael K.",
memberSince: "2022", memberSince: "2022",
initials: "MK", initials: "MK",
color: "purple", color: "purple" as const,
}, },
{ {
quote: "The community aspect of Pilates with Fadia sets it apart. I've not only improved my physical health but have made wonderful connections with fellow members.", quote: "The community aspect of Pilates with Fadia sets it apart. I've not only improved my physical health but have made wonderful connections with fellow members.",
author: "Amina L.", author: "Amina L.",
memberSince: "2020", memberSince: "2020",
initials: "AL", initials: "AL",
color: "rose", color: "rose" as const,
}, },
]; ];
@ -48,13 +47,32 @@ export function CommunitySection() {
}, [user]); }, [user]);
return ( return (
<section id="community" className="py-16 bg-gray-50"> <section className="relative overflow-hidden">
<SectionDivider color="rose" />
<div className="relative py-20 bg-rose">
<IslamicPattern color="rose" opacity={15} />
<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="text-center mb-16"> <div className="text-center mb-16">
<ArabicDecoration> <h2 className="text-3xl md:text-4xl font-playfair font-bold text-white relative inline-block">
<h2 className="text-3xl md:text-4xl font-playfair font-bold text-gray-800">Our Community</h2> <span className="relative z-10">Our Community</span>
</ArabicDecoration> <div className="absolute -bottom-3 left-0 w-full h-1 bg-white opacity-30"></div>
<p className="mt-8 max-w-3xl mx-auto text-gray-600"> </h2>
<div className="flex items-center justify-center py-6">
<div className="w-1/3 h-px bg-white opacity-30"></div>
<div className="mx-4">
<svg width="40" height="40" viewBox="0 0 100 100">
<polygon
points="50,10 61,35 90,35 65,55 75,80 50,65 25,80 35,55 10,35 39,35"
fill="#FFFFFF"
fillOpacity="0.8"
/>
</svg>
</div>
<div className="w-1/3 h-px bg-white opacity-30"></div>
</div>
<p className="mt-6 max-w-3xl mx-auto text-white text-opacity-90">
Connect with like-minded individuals on your wellness journey through our digital community board. Connect with like-minded individuals on your wellness journey through our digital community board.
</p> </p>
</div> </div>
@ -101,9 +119,9 @@ export function CommunitySection() {
</div> </div>
{!user && ( {!user && (
<Link href="/auth"> <Link href="/auth">
<a className="bg-purple text-white font-medium py-2 px-6 rounded-full hover:bg-opacity-90 transition duration-300"> <span className="bg-rose text-white font-medium py-2 px-6 rounded-full hover:bg-opacity-90 transition duration-300 cursor-pointer">
Sign Up to Participate Sign Up to Participate
</a> </span>
</Link> </Link>
)} )}
</div> </div>
@ -118,6 +136,9 @@ export function CommunitySection() {
</div> </div>
</div> </div>
</div> </div>
</div>
<SectionDividerBottom color="rose" />
</section> </section>
); );
} }

View File

@ -26,19 +26,30 @@ export function Testimonial({ quote, author, memberSince, initials, color }: Tes
}; };
return ( return (
<div className="bg-white p-6 rounded-lg shadow-md relative"> <div className="bg-white p-6 rounded-lg shadow-lg relative overflow-hidden">
<div className="absolute top-0 right-0 transform translate-x-2 -translate-y-2 text-4xl"> <div className="absolute -top-4 -right-4 w-16 h-16 opacity-10">
<i className={`fas fa-quote-right ${colorClasses[color].opacity}`}></i> <svg viewBox="0 0 100 100" className="w-full h-full">
<path
d="M95,30 L85,10 C80,0 65,0 60,10 L50,30 L40,10 C35,0 20,0 15,10 L5,30 C0,40 5,50 15,55 L50,70 L85,55 C95,50 100,40 95,30z"
fill={color === "teal" ? "#0c8991" : color === "purple" ? "#9D5E9B" : "#B55076"}
/>
</svg>
</div> </div>
<p className="text-gray-600 mb-4 italic">
<div className="mb-6 text-right">
<i className={`fas fa-quote-right text-4xl ${colorClasses[color].opacity}`}></i>
</div>
<p className="text-gray-700 mb-6 italic relative z-10 font-raleway">
"{quote}" "{quote}"
</p> </p>
<div className="flex items-center">
<div className={`w-10 h-10 ${colorClasses[color].bg} rounded-full flex items-center justify-center mr-3`}> <div className="flex items-center border-t pt-4 border-gray-100">
<div className={`w-12 h-12 rounded-full flex items-center justify-center mr-3 bg-white border-2 ${color === "teal" ? "border-teal" : color === "purple" ? "border-purple" : "border-rose"}`}>
<span className={`${colorClasses[color].text} font-semibold`}>{initials}</span> <span className={`${colorClasses[color].text} font-semibold`}>{initials}</span>
</div> </div>
<div> <div>
<h5 className="font-medium">{author}</h5> <h5 className="font-playfair font-medium">{author}</h5>
<p className="text-sm text-gray-500">Member since {memberSince}</p> <p className="text-sm text-gray-500">Member since {memberSince}</p>
</div> </div>
</div> </div>

View File

@ -4,6 +4,8 @@ import { apiRequest } from "@/lib/queryClient";
import { insertNewsletterSchema } from "@shared/schema"; import { insertNewsletterSchema } from "@shared/schema";
import { useToast } from "@/hooks/use-toast"; import { useToast } from "@/hooks/use-toast";
import { Loader2 } from "lucide-react"; import { Loader2 } from "lucide-react";
import { SectionDivider, SectionDividerBottom, CrescentDivider } from "@/components/ui/section-divider";
import { IslamicPattern } from "@/components/ui/section-divider";
export function NewsletterSection() { export function NewsletterSection() {
const { toast } = useToast(); const { toast } = useToast();
@ -58,15 +60,39 @@ export function NewsletterSection() {
}; };
return ( return (
<section className="py-16 bg-teal text-white"> <section className="relative overflow-hidden">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <SectionDivider color="teal" />
<div className="flex flex-col md:flex-row items-center justify-between">
<div className="md:w-1/2 mb-8 md:mb-0 md:pr-10">
<h2 className="text-3xl font-playfair font-bold mb-4">Join Our Newsletter</h2>
<p className="text-teal-100 mb-4">
Stay updated with wellness tips, special class offerings, and community events. We promise to respect your inbox.
</p>
<div className="relative py-20 bg-teal text-white">
<IslamicPattern color="teal" opacity={10} />
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-playfair font-bold text-white relative inline-block">
<span className="relative z-10">Join Our Newsletter</span>
<div className="absolute -bottom-3 left-0 w-full h-1 bg-white opacity-30"></div>
</h2>
<div className="flex items-center justify-center py-6">
<div className="w-1/3 h-px bg-white opacity-30"></div>
<div className="mx-4">
<svg width="40" height="40" viewBox="0 0 100 100">
<path
d="M50,10 A40,40 0 0 1 50,90 A40,40 0 0 1 50,10 A30,30 0 0 0 50,70 A30,30 0 0 0 50,10"
fill="#FFFFFF"
fillOpacity="0.8"
/>
<circle cx="60" cy="40" r="5" fill="#0c8991" />
</svg>
</div>
<div className="w-1/3 h-px bg-white opacity-30"></div>
</div>
<p className="mt-4 max-w-2xl mx-auto text-white text-opacity-90">
Stay updated with wellness tips, special class offerings, and community events
</p>
</div>
<div className="flex flex-col md:flex-row items-center justify-between bg-white/10 p-8 rounded-lg">
<div className="md:w-1/2 mb-8 md:mb-0 md:pr-10">
<form className="mt-6" onSubmit={handleSubmit}> <form className="mt-6" onSubmit={handleSubmit}>
<div className="flex flex-col sm:flex-row gap-4"> <div className="flex flex-col sm:flex-row gap-4">
<input <input
@ -133,6 +159,9 @@ export function NewsletterSection() {
</div> </div>
</div> </div>
</div> </div>
</div>
<SectionDividerBottom color="teal" />
</section> </section>
); );
} }