MERKET
This commit is contained in:
526
MARKET.md
Normal file
526
MARKET.md
Normal file
@@ -0,0 +1,526 @@
|
|||||||
|
# MARKET
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This document compares CODEXIUM against the provided top-50 requested manufacturing MRP features and translates the gaps into a practical product roadmap.
|
||||||
|
|
||||||
|
Assessment basis:
|
||||||
|
|
||||||
|
- current shipped scope in [README.md](D:/CODING/mrp-codex/README.md)
|
||||||
|
- completed work in [SHIPPED.md](D:/CODING/mrp-codex/SHIPPED.md)
|
||||||
|
- planned work in [ROADMAP.md](D:/CODING/mrp-codex/ROADMAP.md)
|
||||||
|
- current repository implementation state as of March 17, 2026
|
||||||
|
|
||||||
|
Status legend:
|
||||||
|
|
||||||
|
- `Implemented`: materially present in the product today
|
||||||
|
- `Partial`: meaningful foundation exists, but the market-expected version is not complete
|
||||||
|
- `Missing`: not present or not competitive enough to count as delivered
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
CODEXIUM is already strong for a foundation-stage MRP in these areas:
|
||||||
|
|
||||||
|
- integrated CRM, sales, purchasing, shipping, inventory, projects, manufacturing, and planning in one app
|
||||||
|
- multi-level BOM explosion for demand planning
|
||||||
|
- inventory reservations, transfers, and location-level stock visibility
|
||||||
|
- work orders, stations, operation templates, material issue/completion posting
|
||||||
|
- pegged build/buy recommendations tied back to sales demand
|
||||||
|
- project linkage across customer, commercial, shipment, and manufacturing records
|
||||||
|
- branded documents, attachments, audit trail, diagnostics, RBAC, and single-container deployment
|
||||||
|
|
||||||
|
CODEXIUM is not yet market-complete against the top-50 list. The current position is:
|
||||||
|
|
||||||
|
- `Implemented`: 3 / 50
|
||||||
|
- `Partial`: 13 / 50
|
||||||
|
- `Missing`: 34 / 50
|
||||||
|
|
||||||
|
That result is not a criticism of the product direction. It reflects that CODEXIUM is already a credible modular MRP foundation, but has not yet expanded into the deeper planning, traceability, execution, maintenance, quality, integration, and analytics layers expected by mature manufacturing buyers.
|
||||||
|
|
||||||
|
## Tier Summary
|
||||||
|
|
||||||
|
| Tier | Focus | Implemented | Partial | Missing | Readout |
|
||||||
|
| --- | --- | ---: | ---: | ---: | --- |
|
||||||
|
| Tier 1 | Core planning & scheduling | 0 | 3 | 7 | Good demand-planning base, but no full MPS/capacity/ATP engine yet |
|
||||||
|
| Tier 2 | Inventory & traceability | 3 | 0 | 7 | Strong stock visibility baseline, weak traceability/compliance depth |
|
||||||
|
| Tier 3 | Production execution & quality | 0 | 3 | 12 | Work-order foundation exists, but execution depth is still early |
|
||||||
|
| Tier 4 | Integration & interoperability | 0 | 3 | 7 | Internal modules are connected; external ecosystem integration is mostly absent |
|
||||||
|
| Tier 5 | Analytics, UX & platform quality | 0 | 4 | 1 | Strong UX intent and dashboard base, but not yet configurable/mobile/AI-driven |
|
||||||
|
|
||||||
|
## Comparative Analysis
|
||||||
|
|
||||||
|
### Tier 1: Core Planning & Scheduling
|
||||||
|
|
||||||
|
| Rank | Feature | Status | CODEXIUM Position |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | Purchase Planning & Automated PO Generation | `Partial` | Demand-planning recommendations and prefilled PO drafts exist, but not full autonomous purchasing from reorder points, lead times, min/max, and policy-driven replenishment. |
|
||||||
|
| 2 | Demand Forecasting from Historical Data | `Missing` | No historical demand forecasting engine or forecast-driven planning model is present. |
|
||||||
|
| 3 | Master Production Scheduling (MPS) | `Missing` | Planning is driven by live project/work-order/demand views, but there is no explicit top-level MPS layer. |
|
||||||
|
| 4 | Finite Capacity Scheduling | `Missing` | Current planning is not capacity-aware and does not enforce machine/labor constraints. |
|
||||||
|
| 5 | Multi-Level BOM Management | `Partial` | Multi-level BOM structure and explosion exist, but BOM versioning, ECO-driven effectivity, and parametric relationships are missing. |
|
||||||
|
| 6 | Sales Order to Production Job Auto-Conversion | `Partial` | Planner-assisted conversion to work-order drafts exists, but not true automatic conversion from confirmed sales demand into planned/released jobs. |
|
||||||
|
| 7 | Scenario Planning & Simulation | `Missing` | No what-if modeling or alternate-plan simulation is present. |
|
||||||
|
| 8 | Multi-Site / Multi-Plant Planning | `Missing` | Warehouses/locations exist, but not plant-aware planning, transfer planning, or site capacity coordination. |
|
||||||
|
| 9 | Subcontract / Outsourced Operation Management | `Missing` | No subcontracted operation flow, outside processing routing step, or supplier-linked manufacturing handoff exists. |
|
||||||
|
| 10 | Delivery Date Estimation (Available-to-Promise) | `Missing` | No ATP/CTP calculation is available for quoting or customer-service commitments. |
|
||||||
|
|
||||||
|
### Tier 2: Inventory & Traceability
|
||||||
|
|
||||||
|
| Rank | Feature | Status | CODEXIUM Position |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 11 | Real-Time Inventory Visibility Across All Locations | `Implemented` | On-hand, reserved, available, warehouse/location balances, transfers, and transaction history are shipped. |
|
||||||
|
| 12 | Lot / Serial Number Tracking (Full Bi-Directional) | `Missing` | No lot genealogy, serial trace, or forward/backward traceability is implemented. |
|
||||||
|
| 13 | Inventory Reservation & Allocation | `Implemented` | Manual reservations and work-order-driven reservations are already present. |
|
||||||
|
| 14 | Barcode / RFID Scanning Support | `Missing` | No scanner-first receiving, picking, issue, completion, or count workflow exists. |
|
||||||
|
| 15 | Negative Stock Prevention Enforcement | `Missing` | No explicit stock-floor enforcement is documented or surfaced as a guarded planning/inventory rule. |
|
||||||
|
| 16 | FIFO / FEFO Inventory Consumption Rules | `Missing` | Inventory issue logic does not yet expose consumption policies by lot/date/age. |
|
||||||
|
| 17 | Recall Readiness & <2-Minute Trace Report | `Missing` | Without lot genealogy, recall impact reporting is not possible. |
|
||||||
|
| 18 | Multi-Location Inventory Management | `Implemented` | Warehouses and nested stock locations are already core to the inventory module. |
|
||||||
|
| 19 | Inventory Cycle Count & Physical Inventory Portals | `Missing` | No cycle-count workflow, count scheduling, or limited-access count portal exists. |
|
||||||
|
| 20 | Consignment & Vendor-Managed Inventory (VMI) | `Missing` | No supplier-owned stock model or consumption-based supplier settlement is present. |
|
||||||
|
|
||||||
|
### Tier 3: Production Execution & Quality
|
||||||
|
|
||||||
|
| Rank | Feature | Status | CODEXIUM Position |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 21 | Digital Work Orders with Shop Floor Dispatch | `Partial` | Digital work orders exist, but dispatch, operator queueing, and workstation-first execution are still limited. |
|
||||||
|
| 22 | Real-Time Job Costing (Material + Labor + Overhead) | `Missing` | Material posting exists, but labor, overhead, and real-time job-cost accumulation do not. |
|
||||||
|
| 23 | Time & Labor Tracking by Job / Operation | `Missing` | No labor clock-in/out or operation time capture exists. |
|
||||||
|
| 24 | Work Center Capacity & Load Planning | `Partial` | Station master data and planning views exist, but no true work-center load balancing or capacity board is delivered. |
|
||||||
|
| 25 | Production Cost Reporting (Estimate vs. Actual) | `Missing` | No estimate-vs-actual job costing or variance analysis is currently present. |
|
||||||
|
| 26 | Paperless Shop Floor with Digital Work Instructions | `Partial` | Attachments exist on items and work orders, but not a dedicated operator instruction experience with current-revision control. |
|
||||||
|
| 27 | Quality Inspection Integration (Inline & Final) | `Missing` | No inspection plans, in-process checks, or work-order quality gate flow exists. |
|
||||||
|
| 28 | Non-Conformance (NCR) Tracking & CAPA Workflow | `Missing` | No NCR/CAPA subsystem exists. |
|
||||||
|
| 29 | Preventive Maintenance Scheduling (EAM) | `Missing` | No asset maintenance module or PM scheduler exists. |
|
||||||
|
| 30 | Machine & Equipment Integration (MES connectivity) | `Missing` | No machine data collection, cycle reporting, or automated shop-floor feedback loop exists. |
|
||||||
|
| 31 | Configure-Price-Quote (CPQ) for Engineer-to-Order | `Missing` | No product configurator, rules engine, or auto-BOM generation for configured products exists. |
|
||||||
|
| 32 | Subcontractor Material Free-Issue Tracking | `Missing` | No supplier-side issued-material reconciliation exists for outsourced operations. |
|
||||||
|
| 33 | Scrap & Yield Management | `Missing` | No expected vs actual yield, scrap capture, or material-adjusted production reporting exists. |
|
||||||
|
| 34 | Engineering Change Order (ECO) Management | `Missing` | Roadmap references deeper revision needs, but no ECO workflow is implemented. |
|
||||||
|
| 35 | Tooling & Fixture Tracking | `Missing` | No tooling availability, maintenance, or routing dependency model exists. |
|
||||||
|
|
||||||
|
### Tier 4: Integration & Interoperability
|
||||||
|
|
||||||
|
| Rank | Feature | Status | CODEXIUM Position |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 36 | Native ERP / Accounting Integration (Bidirectional) | `Missing` | No bidirectional accounting or ERP sync layer exists. |
|
||||||
|
| 37 | CRM / Sales Order Integration | `Partial` | CRM and sales are natively integrated inside CODEXIUM, but not synced bidirectionally to external CRM systems. |
|
||||||
|
| 38 | EDI Support (ASC X12 / EDIFACT) | `Missing` | No EDI transaction support is present. |
|
||||||
|
| 39 | 3PL / WMS Integration (API + EDI 940/945/856) | `Missing` | Shipping documents exist, but there is no 3PL/WMS integration layer. |
|
||||||
|
| 40 | IoT / Sensor Data Integration for Predictive Maintenance | `Missing` | No IoT ingestion or predictive maintenance trigger path exists. |
|
||||||
|
| 41 | Supplier Portal with Lead-Time & Performance Tracking | `Missing` | Vendors are modeled internally, but there is no external supplier portal or ASN/confirmation workflow. |
|
||||||
|
| 42 | eCommerce Platform Integration | `Missing` | No Shopify/WooCommerce or marketplace sync exists. |
|
||||||
|
| 43 | Open REST API with Webhooks | `Partial` | Internal REST APIs exist, but not a documented public integration surface with webhooks and versioning guarantees. |
|
||||||
|
| 44 | CAD / PDM System Integration | `Missing` | No engineering-system import pipeline exists for BOMs or revisions. |
|
||||||
|
| 45 | Accounting / Tax Localization (Multi-Country) | `Partial` | Currency/tax fields exist, but not country-specific tax logic, fiscal localization, or e-invoicing support. |
|
||||||
|
|
||||||
|
### Tier 5: Analytics, UX & Platform Quality
|
||||||
|
|
||||||
|
| Rank | Feature | Status | CODEXIUM Position |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 46 | Configurable Role-Based Dashboards with Real-Time KPIs | `Partial` | Dashboard widgets and rollups exist, but dashboards are not yet user-role configurable. |
|
||||||
|
| 47 | AI-Powered Planning Anomaly Detection | `Missing` | No AI/ML anomaly engine exists in planning. |
|
||||||
|
| 48 | Mobile-First Shop Floor Interface | `Partial` | The app is responsive, but not intentionally designed as a mobile-first execution surface for shop-floor work. |
|
||||||
|
| 49 | Project Capabilities (Cradle-to-Grave Project Tracking) | `Partial` | Projects are a first-class module and already linked across CRM, sales, shipping, and manufacturing, but milestones, cost rollups, procurement depth, and full cradle-to-grave control are still roadmap items. |
|
||||||
|
| 50 | Intuitive UX with Low Onboarding Time | `Partial` | Searchable pickers, dense operational layouts, and modular navigation are good foundations, but the product still needs more guided workflows and role-tailored experiences to claim this as a true market strength. |
|
||||||
|
|
||||||
|
## What CODEXIUM Already Does Well
|
||||||
|
|
||||||
|
These are the strongest market-facing talking points today:
|
||||||
|
|
||||||
|
1. End-to-end modular manufacturing workflow already exists in one codebase.
|
||||||
|
2. Demand planning is deeper than a typical early-stage MRP because it already supports BOM explosion, pegged supply, and build/buy recommendations.
|
||||||
|
3. Inventory location visibility, reservations, and transfer flows are already operational.
|
||||||
|
4. Projects are already first-class, which is a major differentiator versus many ERP foundations.
|
||||||
|
5. Work orders already post real inventory transactions for issue and completion.
|
||||||
|
6. Documents, approvals, revisions, attachments, audit, diagnostics, and brandable PDFs are unusually mature for this product stage.
|
||||||
|
7. Single-container deployment and SQLite-backed portability make the system operationally simple for smaller manufacturers.
|
||||||
|
|
||||||
|
## Missing Features and How To Achieve Them
|
||||||
|
|
||||||
|
The list below focuses on practical product moves rather than abstract wish-list items.
|
||||||
|
|
||||||
|
### 1. Deepen Planning Into A Real Scheduling Engine
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- demand forecasting
|
||||||
|
- master production scheduling
|
||||||
|
- finite capacity scheduling
|
||||||
|
- scenario planning
|
||||||
|
- ATP / delivery-date estimation
|
||||||
|
- multi-site planning
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Extend `planning` into a true planning engine instead of a gantt-only visibility layer.
|
||||||
|
- Add `forecast` entities and time buckets under `server/src/modules/planning`.
|
||||||
|
- Add `workCenter`, `calendar`, `shift`, `capacityBucket`, and `constraint` models under `manufacturing`.
|
||||||
|
- Build an MPS layer that sits between sales/project demand and detailed work-order generation.
|
||||||
|
- Add an ATP service that evaluates open supply, capacity, and purchased lead times before returning a promise date.
|
||||||
|
- Expand the current demand-planning recommendation engine to support reorder policies, time fences, and alternate scenarios.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Near-term after current manufacturing routing/work-center work
|
||||||
|
- Belongs mostly in existing `planning` and `manufacturing` modules
|
||||||
|
|
||||||
|
### 2. Make Inventory Planning-Grade and Recall-Grade
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- lot/serial traceability
|
||||||
|
- negative stock prevention
|
||||||
|
- FIFO/FEFO rules
|
||||||
|
- cycle counting
|
||||||
|
- barcode workflows
|
||||||
|
- recall reporting
|
||||||
|
- consignment / VMI
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Add lot and serial models, lot-controlled transactions, and lot-resolved reservations under `inventory`.
|
||||||
|
- Enforce non-negative stock in issue/transfer/reservation services, not just in UI validation.
|
||||||
|
- Add inventory policy settings per item: lot-controlled, serial-controlled, FIFO, FEFO, expiry, consignment.
|
||||||
|
- Build count-session entities and lightweight count-task screens for warehouse execution.
|
||||||
|
- Introduce barcode-first receiving/issue/transfer/count UI states in the inventory and manufacturing modules.
|
||||||
|
- Once lot genealogy exists, add trace reports for backward/forward lot resolution and recall impact.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- High priority if targeting food, medical, chemical, or aerospace-adjacent manufacturers
|
||||||
|
- Belongs in `inventory`, with trace cross-links into `manufacturing`, `purchasing`, and `shipping`
|
||||||
|
|
||||||
|
### 3. Expand Manufacturing From Work Orders Into Shop-Floor Execution
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- labor tracking
|
||||||
|
- job costing
|
||||||
|
- estimate-vs-actual cost reporting
|
||||||
|
- scrap/yield
|
||||||
|
- digital instructions
|
||||||
|
- quality checkpoints
|
||||||
|
- NCR/CAPA
|
||||||
|
- tooling
|
||||||
|
- subcontract operations
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Extend `manufacturing` with `workCenter`, `routingStep`, `laborEntry`, `machineTime`, `scrapEvent`, `yieldSnapshot`, and `qualityInspection`.
|
||||||
|
- Add operation-level start/pause/complete execution screens and operator queue views.
|
||||||
|
- Add cost-rollup services that combine issued material, labor time, and burden rates.
|
||||||
|
- Reuse attachments plus revision metadata to create a formal digital instruction panel on the work-order operation screen.
|
||||||
|
- Add NCR/CAPA and inspection models either under `manufacturing` or a new `quality` module.
|
||||||
|
- Add outside-processing routing steps that generate supplier-facing purchasing events.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Direct extension of the current manufacturing roadmap
|
||||||
|
- Best implemented as deeper `manufacturing` capability, with a likely new `quality` subdomain
|
||||||
|
|
||||||
|
### 4. Add Engineering Change and Product-Control Depth
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- BOM version control
|
||||||
|
- ECO workflow
|
||||||
|
- CAD/PDM integration
|
||||||
|
- configurable products / CPQ
|
||||||
|
- tooling dependencies
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Add revision-controlled BOM headers and effectivity dates in `inventory`.
|
||||||
|
- Add ECO request, approval, release, and effective-change propagation into BOM/routing/work-order data.
|
||||||
|
- Build import connectors for engineering structures from CAD/PDM exports first, then native integrations later.
|
||||||
|
- Introduce configurable product rules in `sales` plus generated BOM/routing outcomes in `inventory` and `manufacturing`.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Mid-term
|
||||||
|
- Primarily `inventory`, `sales`, and `manufacturing`
|
||||||
|
|
||||||
|
### 5. Build the Integration Surface Buyers Expect
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- accounting integration
|
||||||
|
- supplier portal
|
||||||
|
- EDI
|
||||||
|
- 3PL / WMS integration
|
||||||
|
- eCommerce sync
|
||||||
|
- public API + webhooks
|
||||||
|
- IoT maintenance feeds
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Formalize the current internal API into a versioned integration layer.
|
||||||
|
- Add outbound webhook events for order approved, PO created, receipt posted, WO released, shipment shipped, inventory changed.
|
||||||
|
- Add integration adapters under a new `integrations` module rather than burying them in domain services.
|
||||||
|
- Start with REST + webhooks and CSV import/export for fastest market progress.
|
||||||
|
- Follow with targeted adapters: QuickBooks/Xero, Shopify, 3PL APIs, supplier confirmations/ASN, and later EDI.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Mid-term, but public API/webhooks should move earlier because they unblock partner/customer integrations
|
||||||
|
- Best as a new top-level backend domain: `server/src/modules/integrations`
|
||||||
|
|
||||||
|
### 6. Turn Projects Into A Real ETO / Program-Control Advantage
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- milestones
|
||||||
|
- project rollups
|
||||||
|
- project-level costs
|
||||||
|
- project material view
|
||||||
|
- project execution cockpit
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Deliver the already-planned milestones and rollups first.
|
||||||
|
- Add project-level commercial, supply, manufacturing, and shipment summary services.
|
||||||
|
- Add project cost buckets sourced from sales, purchasing, manufacturing, and shipping transactions.
|
||||||
|
- Add project readiness and shortage boards for long-running builds.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Immediate priority
|
||||||
|
- Extends the existing `projects` module and strengthens one of CODEXIUM’s best differentiators
|
||||||
|
|
||||||
|
### 7. Improve Daily Adoption Through Role-Specific UX
|
||||||
|
|
||||||
|
Missing or weak features:
|
||||||
|
|
||||||
|
- configurable dashboards
|
||||||
|
- mobile-first shop-floor screens
|
||||||
|
- guided low-onboarding workflows
|
||||||
|
- anomaly detection
|
||||||
|
|
||||||
|
How to achieve it:
|
||||||
|
|
||||||
|
- Add saved dashboard layouts and role-default widget packs under `dashboard`.
|
||||||
|
- Build dedicated mobile execution screens for receiving, issue, completion, counts, and labor entry.
|
||||||
|
- Add contextual “next step” actions and exception queues per role instead of generic list/detail flows only.
|
||||||
|
- Add rule-based anomaly detection first, then ML later: late PO risk, overloaded work center, missing material, demand spike, suspicious lead-time drift.
|
||||||
|
|
||||||
|
Recommended roadmap placement:
|
||||||
|
|
||||||
|
- Split into near-term UX work and later AI work
|
||||||
|
- `dashboard`, `inventory`, `manufacturing`, and `planning` should all contribute
|
||||||
|
|
||||||
|
## Suggested Product Roadmap From This Analysis
|
||||||
|
|
||||||
|
### Phase A: Convert Foundation MRP Into Planning-Grade MRP
|
||||||
|
|
||||||
|
Priority additions:
|
||||||
|
|
||||||
|
- project milestones and project rollups
|
||||||
|
- work-center and routing depth
|
||||||
|
- labor capture
|
||||||
|
- capacity-aware scheduling
|
||||||
|
- reorder-policy purchasing
|
||||||
|
- non-negative stock enforcement
|
||||||
|
- BOM revisions
|
||||||
|
|
||||||
|
Why this phase matters:
|
||||||
|
|
||||||
|
- It strengthens current modules without requiring new market-facing verticals.
|
||||||
|
- It closes the biggest credibility gaps in planning and manufacturing execution.
|
||||||
|
|
||||||
|
### Phase B: Make The System Traceable and Shop-Floor Ready
|
||||||
|
|
||||||
|
Priority additions:
|
||||||
|
|
||||||
|
- lot/serial traceability
|
||||||
|
- barcode workflows
|
||||||
|
- cycle counting
|
||||||
|
- digital operator dispatch
|
||||||
|
- scrap/yield
|
||||||
|
- quality inspections
|
||||||
|
- job costing
|
||||||
|
|
||||||
|
Why this phase matters:
|
||||||
|
|
||||||
|
- It moves CODEXIUM from “good operational foundation” to “usable manufacturing system” for more serious buyers.
|
||||||
|
|
||||||
|
### Phase C: Build The ETO / Multi-Discipline Differentiator
|
||||||
|
|
||||||
|
Priority additions:
|
||||||
|
|
||||||
|
- project cockpit
|
||||||
|
- ECO workflow
|
||||||
|
- estimate-vs-actual project/job cost visibility
|
||||||
|
- subcontract processing
|
||||||
|
- ATP
|
||||||
|
- scenario planning
|
||||||
|
|
||||||
|
Why this phase matters:
|
||||||
|
|
||||||
|
- It leans into CODEXIUM’s strongest differentiator: projects + manufacturing + planning in one product.
|
||||||
|
|
||||||
|
### Phase D: Open The Platform
|
||||||
|
|
||||||
|
Priority additions:
|
||||||
|
|
||||||
|
- versioned public REST API
|
||||||
|
- webhooks
|
||||||
|
- accounting integration
|
||||||
|
- supplier portal
|
||||||
|
- 3PL integration
|
||||||
|
- eCommerce sync
|
||||||
|
|
||||||
|
Why this phase matters:
|
||||||
|
|
||||||
|
- It improves commercial viability and reduces objections in buyer evaluations.
|
||||||
|
|
||||||
|
## Feature Gap Analysis By Manufacturing Type
|
||||||
|
|
||||||
|
### Make-to-Stock (MTS)
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- moderate
|
||||||
|
|
||||||
|
Strengths:
|
||||||
|
|
||||||
|
- stock visibility
|
||||||
|
- reservations
|
||||||
|
- transfers
|
||||||
|
- purchasing and sales document flow
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- forecasting
|
||||||
|
- reorder automation
|
||||||
|
- FIFO/FEFO
|
||||||
|
- count discipline
|
||||||
|
|
||||||
|
### Make-to-Order (MTO)
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- moderate to strong
|
||||||
|
|
||||||
|
Strengths:
|
||||||
|
|
||||||
|
- order-driven demand planning
|
||||||
|
- quote/order/project/manufacturing linkage
|
||||||
|
- shipment linkage
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- ATP
|
||||||
|
- job costing
|
||||||
|
- labor tracking
|
||||||
|
- deeper production dispatch
|
||||||
|
|
||||||
|
### Configure-to-Order (CTO)
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- weak
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- CPQ
|
||||||
|
- revision-controlled engineering changes
|
||||||
|
- CAD/PDM integration
|
||||||
|
|
||||||
|
### Engineer-to-Order (ETO)
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- moderate foundation, high upside
|
||||||
|
|
||||||
|
Strengths:
|
||||||
|
|
||||||
|
- projects are already first-class
|
||||||
|
- commercial/manufacturing/shipping cross-links already exist
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- milestones
|
||||||
|
- cost rollups
|
||||||
|
- ECO
|
||||||
|
- subcontracting
|
||||||
|
- CPQ/configuration logic
|
||||||
|
|
||||||
|
### Process Manufacturing
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- weak
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- lots
|
||||||
|
- expiry
|
||||||
|
- FEFO
|
||||||
|
- recall traceability
|
||||||
|
- yield and quality controls
|
||||||
|
|
||||||
|
### Discrete / Job Shop
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- moderate foundation
|
||||||
|
|
||||||
|
Strengths:
|
||||||
|
|
||||||
|
- work orders
|
||||||
|
- stations
|
||||||
|
- operation templates
|
||||||
|
- issue/completion posting
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- finite scheduling
|
||||||
|
- labor tracking
|
||||||
|
- job costing
|
||||||
|
- tooling
|
||||||
|
- dispatch UI
|
||||||
|
|
||||||
|
### Multi-Site Enterprise
|
||||||
|
|
||||||
|
Current fit:
|
||||||
|
|
||||||
|
- weak to moderate
|
||||||
|
|
||||||
|
Strengths:
|
||||||
|
|
||||||
|
- warehouses and locations exist
|
||||||
|
|
||||||
|
Biggest gaps:
|
||||||
|
|
||||||
|
- plant-aware planning
|
||||||
|
- inter-site planning logic
|
||||||
|
- enterprise integrations
|
||||||
|
- supplier/3PL/EDI ecosystem support
|
||||||
|
|
||||||
|
## Bottom Line
|
||||||
|
|
||||||
|
CODEXIUM is already credible as a modular manufacturing operations foundation and has unusually strong project, planning, and cross-module linkage for its current maturity level.
|
||||||
|
|
||||||
|
Where it is strongest today:
|
||||||
|
|
||||||
|
- small to mid-sized discrete manufacturers
|
||||||
|
- make-to-order environments
|
||||||
|
- project-linked manufacturing operations
|
||||||
|
- organizations that value deployment simplicity and integrated workflows over enterprise breadth
|
||||||
|
|
||||||
|
Where it is not yet market-complete:
|
||||||
|
|
||||||
|
- advanced scheduling
|
||||||
|
- regulated traceability
|
||||||
|
- shop-floor labor/cost/quality depth
|
||||||
|
- engineering control
|
||||||
|
- enterprise integrations
|
||||||
|
|
||||||
|
Best strategic path:
|
||||||
|
|
||||||
|
1. Double down on current strengths by deepening planning, projects, and manufacturing first.
|
||||||
|
2. Add traceability and execution discipline next to broaden manufacturing fit.
|
||||||
|
3. Open the integration layer after the core operational model is more mature.
|
||||||
|
|
||||||
|
That sequence gives CODEXIUM the clearest path from strong foundation MRP to differentiated manufacturing platform.
|
||||||
@@ -80,18 +80,18 @@ function getThemeVars(variant: LandingVariant): CSSProperties {
|
|||||||
|
|
||||||
function panelClass(isDark: boolean) {
|
function panelClass(isDark: boolean) {
|
||||||
return isDark
|
return isDark
|
||||||
? "border-white/12 bg-white/[0.07] shadow-[0_30px_90px_rgba(2,6,23,0.52)]"
|
? "border-line/70 bg-surface/90 shadow-[0_30px_80px_rgba(2,6,23,0.45)]"
|
||||||
: "border-white/60 bg-white/[0.48] shadow-[0_30px_90px_rgba(37,99,235,0.14)]";
|
: "border-line/70 bg-surface/90 shadow-[0_30px_80px_rgba(15,23,42,0.12)]";
|
||||||
}
|
}
|
||||||
|
|
||||||
function softPanelClass(isDark: boolean) {
|
function softPanelClass(isDark: boolean) {
|
||||||
return isDark
|
return isDark
|
||||||
? "border-white/10 bg-white/[0.06] shadow-[0_20px_60px_rgba(2,6,23,0.4)]"
|
? "border-line/70 bg-page/80 shadow-[0_20px_60px_rgba(2,6,23,0.34)]"
|
||||||
: "border-white/55 bg-white/[0.42] shadow-[0_18px_50px_rgba(37,99,235,0.1)]";
|
: "border-line/70 bg-page/75 shadow-[0_20px_50px_rgba(15,23,42,0.1)]";
|
||||||
}
|
}
|
||||||
|
|
||||||
function chipClass(isDark: boolean) {
|
function chipClass(isDark: boolean) {
|
||||||
return isDark ? "border-white/15 bg-white/[0.08]" : "border-white/60 bg-white/[0.52]";
|
return isDark ? "border-line/70 bg-page/80" : "border-line/70 bg-surface/90";
|
||||||
}
|
}
|
||||||
|
|
||||||
function LandingExperience({ variant }: { variant: LandingVariant }) {
|
function LandingExperience({ variant }: { variant: LandingVariant }) {
|
||||||
@@ -116,7 +116,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
<div className={`absolute left-[22%] top-[32rem] h-64 w-64 rounded-full blur-3xl ${isDark ? "bg-indigo-400/10" : "bg-violet-200/35"}`} />
|
<div className={`absolute left-[22%] top-[32rem] h-64 w-64 rounded-full blur-3xl ${isDark ? "bg-indigo-400/10" : "bg-violet-200/35"}`} />
|
||||||
|
|
||||||
<div className="relative mx-auto flex w-full max-w-7xl flex-col gap-12 px-6 pb-20 pt-8 lg:px-8">
|
<div className="relative mx-auto flex w-full max-w-7xl flex-col gap-12 px-6 pb-20 pt-8 lg:px-8">
|
||||||
<header className={`flex flex-col gap-4 rounded-[30px] border px-5 py-4 backdrop-blur-2xl xl:flex-row xl:items-center xl:justify-between ${panelClass(isDark)}`}>
|
<header className={`flex flex-col gap-4 rounded-[28px] border px-5 py-4 xl:flex-row xl:items-center xl:justify-between ${panelClass(isDark)}`}>
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className="flex h-12 w-12 items-center justify-center rounded-2xl bg-[linear-gradient(135deg,rgb(var(--color-brand)),rgb(var(--color-accent)))] text-lg font-black tracking-[0.18em] text-white">
|
<div className="flex h-12 w-12 items-center justify-center rounded-2xl bg-[linear-gradient(135deg,rgb(var(--color-brand)),rgb(var(--color-accent)))] text-lg font-black tracking-[0.18em] text-white">
|
||||||
CX
|
CX
|
||||||
@@ -127,13 +127,13 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-wrap items-center gap-3">
|
<div className="flex flex-wrap items-center gap-3">
|
||||||
<span className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text backdrop-blur-xl ${chipClass(isDark)}`}>
|
<span className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text ${chipClass(isDark)}`}>
|
||||||
{variantLabel}
|
{variantLabel}
|
||||||
</span>
|
</span>
|
||||||
<Link to={altRoute} className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text transition hover:bg-white/10 backdrop-blur-xl ${chipClass(isDark)}`}>
|
<Link to={altRoute} className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text transition hover:bg-page/70 ${chipClass(isDark)}`}>
|
||||||
{altLabel}
|
{altLabel}
|
||||||
</Link>
|
</Link>
|
||||||
<Link to="/login" className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text transition hover:bg-white/10 backdrop-blur-xl ${chipClass(isDark)}`}>
|
<Link to="/login" className={`rounded-2xl border px-4 py-2 text-sm font-semibold text-text transition hover:bg-page/70 ${chipClass(isDark)}`}>
|
||||||
Open app
|
Open app
|
||||||
</Link>
|
</Link>
|
||||||
<a
|
<a
|
||||||
@@ -147,7 +147,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
|
|
||||||
<section className="grid gap-10 lg:grid-cols-[1.05fr_0.95fr] lg:items-center">
|
<section className="grid gap-10 lg:grid-cols-[1.05fr_0.95fr] lg:items-center">
|
||||||
<div>
|
<div>
|
||||||
<div className={`inline-flex items-center gap-2 rounded-full border px-4 py-2 text-xs font-semibold uppercase tracking-[0.24em] text-muted backdrop-blur-2xl ${chipClass(isDark)}`}>
|
<div className={`inline-flex items-center gap-2 rounded-full border px-4 py-2 text-xs font-semibold uppercase tracking-[0.24em] text-muted ${chipClass(isDark)}`}>
|
||||||
Built for discrete manufacturing teams
|
Built for discrete manufacturing teams
|
||||||
</div>
|
</div>
|
||||||
<h1 className="mt-6 max-w-4xl font-['Space_Grotesk','Manrope',sans-serif] text-5xl font-black leading-[0.95] tracking-[-0.05em] text-text sm:text-6xl xl:text-7xl">
|
<h1 className="mt-6 max-w-4xl font-['Space_Grotesk','Manrope',sans-serif] text-5xl font-black leading-[0.95] tracking-[-0.05em] text-text sm:text-6xl xl:text-7xl">
|
||||||
@@ -159,7 +159,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
|
|
||||||
<div className="mt-8 grid gap-3 sm:grid-cols-3">
|
<div className="mt-8 grid gap-3 sm:grid-cols-3">
|
||||||
{heroMetrics.map((metric) => (
|
{heroMetrics.map((metric) => (
|
||||||
<article key={metric.label} className={`rounded-[26px] border p-4 backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<article key={metric.label} className={`rounded-[24px] border p-4 ${softPanelClass(isDark)}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{metric.label}</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{metric.label}</div>
|
||||||
<div className="mt-3 text-3xl font-black tracking-[-0.04em] text-text">{metric.value}</div>
|
<div className="mt-3 text-3xl font-black tracking-[-0.04em] text-text">{metric.value}</div>
|
||||||
<div className="mt-2 text-sm text-muted">{metric.detail}</div>
|
<div className="mt-2 text-sm text-muted">{metric.detail}</div>
|
||||||
@@ -169,9 +169,9 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className={`absolute -left-8 top-10 hidden h-24 w-24 rounded-[30px] border backdrop-blur-2xl lg:block ${isDark ? "border-white/10 bg-white/[0.06]" : "border-white/60 bg-white/[0.3]"}`} />
|
<div className={`absolute -left-8 top-10 hidden h-20 w-20 rounded-[28px] border lg:block ${isDark ? "border-white/20 bg-white/10" : "border-white/40 bg-white/20"}`} />
|
||||||
<div className={`rounded-[34px] border p-5 backdrop-blur-3xl ${panelClass(isDark)}`}>
|
<div className={`rounded-[32px] border p-5 ${isDark ? "bg-[linear-gradient(160deg,rgba(15,23,42,0.82),rgba(15,23,42,0.48))] shadow-[0_35px_90px_rgba(2,6,23,0.55)]" : "bg-[linear-gradient(160deg,rgba(255,255,255,0.68),rgba(255,255,255,0.24))] shadow-[0_35px_90px_rgba(15,23,42,0.18)]"} ${isDark ? "border-line/70" : "border-line/70"}`}>
|
||||||
<div className={`rounded-[30px] border p-5 backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<div className={`rounded-[28px] border p-5 ${softPanelClass(isDark)}`}>
|
||||||
<div className="flex flex-wrap items-center justify-between gap-3">
|
<div className="flex flex-wrap items-center justify-between gap-3">
|
||||||
<div>
|
<div>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.24em] text-muted">Generated executive board</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.24em] text-muted">Generated executive board</div>
|
||||||
@@ -186,15 +186,15 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
{spotlightBoard.map((card) => (
|
{spotlightBoard.map((card) => (
|
||||||
<article
|
<article
|
||||||
key={card.title}
|
key={card.title}
|
||||||
className={`rounded-[24px] border p-4 backdrop-blur-2xl ${
|
className={`rounded-[24px] border p-4 ${
|
||||||
card.tone === "brand"
|
card.tone === "brand"
|
||||||
? isDark
|
? isDark
|
||||||
? "border-blue-300/18 bg-blue-300/10"
|
? "border-[rgb(var(--color-brand)/0.25)] bg-[rgb(var(--color-brand)/0.08)]"
|
||||||
: "border-blue-400/25 bg-blue-400/10"
|
: "border-[rgb(var(--color-brand)/0.25)] bg-[rgb(var(--color-brand)/0.08)]"
|
||||||
: card.tone === "accent"
|
: card.tone === "accent"
|
||||||
? isDark
|
? isDark
|
||||||
? "border-teal-300/18 bg-teal-300/10"
|
? "border-[rgb(var(--color-accent)/0.25)] bg-[rgb(var(--color-accent)/0.08)]"
|
||||||
: "border-teal-400/25 bg-teal-400/10"
|
: "border-[rgb(var(--color-accent)/0.25)] bg-[rgb(var(--color-accent)/0.08)]"
|
||||||
: softPanelClass(isDark)
|
: softPanelClass(isDark)
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
@@ -206,7 +206,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-5 grid gap-3 xl:grid-cols-[1.3fr_0.7fr]">
|
<div className="mt-5 grid gap-3 xl:grid-cols-[1.3fr_0.7fr]">
|
||||||
<div className={`rounded-[24px] border p-4 backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<div className={`rounded-[24px] border p-4 ${softPanelClass(isDark)}`}>
|
||||||
<div className="flex items-center justify-between gap-3">
|
<div className="flex items-center justify-between gap-3">
|
||||||
<div className="text-sm font-semibold text-text">Project and manufacturing pulse</div>
|
<div className="text-sm font-semibold text-text">Project and manufacturing pulse</div>
|
||||||
<div className="text-xs uppercase tracking-[0.18em] text-muted">Generated snapshot</div>
|
<div className="text-xs uppercase tracking-[0.18em] text-muted">Generated snapshot</div>
|
||||||
@@ -217,12 +217,12 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
{ label: "Orion service kit launch", progress: 61, status: "Waiting on one purchased line" },
|
{ label: "Orion service kit launch", progress: 61, status: "Waiting on one purchased line" },
|
||||||
{ label: "Atlas retrofit release", progress: 43, status: "Routing review in progress" },
|
{ label: "Atlas retrofit release", progress: 43, status: "Routing review in progress" },
|
||||||
].map((row) => (
|
].map((row) => (
|
||||||
<div key={row.label} className={`rounded-[20px] border p-3 backdrop-blur-2xl ${isDark ? "border-white/10 bg-white/[0.05]" : "border-white/55 bg-white/[0.35]"}`}>
|
<div key={row.label} className={`rounded-[20px] border p-3 ${isDark ? "border-line/70 bg-page/75" : "border-line/60 bg-page/75"}`}>
|
||||||
<div className="flex flex-wrap items-center justify-between gap-2">
|
<div className="flex flex-wrap items-center justify-between gap-2">
|
||||||
<div className="font-semibold text-text">{row.label}</div>
|
<div className="font-semibold text-text">{row.label}</div>
|
||||||
<div className="text-xs uppercase tracking-[0.18em] text-muted">{row.progress}%</div>
|
<div className="text-xs uppercase tracking-[0.18em] text-muted">{row.progress}%</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={`mt-3 h-2 overflow-hidden rounded-full ${isDark ? "bg-white/10" : "bg-slate-200/80"}`}>
|
<div className={`mt-3 h-2 overflow-hidden rounded-full ${isDark ? "bg-line/70" : "bg-line/70"}`}>
|
||||||
<div
|
<div
|
||||||
className="h-full rounded-full bg-[linear-gradient(90deg,rgb(var(--color-brand)),rgb(var(--color-accent)))]"
|
className="h-full rounded-full bg-[linear-gradient(90deg,rgb(var(--color-brand)),rgb(var(--color-accent)))]"
|
||||||
style={{ width: `${row.progress}%` }}
|
style={{ width: `${row.progress}%` }}
|
||||||
@@ -234,7 +234,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={`rounded-[24px] border p-4 backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<div className={`rounded-[24px] border p-4 ${softPanelClass(isDark)}`}>
|
||||||
<div className="text-sm font-semibold text-text">Supply signals</div>
|
<div className="text-sm font-semibold text-text">Supply signals</div>
|
||||||
<div className="mt-4 space-y-3">
|
<div className="mt-4 space-y-3">
|
||||||
{[
|
{[
|
||||||
@@ -242,7 +242,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
{ sku: "KIT-2208", action: "Buy", qty: "240 EA" },
|
{ sku: "KIT-2208", action: "Buy", qty: "240 EA" },
|
||||||
{ sku: "CAB-9031", action: "Transfer", qty: "64 EA" },
|
{ sku: "CAB-9031", action: "Transfer", qty: "64 EA" },
|
||||||
].map((signal) => (
|
].map((signal) => (
|
||||||
<div key={signal.sku} className={`rounded-[18px] border px-3 py-3 backdrop-blur-2xl ${isDark ? "border-white/10 bg-white/[0.05]" : "border-white/55 bg-white/[0.35]"}`}>
|
<div key={signal.sku} className={`rounded-[18px] border px-3 py-3 ${isDark ? "border-line/70 bg-page/75" : "border-line/60 bg-page/75"}`}>
|
||||||
<div className="flex items-center justify-between gap-3">
|
<div className="flex items-center justify-between gap-3">
|
||||||
<div>
|
<div>
|
||||||
<div className="font-semibold text-text">{signal.sku}</div>
|
<div className="font-semibold text-text">{signal.sku}</div>
|
||||||
@@ -260,9 +260,9 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className={`grid gap-4 rounded-[32px] border p-6 backdrop-blur-3xl lg:grid-cols-3 ${panelClass(isDark)}`}>
|
<section className={`grid gap-4 rounded-[32px] border p-6 lg:grid-cols-3 ${panelClass(isDark)}`}>
|
||||||
{proofCards.map((card) => (
|
{proofCards.map((card) => (
|
||||||
<article key={card.label} className={`rounded-[24px] border p-4 backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<article key={card.label} className={`rounded-[24px] border p-4 ${softPanelClass(isDark)}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{card.label}</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{card.label}</div>
|
||||||
<div className="mt-3 text-5xl font-black tracking-[-0.06em] text-text">{card.value}</div>
|
<div className="mt-3 text-5xl font-black tracking-[-0.06em] text-text">{card.value}</div>
|
||||||
<div className="mt-2 text-sm text-muted">{card.note}</div>
|
<div className="mt-2 text-sm text-muted">{card.note}</div>
|
||||||
@@ -275,13 +275,13 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
<main className="mx-auto flex w-full max-w-7xl flex-col gap-8 px-6 pb-24 lg:px-8">
|
<main className="mx-auto flex w-full max-w-7xl flex-col gap-8 px-6 pb-24 lg:px-8">
|
||||||
<section className="grid gap-6 lg:grid-cols-3">
|
<section className="grid gap-6 lg:grid-cols-3">
|
||||||
{moduleCards.map((card) => (
|
{moduleCards.map((card) => (
|
||||||
<article key={card.title} className={`rounded-[30px] border p-6 backdrop-blur-3xl ${panelClass(isDark)}`}>
|
<article key={card.title} className={`rounded-[28px] border p-6 ${panelClass(isDark)}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{card.eyebrow}</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">{card.eyebrow}</div>
|
||||||
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-2xl font-bold tracking-[-0.04em] text-text">{card.title}</h2>
|
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-2xl font-bold tracking-[-0.04em] text-text">{card.title}</h2>
|
||||||
<p className="mt-4 text-sm leading-7 text-muted">{card.copy}</p>
|
<p className="mt-4 text-sm leading-7 text-muted">{card.copy}</p>
|
||||||
<div className="mt-6 flex flex-wrap gap-2">
|
<div className="mt-6 flex flex-wrap gap-2">
|
||||||
{card.bullets.map((bullet) => (
|
{card.bullets.map((bullet) => (
|
||||||
<span key={bullet} className={`rounded-full border px-3 py-2 text-xs font-semibold uppercase tracking-[0.16em] text-text backdrop-blur-xl ${chipClass(isDark)}`}>
|
<span key={bullet} className={`rounded-full border px-3 py-2 text-xs font-semibold uppercase tracking-[0.16em] text-text ${chipClass(isDark)}`}>
|
||||||
{bullet}
|
{bullet}
|
||||||
</span>
|
</span>
|
||||||
))}
|
))}
|
||||||
@@ -290,7 +290,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
))}
|
))}
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className={`grid gap-8 rounded-[32px] border p-6 backdrop-blur-3xl lg:grid-cols-[0.9fr_1.1fr] ${panelClass(isDark)}`}>
|
<section className={`grid gap-8 rounded-[32px] border p-6 lg:grid-cols-[0.9fr_1.1fr] ${panelClass(isDark)}`}>
|
||||||
<div>
|
<div>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.24em] text-muted">How it moves</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.24em] text-muted">How it moves</div>
|
||||||
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-4xl font-black tracking-[-0.05em] text-text">
|
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-4xl font-black tracking-[-0.05em] text-text">
|
||||||
@@ -303,8 +303,8 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
|
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
{timeline.map((step) => (
|
{timeline.map((step) => (
|
||||||
<article key={step.time} className={`grid gap-4 rounded-[24px] border p-4 backdrop-blur-2xl md:grid-cols-[92px_1fr] md:items-start ${softPanelClass(isDark)}`}>
|
<article key={step.time} className={`grid gap-4 rounded-[24px] border p-4 md:grid-cols-[92px_1fr] md:items-start ${softPanelClass(isDark)}`}>
|
||||||
<div className={`rounded-[18px] px-4 py-3 text-center ${isDark ? "bg-white/[0.08]" : "bg-white/[0.55]"}`}>
|
<div className={`rounded-[18px] px-4 py-3 text-center ${isDark ? "bg-surface/80" : "bg-surface/90"}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.18em] text-muted">Time</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.18em] text-muted">Time</div>
|
||||||
<div className="mt-1 text-2xl font-black tracking-[-0.04em] text-text">{step.time}</div>
|
<div className="mt-1 text-2xl font-black tracking-[-0.04em] text-text">{step.time}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -318,7 +318,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="grid gap-6 lg:grid-cols-[1.15fr_0.85fr]">
|
<section className="grid gap-6 lg:grid-cols-[1.15fr_0.85fr]">
|
||||||
<article className={`rounded-[32px] border p-6 backdrop-blur-3xl ${panelClass(isDark)}`}>
|
<article className={`rounded-[32px] border p-6 ${panelClass(isDark)}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">Who this is for</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">Who this is for</div>
|
||||||
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-4xl font-black tracking-[-0.05em] text-text">
|
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-4xl font-black tracking-[-0.05em] text-text">
|
||||||
Teams graduating from spreadsheets, generic ERPs, or disconnected point tools.
|
Teams graduating from spreadsheets, generic ERPs, or disconnected point tools.
|
||||||
@@ -330,14 +330,14 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
"Growing production shops that want branding, PDFs, approvals, and auditability without enterprise bloat.",
|
"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.",
|
"Leaders who want a system operators will actually open all day, not just during month-end cleanup.",
|
||||||
].map((statement) => (
|
].map((statement) => (
|
||||||
<div key={statement} className={`rounded-[22px] border p-4 text-sm leading-7 text-text backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<div key={statement} className={`rounded-[22px] border p-4 text-sm leading-7 text-text ${softPanelClass(isDark)}`}>
|
||||||
{statement}
|
{statement}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article id="contact" className={`rounded-[32px] border p-6 backdrop-blur-3xl ${panelClass(isDark)}`}>
|
<article id="contact" className={`rounded-[32px] border p-6 ${panelClass(isDark)}`}>
|
||||||
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">Next step</div>
|
<div className="text-xs font-semibold uppercase tracking-[0.22em] text-muted">Next step</div>
|
||||||
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-3xl font-black tracking-[-0.05em] text-text">
|
<h2 className="mt-4 font-['Space_Grotesk','Manrope',sans-serif] text-3xl font-black tracking-[-0.05em] text-text">
|
||||||
Pitch the platform with a page that already looks production-grade.
|
Pitch the platform with a page that already looks production-grade.
|
||||||
@@ -345,7 +345,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
<p className="mt-4 text-sm leading-7 text-muted">
|
<p className="mt-4 text-sm leading-7 text-muted">
|
||||||
Use this route as a commercial front door, demo backdrop, or customer-facing preview while the core app remains focused on execution.
|
Use this route as a commercial front door, demo backdrop, or customer-facing preview while the core app remains focused on execution.
|
||||||
</p>
|
</p>
|
||||||
<div className={`mt-6 space-y-3 rounded-[24px] border p-4 text-sm text-muted backdrop-blur-2xl ${softPanelClass(isDark)}`}>
|
<div className={`mt-6 space-y-3 rounded-[24px] border p-4 text-sm text-muted ${softPanelClass(isDark)}`}>
|
||||||
<div className="flex items-center justify-between gap-3">
|
<div className="flex items-center justify-between gap-3">
|
||||||
<span>Public route</span>
|
<span>Public route</span>
|
||||||
<span className="font-semibold text-text">{isDark ? "/darklanding" : "/landing"}</span>
|
<span className="font-semibold text-text">{isDark ? "/darklanding" : "/landing"}</span>
|
||||||
@@ -366,7 +366,7 @@ function LandingExperience({ variant }: { variant: LandingVariant }) {
|
|||||||
>
|
>
|
||||||
Enter the app
|
Enter the app
|
||||||
</Link>
|
</Link>
|
||||||
<a href="#top" className={`rounded-2xl border px-4 py-3 text-sm font-semibold text-text transition hover:bg-white/10 backdrop-blur-xl ${chipClass(isDark)}`}>
|
<a href="#top" className={`rounded-2xl border px-4 py-3 text-sm font-semibold text-text transition hover:bg-page/70 ${chipClass(isDark)}`}>
|
||||||
Back to top
|
Back to top
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user