Merge version_2 into main #7

Merged
bender merged 3 commits from version_2 into main 2026-03-05 14:57:45 +00:00
3 changed files with 241 additions and 42 deletions

View File

@@ -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>
);
}

View File

@@ -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>
);
}

View 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;