cre-sync/components/Marketplace.tsx
BusyBee3333 4e6467ffb0 Add CRESync CRM application with Setup page
- Build complete Next.js CRM for commercial real estate
- Add authentication with JWT sessions and role-based access
- Add GoHighLevel API integration for contacts, conversations, opportunities
- Add AI-powered Control Center with tool calling
- Add Setup page with onboarding checklist (/setup)
- Add sidebar navigation with Setup menu item
- Fix type errors in onboarding API, GHL services, and control center tools
- Add Prisma schema with SQLite for local development
- Add UI components with clay morphism design system

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 17:30:55 -05:00

281 lines
13 KiB
TypeScript

import React from 'react';
import { ClayCard } from './ClayCard';
import { Button } from './Button';
import {
GraduationCap,
Users,
Calendar,
FileText,
ClipboardCheck,
ExternalLink,
Sparkles,
Star,
ArrowRight,
Download,
Video,
BookOpen,
Mic,
Trophy,
Target,
TrendingUp,
CalendarDays,
Clock,
MapPin
} from 'lucide-react';
interface MarketplaceProps {
onQuizClick: () => void;
calendlyCoachingLink?: string;
calendlyTeamLink?: string;
}
export const Marketplace: React.FC<MarketplaceProps> = ({
onQuizClick,
calendlyCoachingLink = 'https://calendly.com',
calendlyTeamLink = 'https://calendly.com',
}) => {
const handleExternalLink = (url: string) => {
window.open(url, '_blank', 'noopener,noreferrer');
};
return (
<div className="max-w-5xl mx-auto py-10 px-4">
{/* Header - Level 1 (subtle) since it's a page header */}
<ClayCard elevation="subtle" className="mb-10 text-center">
<div className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 rounded-full text-indigo-600 text-sm font-medium mb-4">
<Sparkles className="w-4 h-4" />
Your Success Hub
</div>
<h1 className="text-3xl font-bold text-gray-800">Town Hall</h1>
<p className="text-gray-500 mt-2 max-w-xl mx-auto">
Resources, coaching, and opportunities to accelerate your commercial real estate success.
</p>
</ClayCard>
{/* Main Action Cards */}
<div className="grid gap-6 mb-10">
{/* Get Coaching Card */}
<ClayCard className="relative overflow-hidden">
<div className="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-indigo-100/50 to-purple-100/50 rounded-full -translate-y-1/2 translate-x-1/2" />
<div className="relative flex flex-col md:flex-row gap-6 items-start md:items-center">
<div className="bg-gradient-to-br from-indigo-500 to-purple-600 p-4 rounded-2xl text-white shadow-lg">
<GraduationCap size={32} />
</div>
<div className="flex-1">
<div className="flex items-center gap-2 mb-1">
<h3 className="text-xl font-bold text-gray-800">Get Coaching</h3>
<span className="px-2 py-0.5 bg-amber-100 text-amber-700 text-xs font-semibold rounded-full">Popular</span>
</div>
<p className="text-gray-500 text-sm mt-1">
Work one-on-one with an expert coach to optimize your outreach strategy,
improve your scripts, and close more deals faster.
</p>
<div className="flex flex-wrap gap-3 mt-3">
<span className="flex items-center gap-1 text-xs text-gray-500">
<Target className="w-3 h-3" /> Strategy Sessions
</span>
<span className="flex items-center gap-1 text-xs text-gray-500">
<Mic className="w-3 h-3" /> Script Review
</span>
<span className="flex items-center gap-1 text-xs text-gray-500">
<TrendingUp className="w-3 h-3" /> Deal Analysis
</span>
</div>
</div>
<Button onClick={() => handleExternalLink(calendlyCoachingLink)}>
Book a Session
<ExternalLink size={16} />
</Button>
</div>
</ClayCard>
{/* Take the Quiz Card */}
<ClayCard className="relative overflow-hidden">
<div className="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-purple-100/50 to-pink-100/50 rounded-full -translate-y-1/2 translate-x-1/2" />
<div className="relative flex flex-col md:flex-row gap-6 items-start md:items-center">
<div className="bg-gradient-to-br from-purple-500 to-pink-600 p-4 rounded-2xl text-white shadow-lg">
<ClipboardCheck size={32} />
</div>
<div className="flex-1">
<div className="flex items-center gap-2 mb-1">
<h3 className="text-xl font-bold text-gray-800">Take the Performance Quiz</h3>
<span className="px-2 py-0.5 bg-green-100 text-green-700 text-xs font-semibold rounded-full">Free</span>
</div>
<p className="text-gray-500 text-sm mt-1">
Discover where you stand among your peers. Get personalized insights and
actionable recommendations to level up your performance.
</p>
<div className="flex flex-wrap gap-3 mt-3">
<span className="flex items-center gap-1 text-xs text-gray-500">
<Trophy className="w-3 h-3" /> Benchmarking
</span>
<span className="flex items-center gap-1 text-xs text-gray-500">
<Star className="w-3 h-3" /> Personalized Tips
</span>
<span className="flex items-center gap-1 text-xs text-gray-500">
<Clock className="w-3 h-3" /> 5 Minutes
</span>
</div>
</div>
<Button onClick={onQuizClick}>
Start Quiz
<ArrowRight size={16} />
</Button>
</div>
</ClayCard>
{/* Join Our Team Card */}
<ClayCard className="relative overflow-hidden">
<div className="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-emerald-100/50 to-teal-100/50 rounded-full -translate-y-1/2 translate-x-1/2" />
<div className="relative flex flex-col md:flex-row gap-6 items-start md:items-center">
<div className="bg-gradient-to-br from-emerald-500 to-teal-600 p-4 rounded-2xl text-white shadow-lg">
<Users size={32} />
</div>
<div className="flex-1">
<h3 className="text-xl font-bold text-gray-800">Join Our Team</h3>
<p className="text-gray-500 text-sm mt-1">
Interested in becoming part of our growing team? We are always looking
for talented individuals who share our passion for real estate success.
</p>
<div className="flex flex-wrap gap-3 mt-3">
<span className="flex items-center gap-1 text-xs text-gray-500">
<Star className="w-3 h-3" /> Growth Opportunities
</span>
<span className="flex items-center gap-1 text-xs text-gray-500">
<Users className="w-3 h-3" /> Collaborative Culture
</span>
</div>
</div>
<Button
variant="secondary"
onClick={() => handleExternalLink(calendlyTeamLink)}
>
Learn More
<ExternalLink size={16} />
</Button>
</div>
</ClayCard>
</div>
{/* Two Column Layout for Events and Resources */}
<div className="grid md:grid-cols-2 gap-6">
{/* Upcoming Events Section */}
<div>
<div className="flex items-center gap-2 mb-4">
<Calendar className="w-5 h-5 text-orange-600" />
<h2 className="text-xl font-bold text-gray-800">Upcoming Events</h2>
</div>
<ClayCard className="h-full">
<div className="flex items-center gap-4 mb-5">
<div className="bg-gradient-to-br from-orange-400 to-red-500 p-3 rounded-xl text-white shadow-md">
<CalendarDays size={24} />
</div>
<div>
<h3 className="text-lg font-semibold text-gray-800">Workshops & Live Events</h3>
<p className="text-gray-500 text-sm">Join our community events to learn and network.</p>
</div>
</div>
{/* Empty State with Illustration */}
<div className="bg-gradient-to-br from-orange-50 to-amber-50 rounded-2xl p-8 text-center border border-orange-100">
<div className="w-20 h-20 mx-auto mb-4 bg-orange-100 rounded-full flex items-center justify-center">
<Video className="w-10 h-10 text-orange-400" />
</div>
<h4 className="font-semibold text-gray-700 mb-1">No Events Scheduled</h4>
<p className="text-gray-500 text-sm mb-4">
Exciting workshops and networking events are coming soon!
</p>
<div className="flex flex-wrap justify-center gap-2 text-xs text-gray-500">
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Webinars
</span>
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Q&A Sessions
</span>
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Masterclasses
</span>
</div>
</div>
{/* Preview Event Card (Coming Soon) */}
<div className="mt-4 p-4 bg-gray-50 rounded-xl border border-dashed border-gray-300 opacity-60">
<div className="flex items-start gap-3">
<div className="bg-gray-200 rounded-lg p-2 text-gray-500">
<Clock className="w-5 h-5" />
</div>
<div className="flex-1">
<p className="font-medium text-gray-600 text-sm">Coming Soon</p>
<p className="text-xs text-gray-400">Market Analysis Workshop</p>
<div className="flex items-center gap-2 mt-2 text-xs text-gray-400">
<MapPin className="w-3 h-3" /> Virtual Event
</div>
</div>
</div>
</div>
</ClayCard>
</div>
{/* Free Resources Section */}
<div>
<div className="flex items-center gap-2 mb-4">
<FileText className="w-5 h-5 text-teal-600" />
<h2 className="text-xl font-bold text-gray-800">Free Resources</h2>
</div>
<ClayCard className="h-full">
<div className="flex items-center gap-4 mb-5">
<div className="bg-gradient-to-br from-teal-400 to-cyan-500 p-3 rounded-xl text-white shadow-md">
<BookOpen size={24} />
</div>
<div>
<h3 className="text-lg font-semibold text-gray-800">Scripts, Guides & Templates</h3>
<p className="text-gray-500 text-sm">Download free resources to boost your productivity.</p>
</div>
</div>
{/* Empty State with Illustration */}
<div className="bg-gradient-to-br from-teal-50 to-cyan-50 rounded-2xl p-8 text-center border border-teal-100">
<div className="w-20 h-20 mx-auto mb-4 bg-teal-100 rounded-full flex items-center justify-center">
<Download className="w-10 h-10 text-teal-400" />
</div>
<h4 className="font-semibold text-gray-700 mb-1">Resources Coming Soon</h4>
<p className="text-gray-500 text-sm mb-4">
We are preparing valuable templates and guides for you.
</p>
<div className="flex flex-wrap justify-center gap-2 text-xs text-gray-500">
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Cold Call Scripts
</span>
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Email Templates
</span>
<span className="px-3 py-1 bg-white rounded-full border border-gray-200">
Deal Checklists
</span>
</div>
</div>
{/* Preview Resource Cards (Coming Soon) */}
<div className="mt-4 grid grid-cols-2 gap-3">
<div className="p-3 bg-gray-50 rounded-xl border border-dashed border-gray-300 opacity-60">
<div className="w-8 h-8 bg-gray-200 rounded-lg flex items-center justify-center mb-2">
<FileText className="w-4 h-4 text-gray-500" />
</div>
<p className="font-medium text-gray-600 text-xs">LOI Template</p>
<p className="text-xs text-gray-400">PDF</p>
</div>
<div className="p-3 bg-gray-50 rounded-xl border border-dashed border-gray-300 opacity-60">
<div className="w-8 h-8 bg-gray-200 rounded-lg flex items-center justify-center mb-2">
<FileText className="w-4 h-4 text-gray-500" />
</div>
<p className="font-medium text-gray-600 text-xs">Call Scripts</p>
<p className="text-xs text-gray-400">DOC</p>
</div>
</div>
</ClayCard>
</div>
</div>
</div>
);
};