feat(ui): Enhance homepage responsiveness and layout
This commit introduces several UI improvements to enhance the responsive design and visual appeal of the homepage and main layout. Key changes include: - Adjusted the main header to be centered on mobile devices for better alignment. - Refined the hero section on the homepage with responsive text sizes and improved spacing. - Modified the "dynamic island" image container to adapt its size and position across different screen sizes. - Improved typography and layout in the "democratizing tenders" section for better readability. - Reorganized the contact page into a Next.js route group for better project structure.
This commit is contained in:
@@ -31,25 +31,25 @@ const ContactUsForm = () => {
|
|||||||
onSubmit={handleSubmit(onSubmit)}>
|
onSubmit={handleSubmit(onSubmit)}>
|
||||||
<InputGroup
|
<InputGroup
|
||||||
id="full_name"
|
id="full_name"
|
||||||
label="Full name"
|
label="Full Name"
|
||||||
register={register}
|
register={register}
|
||||||
type="text"
|
type="text"
|
||||||
/>
|
/>
|
||||||
<InputGroup
|
<InputGroup
|
||||||
id="company_name"
|
id="company_name"
|
||||||
label="Company name"
|
label="Company Name"
|
||||||
register={register}
|
register={register}
|
||||||
type="text"
|
type="text"
|
||||||
/>
|
/>
|
||||||
<InputGroup
|
<InputGroup
|
||||||
id="work_email"
|
id="work_email"
|
||||||
label="Work email"
|
label="Work Email"
|
||||||
register={register}
|
register={register}
|
||||||
type="email"
|
type="email"
|
||||||
/>
|
/>
|
||||||
<InputGroup
|
<InputGroup
|
||||||
id="phone_number"
|
id="phone_number"
|
||||||
label="Phone number"
|
label="Phone Number"
|
||||||
register={register}
|
register={register}
|
||||||
type="text"
|
type="text"
|
||||||
error={errors.phone_number?.message}
|
error={errors.phone_number?.message}
|
||||||
@@ -2,7 +2,7 @@ import ContactUsForm from "./form";
|
|||||||
|
|
||||||
const ContactUs = () => {
|
const ContactUs = () => {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col items-center mt-20 px-4 ">
|
<div className="flex flex-col items-center mt-16 px-8 ">
|
||||||
<div className="md:w-2/3 m-auto flex flex-col gap-4 mb-12">
|
<div className="md:w-2/3 m-auto flex flex-col gap-4 mb-12">
|
||||||
<h2 className="font-bold text-4xl">Unlock Your Growth Potential</h2>
|
<h2 className="font-bold text-4xl">Unlock Your Growth Potential</h2>
|
||||||
<p className="font-normal text-[16px] text-gray-600">
|
<p className="font-normal text-[16px] text-gray-600">
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
|
import { ApexOptions } from "apexcharts";
|
||||||
import dynamic from "next/dynamic";
|
import dynamic from "next/dynamic";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { ApexOptions } from "apexcharts";
|
const ReactApexChart = dynamic(() => import("react-apexcharts"), {
|
||||||
const ReactApexChart = dynamic(() => import("react-apexcharts"), { ssr: false });
|
ssr: false,
|
||||||
|
});
|
||||||
|
|
||||||
interface ChartState {
|
interface ChartState {
|
||||||
series: {
|
series: {
|
||||||
|
|||||||
+9
-9
@@ -3,7 +3,7 @@ import { Geist, Geist_Mono } from "next/font/google";
|
|||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { ToastContainer, Zoom } from "react-toastify";
|
import { ToastContainer, Zoom } from "react-toastify";
|
||||||
import ContactUs from "./contact-us/page";
|
import ContactUs from "./(contact-us)/page";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
const geistSans = Geist({
|
const geistSans = Geist({
|
||||||
variable: "--font-geist-sans",
|
variable: "--font-geist-sans",
|
||||||
@@ -96,7 +96,7 @@ export default async function RootLayout({
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body
|
<body
|
||||||
className={`${geistSans.variable} ${geistMono.variable} antialiased flex flex-col min-h-screen bg-[url('/header-bg.svg')] bg-top-right bg-no-repeat bg-contain`}>
|
className={`${geistSans.variable} ${geistMono.variable} antialiased flex flex-col min-h-screen bg-[url('/header-bg.svg')] bg-top-right bg-no-repeat bg-contain`}>
|
||||||
<header className="flex justify-between items-center pb-4 container px-4 py-4 m-auto">
|
<header className="flex justify-center pt-8 md:justify-between items-center pb-4 container px-4 py-4 m-auto">
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
aria-label="Opp lens home">
|
aria-label="Opp lens home">
|
||||||
@@ -128,7 +128,7 @@ export default async function RootLayout({
|
|||||||
<main className="container px-4 py-4 m-auto flex-grow">{children}</main>
|
<main className="container px-4 py-4 m-auto flex-grow">{children}</main>
|
||||||
<footer className="relative h-full bg-[url('/footer-bg.svg')] bg-cover bg-no-repeat mt-96">
|
<footer className="relative h-full bg-[url('/footer-bg.svg')] bg-cover bg-no-repeat mt-96">
|
||||||
<div
|
<div
|
||||||
className="absolute w-full -top-[420px] md:-top-72 h-[600px] z-[-10] bg-[url('/bottom-bg.svg')] bg-contain bg-no-repeat bg-right"
|
className="absolute w-full -top-[355px] md:-top-72 h-[600px] z-[-10] bg-[url('/bottom-bg.svg')] bg-contain bg-no-repeat bg-right"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -147,12 +147,12 @@ export default async function RootLayout({
|
|||||||
priority
|
priority
|
||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<p className="text-white my-2">
|
<p className="text-white my-2">
|
||||||
Democratizing Tender Access for SMEs.
|
Democratizing Tender Access for SMEs.
|
||||||
</p>
|
</p>
|
||||||
<p className="text-white my-2">
|
<p className="text-white my-2">
|
||||||
© 2025 Opplens.com by PBL Partners AB. All Rights Reserved.
|
© 2025 Opplens.com by PBL Partners AB. All Rights Reserved.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
interface IProps {}
|
||||||
|
|
||||||
|
const NotFound = ({}: IProps) => {
|
||||||
|
return <div>Not found</div>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NotFound;
|
||||||
+20
-13
@@ -48,14 +48,18 @@ export default function Home() {
|
|||||||
<>
|
<>
|
||||||
<section className="block md:flex justify-around items-center">
|
<section className="block md:flex justify-around items-center">
|
||||||
<div className="flex gap-4 w-full md:w-1/2 font-bold text-4xl text-center flex-col bg-gray-800/10 p-10 rounded-[40px] h-fit mb-16">
|
<div className="flex gap-4 w-full md:w-1/2 font-bold text-4xl text-center flex-col bg-gray-800/10 p-10 rounded-[40px] h-fit mb-16">
|
||||||
<h2>
|
<div className="flex flex-col gap-8">
|
||||||
<span>$</span>
|
<h2>
|
||||||
<span>12,345,678</span>
|
<span>$</span>
|
||||||
</h2>
|
<span>12,345,678</span>
|
||||||
<h2 className="capitalize">total tender amount you missed today</h2>
|
</h2>
|
||||||
|
<h2 className="capitalize text-2xl font-bold md:text-3xl">
|
||||||
|
total tender amount you missed today
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
<ApexChart />
|
<ApexChart />
|
||||||
</div>
|
</div>
|
||||||
<div className="mr-8 -z-20 relative flex justify-center h-[750px]">
|
<div className="m-auto w-xs md:m-0 md:w-auto -z-20 relative flex justify-center h-[650px] md:h-[750px]">
|
||||||
<Image
|
<Image
|
||||||
src={"/dynamic-island.svg"}
|
src={"/dynamic-island.svg"}
|
||||||
alt="dynamic island"
|
alt="dynamic island"
|
||||||
@@ -75,17 +79,18 @@ export default function Home() {
|
|||||||
</section>
|
</section>
|
||||||
<section className="text-left flex flex-col gap-6 bg-gradient-to-b from-[#011132] to-[#012B80] text-white rounded-[56px] relative p-6 md:p-14 -mt-16 z-20 md:ml-28">
|
<section className="text-left flex flex-col gap-6 bg-gradient-to-b from-[#011132] to-[#012B80] text-white rounded-[56px] relative p-6 md:p-14 -mt-16 z-20 md:ml-28">
|
||||||
<hgroup>
|
<hgroup>
|
||||||
<h1 className="capitalize font-extrabold text-5xl ">
|
<h1 className="capitalize font-extrabold text-5xl mb-6">
|
||||||
democratizing the world of tenders
|
democratizing the world of tenders
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xs">
|
<p className="text-[16px] text-[#dadada]">
|
||||||
Opplens is your dedicated AI-powered partner, leveling the playing
|
Opplens is your dedicated AI-powered partner, leveling the playing
|
||||||
field so you can win the public and private contracts you deserve.
|
field so you can win the public and private contracts you deserve.
|
||||||
|
<br />
|
||||||
Compete on your true strengths.
|
Compete on your true strengths.
|
||||||
</p>
|
</p>
|
||||||
</hgroup>
|
</hgroup>
|
||||||
<div className="flex justify-end">
|
<div className="flex justify-end">
|
||||||
<button className="bg-(--primary) rounded-4xl py-4 px-6">
|
<button className="w-full md:w-fit capitalize bg-(--primary) rounded-4xl py-4 px-6">
|
||||||
Get early access
|
Get early access
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -176,12 +181,14 @@ export default function Home() {
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section className="flex flex-col mt-36 gap-10 md:w-3/4 m-auto">
|
<section className="flex flex-col mt-36 gap-10 px-2 md:w-3/4 m-auto">
|
||||||
<div>
|
<div>
|
||||||
<h2 className="font-bold text-4xl">The Opplens Advantage</h2>
|
<h2 className="font-bold text-2xl md:text-4xl">
|
||||||
|
The Opplens Advantage
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<section className="flex flex-col gap-10 md:flex-row">
|
<section className="flex flex-col gap-10 md:flex-row">
|
||||||
<div className="flex flex-col gap-7 md:flex-row bg-[#FFF7EB] p-10 rounded-3xl md:pb-20">
|
<div className="flex flex-col gap-7 bg-[#FFF7EB] p-10 rounded-3xl md:pb-20">
|
||||||
<Image
|
<Image
|
||||||
src={"people.svg"}
|
src={"people.svg"}
|
||||||
width={48}
|
width={48}
|
||||||
@@ -197,7 +204,7 @@ export default function Home() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-7 md:flex-row bg-[#E5EFFF] p-10 rounded-3xl md:pb-20">
|
<div className="flex flex-col gap-7 bg-[#E5EFFF] p-10 rounded-3xl md:pb-20">
|
||||||
<Image
|
<Image
|
||||||
src={"shield-tick.svg"}
|
src={"shield-tick.svg"}
|
||||||
width={48}
|
width={48}
|
||||||
|
|||||||
Reference in New Issue
Block a user