Merge version_2 into main #7
@@ -1,58 +1,25 @@
|
||||
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 "./styles/variables.css";
|
||||
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"],
|
||||
});
|
||||
|
||||
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 your business with unified operations, real-time intelligence, and connected workflows"};
|
||||
|
||||
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 className={inter.variable}>
|
||||
{children}
|
||||
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
@@ -1420,7 +1387,6 @@ export default function RootLayout({
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</ServiceWrapper>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,12 @@ import TestimonialCardThirteen from "@/components/sections/testimonial/Testimoni
|
||||
import ContactCTA from "@/components/sections/contact/ContactCTA";
|
||||
import FooterSimple from "@/components/sections/footer/FooterSimple";
|
||||
import { AlertCircle, Award, Building2, MessageCircle, Network, Package, Rocket, TrendingUp, Zap } from "lucide-react";
|
||||
import dynamic from "next/dynamic";
|
||||
|
||||
const IDMSLogo3D = dynamic(() => import("@/components/3d/IDMSLogo3D"), {
|
||||
ssr: false,
|
||||
loading: () => <div className="w-24 h-24 bg-gradient-to-br from-purple-500 to-pink-500 rounded-lg animate-pulse" />,
|
||||
});
|
||||
|
||||
export default function LandingPage() {
|
||||
return (
|
||||
@@ -334,6 +340,12 @@ export default function LandingPage() {
|
||||
bottomRightText="Driving Intelligent Growth"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="fixed bottom-8 right-8 z-50 pointer-events-none">
|
||||
<div className="w-24 h-24 pointer-events-auto">
|
||||
<IDMSLogo3D />
|
||||
</div>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
|
||||
221
src/components/3d/IDMSLogo3D.tsx
Normal file
221
src/components/3d/IDMSLogo3D.tsx
Normal file
@@ -0,0 +1,221 @@
|
||||
"use client";
|
||||
|
||||
import React, { useEffect, useRef } from "react";
|
||||
|
||||
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(() => {
|
||||
// Dynamically import THREE to avoid SSR issues
|
||||
import("three").then((THREE) => {
|
||||
if (!containerRef.current) return;
|
||||
|
||||
// Scene setup
|
||||
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.PCFShadowShadowMap;
|
||||
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