diff --git a/client/src/modules/landing/LandingPage.tsx b/client/src/modules/landing/LandingPage.tsx index d84640d..ed13435 100644 --- a/client/src/modules/landing/LandingPage.tsx +++ b/client/src/modules/landing/LandingPage.tsx @@ -1,3 +1,4 @@ +import type { CSSProperties } from "react"; import { Link } from "react-router-dom"; type LandingVariant = "light" | "dark"; @@ -49,275 +50,329 @@ const spotlightBoard = [ { title: "Shipments due today", value: "9", change: "4 already packed", tone: "brand" }, ]; +function getThemeVars(variant: LandingVariant): CSSProperties { + const vars = variant === "dark" + ? { + colorScheme: "dark", + "--color-brand": "88 150 255", + "--color-accent": "44 214 199", + "--color-surface-brand": "18 30 52", + "--color-surface": "10 20 38", + "--color-page": "3 10 24", + "--color-text": "236 241 255", + "--color-muted": "150 168 194", + "--color-line": "68 87 120", + } + : { + colorScheme: "light", + "--color-brand": "29 78 216", + "--color-accent": "13 148 136", + "--color-surface-brand": "244 247 251", + "--color-surface": "244 247 251", + "--color-page": "239 244 255", + "--color-text": "15 23 42", + "--color-muted": "92 111 139", + "--color-line": "196 210 233", + }; + + return vars as CSSProperties; +} + +function panelClass(isDark: boolean) { + return isDark + ? "border-white/12 bg-white/[0.07] shadow-[0_30px_90px_rgba(2,6,23,0.52)]" + : "border-white/60 bg-white/[0.48] shadow-[0_30px_90px_rgba(37,99,235,0.14)]"; +} + +function softPanelClass(isDark: boolean) { + return isDark + ? "border-white/10 bg-white/[0.06] shadow-[0_20px_60px_rgba(2,6,23,0.4)]" + : "border-white/55 bg-white/[0.42] shadow-[0_18px_50px_rgba(37,99,235,0.1)]"; +} + +function chipClass(isDark: boolean) { + return isDark ? "border-white/15 bg-white/[0.08]" : "border-white/60 bg-white/[0.52]"; +} + function LandingExperience({ variant }: { variant: LandingVariant }) { const isDark = variant === "dark"; - const variantLabel = isDark ? "Dark landing" : "Landing"; + const themeVars = getThemeVars(variant); + const variantLabel = isDark ? "Dark landing" : "Light landing"; const altRoute = isDark ? "/landing" : "/darklanding"; const altLabel = isDark ? "View light version" : "View dark version"; return ( -
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
- CX -
-
-
CODEXIUM
-
Manufacturing resource planning without the ERP drag.
-
+
+
+
+
+ CX
-
- - {variantLabel} - - - {altLabel} - - - Open app - - - Book a walkthrough - -
-
- -
-
- Built for discrete manufacturing teams -
-

- A sharper MRP for operators who need flow, not ERP theater. -

-

- CODEXIUM connects commercial demand, inventory truth, project execution, purchasing, shipping, and manufacturing control in one system designed to move work across the floor. -

- -
- {heroMetrics.map((metric) => ( -
-
{metric.label}
-
{metric.value}
-
{metric.detail}
-
- ))} -
+
CODEXIUM
+
Manufacturing resource planning without the ERP drag.
+
+
+ + {variantLabel} + + + {altLabel} + + + Open app + + + Book a walkthrough + +
+
-
-
-
-
-
-
-
Generated executive board
-
This week in operations
+
+
+
+ Built for discrete manufacturing teams +
+

+ A sharper MRP for operators who need flow, not ERP theater. +

+

+ CODEXIUM connects commercial demand, inventory truth, project execution, purchasing, shipping, and manufacturing control in one system designed to move work across the floor. +

+ +
+ {heroMetrics.map((metric) => ( +
+
{metric.label}
+
{metric.value}
+
{metric.detail}
+
+ ))} +
+
+ +
+
+
+ -
- {proofCards.map((card) => ( -
-
{card.label}
-
{card.value}
-
{card.note}
-
- ))} -
-
-
- -
-
- {moduleCards.map((card) => ( -
-
{card.eyebrow}
-

{card.title}

-

{card.copy}

-
- {card.bullets.map((bullet) => ( - - {bullet} - - ))} -
+
+ {proofCards.map((card) => ( +
+
{card.label}
+
{card.value}
+
{card.note}
))}
+
+
-
-
-
How it moves
-

- One demand signal. One operating picture. -

-

- Most systems split quoting, planning, purchasing, inventory, shipping, and production into separate stories. CODEXIUM treats them as one chain, so each step inherits context instead of creating reconciliation work. -

-
- -
- {timeline.map((step) => ( -
-
-
Time
-
{step.time}
-
-
-
{step.title}
-
{step.detail}
-
-
- ))} -
-
- -
-
-
Who this is for
-

- Teams graduating from spreadsheets, generic ERPs, or disconnected point tools. -

-
- {[ - "Contract manufacturers that need real-time supply readiness before promising dates.", - "OEM operations teams that need projects, BOMs, purchasing, and work orders linked end to end.", - "Growing production shops that want branding, PDFs, approvals, and auditability without enterprise bloat.", - "Leaders who want a system operators will actually open all day, not just during month-end cleanup.", - ].map((statement) => ( -
- {statement} -
+
+
+ {moduleCards.map((card) => ( +
+
{card.eyebrow}
+

{card.title}

+

{card.copy}

+
+ {card.bullets.map((bullet) => ( + + {bullet} + ))}
+ ))} +
-
-
Next step
-

- Pitch the platform with a page that already looks production-grade. -

-

- Use this route as a commercial front door, demo backdrop, or customer-facing preview while the core app remains focused on execution. -

-
-
- Public route - {isDark ? "/darklanding" : "/landing"} +
+
+
How it moves
+

+ One demand signal. One operating picture. +

+

+ Most systems split quoting, planning, purchasing, inventory, shipping, and production into separate stories. CODEXIUM treats them as one chain, so each step inherits context instead of creating reconciliation work. +

+
+ +
+ {timeline.map((step) => ( +
+
+
Time
+
{step.time}
-
- Core positioning - Modern manufacturing MRP +
+
{step.title}
+
{step.detail}
-
- Demo style - Generated commercial data +
+ ))} +
+
+ +
+
+
Who this is for
+

+ Teams graduating from spreadsheets, generic ERPs, or disconnected point tools. +

+
+ {[ + "Contract manufacturers that need real-time supply readiness before promising dates.", + "OEM operations teams that need projects, BOMs, purchasing, and work orders linked end to end.", + "Growing production shops that want branding, PDFs, approvals, and auditability without enterprise bloat.", + "Leaders who want a system operators will actually open all day, not just during month-end cleanup.", + ].map((statement) => ( +
+ {statement}
+ ))} +
+
+ +
+
Next step
+

+ Pitch the platform with a page that already looks production-grade. +

+

+ Use this route as a commercial front door, demo backdrop, or customer-facing preview while the core app remains focused on execution. +

+
+
+ Public route + {isDark ? "/darklanding" : "/landing"}
-
- - Enter the app - - - Back to top - +
+ Core positioning + Modern manufacturing MRP
-
-
-
-
+
+ Demo style + Generated commercial data +
+
+
+ + Enter the app + + + Back to top + +
+ + +
); }