-
Available Tickets
-
- {event.ticketTypes.map((ticket) => (
-
-
{ticket.name}
-
{ticket.priceKobo > 0 ? `${ticket.currency} ${(ticket.priceKobo / 100).toLocaleString()}` : "Free"}
+
+ {isDetails ? title : (
+ <>
+ Powerful Events.
+ Smarter Experience.
+ >
+ )}
+
+
{subtitle}
+ {error ?
{error}
: null}
+
+
+ {isDetails ? "Register Now" : "Explore Event Flow"}
+
+
+ Admin Sign in
+
+
+
+ {!isDetails ? (
+
+ {benefits.map(([label, copy, Icon]) => (
+
+ ))}
+
+ ) : null}
+
+
+
+ {isDetails ? (
+
+
+
Event Pass
+
Summit Access
+
+
{event?.startsAt ? new Date(event.startsAt).toLocaleString() : "Tuesday, 28 April 2026"}
+
{event?.venue ?? "Event venue"}
+
Executive delegates and event guests
+
Approval-based registration with QR access
+
+ {event?.ticketTypes?.length ? (
+
+
Available Tickets
+
+ {event.ticketTypes.map((ticket) => (
+
+ {ticket.name}
+ {ticket.priceKobo > 0 ? `${ticket.currency} ${(ticket.priceKobo / 100).toLocaleString()}` : "Free"}
+
+ ))}
+
+
+ ) : null}
+
+
+ ) : (
+
+ )}
+
+
+
+ {!isDetails ? (
+ <>
+
+
+
+
Enterprise. Secure. Scalable.
+
Built for enterprise operations with controlled admin access, QR validation, payment records and audit-ready event workflows.
+
+
+
+
+
Powerful Integrations
+
+ {[
+ ["Africa's Talking", "SMS & WhatsApp", MessageSquare],
+ ["Paystack", "Payments", WalletCards],
+ ["SendGrid", "Email Automation", Send],
+ ["Google Calendar", "Calendar Sync", CalendarDays],
+ ["Zoom", "Meetings", Users],
+ ["Zapier", "Workflows", Workflow]
+ ].map(([name, label, Icon]: any) => (
+
))}
- ) : null}
-
-
-
-
{["Private Cloud Interconnect", "SD-WAN Modernization", "Executive Networking"].map(x =>
{x}
Designed for enterprise decision makers who need secure, reliable and scalable connectivity outcomes.
)}
- ;
+
+ >
+ ) : null}
+
+ );
}
diff --git a/apps/web/src/components/public/FlowPage.tsx b/apps/web/src/components/public/FlowPage.tsx
index 17ae5b9..47faaad 100644
--- a/apps/web/src/components/public/FlowPage.tsx
+++ b/apps/web/src/components/public/FlowPage.tsx
@@ -3,11 +3,15 @@ import { Card } from "@/components/ui/Card";
import type { ReactNode } from "react";
export function FlowPage({ title, step, children }: { title: string; step: string; children?: ReactNode }) {
- return
-
- {step}
- {title}
- {children ? {children}
: null}
-
- ;
+ return (
+
+
+
+ {step}
+ {title}
+ {children ? {children}
: null}
+
+
+
+ );
}
diff --git a/apps/web/src/components/public/PublicShell.tsx b/apps/web/src/components/public/PublicShell.tsx
index 03a9e31..7ccd182 100644
--- a/apps/web/src/components/public/PublicShell.tsx
+++ b/apps/web/src/components/public/PublicShell.tsx
@@ -1,10 +1,10 @@
"use client";
import Link from "next/link";
-import { Button } from "@/components/ui/Button";
+import Image from "next/image";
import { useEffect, useMemo, useState } from "react";
import { apiFetch } from "@/lib/api";
-import Image from "next/image";
+import { BrandMark } from "@/components/ui/BrandMark";
export function PublicShell({ children }: { children: React.ReactNode }) {
const [branding, setBranding] = useState<{ appName: string; logoUrl: string | null } | null>(null);
@@ -29,19 +29,40 @@ export function PublicShell({ children }: { children: React.ReactNode }) {
}, [tenantSlug]);
const appName = branding?.appName ?? "EventSphere";
- return
;
+ return (
+
+ );
}
diff --git a/apps/web/src/components/ui/BrandMark.tsx b/apps/web/src/components/ui/BrandMark.tsx
new file mode 100644
index 0000000..7896bef
--- /dev/null
+++ b/apps/web/src/components/ui/BrandMark.tsx
@@ -0,0 +1,24 @@
+import { clsx } from "clsx";
+
+export function BrandMark({ className, size = "md" }: { className?: string; size?: "sm" | "md" | "lg" }) {
+ return (
+
+
+
+ );
+}
diff --git a/apps/web/src/components/ui/Button.tsx b/apps/web/src/components/ui/Button.tsx
index e7f846a..7428a31 100644
--- a/apps/web/src/components/ui/Button.tsx
+++ b/apps/web/src/components/ui/Button.tsx
@@ -5,7 +5,17 @@ export function Button({
variant = "primary",
...props
}: React.PropsWithChildren
> & { variant?: "primary" | "ghost" }) {
- return ;
+ return (
+
+ );
}
diff --git a/apps/web/src/components/ui/Card.tsx b/apps/web/src/components/ui/Card.tsx
index 351211a..7e32360 100644
--- a/apps/web/src/components/ui/Card.tsx
+++ b/apps/web/src/components/ui/Card.tsx
@@ -1,5 +1,5 @@
import { clsx } from "clsx";
export function Card({ className, children }: { className?: string; children: React.ReactNode }) {
- return {children}
;
+ return {children}
;
}
diff --git a/apps/web/tailwind.config.ts b/apps/web/tailwind.config.ts
index 7ab672a..f2c6ac5 100644
--- a/apps/web/tailwind.config.ts
+++ b/apps/web/tailwind.config.ts
@@ -12,7 +12,8 @@ export default {
line: "#E6EAF0"
},
boxShadow: {
- enterprise: "0 16px 40px rgba(8, 41, 77, 0.08)"
+ enterprise: "0 14px 34px rgba(8, 41, 77, 0.08)",
+ panel: "0 1px 1px rgba(8, 41, 77, 0.04), 0 10px 24px rgba(8, 41, 77, 0.06)"
}
}
},