345 lines
12 KiB
TypeScript
345 lines
12 KiB
TypeScript
import { Metadata } from "next";
|
|
import Image from "next/image";
|
|
import Link from "next/link";
|
|
import FooterForm from "../_components/FooterForm";
|
|
export const metadata: Metadata = {
|
|
title: "Opp lens - Marketing",
|
|
description:
|
|
"Automated tender management platform for SMEs. Find tailored tenders, automate document handling, and get real-time alerts. Win more opportunities with less effort.",
|
|
keywords:
|
|
"tender management, AI tender search, SME tenders, public procurement, automated bidding, tender alerts",
|
|
authors: [{ name: "PBL Partners AB" }],
|
|
openGraph: {
|
|
title: "Opp lens - AI-Powered Tender Management",
|
|
description: "Win more tenders automatically with our AI-powered platform",
|
|
type: "website",
|
|
locale: "en_US",
|
|
siteName: "Opp lens",
|
|
},
|
|
icons: {
|
|
icon: "/fav-icon.svg",
|
|
},
|
|
};
|
|
|
|
function ContactInfo({
|
|
icon,
|
|
contact,
|
|
href,
|
|
ariaLabel,
|
|
contactIconSrc,
|
|
}: {
|
|
icon: string;
|
|
contact: string;
|
|
href?: string;
|
|
ariaLabel: string;
|
|
contactIconSrc?: string;
|
|
}) {
|
|
return (
|
|
<li className="flex gap-3 my-3 text-white">
|
|
<Image
|
|
src={icon}
|
|
width={24}
|
|
height={24}
|
|
alt=""
|
|
aria-hidden="true"
|
|
/>
|
|
{href ? (
|
|
<a
|
|
href={href}
|
|
className="cursor-pointer min-w-fit"
|
|
aria-label={ariaLabel}>
|
|
{contact}
|
|
</a>
|
|
) : (
|
|
<p className="flex gap-3">
|
|
{!!contactIconSrc && (
|
|
<Image
|
|
src={contactIconSrc}
|
|
width={20}
|
|
height={20}
|
|
alt="flag"
|
|
/>
|
|
)}
|
|
{contact}
|
|
</p>
|
|
)}
|
|
</li>
|
|
);
|
|
}
|
|
export default function Home() {
|
|
const contactInfo = [
|
|
{
|
|
icon: "/Message.svg",
|
|
contact: "info@opplens.com",
|
|
href: "mailto:info@opplens.com",
|
|
ariaLabel: "Email us at info@opplens.com",
|
|
},
|
|
{
|
|
icon: "/Phone.svg",
|
|
contact: "(+46) - 761581526",
|
|
href: "tel:+46761581526",
|
|
ariaLabel: "Call us at +46 761581526",
|
|
},
|
|
{
|
|
icon: "/Location.svg",
|
|
contact: "Stockholm, Sweden",
|
|
ariaLabel: "Our location in Stockholm, Sweden",
|
|
contactIconSrc: "/sweden.svg",
|
|
},
|
|
];
|
|
|
|
const centerFrames = [
|
|
{
|
|
src: "/magnifier.svg",
|
|
title: "1. Discover with AI",
|
|
alt: "Magnifier",
|
|
description:
|
|
"Our intelligent platform scours thousands of sources to find the perfect, most relevant tender opportunities for your specific business and expertise",
|
|
},
|
|
{
|
|
src: "/clipboard.svg",
|
|
title: "2. Prepare with Experts",
|
|
alt: "Clipboard",
|
|
description:
|
|
"Gain access to expert support and powerful tools to craft compelling, competitive, and high-quality bids that stand out from the competition.",
|
|
},
|
|
{
|
|
src: "/thumbs-up.svg",
|
|
title: "3. Win with a Partner",
|
|
alt: "thumbs-up",
|
|
description:
|
|
"We operate on a partnership model. We only succeed when you win. This aligns our goals and makes us a true partner in your growth.",
|
|
},
|
|
];
|
|
return (
|
|
<>
|
|
<header className="flex justify-center pt-8 lg:justify-between items-center pb-4 container px-4 py-4 m-auto">
|
|
<Link
|
|
href="/"
|
|
aria-label="Opp lens home">
|
|
<Image
|
|
src="/main-logo.svg"
|
|
alt="Opp lens logo"
|
|
width={180}
|
|
height={30}
|
|
priority
|
|
/>
|
|
</Link>
|
|
</header>
|
|
<main className="container px-4 py-4 m-auto flex-grow">
|
|
<section className="flex flex-col justify-center lg:justify-between lg:flex-row items-center">
|
|
<section className="text-left lg:w-1/2 flex flex-col gap-6 bg-gradient-to-b rounded-[56px] relative p-6 lg:p-14 z-20 lg:ml-28">
|
|
<hgroup>
|
|
<h1 className="capitalize font-extrabold text-5xl mb-6">
|
|
democratizing the world of tenders
|
|
</h1>
|
|
<p className="text-[16px]">
|
|
Opplens is your dedicated AI-powered partner, leveling the
|
|
playing field so you can win the public and private contracts
|
|
you deserve.
|
|
<br />
|
|
Compete on your true strengths.
|
|
</p>
|
|
</hgroup>
|
|
<div className="flex justify-start text-white">
|
|
<button
|
|
type="button"
|
|
className="w-2/3 lg:w-fit capitalize bg-(--primary) rounded-4xl py-4 px-6">
|
|
Get early access
|
|
</button>
|
|
</div>
|
|
</section>
|
|
<div className="m-auto w-xs lg:m-0 lg:w-auto -z-20 relative flex justify-center h-[650px] lg:h-[750px] lg:mr-28">
|
|
<Image
|
|
src={"/dynamic-island.svg"}
|
|
alt="dynamic island"
|
|
width={75}
|
|
height={22}
|
|
className="absolute top-4 left-1/2 -translate-x-1/2"
|
|
/>
|
|
<Image
|
|
className="-z-10 border-8 border-black rounded-4xl overflow-hidden h-full w-full"
|
|
src="/mobile.gif"
|
|
width={300}
|
|
height={920}
|
|
loading="lazy"
|
|
alt="phone"
|
|
/>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="mt-10 text-center">
|
|
<hgroup>
|
|
<h2 className="capitalize font-bold text-2xl lg:text-4xl">
|
|
your in-house tender department, powered by
|
|
<span className="uppercase">ai</span>
|
|
</h2>
|
|
<p className="text-gray-600 mt-3">
|
|
Opplens is the end-to-end solution that gives you the power to
|
|
compete and win.
|
|
</p>
|
|
</hgroup>
|
|
</section>
|
|
<section className="flex flex-col gap-4 lg:flex-row">
|
|
{centerFrames.map((frame, index) => (
|
|
<article
|
|
key={frame.description}
|
|
className="bg-[#F7FAFF] border border-(--primary)/30 rounded-3xl my-4 py-10 px-6 flex flex-col gap-5 transition duration-300 transform scale-90 hover:bg-[#0164FF30] hover:scale-110">
|
|
<Image
|
|
src={frame.src}
|
|
alt={frame.alt}
|
|
width={36}
|
|
height={36}
|
|
/>
|
|
<h3 className="text-2xl font-bold">{frame.title}</h3>
|
|
<p className="text-gray-600">{frame.description}</p>
|
|
</article>
|
|
))}
|
|
</section>
|
|
<section className="mt-36 bg-[#F7FAFF] px-4 py-6 rounded-4xl flex flex-col gap-9 lg:p-16">
|
|
<div className="flex flex-col gap-4">
|
|
<h2 className=" font-bold text-4xl">
|
|
Tired of Complex Tenders & Lost Opportunities?
|
|
</h2>
|
|
<p className="font-normal text-sm">
|
|
The procurement market is tough for SMEs. We get it. You're facing
|
|
an uphill battle.
|
|
</p>
|
|
</div>
|
|
<ul className="flex flex-col gap-4 lg:flex-row lg:justify-between">
|
|
<li className="flex flex-col lg:w-80 gap-4 transition duration-500 hover:shadow-2xl p-5 rounded-2xl hover:transform hover:scale-110">
|
|
<div className="p-4">
|
|
<Image
|
|
src={"/clock.svg"}
|
|
alt="clock icon"
|
|
width={36}
|
|
height={36}
|
|
/>
|
|
</div>
|
|
<h3 className="font-bold">Resource Drain</h3>
|
|
<p>
|
|
Lacking the time, dedicated staff, and expertise to constantly
|
|
monitor the market and prepare high-quality bids.
|
|
</p>
|
|
</li>
|
|
<li className="flex flex-col gap-4 lg:w-80 transition duration-500 hover:shadow-2xl p-5 rounded-2xl hover:transform hover:scale-110">
|
|
<div className="p-4">
|
|
<Image
|
|
src={"/file.svg"}
|
|
alt="clipboard icon"
|
|
width={36}
|
|
height={36}
|
|
/>
|
|
</div>
|
|
<h3 className="font-bold">Overwhelming Complexity</h3>
|
|
<p>
|
|
Navigating complex requirements and processes designed for large
|
|
corporations with dedicated tender departments.
|
|
</p>
|
|
</li>
|
|
<li className="flex flex-col gap-4 lg:w-80 transition duration-500 hover:shadow-2xl p-5 rounded-2xl hover:transform hover:scale-110">
|
|
<div className="p-4">
|
|
<Image
|
|
src={"/arrow-up.svg"}
|
|
alt="arrow-up icon"
|
|
width={36}
|
|
height={36}
|
|
/>
|
|
</div>
|
|
<h3 className="font-bold">Low Win Rates</h3>
|
|
<p>
|
|
Did you know 68% of SMEs in Sweden rarely or never win public
|
|
tenders? It's time to change that.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
</section>
|
|
<section className="flex flex-col mt-36 gap-10 px-2 lg:w-3/4 m-auto text-center">
|
|
<h2 className="font-bold text-2xl lg:text-4xl">
|
|
The Opplens Advantage
|
|
</h2>
|
|
<div className="flex flex-col gap-10 lg:flex-row">
|
|
<article className="flex flex-col gap-7 bg-[#FFF7EB] p-10 rounded-3xl lg:pb-20 hover:shadow-2xl hover:transform hover:scale-110 hover:border border-[#ffdca7] transition duration-500">
|
|
<Image
|
|
src={"people.svg"}
|
|
width={48}
|
|
height={48}
|
|
alt="people icon"
|
|
/>
|
|
<div className="flex flex-col gap-4">
|
|
<h3 className="font-bold text-xl">A True Partnership Model</h3>
|
|
<p>
|
|
Lower your risk with our performance-based options. Our
|
|
success is directly tied to yours, making us a dedicated
|
|
partner invested in your growth, not just a software provider.
|
|
</p>
|
|
</div>
|
|
</article>
|
|
<article className="flex flex-col gap-7 bg-[#E5EFFF] p-10 rounded-3xl lg:pb-20 hover:shadow-2xl hover:transform hover:scale-110 hover:border border-(--primary) transition duration-500">
|
|
<Image
|
|
src={"shield-tick.svg"}
|
|
width={48}
|
|
height={48}
|
|
alt="shield icon"
|
|
/>
|
|
<div className="flex flex-col gap-4">
|
|
<h3 className="font-bold text-xl">Unmatched Data Security</h3>
|
|
<p>
|
|
Your business data is critical. Our unique on premise AI
|
|
engine ensures your information remains 100% private and
|
|
secure, unlike cloud based services. Fully GDPR compliant by
|
|
design.
|
|
</p>
|
|
</div>
|
|
</article>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
<footer className="relative h-full bg-[url('/footer-bg.svg')] bg-cover bg-no-repeat mt-96">
|
|
<div
|
|
className="absolute w-full -top-[355px] lg:-top-72 h-[600px] z-[-10] bg-[url('/bottom-bg.svg')] bg-contain bg-no-repeat bg-right"
|
|
aria-hidden="true"
|
|
/>
|
|
|
|
<FooterForm />
|
|
|
|
<div className="relative z-10 container px-4 py-4 m-auto flex flex-col justify-center items-center mt-80 ">
|
|
<div className="flex justify-between flex-col lg:flex-row gap-14 w-full lg:w-1/2">
|
|
<div className="flex flex-col gap-10">
|
|
<Image
|
|
src={"/footer-logo.svg"}
|
|
alt="Opp lens logo"
|
|
width={180}
|
|
height={30}
|
|
priority
|
|
/>
|
|
<div>
|
|
<p className="text-white my-2">
|
|
Democratizing Tender Access for SMEs.
|
|
</p>
|
|
<small className="text-white my-2">
|
|
© 2025 Opplens.com by PBL Partners AB. All Rights Reserved.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
<address className="not-italic">
|
|
<ul>
|
|
{contactInfo.map((contact, index) => (
|
|
<ContactInfo
|
|
key={index}
|
|
icon={contact.icon}
|
|
contact={contact.contact}
|
|
href={contact.href}
|
|
ariaLabel={contact.ariaLabel}
|
|
contactIconSrc={contact.contactIconSrc}
|
|
/>
|
|
))}
|
|
</ul>
|
|
</address>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</>
|
|
);
|
|
}
|