Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| efe3a13360 | |||
| 0f279f4129 | |||
| ac398c7e79 | |||
| 423fb75254 | |||
| e49a0145f4 | |||
| 86177f9f22 | |||
| 2cdc5ce56a | |||
| 5c08968a14 | |||
| cb01018995 | |||
| edb1d0ad41 | |||
| 12eb98f058 | |||
| b89cd239ca | |||
| a3b8df847b | |||
| d8d141d1ce | |||
| 463ee75c9b | |||
| cce73c1367 | |||
| 002a525bbc |
@@ -1,58 +1,17 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Halant } from "next/font/google";
|
||||
import { Inter } from "next/font/google";
|
||||
import { Nunito_Sans } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
||||
import Tag from "@/tag/Tag";
|
||||
|
||||
const halant = Halant({
|
||||
variable: "--font-halant", subsets: ["latin"],
|
||||
weight: ["300", "400", "500", "600", "700"],
|
||||
});
|
||||
|
||||
const inter = Inter({
|
||||
variable: "--font-inter", subsets: ["latin"],
|
||||
});
|
||||
|
||||
const nunitoSans = Nunito_Sans({
|
||||
variable: "--font-nunito-sans", subsets: ["latin"],
|
||||
});
|
||||
import "@/styles/globals.css";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Smart ERP – Driving Intelligent Growth | Enterprise Platform", description: "Smart ERP unifies operations, finance, and decision-making across your organization. Transform fragmented business systems into a connected ecosystem with real-time intelligence and data-driven insights.", keywords: "ERP software, enterprise resource planning, manufacturing ERP, business intelligence, operations management, supply chain, finance integration, smart manufacturing", metadataBase: new URL("https://smarterp.example.com"),
|
||||
alternates: {
|
||||
canonical: "https://smarterp.example.com"},
|
||||
openGraph: {
|
||||
title: "Smart ERP – Driving Intelligent Growth", description: "Unified business platform for manufacturing, operations, finance, and intelligent decision-making.", url: "https://smarterp.example.com", siteName: "Smart ERP", images: [
|
||||
{
|
||||
url: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AWn4ywnX9oOwYiN1Z30Ju8qMH6/a-modern-sleek-software-dashboard-interf-1772717506288-13ddd917.png", alt: "Smart ERP unified dashboard"},
|
||||
],
|
||||
type: "website"},
|
||||
twitter: {
|
||||
card: "summary_large_image", title: "Smart ERP – Driving Intelligent Growth", description: "Transform your fragmented business operations into a unified, intelligent ecosystem.", images: [
|
||||
"https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AWn4ywnX9oOwYiN1Z30Ju8qMH6/a-modern-sleek-software-dashboard-interf-1772717506288-13ddd917.png"],
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
},
|
||||
};
|
||||
title: "Smart ERP | Enterprise Intelligence Platform", description: "Transform fragmented business operations into a unified ecosystem with real-time intelligence. Smart ERP powers intelligent growth for enterprises."};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<ServiceWrapper>
|
||||
<body
|
||||
className={`${halant.variable} ${inter.variable} ${nunitoSans.variable} antialiased`}
|
||||
>
|
||||
<Tag />
|
||||
{children}
|
||||
|
||||
<html lang="en">
|
||||
<body>{children}
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
@@ -1420,7 +1379,6 @@ export default function RootLayout({
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</ServiceWrapper>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ export default function LandingPage() {
|
||||
<TextAbout
|
||||
tag="The Challenge"
|
||||
tagIcon={AlertCircle}
|
||||
title="Why Businesses Struggle to Scale: The Silo Problem. Most businesses don't struggle because of lack of effort—they struggle because their systems and departments operate in silos. Sales teams work hard with one set of data. Production monitors efficiency with isolated metrics. Stores manages inventory separately. Quality tracks compliance independently. Finance operates in its own world. Each department works diligently, but on disconnected data and workflows. The result? Fragmented visibility, delayed decisions, operational misalignment, and missed growth opportunities."
|
||||
title="Most Businesses Operate in Silos"
|
||||
useInvertedBackground={true}
|
||||
buttons={[
|
||||
{ text: "Learn How We Solve This", href: "#solution" },
|
||||
|
||||
219
src/components/3d/IDMSLogo3D.tsx
Normal file
219
src/components/3d/IDMSLogo3D.tsx
Normal file
@@ -0,0 +1,219 @@
|
||||
"use client";
|
||||
|
||||
import React, { useEffect, useRef } from "react";
|
||||
import * as THREE from "three";
|
||||
|
||||
const IDMSLogo3D = () => {
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
const sceneRef = useRef<THREE.Scene | null>(null);
|
||||
const cameraRef = useRef<THREE.PerspectiveCamera | null>(null);
|
||||
const rendererRef = useRef<THREE.WebGLRenderer | null>(null);
|
||||
const groupRef = useRef<THREE.Group | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
// Scene setup
|
||||
if (!containerRef.current) return;
|
||||
|
||||
const scene = new THREE.Scene();
|
||||
scene.background = new THREE.Color(0x000000);
|
||||
sceneRef.current = scene;
|
||||
|
||||
const camera = new THREE.PerspectiveCamera(
|
||||
75,
|
||||
containerRef.current.clientWidth / containerRef.current.clientHeight,
|
||||
0.1,
|
||||
1000
|
||||
);
|
||||
camera.position.z = 8;
|
||||
cameraRef.current = camera;
|
||||
|
||||
const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
|
||||
renderer.setSize(
|
||||
containerRef.current.clientWidth,
|
||||
containerRef.current.clientHeight
|
||||
);
|
||||
renderer.shadowMap.enabled = true;
|
||||
renderer.shadowMap.type = THREE.PCFShadowMap;
|
||||
containerRef.current.appendChild(renderer.domElement);
|
||||
rendererRef.current = renderer;
|
||||
|
||||
// Create group for rotation
|
||||
const group = new THREE.Group();
|
||||
scene.add(group);
|
||||
groupRef.current = group;
|
||||
|
||||
// Lighting
|
||||
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
|
||||
scene.add(ambientLight);
|
||||
|
||||
const pointLight1 = new THREE.PointLight(0x00ffff, 2, 100);
|
||||
pointLight1.position.set(10, 10, 10);
|
||||
scene.add(pointLight1);
|
||||
|
||||
const pointLight2 = new THREE.PointLight(0xff00ff, 2, 100);
|
||||
pointLight2.position.set(-10, -10, 10);
|
||||
scene.add(pointLight2);
|
||||
|
||||
const pointLight3 = new THREE.PointLight(0xff1493, 1.5, 100);
|
||||
pointLight3.position.set(0, 10, -10);
|
||||
scene.add(pointLight3);
|
||||
|
||||
// Create interconnected geometric shapes representing IDMS systems
|
||||
const geometry1 = new THREE.IcosahedronGeometry(1.5, 3);
|
||||
const geometry2 = new THREE.OctahedronGeometry(1.2, 2);
|
||||
const geometry3 = new THREE.TetrahedronGeometry(1, 1);
|
||||
|
||||
// Chrome metallic material with chromatic reflections
|
||||
const chromeMatPrimary = new THREE.MeshStandardMaterial({
|
||||
color: 0xcccccc,
|
||||
metalness: 0.95,
|
||||
roughness: 0.05,
|
||||
emissive: 0x0066ff,
|
||||
emissiveIntensity: 0.3,
|
||||
});
|
||||
|
||||
const chromeMatSecondary = new THREE.MeshStandardMaterial({
|
||||
color: 0xdddddd,
|
||||
metalness: 0.92,
|
||||
roughness: 0.08,
|
||||
emissive: 0xff00ff,
|
||||
emissiveIntensity: 0.25,
|
||||
});
|
||||
|
||||
const chromeMatTertiary = new THREE.MeshStandardMaterial({
|
||||
color: 0xbbbbbb,
|
||||
metalness: 0.93,
|
||||
roughness: 0.06,
|
||||
emissive: 0xff1493,
|
||||
emissiveIntensity: 0.2,
|
||||
});
|
||||
|
||||
const mesh1 = new THREE.Mesh(geometry1, chromeMatPrimary);
|
||||
mesh1.position.set(0, 0, 0);
|
||||
mesh1.castShadow = true;
|
||||
mesh1.receiveShadow = true;
|
||||
|
||||
const mesh2 = new THREE.Mesh(geometry2, chromeMatSecondary);
|
||||
mesh2.position.set(2, 1, 0);
|
||||
mesh2.scale.set(0.7, 0.7, 0.7);
|
||||
mesh2.castShadow = true;
|
||||
mesh2.receiveShadow = true;
|
||||
|
||||
const mesh3 = new THREE.Mesh(geometry3, chromeMatTertiary);
|
||||
mesh3.position.set(-1.5, -1.2, 0);
|
||||
mesh3.scale.set(0.6, 0.6, 0.6);
|
||||
mesh3.castShadow = true;
|
||||
mesh3.receiveShadow = true;
|
||||
|
||||
group.add(mesh1);
|
||||
group.add(mesh2);
|
||||
group.add(mesh3);
|
||||
|
||||
// Create connecting lines (edges) with glow
|
||||
const lineMaterial = new THREE.LineBasicMaterial({
|
||||
color: 0x00ffff,
|
||||
linewidth: 2,
|
||||
});
|
||||
|
||||
const linePoints = [
|
||||
new THREE.Vector3(0, 0, 0),
|
||||
new THREE.Vector3(2, 1, 0),
|
||||
new THREE.Vector3(-1.5, -1.2, 0),
|
||||
new THREE.Vector3(0, 0, 0),
|
||||
];
|
||||
|
||||
const lineGeometry = new THREE.BufferGeometry().setFromPoints(linePoints);
|
||||
const lines = new THREE.Line(lineGeometry, lineMaterial);
|
||||
group.add(lines);
|
||||
|
||||
// Glow effect around objects
|
||||
const glowGeometry = new THREE.IcosahedronGeometry(1.8, 3);
|
||||
const glowMaterial = new THREE.MeshBasicMaterial({
|
||||
color: 0x00ffff,
|
||||
transparent: true,
|
||||
opacity: 0.15,
|
||||
side: THREE.BackSide,
|
||||
});
|
||||
const glowMesh = new THREE.Mesh(glowGeometry, glowMaterial);
|
||||
glowMesh.position.set(0, 0, 0);
|
||||
group.add(glowMesh);
|
||||
|
||||
// Secondary glow with pink/purple
|
||||
const glowGeometry2 = new THREE.OctahedronGeometry(1.5, 2);
|
||||
const glowMaterial2 = new THREE.MeshBasicMaterial({
|
||||
color: 0xff00ff,
|
||||
transparent: true,
|
||||
opacity: 0.1,
|
||||
side: THREE.BackSide,
|
||||
});
|
||||
const glowMesh2 = new THREE.Mesh(glowGeometry2, glowMaterial2);
|
||||
glowMesh2.position.set(0, 0, 0);
|
||||
group.add(glowMesh2);
|
||||
|
||||
// Animation loop
|
||||
const animate = () => {
|
||||
requestAnimationFrame(animate);
|
||||
|
||||
// Slow ambient rotation
|
||||
if (groupRef.current) {
|
||||
groupRef.current.rotation.x += 0.0008;
|
||||
groupRef.current.rotation.y += 0.001;
|
||||
groupRef.current.rotation.z += 0.0005;
|
||||
}
|
||||
|
||||
// Subtle mesh movements for dynamic effect
|
||||
mesh1.rotation.x += 0.002;
|
||||
mesh1.rotation.y += 0.003;
|
||||
|
||||
mesh2.rotation.x -= 0.001;
|
||||
mesh2.rotation.z += 0.0025;
|
||||
|
||||
mesh3.rotation.y -= 0.0015;
|
||||
mesh3.rotation.z += 0.001;
|
||||
|
||||
// Pulsing glow effect
|
||||
const pulse = Math.sin(Date.now() * 0.001) * 0.05 + 0.15;
|
||||
glowMaterial.opacity = pulse;
|
||||
glowMaterial2.opacity = pulse * 0.65;
|
||||
|
||||
if (rendererRef.current) {
|
||||
rendererRef.current.render(scene, camera);
|
||||
}
|
||||
};
|
||||
|
||||
animate();
|
||||
|
||||
// Handle resize
|
||||
const handleResize = () => {
|
||||
if (!containerRef.current || !cameraRef.current || !rendererRef.current)
|
||||
return;
|
||||
|
||||
const width = containerRef.current.clientWidth;
|
||||
const height = containerRef.current.clientHeight;
|
||||
cameraRef.current.aspect = width / height;
|
||||
cameraRef.current.updateProjectionMatrix();
|
||||
rendererRef.current.setSize(width, height);
|
||||
};
|
||||
|
||||
window.addEventListener("resize", handleResize);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener("resize", handleResize);
|
||||
if (containerRef.current && rendererRef.current) {
|
||||
containerRef.current.removeChild(rendererRef.current.domElement);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={containerRef}
|
||||
className="w-full h-full rounded-lg overflow-hidden border border-cyan-500/30 shadow-lg shadow-cyan-500/20"
|
||||
style={{
|
||||
background:
|
||||
"radial-gradient(circle at center, rgba(0, 255, 255, 0.1) 0%, rgba(139, 0, 139, 0.05) 100%)"}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default IDMSLogo3D;
|
||||
Reference in New Issue
Block a user