Book demo model and functionalities added
This commit is contained in:
220
app/(public)/_homeComponents/DemoModal.tsx
Normal file
220
app/(public)/_homeComponents/DemoModal.tsx
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { useState } from "react";
|
||||||
|
import {
|
||||||
|
Dialog,
|
||||||
|
DialogContent,
|
||||||
|
DialogHeader,
|
||||||
|
DialogTitle,
|
||||||
|
DialogTrigger,
|
||||||
|
} from "@/components/ui/dialog";
|
||||||
|
import { Input } from "@/components/ui/input";
|
||||||
|
import { Textarea } from "@/components/ui/textarea";
|
||||||
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { Label } from "@/components/ui/label";
|
||||||
|
import {
|
||||||
|
Select,
|
||||||
|
SelectContent,
|
||||||
|
SelectItem,
|
||||||
|
SelectTrigger,
|
||||||
|
SelectValue,
|
||||||
|
} from "@/components/ui/select";
|
||||||
|
import { toast } from "sonner";
|
||||||
|
|
||||||
|
const blockedDomains = [
|
||||||
|
"gmail.com",
|
||||||
|
"yahoo.com",
|
||||||
|
"outlook.com",
|
||||||
|
"hotmail.com",
|
||||||
|
"icloud.com",
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function DemoModal({ trigger }: { trigger: React.ReactNode }) {
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const [form, setForm] = useState({
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phoneNumber: "",
|
||||||
|
company: "",
|
||||||
|
designation: "",
|
||||||
|
solution: "",
|
||||||
|
description: "",
|
||||||
|
});
|
||||||
|
|
||||||
|
// 🔹 Business Email Validation
|
||||||
|
const isBusinessEmail = (email: string) => {
|
||||||
|
const domain = email.split("@")[1];
|
||||||
|
return domain && !blockedDomains.includes(domain.toLowerCase());
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
if (
|
||||||
|
!form.name ||
|
||||||
|
!form.email ||
|
||||||
|
!form.phoneNumber ||
|
||||||
|
!form.company ||
|
||||||
|
!form.designation ||
|
||||||
|
!form.solution
|
||||||
|
) {
|
||||||
|
toast.error("Please fill all required fields.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isBusinessEmail(form.email)) {
|
||||||
|
toast.error("Please use your business email (no Gmail/Yahoo etc.)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
// 🔹 Call API (you will create below)
|
||||||
|
const res = await fetch("/api/demo-lead", {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(form),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!res.ok) throw new Error();
|
||||||
|
|
||||||
|
toast.success("Demo request submitted successfully!");
|
||||||
|
|
||||||
|
setOpen(false);
|
||||||
|
setForm({
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phoneNumber: "",
|
||||||
|
company: "",
|
||||||
|
designation: "",
|
||||||
|
solution: "",
|
||||||
|
description: "",
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
toast.error("Something went wrong. Try again.");
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dialog open={open} onOpenChange={setOpen}>
|
||||||
|
<DialogTrigger asChild>{trigger}</DialogTrigger>
|
||||||
|
|
||||||
|
<DialogContent
|
||||||
|
className="
|
||||||
|
w-[95%] sm:w-full
|
||||||
|
max-w-lg
|
||||||
|
p-0
|
||||||
|
rounded-2xl
|
||||||
|
overflow-hidden
|
||||||
|
max-h-[90vh]
|
||||||
|
flex flex-col
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{/* Header (Fixed) */}
|
||||||
|
<div className="bg-gradient-to-r from-blue-600 to-indigo-600 p-5 sm:p-6 text-white shrink-0">
|
||||||
|
<DialogHeader>
|
||||||
|
<DialogTitle className="text-xl sm:text-2xl font-bold">
|
||||||
|
Book a Demo
|
||||||
|
</DialogTitle>
|
||||||
|
<p className="text-xs sm:text-sm opacity-90">
|
||||||
|
See how Winixco can transform your hiring process
|
||||||
|
</p>
|
||||||
|
</DialogHeader>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Scrollable Body */}
|
||||||
|
<div className="flex-1 overflow-y-auto px-4 sm:px-6 py-5 space-y-4">
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Name *</Label>
|
||||||
|
<Input
|
||||||
|
placeholder="Enter your name"
|
||||||
|
value={form.name}
|
||||||
|
onChange={(e) => setForm({ ...form, name: e.target.value })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Business Email *</Label>
|
||||||
|
<Input
|
||||||
|
placeholder="you@company.com"
|
||||||
|
value={form.email}
|
||||||
|
onChange={(e) => setForm({ ...form, email: e.target.value })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Phone Number *</Label>
|
||||||
|
<Input
|
||||||
|
type="tel"
|
||||||
|
placeholder="+91 9876543210"
|
||||||
|
value={form.phoneNumber}
|
||||||
|
onChange={(e) =>
|
||||||
|
setForm({ ...form, phoneNumber: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Company Name *</Label>
|
||||||
|
<Input
|
||||||
|
placeholder="Your company"
|
||||||
|
value={form.company}
|
||||||
|
onChange={(e) => setForm({ ...form, company: e.target.value })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Designation *</Label>
|
||||||
|
<Input
|
||||||
|
placeholder="Your role"
|
||||||
|
value={form.designation}
|
||||||
|
onChange={(e) =>
|
||||||
|
setForm({ ...form, designation: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Solution *</Label>
|
||||||
|
<Select
|
||||||
|
onValueChange={(value) => setForm({ ...form, solution: value })}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder="Select solution" />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value="ATS">ATS</SelectItem>
|
||||||
|
<SelectItem value="HRMS">HRMS</SelectItem>
|
||||||
|
<SelectItem value="CRM">CRM</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Description (Optional)</Label>
|
||||||
|
<Textarea
|
||||||
|
placeholder="Tell us your requirement..."
|
||||||
|
value={form.description}
|
||||||
|
onChange={(e) =>
|
||||||
|
setForm({ ...form, description: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Sticky Footer Button */}
|
||||||
|
<div className="p-4 sm:p-5 border-t bg-white">
|
||||||
|
<Button
|
||||||
|
onClick={handleSubmit}
|
||||||
|
disabled={loading}
|
||||||
|
className="w-full text-base sm:text-lg py-5 rounded-xl bg-blue-600 hover:bg-blue-700"
|
||||||
|
>
|
||||||
|
{loading ? "Submitting..." : "Submit Request"}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ const Features = () => {
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<h2 className="text-4xl md:text-5xl font-bold mb-6 text-[#0d0d0d]">
|
<h2 className="text-4xl md:text-5xl font-bold mb-6 text-[#0d0d0d]">
|
||||||
Powerful Features Built for Modern Recruiting
|
Powerful AI Driven Features to Turbocharge your Hiring Process
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<p className="text-xl text-[#7c7a7c] max-w-3xl mx-auto">
|
<p className="text-xl text-[#7c7a7c] max-w-3xl mx-auto">
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const footerLinks = [
|
|||||||
{ label: "Privacy Policy", url: "/privacy-policy" },
|
{ label: "Privacy Policy", url: "/privacy-policy" },
|
||||||
{ label: "Terms of Service", url: "/terms-and-conditions" },
|
{ label: "Terms of Service", url: "/terms-and-conditions" },
|
||||||
{ label: "Refund Policy", url: "/refund-policy" },
|
{ label: "Refund Policy", url: "/refund-policy" },
|
||||||
{ label: "GDPR & Cookies", url: "/gdpr-cookies" },
|
//{ label: "GDPR & Cookies", url: "/gdpr-cookies"},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { Menu, X } from "lucide-react";
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { home } from "@/services/Constants";
|
import { home } from "@/services/Constants";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
import DemoModal from "./DemoModal";
|
||||||
|
|
||||||
const Header = () => {
|
const Header = () => {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
@@ -19,9 +20,7 @@ const Header = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Remove Blogs and Careers
|
// Remove Blogs and Careers
|
||||||
const navigation = home.navigation.filter(
|
const navigation = home.navigation.filter((item) => item.name !== "Blog");
|
||||||
(item) => item.name !== "Blog" && item.name !== "Careers"
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.header
|
<motion.header
|
||||||
@@ -33,7 +32,6 @@ const Header = () => {
|
|||||||
>
|
>
|
||||||
<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="flex justify-between items-center py-4">
|
<div className="flex justify-between items-center py-4">
|
||||||
|
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
<motion.div whileHover={{ scale: 1.05 }}>
|
<motion.div whileHover={{ scale: 1.05 }}>
|
||||||
<Link href="/">
|
<Link href="/">
|
||||||
@@ -60,9 +58,15 @@ const Header = () => {
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div className="hidden md:flex items-center space-x-4">
|
<div className="hidden md:flex items-center space-x-4">
|
||||||
|
<DemoModal
|
||||||
|
trigger={
|
||||||
|
<Button className="text-white bg-[#2563eb]">Book Demo</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
className="text-white font-medium bg-[#2563eb]"
|
className="text-white font-medium bg-[#2563eb]"
|
||||||
onClick={()=>router.push("#pricing")}
|
onClick={() => router.push("#pricing")}
|
||||||
>
|
>
|
||||||
Start Free Trial
|
Start Free Trial
|
||||||
</Button>
|
</Button>
|
||||||
@@ -96,10 +100,17 @@ const Header = () => {
|
|||||||
{item.name}
|
{item.name}
|
||||||
</Link>
|
</Link>
|
||||||
))}
|
))}
|
||||||
|
<DemoModal
|
||||||
|
trigger={
|
||||||
|
<Button className="w-full text-white bg-[#2563eb]">
|
||||||
|
Book Demo
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
className="w-full text-white bg-[#2563eb]"
|
className="w-full text-white bg-[#2563eb]"
|
||||||
onClick={()=>router.push("#pricing")}
|
onClick={() => router.push("#pricing")}
|
||||||
|
|
||||||
>
|
>
|
||||||
Start Free Trial
|
Start Free Trial
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
import DemoModal from "./DemoModal";
|
||||||
|
|
||||||
export default function HeroSection() {
|
export default function HeroSection() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -34,12 +35,16 @@ export default function HeroSection() {
|
|||||||
Start Free Trial
|
Start Free Trial
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button
|
<DemoModal
|
||||||
variant="outline"
|
trigger={
|
||||||
className="w-full sm:w-auto border-[#2563eb] text-[#2563eb] px-8 py-6 text-base rounded-xl"
|
<Button
|
||||||
>
|
variant="outline"
|
||||||
Schedule Demo
|
className="w-full sm:w-auto border-[#2563eb] text-[#2563eb] px-8 py-6 text-base rounded-xl"
|
||||||
</Button>
|
>
|
||||||
|
Schedule Demo
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
|
|||||||
154
app/(public)/_homeComponents/PricingSection.tsx
Normal file
154
app/(public)/_homeComponents/PricingSection.tsx
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
|
import { Badge } from "@/components/ui/badge";
|
||||||
|
import { Check } from "lucide-react";
|
||||||
|
|
||||||
|
export default function PricingSection() {
|
||||||
|
const features = [
|
||||||
|
"Unlimited Jobs & Candidates",
|
||||||
|
"FREE HRMS & CRM",
|
||||||
|
"AI Resume Parsing",
|
||||||
|
"AI JD Generator",
|
||||||
|
"AI Candidate Scoring",
|
||||||
|
"AI Technical Assessments",
|
||||||
|
"Geo-Location Enabled HRMS",
|
||||||
|
"Live Attendance with Location",
|
||||||
|
"Recruiter Performance Analytics",
|
||||||
|
"Client & Vendor CRM",
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div id="pricing" className="w-full bg-gradient-to-b from-slate-50 to-white text-slate-900">
|
||||||
|
<div className="max-w-6xl mx-auto px-4 py-16 text-center">
|
||||||
|
|
||||||
|
{/* Heading */}
|
||||||
|
<h1 className="text-3xl md:text-5xl font-extrabold leading-tight">
|
||||||
|
Hire smarter. Track smarter. Manage everything from one platform.
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p className="mt-4 text-base md:text-lg text-slate-600">
|
||||||
|
One powerful ATS with{" "}
|
||||||
|
<span className="font-semibold text-black">
|
||||||
|
FREE HRMS & CRM
|
||||||
|
</span>{" "}
|
||||||
|
, AI automation and real-time geo-location tracking
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{/* Pricing Card */}
|
||||||
|
<Card className="mt-12 max-w-xl mx-auto rounded-3xl shadow-xl border-0">
|
||||||
|
<CardContent className="p-8 md:p-10">
|
||||||
|
|
||||||
|
<Badge className="bg-green-100 text-green-700 mb-4">
|
||||||
|
ALL-IN-ONE PLAN • HRMS & CRM FREE
|
||||||
|
</Badge>
|
||||||
|
|
||||||
|
<h2 className="text-2xl font-bold">
|
||||||
|
Winixco ATS – One Plan
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div className="mt-6">
|
||||||
|
<div className="text-5xl font-extrabold">₹1,999</div>
|
||||||
|
<div className="text-sm text-slate-500">
|
||||||
|
per user / month
|
||||||
|
</div>
|
||||||
|
<div className="text-green-600 font-semibold mt-2">
|
||||||
|
₹19,990 per user / year (2 months FREE)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Button className="w-full mt-6 text-lg py-6 rounded-xl">
|
||||||
|
Start 30-Day Free Trial
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
{/* Features */}
|
||||||
|
<div className="mt-8 grid grid-cols-1 sm:grid-cols-2 gap-3 text-left">
|
||||||
|
{features.map((item, index) => (
|
||||||
|
<div key={index} className="flex items-start gap-2 text-sm text-slate-700">
|
||||||
|
<Check className="text-green-600 w-4 h-4 mt-1" />
|
||||||
|
{item}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
{/* Sections */}
|
||||||
|
<div className="mt-16 space-y-12 text-left">
|
||||||
|
|
||||||
|
{/* Simple Pricing */}
|
||||||
|
<div>
|
||||||
|
<h2 className="text-2xl font-bold">Simple Per-Seat Pricing</h2>
|
||||||
|
<p className="text-slate-600 mt-2">
|
||||||
|
Each recruiter or HR team member requires one seat. All seats include full access to ATS, HRMS, CRM and AI features.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul className="mt-4 list-disc list-inside space-y-1 text-slate-700">
|
||||||
|
<li>1 Seat = 1 User</li>
|
||||||
|
<li>No separate charges</li>
|
||||||
|
<li>All AI features included</li>
|
||||||
|
<li>Scale anytime</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bulk Pricing */}
|
||||||
|
<div>
|
||||||
|
<h2 className="text-2xl font-bold">Bulk Team Pricing</h2>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-4 mt-4">
|
||||||
|
{[
|
||||||
|
{
|
||||||
|
title: "Startup Team (5-20 seats)",
|
||||||
|
price: "₹1,899 / seat / month",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Growth Team (21-50 seats)",
|
||||||
|
price: "₹1,799 / seat / month",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Enterprise (50+ seats)",
|
||||||
|
price: "Custom pricing",
|
||||||
|
},
|
||||||
|
].map((plan, i) => (
|
||||||
|
<Card key={i} className="rounded-2xl shadow-md">
|
||||||
|
<CardContent className="p-6">
|
||||||
|
<h3 className="font-semibold">{plan.title}</h3>
|
||||||
|
<p className="mt-2 text-blue-600 font-bold">
|
||||||
|
{plan.price}
|
||||||
|
</p>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* ROI Section */}
|
||||||
|
<div>
|
||||||
|
<h2 className="text-2xl font-bold">Recruitment ROI Example</h2>
|
||||||
|
<Card className="mt-4 rounded-2xl shadow-md">
|
||||||
|
<CardContent className="p-6 text-slate-700">
|
||||||
|
10 recruiters using Winixco can save ~400 hours/month through AI automation resulting in productivity worth ₹4L+ per month.
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Footer CTA */}
|
||||||
|
<div className="mt-16 text-center">
|
||||||
|
<p className="mb-4 text-slate-600">
|
||||||
|
Need bulk pricing or demo?
|
||||||
|
</p>
|
||||||
|
<Button className="px-8 py-6 text-lg rounded-xl">
|
||||||
|
Contact Sales
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Sticky CTA */}
|
||||||
|
<div className="fixed bottom-0 left-0 right-0 bg-blue-600 text-white text-center py-3 font-semibold">
|
||||||
|
Start 30-Day Free Trial – ₹67/day per recruiter
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -6,72 +6,74 @@ const leaders = [
|
|||||||
{
|
{
|
||||||
name: "Amit Sharma",
|
name: "Amit Sharma",
|
||||||
role: "Founder & CEO",
|
role: "Founder & CEO",
|
||||||
image: "https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
image:
|
||||||
|
"https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
||||||
linkedin: "#",
|
linkedin: "#",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Neha Verma",
|
name: "Neha Verma",
|
||||||
role: "Head of Product",
|
role: "Head of Product",
|
||||||
image: "https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
image:
|
||||||
|
"https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
||||||
linkedin: "#",
|
linkedin: "#",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Rahul Mehta",
|
name: "Rahul Mehta",
|
||||||
role: "CTO",
|
role: "CTO",
|
||||||
image: "https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
image:
|
||||||
|
"https://images.unsplash.com/photo-1595152772835-219674b2a8a6?crop=faces&fit=crop&w=400&q=80",
|
||||||
linkedin: "#",
|
linkedin: "#",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
export default function AboutUs() {
|
export default function AboutUs() {
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-gray-50 text-gray-900">
|
<div className="min-h-screen bg-gray-50 text-gray-900">
|
||||||
|
|
||||||
{/* HERO */}
|
{/* HERO */}
|
||||||
<section className="py-28 bg-gradient-to-b from-white to-blue-50 text-center">
|
<section className="py-28 bg-gradient-to-b from-white to-blue-50 text-center">
|
||||||
<h1
|
<h1 className="text-5xl font-bold mb-6">
|
||||||
|
|
||||||
className="text-5xl font-bold mb-6"
|
|
||||||
>
|
|
||||||
Empowering Businesses with Smart CRM Innovation
|
Empowering Businesses with Smart CRM Innovation
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p className="text-xl max-w-3xl mx-auto">
|
||||||
|
We help companies build stronger customer relationships through
|
||||||
className="text-xl max-w-3xl mx-auto"
|
intelligent automation and seamless workflows.
|
||||||
>
|
|
||||||
We help companies build stronger customer relationships through intelligent automation and seamless workflows.
|
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* OUR MISSION / VISION */}
|
{/* OUR MISSION / VISION */}
|
||||||
<section className="py-20 max-w-7xl mx-auto px-6 grid md:grid-cols-2 gap-12">
|
<section className="py-20 max-w-7xl mx-auto px-6 grid md:grid-cols-2 gap-12">
|
||||||
<div
|
<div className="bg-white p-10 rounded-3xl shadow-xl border">
|
||||||
|
|
||||||
className="bg-white p-10 rounded-3xl shadow-xl border"
|
|
||||||
>
|
|
||||||
<Target className="w-12 h-12 text-blue-600 mb-4" />
|
<Target className="w-12 h-12 text-blue-600 mb-4" />
|
||||||
<h3 className="text-3xl font-semibold mb-3">Our Mission</h3>
|
<h3 className="text-3xl font-semibold mb-3">Mission</h3>
|
||||||
<p className="text-gray-600 text-lg leading-relaxed">
|
<p className="text-gray-600 text-lg leading-relaxed">
|
||||||
To simplify customer management through powerful yet user-friendly CRM tools,
|
At Winixco, our mission is to develop innovative and accessible
|
||||||
enabling businesses of every size to scale faster and smarter.
|
AI-driven platforms that transform how businesses hire, manage
|
||||||
|
people, and grow customer relationships. <br />
|
||||||
|
We aim to deliver powerful yet easy-to-use solutions such as
|
||||||
|
AI-powered ATS, HRMS, CRM, and digital automation tools that help
|
||||||
|
organizations streamline operations, reduce costs, and achieve
|
||||||
|
sustainable growth.
|
||||||
|
<br />
|
||||||
|
Through continuous innovation, customer-centric design, and
|
||||||
|
cutting-edge technology, Winixco strives to be a trusted partner in
|
||||||
|
digital transformation for companies worldwide.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div className="bg-white p-10 rounded-3xl shadow-xl border">
|
||||||
|
|
||||||
className="bg-white p-10 rounded-3xl shadow-xl border"
|
|
||||||
>
|
|
||||||
<Lightbulb className="w-12 h-12 text-blue-600 mb-4" />
|
<Lightbulb className="w-12 h-12 text-blue-600 mb-4" />
|
||||||
<h3 className="text-3xl font-semibold mb-3">Our Vision</h3>
|
<h3 className="text-3xl font-semibold mb-3">Vision</h3>
|
||||||
<p className="text-gray-600 text-lg leading-relaxed">
|
<p className="text-gray-600 text-lg leading-relaxed">
|
||||||
To be a global leader in CRM innovation — transforming how teams connect,
|
To become a global leader in AI-powered business automation by
|
||||||
collaborate and grow with their customers.
|
empowering organizations with intelligent technology that simplifies
|
||||||
|
recruitment, workforce management, and customer engagement. <br />
|
||||||
|
Winixco envisions a future where businesses of all sizes can
|
||||||
|
leverage advanced AI solutions to make smarter decisions, increase
|
||||||
|
productivity, and build scalable, efficient operations.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
{/* COMPANY STORY TIMELINE }
|
{/* COMPANY STORY TIMELINE }
|
||||||
<section className="py-24 bg-white">
|
<section className="py-24 bg-white">
|
||||||
<div className="text-center mb-16">
|
<div className="text-center mb-16">
|
||||||
@@ -159,7 +161,6 @@ export default function AboutUs() {
|
|||||||
Explore Careers
|
Explore Careers
|
||||||
</Link>
|
</Link>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,96 @@
|
|||||||
"use client"
|
"use client";
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from "react";
|
||||||
import { motion } from 'framer-motion';
|
import { motion } from "framer-motion";
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from "@/components/ui/button";
|
||||||
import { Card, CardContent } from '@/components/ui/card';
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import { Input } from '@/components/ui/input';
|
import { Input } from "@/components/ui/input";
|
||||||
import { Textarea } from '@/components/ui/textarea';
|
import { Textarea } from "@/components/ui/textarea";
|
||||||
|
import { Send, CheckCircle } from "lucide-react";
|
||||||
|
import { toast } from "sonner";
|
||||||
|
import { Label } from "@/components/ui/label";
|
||||||
import {
|
import {
|
||||||
Send,
|
Select,
|
||||||
CheckCircle} from 'lucide-react';
|
SelectContent,
|
||||||
|
SelectItem,
|
||||||
|
SelectTrigger,
|
||||||
|
SelectValue,
|
||||||
|
} from "@/components/ui/select";
|
||||||
|
|
||||||
|
const blockedDomains = [
|
||||||
|
"gmail.com",
|
||||||
|
"yahoo.com",
|
||||||
|
"outlook.com",
|
||||||
|
"hotmail.com",
|
||||||
|
"icloud.com",
|
||||||
|
];
|
||||||
|
|
||||||
// Contact Form Component
|
// Contact Form Component
|
||||||
const ContactForm: React.FC = () => {
|
const ContactForm: React.FC = () => {
|
||||||
const [formData, setFormData] = useState({
|
const [form, setForm] = useState({
|
||||||
name: '',
|
name: "",
|
||||||
email: '',
|
email: "",
|
||||||
phone: '',
|
phoneNumber: "",
|
||||||
address: '',
|
company: "",
|
||||||
message: ''
|
designation: "",
|
||||||
|
solution: "",
|
||||||
|
description: "",
|
||||||
});
|
});
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
const [submitted, setSubmitted] = useState(false);
|
const [submitted, setSubmitted] = useState(false);
|
||||||
|
|
||||||
const handleSubmit = () => {
|
// 🔹 Business Email Validation
|
||||||
console.log('Form submitted:', formData);
|
const isBusinessEmail = (email: string) => {
|
||||||
setSubmitted(true);
|
const domain = email.split("@")[1];
|
||||||
setTimeout(() => setSubmitted(false), 3000);
|
return domain && !blockedDomains.includes(domain.toLowerCase());
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
|
const handleSubmit = async () => {
|
||||||
setFormData({
|
if (
|
||||||
...formData,
|
!form.name ||
|
||||||
[e.target.name]: e.target.value
|
!form.email ||
|
||||||
});
|
!form.phoneNumber ||
|
||||||
|
!form.company ||
|
||||||
|
!form.designation ||
|
||||||
|
!form.solution
|
||||||
|
) {
|
||||||
|
toast.error("Please fill all required fields.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isBusinessEmail(form.email)) {
|
||||||
|
toast.error("Please use your business email (no Gmail/Yahoo etc.)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
// 🔹 Call API (you will create below)
|
||||||
|
const res = await fetch("/api/demo-lead", {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(form),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!res.ok) throw new Error();
|
||||||
|
|
||||||
|
toast.success("Demo request submitted successfully!");
|
||||||
|
|
||||||
|
setSubmitted(true);
|
||||||
|
setForm({
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phoneNumber: "",
|
||||||
|
company: "",
|
||||||
|
designation: "",
|
||||||
|
solution: "",
|
||||||
|
description: "",
|
||||||
|
});
|
||||||
|
setTimeout(() => setSubmitted(false), 3000);
|
||||||
|
} catch (err) {
|
||||||
|
toast.error("Something went wrong. Try again.");
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -62,89 +120,108 @@ const ContactForm: React.FC = () => {
|
|||||||
<div className="w-20 h-20 mx-auto mb-6 bg-green-100 rounded-full flex items-center justify-center">
|
<div className="w-20 h-20 mx-auto mb-6 bg-green-100 rounded-full flex items-center justify-center">
|
||||||
<CheckCircle className="w-10 h-10 text-green-600" />
|
<CheckCircle className="w-10 h-10 text-green-600" />
|
||||||
</div>
|
</div>
|
||||||
<h3 className="text-2xl font-bold text-gray-900 mb-2">Thank you!</h3>
|
<h3 className="text-2xl font-bold text-gray-900 mb-2">
|
||||||
<p className="text-gray-600">Your message has been sent successfully.</p>
|
Thank you!
|
||||||
|
</h3>
|
||||||
|
<p className="text-gray-600">
|
||||||
|
Your message has been sent successfully.
|
||||||
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
) : (
|
) : (
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
<div className="grid md:grid-cols-2 gap-6">
|
<div className="grid md:grid-cols-2 gap-6">
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-2">
|
<Label className="mb-2 block">Name *</Label>
|
||||||
Full Name *
|
|
||||||
</label>
|
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
placeholder="Enter your name"
|
||||||
name="name"
|
value={form.name}
|
||||||
value={formData.name}
|
onChange={(e) => setForm({ ...form, name: e.target.value })}
|
||||||
onChange={handleChange}
|
|
||||||
placeholder="John Doe"
|
|
||||||
className="w-full"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-2">
|
<Label className="mb-2 block">Business Email *</Label>
|
||||||
Email Address *
|
|
||||||
</label>
|
|
||||||
<Input
|
<Input
|
||||||
type="email"
|
placeholder="you@company.com"
|
||||||
name="email"
|
value={form.email}
|
||||||
value={formData.email}
|
onChange={(e) =>
|
||||||
onChange={handleChange}
|
setForm({ ...form, email: e.target.value })
|
||||||
placeholder="john@example.com"
|
}
|
||||||
className="w-full"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid md:grid-cols-2 gap-6">
|
<div className="grid md:grid-cols-2 gap-6">
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-2">
|
<Label className="mb-2 block">Phone Number *</Label>
|
||||||
Phone Number *
|
|
||||||
</label>
|
|
||||||
<Input
|
<Input
|
||||||
type="tel"
|
type="tel"
|
||||||
name="phone"
|
placeholder="+91 9876543210"
|
||||||
value={formData.phone}
|
value={form.phoneNumber}
|
||||||
onChange={handleChange}
|
onChange={(e) =>
|
||||||
placeholder="+1 (555) 000-0000"
|
setForm({ ...form, phoneNumber: e.target.value })
|
||||||
className="w-full"
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-2">
|
<Label className="mb-2 block">Company Name *</Label>
|
||||||
Address
|
|
||||||
</label>
|
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
placeholder="Your company"
|
||||||
name="address"
|
value={form.company}
|
||||||
value={formData.address}
|
onChange={(e) =>
|
||||||
onChange={handleChange}
|
setForm({ ...form, company: e.target.value })
|
||||||
placeholder="City, Country"
|
}
|
||||||
className="w-full"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-2">
|
<Label className="mb-2 block">Designation *</Label>
|
||||||
Message *
|
<Input
|
||||||
</label>
|
placeholder="Your role"
|
||||||
|
value={form.designation}
|
||||||
|
onChange={(e) =>
|
||||||
|
setForm({ ...form, designation: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Solution *</Label>
|
||||||
|
<Select
|
||||||
|
onValueChange={(value) =>
|
||||||
|
setForm({ ...form, solution: value })
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue placeholder="Select solution" />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value="ATS">ATS</SelectItem>
|
||||||
|
<SelectItem value="HRMS">HRMS</SelectItem>
|
||||||
|
<SelectItem value="CRM">CRM</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Label className="mb-2 block">Description (Optional)</Label>
|
||||||
<Textarea
|
<Textarea
|
||||||
name="message"
|
placeholder="Tell us your requirement..."
|
||||||
value={formData.message}
|
value={form.description}
|
||||||
onChange={handleChange}
|
onChange={(e) =>
|
||||||
placeholder="Tell us how we can help you..."
|
setForm({ ...form, description: e.target.value })
|
||||||
rows={6}
|
}
|
||||||
className="w-full"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
onClick={handleSubmit}
|
onClick={handleSubmit}
|
||||||
size="lg"
|
disabled={loading}
|
||||||
className="w-full bg-[#2563eb] hover:from-purple-700 hover:to-pink-700 text-white"
|
className="w-full bg-[#2563eb] hover:from-purple-700 hover:to-pink-700 text-white"
|
||||||
>
|
>
|
||||||
Send Message
|
{loading ? "Submitting..." : "Submit Request"}{" "}
|
||||||
<Send className="ml-2 w-5 h-5" />
|
<Send className="ml-2 w-5 h-5" />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@@ -155,4 +232,4 @@ const ContactForm: React.FC = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ContactForm
|
export default ContactForm;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import HowItWorks from "./_homeComponents/HowItWorks";
|
|||||||
import HeroSection from "./_homeComponents/HeroSection";
|
import HeroSection from "./_homeComponents/HeroSection";
|
||||||
import StatsSection from "./_homeComponents/StatsSection";
|
import StatsSection from "./_homeComponents/StatsSection";
|
||||||
import TestimonialsSection from "./_homeComponents/TestiMonialSection";
|
import TestimonialsSection from "./_homeComponents/TestiMonialSection";
|
||||||
|
import PricingSection from "./_homeComponents/PricingSection";
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
return (
|
return (
|
||||||
@@ -27,8 +28,7 @@ export default function Page() {
|
|||||||
<ModulesSection />
|
<ModulesSection />
|
||||||
<TestimonialsSection />
|
<TestimonialsSection />
|
||||||
<Benefits />
|
<Benefits />
|
||||||
|
<PricingSection />
|
||||||
<Pricing />
|
|
||||||
<HowItWorks />
|
<HowItWorks />
|
||||||
<FAQ />
|
<FAQ />
|
||||||
<CTA />
|
<CTA />
|
||||||
|
|||||||
32
app/api/demo-lead/route.ts
Normal file
32
app/api/demo-lead/route.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import nodemailer from "nodemailer";
|
||||||
|
|
||||||
|
export async function POST(req: Request) {
|
||||||
|
const body = await req.json();
|
||||||
|
|
||||||
|
const transporter = nodemailer.createTransport({
|
||||||
|
service: "gmail",
|
||||||
|
auth: {
|
||||||
|
user: process.env.EMAIL_USER,
|
||||||
|
pass: process.env.EMAIL_PASS,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await transporter.sendMail({
|
||||||
|
from: process.env.EMAIL_USER,
|
||||||
|
to: "lead@winixco.com",
|
||||||
|
subject: "New Demo Request",
|
||||||
|
html: `
|
||||||
|
<h2>New Demo Lead</h2>
|
||||||
|
<p><strong>Name:</strong> ${body.name}</p>
|
||||||
|
<p><strong>Email:</strong> ${body.email}</p>
|
||||||
|
<p><strong><Phone Number:</strong>${body.phoneNumber}</p>
|
||||||
|
<p><strong>Company:</strong> ${body.company}</p>
|
||||||
|
<p><strong>Designation:</strong> ${body.designation}</p>
|
||||||
|
<p><strong>Solution:</strong> ${body.solution}</p>
|
||||||
|
<p><strong>Description:</strong> ${body.description}</p>
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
|
||||||
|
return NextResponse.json({ success: true });
|
||||||
|
}
|
||||||
21
package-lock.json
generated
21
package-lock.json
generated
@@ -33,6 +33,7 @@
|
|||||||
"jodit-react": "^5.2.26",
|
"jodit-react": "^5.2.26",
|
||||||
"lucide-react": "^0.544.0",
|
"lucide-react": "^0.544.0",
|
||||||
"next": "^16.0.10",
|
"next": "^16.0.10",
|
||||||
|
"nodemailer": "^8.0.3",
|
||||||
"react": "^19.2.3",
|
"react": "^19.2.3",
|
||||||
"react-day-picker": "^9.11.0",
|
"react-day-picker": "^9.11.0",
|
||||||
"react-dom": "^19.2.3",
|
"react-dom": "^19.2.3",
|
||||||
@@ -45,6 +46,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/postcss": "^4",
|
"@tailwindcss/postcss": "^4",
|
||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
|
"@types/nodemailer": "^7.0.11",
|
||||||
"@types/react": "^19",
|
"@types/react": "^19",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "^19",
|
||||||
"baseline-browser-mapping": "^2.9.19",
|
"baseline-browser-mapping": "^2.9.19",
|
||||||
@@ -2709,6 +2711,16 @@
|
|||||||
"undici-types": "~6.21.0"
|
"undici-types": "~6.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/nodemailer": {
|
||||||
|
"version": "7.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.11.tgz",
|
||||||
|
"integrity": "sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/phoenix": {
|
"node_modules/@types/phoenix": {
|
||||||
"version": "1.6.6",
|
"version": "1.6.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz",
|
||||||
@@ -3639,6 +3651,15 @@
|
|||||||
"node": "^10 || ^12 || >=14"
|
"node": "^10 || ^12 || >=14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/nodemailer": {
|
||||||
|
"version": "8.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.3.tgz",
|
||||||
|
"integrity": "sha512-JQNBqvK+bj3NMhUFR3wmCl3SYcOeMotDiwDBvIoCuQdF0PvlIY0BH+FJ2CG7u4cXKPChplE78oowlH/Otsc4ZQ==",
|
||||||
|
"license": "MIT-0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/orderedmap": {
|
"node_modules/orderedmap": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"jodit-react": "^5.2.26",
|
"jodit-react": "^5.2.26",
|
||||||
"lucide-react": "^0.544.0",
|
"lucide-react": "^0.544.0",
|
||||||
"next": "^16.0.10",
|
"next": "^16.0.10",
|
||||||
|
"nodemailer": "^8.0.3",
|
||||||
"react": "^19.2.3",
|
"react": "^19.2.3",
|
||||||
"react-day-picker": "^9.11.0",
|
"react-day-picker": "^9.11.0",
|
||||||
"react-dom": "^19.2.3",
|
"react-dom": "^19.2.3",
|
||||||
@@ -45,6 +46,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/postcss": "^4",
|
"@tailwindcss/postcss": "^4",
|
||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
|
"@types/nodemailer": "^7.0.11",
|
||||||
"@types/react": "^19",
|
"@types/react": "^19",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "^19",
|
||||||
"baseline-browser-mapping": "^2.9.19",
|
"baseline-browser-mapping": "^2.9.19",
|
||||||
|
|||||||
@@ -148,12 +148,13 @@ export interface HomeContent {
|
|||||||
|
|
||||||
export const home: HomeContent = {
|
export const home: HomeContent = {
|
||||||
navigation: [
|
navigation: [
|
||||||
|
{ name: "About", href: "/about" },
|
||||||
{name: "Services", href: "/services"},
|
{name: "Services", href: "/services"},
|
||||||
{ name: "Features", href: "/features" },
|
{ name: "Features", href: "/features" },
|
||||||
|
{ name: "Contact", href: "/contact" },
|
||||||
{ name: "Blog", href: "/blogs" },
|
{ name: "Blog", href: "/blogs" },
|
||||||
{ name: "Careers", href: "/careers" },
|
{ name: "Careers", href: "/careers" },
|
||||||
{ name: "About", href: "/about" },
|
|
||||||
{ name: "Contact", href: "/contact" },
|
|
||||||
],
|
],
|
||||||
|
|
||||||
companies: [
|
companies: [
|
||||||
@@ -195,7 +196,7 @@ export const home: HomeContent = {
|
|||||||
{
|
{
|
||||||
//icon: <Clock className="w-6 h-6" />,
|
//icon: <Clock className="w-6 h-6" />,
|
||||||
icon: "🤝",
|
icon: "🤝",
|
||||||
title: "Recruitment CRM",
|
title: "Recruitment ATS",
|
||||||
description:
|
description:
|
||||||
"Build and nurture your talent community. Stay connected with passive candidates for future opportunities.",
|
"Build and nurture your talent community. Stay connected with passive candidates for future opportunities.",
|
||||||
color: "from-indigo-500 to-purple-500",
|
color: "from-indigo-500 to-purple-500",
|
||||||
@@ -321,7 +322,7 @@ export const home: HomeContent = {
|
|||||||
|
|
||||||
module : {
|
module : {
|
||||||
badge: "OUR SOLUTIONS",
|
badge: "OUR SOLUTIONS",
|
||||||
title: "Modules We Offers",
|
title: "Services We Offer",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Powerful tools designed to streamline your recruitment and HR operations",
|
"Powerful tools designed to streamline your recruitment and HR operations",
|
||||||
modules: [
|
modules: [
|
||||||
|
|||||||
@@ -1,229 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
||||||
<title>Winixco — Policy Suite (Privacy | Terms | Refunds | GDPR)</title>
|
|
||||||
<style>
|
|
||||||
:root{--bg:#f7f8fb;--card:#ffffff;--muted:#6b7280;--accent:#0f172a}
|
|
||||||
body{font-family:Inter,ui-sans-serif,system-ui,Helvetica,Arial;color:var(--accent);background:var(--bg);margin:0;padding:24px}
|
|
||||||
.container{max-width:980px;margin:0 auto}
|
|
||||||
header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}
|
|
||||||
header h1{font-size:20px;margin:0}
|
|
||||||
nav a{margin-left:12px;color:var(--muted);text-decoration:none}
|
|
||||||
.card{background:var(--card);border-radius:12px;padding:22px;box-shadow:0 6px 18px rgba(15,23,42,0.06);margin-bottom:18px}
|
|
||||||
h2{margin-top:0}
|
|
||||||
.muted{color:var(--muted)}
|
|
||||||
ul{margin-top:0}
|
|
||||||
pre.code{background:#0b1220;color:#e6eef8;padding:12px;border-radius:8px;overflow:auto}
|
|
||||||
footer{font-size:13px;color:var(--muted);text-align:center;padding:14px}
|
|
||||||
.note{background:#fffbeb;border-left:4px solid #f59e0b;padding:12px;border-radius:6px}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<h1>Winixco — Policy Suite</h1>
|
|
||||||
<nav>
|
|
||||||
<a href="#privacy">Privacy Policy</a>
|
|
||||||
<a href="#terms">Terms of Service</a>
|
|
||||||
<a href="#refund">Refund & Cancellation</a>
|
|
||||||
<a href="#gdpr">GDPR & Data Processing</a>
|
|
||||||
<a href="#cookies">Cookies & Tracking</a>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<section id="intro" class="card">
|
|
||||||
<h2>Introduction</h2>
|
|
||||||
<p class="muted">Effective Date: <strong>[YYYY-MM-DD]</strong></p>
|
|
||||||
<p>These documents form the full policy suite for <strong>Winixco</strong> — an AI-powered ATS (Applicant Tracking System) and SaaS platform (collectively, the “Service”). This single HTML contains the Privacy Policy, Terms of Service, Refund & Cancellation Policy, GDPR compliance summary, and Cookies & Tracking notice. Replace placeholders (company address, contact email) before publishing.</p>
|
|
||||||
<p><strong>Contact:</strong> <a href="mailto:support@winixco.com">support@winixco.com</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- PRIVACY POLICY -->
|
|
||||||
<section id="privacy" class="card">
|
|
||||||
<h2>Privacy Policy</h2>
|
|
||||||
<p><strong>Scope.</strong> This Privacy Policy explains how Winixco collects, uses, discloses, and protects personal data of users of our AI-powered ATS and SaaS products worldwide.</p>
|
|
||||||
|
|
||||||
<h3>1. Data We Collect</h3>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Account & Contact Data:</strong> name, company, business email, phone number, billing address, job title.</li>
|
|
||||||
<li><strong>Credentials:</strong> username, password (stored securely — hashed).</li>
|
|
||||||
<li><strong>Payment & Billing Data:</strong> payment instrument identifiers (only as needed for billing) — note: we use PCI-compliant third-party payment processors and do not store full card numbers on our servers unless required by a certified provider.</li>
|
|
||||||
<li><strong>Usage & Analytics:</strong> platform usage logs, feature usage, API keys usage metadata, session times, IP address, device and browser metadata, and audit logs (for admin/customer security and compliance).</li>
|
|
||||||
<li><strong>Recruitment Data (if uploaded):</strong> CVs/resumes, candidate contact details, interview notes, assessment results and other recruitment-related data that customers upload to the platform. Customers remain the data controllers for applicant data; Winixco acts as a data processor under applicable laws.</li>
|
|
||||||
<li><strong>Support & Communications:</strong> support emails, chat transcripts, feedback, and survey responses.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>2. How We Use Your Data</h3>
|
|
||||||
<p>We process personal data to:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Provide, operate and maintain the Service;</li>
|
|
||||||
<li>Process subscriptions, invoices, refunds, and payments;</li>
|
|
||||||
<li>Allow customers to onboard, administer accounts, and manage hiring workflows;</li>
|
|
||||||
<li>Improve, personalize and develop features (including AI models and candidate-matching algorithms) using aggregated/anonymized data where possible;</li>
|
|
||||||
<li>Detect and prevent fraud, abuse or security incidents;</li>
|
|
||||||
<li>Comply with legal obligations and respond to lawful requests.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>3. Legal Bases for Processing (where applicable)</h3>
|
|
||||||
<p>For users in jurisdictions that require a legal basis (e.g., EU):</p>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Contractual necessity:</strong> processing required to deliver the Service and fulfil contracts.</li>
|
|
||||||
<li><strong>Legitimate interests:</strong> platform security, fraud prevention, and improving services (balanced against individual rights).</li>
|
|
||||||
<li><strong>Consent:</strong> where processing (e.g., marketing emails) relies on explicit consent.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>4. Sharing & Disclosures</h3>
|
|
||||||
<ul>
|
|
||||||
<li>We share data with <em>service providers</em> (payment processors, cloud hosting, analytics, email delivery, identity providers) under written contracts requiring confidentiality and limiting use to service delivery.</li>
|
|
||||||
<li>Customer-uploaded applicant data: Winixco processes this data at the direction of our customers; we will not access or use it except to provide the Service, to comply with law, or to protect the rights and safety of users.</li>
|
|
||||||
<li>Legal obligations: we may disclose data to comply with laws, lawsuits, government requests, or to protect rights, safety, or property.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>5. Data Retention</h3>
|
|
||||||
<p>We retain personal data only as long as necessary to provide the Service or to comply with legal obligations. Customers may export or request deletion of their uploaded recruitment data in accordance with their account and service agreement.</p>
|
|
||||||
|
|
||||||
<h3>6. Security</h3>
|
|
||||||
<p>We implement administrative, technical and physical safeguards (encryption in transit and at rest, access controls, monitoring) to protect data. However, no system is 100% secure — if a security incident affecting personal data occurs, we will notify affected parties and regulators as required by law.</p>
|
|
||||||
|
|
||||||
<h3>7. International Transfers</h3>
|
|
||||||
<p>Winixco operates globally. Personal data may be transferred to countries with different data protection laws. We protect transfers with appropriate safeguards (standard contractual clauses, intra-group agreements, or other lawful mechanisms).</p>
|
|
||||||
|
|
||||||
<h3>8. Your Rights & Controls</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Access, rectify, erase, restrict or object to processing, and data portability — where applicable under local law.</li>
|
|
||||||
<li>Withdraw consent to marketing communications at any time.</li>
|
|
||||||
<li>To exercise rights, contact: <a href="mailto:support@winixco.com">support@winixco.com</a>.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>9. Children</h3>
|
|
||||||
<p>Our Service is not directed to children under 16. We do not knowingly collect personal data from children; please contact us to request removal if you believe a child has provided information.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- TERMS -->
|
|
||||||
<section id="terms" class="card">
|
|
||||||
<h2>Terms of Service (SaaS)</h2>
|
|
||||||
<p><strong>Scope.</strong> These Terms govern your use of Winixco’s SaaS platform, including web application, APIs, and related services.</p>
|
|
||||||
|
|
||||||
<h3>1. Account Registration</h3>
|
|
||||||
<p>Customers must provide accurate information and keep account credentials secure. You are liable for all activity under your account.</p>
|
|
||||||
|
|
||||||
<h3>2. Subscriptions & Billing</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Subscriptions are offered on monthly or annual plans. Billing cycles begin on activation date.</li>
|
|
||||||
<li>By subscribing you authorize Winixco (and our payment processors) to charge the payment method you provide for recurring fees until subscription cancellation.</li>
|
|
||||||
<li>We may offer trial periods — trial usage and limits will be disclosed. At the end of a trial, charges begin as per chosen plan unless cancelled before the trial ends.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>3. Non-Refundable Items</h3>
|
|
||||||
<p>The following items are explicitly non-refundable once charged or consumed:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Monthly subscription fees</li>
|
|
||||||
<li>Annual subscription fees once activated</li>
|
|
||||||
<li>AI credits consumed (usage-based credits for AI-powered features)</li>
|
|
||||||
<li>Setup charges or onboarding fees (if applicable)</li>
|
|
||||||
<li>Custom integrations</li>
|
|
||||||
<li><strong>Cloud Storage charges</strong> (storage fees for customer data and backups)</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>4. Usage Limits & Fair Use</h3>
|
|
||||||
<p>Plans may include limits (users, seats, API calls, AI credits, storage). Excess usage will be billed or throttled per plan terms. Abusive or fraudulent use may result in suspension.</p>
|
|
||||||
|
|
||||||
<h3>5. Customer Data & Ownership</h3>
|
|
||||||
<p>Customers retain ownership of all uploaded and generated recruitment data. Winixco processes such data only to provide services and as otherwise directed by the customer. Customers are responsible for obtaining necessary consents from job applicants and other data subjects under applicable law.</p>
|
|
||||||
|
|
||||||
<h3>6. Service Levels & Support</h3>
|
|
||||||
<p>We aim to provide high availability but cannot guarantee uninterrupted service. Service Level Agreements (SLAs) — if any — will be specified in separate agreements. Support channels and expected response times are listed in your subscription plan.</p>
|
|
||||||
|
|
||||||
<h3>7. Intellectual Property</h3>
|
|
||||||
<p>Winixco owns the Service, trademarks and software. Customers are granted a limited, non-exclusive, non-transferable license to use the Service during their subscription term. Customer-provided content remains the customer’s property.</p>
|
|
||||||
|
|
||||||
<h3>8. Confidentiality</h3>
|
|
||||||
<p>Each party agrees to protect confidential information of the other and not disclose it except as necessary to perform the Service or required by law.</p>
|
|
||||||
|
|
||||||
<h3>9. Limitations of Liability</h3>
|
|
||||||
<p>To the fullest extent permitted by law, Winixco’s aggregate liability for claims arising from the Service will not exceed the total subscription fees paid by the customer in the 12 months prior to the claim. We are not liable for indirect, consequential, or punitive damages.</p>
|
|
||||||
|
|
||||||
<h3>10. Termination</h3>
|
|
||||||
<p>Either party may terminate subscriptions per the agreed cancellation terms. On termination, customer access will be disabled; customers may export their data for a limited period. We may delete retained data after the export window and per our retention policy.</p>
|
|
||||||
|
|
||||||
<h3>11. Governing Law & Jurisdiction</h3>
|
|
||||||
<p>These Terms are governed by the laws of <strong>India</strong>. For global customers, the parties agree to resolve disputes either through arbitration in India or another mutually agreed forum. Where local law mandates otherwise, applicable local consumer protection laws will apply.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- REFUND & CANCELLATION -->
|
|
||||||
<section id="refund" class="card">
|
|
||||||
<h2>Refund & Cancellation Policy (SaaS)</h2>
|
|
||||||
|
|
||||||
<h3>1. Cancellation</h3>
|
|
||||||
<p>Customers may cancel subscriptions at any time via the dashboard or by contacting support. Cancellation takes effect at the end of the current billing period (unless otherwise stated in the plan). No partial-period refunds will be given for time remaining in the billing cycle except as described below.</p>
|
|
||||||
|
|
||||||
<h3>2. Refund Eligibility</h3>
|
|
||||||
<p>Refunds are discretionary and subject to the following:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Refunds for technical failure: if a material service outage occurs and Winixco fails to restore service within a reasonable timeframe, partial refunds or credits may be issued pro rata at our discretion or as specified in your SLA.</li>
|
|
||||||
<li>Duplicate or erroneous charges: if a charge was made in error, we will refund the duplicate or incorrect charge after verification.</li>
|
|
||||||
<li>Trials: if charged erroneously at the end of a trial, we will refund the trial-to-paid charge upon timely request.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>3. Non-Refundable Items</h3>
|
|
||||||
<p>The following are non-refundable once billed or consumed (repeat of Terms for clarity):</p>
|
|
||||||
<ul>
|
|
||||||
<li>Monthly subscription fees</li>
|
|
||||||
<li>Annual subscription fees once activated</li>
|
|
||||||
<li>AI credits consumed</li>
|
|
||||||
<li>Setup charges or onboarding fees</li>
|
|
||||||
<li>Custom integrations</li>
|
|
||||||
<li><strong>Cloud Storage charges</strong></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>4. Refund Process</h3>
|
|
||||||
<ol>
|
|
||||||
<li>Contact <a href="mailto:support@winixco.com">support@winixco.com</a> with order/subscription details.</li>
|
|
||||||
<li>We will acknowledge within 3 business days and may request documentation.</li>
|
|
||||||
<li>If approved, refunds will be processed to the original payment method within 7–14 business days (processing time may vary by provider).</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<h3>5. Chargebacks</h3>
|
|
||||||
<p>Initiating a chargeback with your bank for disputes may lead to account suspension while we investigate. If a chargeback is found to be unjustified, we reserve the right to recover owed fees and reinstate charges.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- GDPR -->
|
|
||||||
<section id="gdpr" class="card">
|
|
||||||
<h2>GDPR & Data Processing</h2>
|
|
||||||
<p><strong>Controller vs Processor:</strong> For recruitment data uploaded by customers (applicant CVs, interview notes, candidate profiles), Winixco acts as a <strong>Data Processor</strong> and the subscribing customer is the <strong>Data Controller</strong>. For user account data collected by Winixco directly (e.g., admin account), Winixco is the Data Controller.</p>
|
|
||||||
|
|
||||||
<h3>Data Processing Addendum (DPA)</h3>
|
|
||||||
<p>We provide a DPA upon request or include it in our subscription agreement. The DPA includes:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Permitted processing activities and purposes (hosting, storage, backups, support).</li>
|
|
||||||
<li>Security measures (encryption, access controls, logging).</li>
|
|
||||||
<li>Sub-processor list and notification obligations for changes.</li>
|
|
||||||
<li>Data subject rights assistance and deletion/return of data at contract end.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>GDPR Rights & Assistance</h3>
|
|
||||||
<p>We assist customers in fulfilling data subject requests (access, rectification, erasure, portability) for data processed on their behalf. Customers should contact <a href="mailto:support@winixco.com">support@winixco.com</a> with specifics and proof of identity when required.</p>
|
|
||||||
|
|
||||||
<h3>Standard Contractual Clauses & International Transfers</h3>
|
|
||||||
<p>Where we transfer personal data from the EU to non‑adequate jurisdictions, we rely on appropriate safeguards such as Standard Contractual Clauses (SCCs) or other lawful mechanisms. Customers may request copies of relevant safeguards.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- COOKIES -->
|
|
||||||
<section id="cookies" class="card">
|
|
||||||
<h2>Cookies & Tracking</h2>
|
|
||||||
<p>We use cookies and similar technologies to operate the Service, authenticate users, remember preferences, perform analytics, and for security. You can manage cookie settings via the platform UI or browser preferences. Our cookie categories:</p>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Essential:</strong> required for authentication and core platform functionality.</li>
|
|
||||||
<li><strong>Performance & Analytics:</strong> usage metrics to help us improve the product.</li>
|
|
||||||
<li><strong>Marketing:</strong> if enabled and with consent, used for product updates and outreach.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p class="muted">This policy suite is a template and does not constitute legal advice. For regulatory or country‑specific compliance (e.g., GDPR, CCPA, India’s DPDP), please consult qualified counsel. Contact: <a href="mailto:support@winixco.com">support@winixco.com</a></p>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user