BioNexus / client /src /pages /MatchmakingPage.jsx
gaialive's picture
Upload 28 files
ad08f08 verified
import React, { useState } from 'react';
const MatchmakingPage = () => {
const [activeTab, setActiveTab] = useState('opportunities');
const [formData, setFormData] = useState({
name: '',
email: '',
organization: '',
interest: '',
description: ''
});
const opportunities = [
{
id: 1,
title: 'Solar-Powered Cold Storage for Smallholder Farmers',
organization: 'Renewable Agriculture Initiative',
location: 'Kenya, Tanzania',
description: 'Seeking technology partners and investors for deployment of solar-powered cold storage units in East Africa.',
tags: ['Cold Chain', 'Solar Power', 'Smallholders', 'East Africa'],
posted: '2025-10-18'
},
{
id: 2,
title: 'Mobile Processing Unit for Fruit Preservation',
organization: 'Sustainable Food Systems Group',
location: 'India, Bangladesh',
description: 'Looking for equipment manufacturers and local partners to deploy mobile processing units for mango and banana preservation.',
tags: ['Processing', 'Mobile Units', 'Fruit Preservation', 'South Asia'],
posted: '2025-10-15'
},
{
id: 3,
title: 'Food Waste to Biogas Project',
organization: 'Circular Economy Network',
location: 'Brazil, Colombia',
description: 'Seeking technology providers and financing partners for food waste-to-biogas facilities in urban areas.',
tags: ['Biogas', 'Waste Valorization', 'Urban', 'South America'],
posted: '2025-10-12'
}
];
const handleSubmit = (e) => {
e.preventDefault();
// In a real app, this would submit to an API
alert('Thank you for your submission! We will review your request and get back to you soon.');
setFormData({
name: '',
email: '',
organization: '',
interest: '',
description: ''
});
};
const handleChange = (e) => {
setFormData({
...formData,
[e.target.name]: e.target.value
});
};
return (
<div className="py-16 bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 transition-colors duration-300 min-h-screen">
<div className="container mx-auto px-4">
<h2 className="text-3xl font-bold mb-8 text-gray-800 dark:text-white drop-shadow bg-gradient-to-r from-bio-green to-bio-blue bg-clip-text text-transparent">Matchmaking Platform</h2>
<div className="bg-white dark:bg-gray-700 rounded-2xl shadow-lg overflow-hidden mb-8 border border-gray-100 dark:border-gray-600 bg-gradient-to-br from-white to-gray-100 dark:from-gray-700 dark:to-gray-800">
<div className="border-b border-gray-200 dark:border-gray-600">
<nav className="flex">
<button
className={`py-4 px-6 text-center border-b-2 font-medium text-sm ${
activeTab === 'opportunities'
? 'border-bio-green text-bio-green dark:text-green-400 drop-shadow bg-gradient-to-r from-bio-green to-green-500 bg-clip-text text-transparent'
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300'
}`}
onClick={() => setActiveTab('opportunities')}
>
Collaboration Opportunities
</button>
<button
className={`py-4 px-6 text-center border-b-2 font-medium text-sm ${
activeTab === 'submit'
? 'border-bio-green text-bio-green dark:text-green-400 drop-shadow bg-gradient-to-r from-bio-green to-green-500 bg-clip-text text-transparent'
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300'
}`}
onClick={() => setActiveTab('submit')}
>
Submit Opportunity
</button>
</nav>
</div>
<div className="p-6">
{activeTab === 'opportunities' ? (
<div>
<h3 className="text-xl font-bold mb-6 text-gray-800 dark:text-white drop-shadow bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent dark:from-white dark:to-gray-300">Current Collaboration Opportunities</h3>
<div className="space-y-6">
{opportunities.map((opportunity) => (
<div key={opportunity.id} className="border border-gray-200 dark:border-gray-600 rounded-xl p-6 hover:shadow-md transition drop-shadow bg-gradient-to-br from-white to-gray-50 dark:from-gray-700 dark:to-gray-800">
<div className="flex justify-between items-start mb-4">
<h4 className="text-lg font-bold text-gray-800 dark:text-white drop-shadow bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent dark:from-white dark:to-gray-300">{opportunity.title}</h4>
<span className="text-sm text-gray-500 dark:text-gray-400 drop-shadow">{opportunity.posted}</span>
</div>
<div className="mb-3">
<span className="font-medium text-gray-700 dark:text-gray-300 drop-shadow">Organization:</span> {opportunity.organization}
</div>
<div className="mb-3">
<span className="font-medium text-gray-700 dark:text-gray-300 drop-shadow">Location:</span> {opportunity.location}
</div>
<p className="text-gray-600 dark:text-gray-300 mb-4 drop-shadow">{opportunity.description}</p>
<div className="flex flex-wrap gap-2 mb-4">
{opportunity.tags.map((tag, index) => (
<span key={index} className="px-2 py-1 text-xs bg-bio-blue/10 text-bio-blue dark:bg-blue-900/30 dark:text-blue-300 rounded-full drop-shadow bg-gradient-to-r from-blue-100 to-blue-200 dark:from-blue-900/30 dark:to-blue-800/30">
{tag}
</span>
))}
</div>
<button className="bg-gradient-to-r from-bio-green to-green-500 text-white px-4 py-2 rounded-lg hover:from-green-500 hover:to-green-600 transition shadow-md hover:shadow-lg drop-shadow">
Express Interest
</button>
</div>
))}
</div>
</div>
) : (
<div>
<h3 className="text-xl font-bold mb-6 text-gray-800 dark:text-white drop-shadow bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent dark:from-white dark:to-gray-300">Submit Collaboration Opportunity</h3>
<p className="text-gray-600 dark:text-gray-300 mb-6 drop-shadow">Have a project or collaboration opportunity? Submit the details below and our team will review it for inclusion in our matchmaking platform.</p>
<form onSubmit={handleSubmit} className="space-y-6">
<div>
<label htmlFor="name" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1 drop-shadow bg-gradient-to-r from-gray-700 to-gray-600 bg-clip-text text-transparent dark:from-gray-300 dark:to-gray-400">
Your Name
</label>
<input
type="text"
id="name"
name="name"
value={formData.name}
onChange={handleChange}
required
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-bio-green focus:border-transparent dark:bg-gray-600 dark:text-white drop-shadow bg-gradient-to-r from-white to-gray-50 dark:from-gray-600 dark:to-gray-700"
/>
</div>
<div>
<label htmlFor="email" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1 drop-shadow bg-gradient-to-r from-gray-700 to-gray-600 bg-clip-text text-transparent dark:from-gray-300 dark:to-gray-400">
Email Address
</label>
<input
type="email"
id="email"
name="email"
value={formData.email}
onChange={handleChange}
required
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-bio-green focus:border-transparent dark:bg-gray-600 dark:text-white drop-shadow bg-gradient-to-r from-white to-gray-50 dark:from-gray-600 dark:to-gray-700"
/>
</div>
<div>
<label htmlFor="organization" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1 drop-shadow bg-gradient-to-r from-gray-700 to-gray-600 bg-clip-text text-transparent dark:from-gray-300 dark:to-gray-400">
Organization
</label>
<input
type="text"
id="organization"
name="organization"
value={formData.organization}
onChange={handleChange}
required
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-bio-green focus:border-transparent dark:bg-gray-600 dark:text-white drop-shadow bg-gradient-to-r from-white to-gray-50 dark:from-gray-600 dark:to-gray-700"
/>
</div>
<div>
<label htmlFor="interest" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1 drop-shadow bg-gradient-to-r from-gray-700 to-gray-600 bg-clip-text text-transparent dark:from-gray-300 dark:to-gray-400">
Type of Collaboration
</label>
<select
id="interest"
name="interest"
value={formData.interest}
onChange={handleChange}
required
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-bio-green focus:border-transparent dark:bg-gray-600 dark:text-white drop-shadow bg-gradient-to-r from-white to-gray-50 dark:from-gray-600 dark:to-gray-700"
>
<option value="">Select an option</option>
<option value="funding">Funding/Investment</option>
<option value="technology">Technology Partnership</option>
<option value="implementation">Project Implementation</option>
<option value="research">Research Collaboration</option>
<option value="policy">Policy Development</option>
<option value="other">Other</option>
</select>
</div>
<div>
<label htmlFor="description" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1 drop-shadow bg-gradient-to-r from-gray-700 to-gray-600 bg-clip-text text-transparent dark:from-gray-300 dark:to-gray-400">
Opportunity Description
</label>
<textarea
id="description"
name="description"
value={formData.description}
onChange={handleChange}
required
rows={5}
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-bio-green focus:border-transparent dark:bg-gray-600 dark:text-white drop-shadow bg-gradient-to-r from-white to-gray-50 dark:from-gray-600 dark:to-gray-700"
placeholder="Describe your collaboration opportunity in detail..."
></textarea>
</div>
<div>
<button
type="submit"
className="w-full bg-gradient-to-r from-bio-green to-bio-blue text-white font-bold py-3 px-4 rounded-lg hover:opacity-90 transition shadow-lg drop-shadow"
>
Submit Opportunity
</button>
</div>
</form>
</div>
)}
</div>
</div>
<div className="bg-gradient-to-r from-bio-purple to-bio-blue rounded-2xl p-6 text-white shadow-lg">
<h3 className="text-xl font-bold mb-2 drop-shadow">Need Help Finding Partners?</h3>
<p className="mb-4 drop-shadow">Our matchmaking team can help connect you with the right partners for your project.</p>
<button className="bg-white text-bio-purple font-bold px-6 py-2 rounded-lg hover:bg-purple-100 transition shadow-md drop-shadow">
Contact Matchmaking Team
</button>
</div>
</div>
</div>
);
};
export default MatchmakingPage;