-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #37 from 3um-Group/CompanyPage
Company page
- Loading branch information
Showing
16 changed files
with
1,485 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,88 +1,164 @@ | ||
import empower from '@/public/assets/empower.png' | ||
import brain from '@/public/assets/brain_image.png' | ||
import road_map from '@/public/assets/road_map.png' | ||
import logo from '@/public/assets/IMG_0701 1.png' | ||
// src/app/(root)/company/page.tsx | ||
'use client'; | ||
|
||
import Form from '@/components/company_components/Form'; | ||
import Career from '@/components/company_components/Career'; | ||
import Media from '@/components/company_components/Media'; | ||
|
||
import Image from 'next/image'; | ||
import Link from 'next/link'; | ||
import React, { useState, useEffect, useRef } from 'react'; | ||
import QuantumCube from '@/components/3DModel/QuantumCube'; | ||
import ClientOnly from '@/components/3DModel/ClientOnly'; | ||
import { KeyTechnologiesSection, TeamSection } from './utils'; | ||
|
||
const PageTitle: React.FC<{ title: string }> = ({ title }) => { | ||
return ( | ||
<div className="text-center fixed top-40 left-1/2 transform -translate-x-1/2 z-20"> | ||
<h1 className="text-4xl font-bold mb-4">{title}</h1> | ||
</div> | ||
); | ||
}; | ||
|
||
const PageDescriptionAndModel: React.FC<{ description: string }> = ({ description }) => { | ||
const [translateX, setTranslateX] = useState(0); | ||
const [isAbsolute, setIsAbsolute] = useState(true); | ||
const mainDivRef = useRef<HTMLDivElement>(null); | ||
|
||
useEffect(() => { | ||
const handleScroll = (event: WheelEvent) => { | ||
if (mainDivRef.current?.contains(event.target as Node)) { | ||
if (event.deltaY > 0) { | ||
setTranslateX((prev) => Math.min(prev + 120, 4000)); | ||
} else { | ||
setTranslateX((prev) => Math.max(prev - 120, 0)); | ||
} | ||
} | ||
}; | ||
|
||
window.addEventListener('wheel', handleScroll); | ||
|
||
return () => { | ||
window.removeEventListener('wheel', handleScroll); | ||
}; | ||
}, []); | ||
|
||
useEffect(() => { | ||
if (translateX >= 4000) { | ||
document.body.style.overflowY = 'scroll'; | ||
} else { | ||
document.body.style.overflowY = 'hidden'; | ||
} | ||
}, [translateX]); | ||
|
||
useEffect(() => { | ||
const handleScrollReset = () => { | ||
if (window.scrollY === 0) { | ||
setTranslateX(0); | ||
} | ||
|
||
const mainDivHeight = mainDivRef.current?.scrollHeight || 0; | ||
if (window.scrollY + window.innerHeight >= mainDivHeight - 100) { | ||
setIsAbsolute(false); | ||
} else { | ||
setIsAbsolute(true); | ||
} | ||
}; | ||
|
||
window.addEventListener('scroll', handleScrollReset); | ||
|
||
return () => { | ||
window.removeEventListener('scroll', handleScrollReset); | ||
}; | ||
}, []); | ||
|
||
const page = () => { | ||
return ( | ||
<> | ||
<header className='flex flex-col'> | ||
<div className=' flex flex-row my-10 justify-center'> | ||
<div className='image-container rounded-xl'> | ||
<Image alt='empower' src={empower} className="sm:object-contain bg-blend-darken rounded-3xl brightness-75 image min-h-28" /> | ||
<div className='text-white absolute self-center text-2xl font-bold left-[10%] sm:top-[30%] top-[10%] z-10 w-2/3'>3UM empowers its <br />interconnected community</div> | ||
</div> | ||
<div | ||
className="relative flex flex-col md:flex-row items-center justify-between gap-8 px-8 pt-32" | ||
style={{ position: isAbsolute ? 'absolute' : 'relative' }} | ||
ref={mainDivRef} | ||
> | ||
<div | ||
className="Company-Description md:w-1/2" | ||
style={{ | ||
transform: `translateX(-${translateX}px)`, | ||
opacity: translateX > window.innerWidth / 5 ? 0 : 1, | ||
transition: 'transform 0.8s ease-in-out, opacity 0.8s ease-in-out', | ||
}} | ||
> | ||
<p className="text-lg mb-4 text-justify">{description}</p> | ||
</div> | ||
<div | ||
className="3D-Container md:w-1/2 flex justify-center md:justify-end" | ||
style={{ | ||
transform: `translateX(-${translateX / 3}px)`, | ||
transition: 'transform 0.8s ease-in-out', | ||
}} | ||
> | ||
<ClientOnly> | ||
<QuantumCube /> | ||
</ClientOnly> | ||
</div> | ||
{translateX >= window.innerWidth / 2 && ( | ||
<div | ||
className="Placeholder md:w-1/2 flex justify-center items-center pt-32" | ||
style={{ | ||
position: 'absolute', | ||
right: 0, | ||
top: '50%', | ||
transform: `translateY(-50%) translateX(0)`, | ||
transition: 'transform 0.8s ease-in-out, opacity 0.8s ease-in-out', | ||
opacity: 1, | ||
height: '100%', | ||
}} | ||
> | ||
<KeyTechnologiesSection /> | ||
</div> | ||
|
||
<div className='sm:flex hidden flex-row justify-center gap-16 opacity-70'> | ||
<Link href='#about' className='text-blue-700 font-bold'>About us</Link> | ||
<Link href='#mission'>Mission & Vision</Link> | ||
<Link href='#roadmap'>Roadmap</Link> | ||
<Link href='#career'>Career</Link> | ||
<Link href='#media'>Press & Media</Link> | ||
<Link href='#contact'>Contact us</Link> | ||
)} | ||
{translateX >= 3000 && ( | ||
<div | ||
className="TeamSection md:w-full flex justify-center items-center pt-32" | ||
style={{ | ||
position: 'absolute', | ||
left: '50%', | ||
transform: `translateX(-50%)`, | ||
transition: 'opacity 0.8s ease-in-out', | ||
opacity: 1, | ||
}} | ||
> | ||
<TeamSection /> | ||
</div> | ||
</header> | ||
)} | ||
</div> | ||
); | ||
}; | ||
|
||
<section id="about" className='flex flex-col my-16 sm:my-16 items-center'> | ||
<div className='text-2xl font-bold opacity-75'>About 3UM</div> | ||
<span className='opacity-75 text-center w-5/6 my-6'>3UM is a groundbreaking technology company revolutionizing how people interact with cutting-edge technologies such as Web3, AI, and quantum computing. As we prepare for our Series A funding and upcoming token launch, our primary focus is to raise capital for a global expansion and attract investors. To achieve this, we need to establish a robust online presence that demonstrates our commitment to making advanced technologies accessible and user-friendly. Our main objective is to create a website that not only showcases our innovative solutions but also provides an exceptional user experience through intuitive interface design and engaging content.</span> | ||
<Image alt='brain' src={brain} width={250} /> | ||
</section> | ||
const CompanyPage: React.FC = () => { | ||
const [scrollEnabled, setScrollEnabled] = useState(true); | ||
|
||
<section id="mission" className='flex flex-col my-16 items-center'> | ||
<div className='text-2xl font-bold opacity-75'>Mission & Vision</div> | ||
<span className='opacity-75 text-center w-5/6 my-6'>To achieve this, we need to establish a robust online presence that demonstrates our commitment to making advanced technologies accessible and user-friendly. Our main objective is to create a website that not only showcases our innovative solutions but also provides an exceptional user experience through intuitive interface design and engaging content.</span> | ||
</section> | ||
const handleMouseEnter = () => { | ||
setScrollEnabled(false); | ||
}; | ||
|
||
<section id="roadmap" className='flex flex-col my-16 items-center'> | ||
<div className='text-2xl font-bold opacity-75'>Roadmap</div> | ||
<span className='opacity-75 text-center w-5/6 my-6'>To achieve this, we need to establish a robust online presence that demonstrates our commitment to making advanced technologies accessible and user-friendly. Our main objective is to create a website that not only showcases our innovative solutions but also provides an exceptional user experience through intuitive interface design and engaging content.</span> | ||
<Image alt='roadmap' src={road_map} className='w-2/3' /> | ||
</section> | ||
|
||
<Career /> | ||
const handleMouseLeave = () => { | ||
setScrollEnabled(true); | ||
}; | ||
|
||
useEffect(() => { | ||
document.body.style.overflowY = scrollEnabled ? 'scroll' : 'hidden'; | ||
}, [scrollEnabled]); | ||
|
||
<section id="media" className='flex flex-col my-16 items-center'> | ||
<div className='text-2xl font-bold opacity-75'>Press & Media</div> | ||
|
||
{/*Mobile */} | ||
<div className='sm:hidden flex flex-col w-3/5 items-center mb-20'> | ||
<Image alt='logo' src={logo} width={100} className='object-contain mt-10' /> | ||
<span className=' text-blue-700 text-center cursor-pointer'>Download 3UM Logo Files</span> | ||
<span className='opacity-75 text-center my-6'>Download the 3UM logo including blue, white, and black versions. The blue version is preferred with the other colors available for readability on different backgrounds.</span> | ||
</div> | ||
|
||
|
||
{/*Desktop */} | ||
<div className='sm:flex hidden flex-row w-3/5 justify-between mb-20'> | ||
<span className='opacity-75 text-start w-2/3 my-6 relative'>Download the 3UM logo including blue, white, and black versions. The blue version is preferred with the other colors available for readability on different backgrounds. | ||
<span className='absolute text-blue-700 -bottom-8 -right-5 cursor-pointer'>Download 3UM Logo Files</span> | ||
</span> | ||
<Image alt='logo' src={logo} width={100} className='object-contain' /> | ||
return ( | ||
<div | ||
className="main-div min-h-[10000px] bg-white text-black pb-0 overflow-hidden" | ||
onMouseEnter={handleMouseEnter} | ||
onMouseLeave={handleMouseLeave} | ||
> | ||
<section className="px-6 py-16 md:py-24 lg:py-32 fixed w-full top-0 left-0"> | ||
<div className="relative mx-auto max-w-container md:lg:max-w-6xl lg:max-w-6xl"> | ||
<PageTitle title="The Company" /> | ||
<PageDescriptionAndModel | ||
description="At 3UM, we are revolutionizing the future with our intelligent infrastructure. Our mission is to build groundbreaking businesses across key technologies, AI, blockchain, and quantum computing, providing investors and industry with advanced tools and solutions. We aim to create an intelligent ecosystem that empowers users to connect, learn, and grow, driving sustainable progress and creating new opportunities." | ||
/> | ||
</div> | ||
|
||
<Media /> | ||
</section> | ||
<section className="min-h-screen"></section> | ||
</div> | ||
); | ||
}; | ||
|
||
<section id="contact" className='flex flex-col my-16 items-center'> | ||
<div className='text-2xl font-bold opacity-75'>Contact us</div> | ||
<span className='opacity-75 text-center sm:w-2/3 w-full my-6'>Thank you for your interest in 3UM. Please use the form below to submit your inquiry, and our team will respond as soon as we can.</span> | ||
<Form /> | ||
</section> | ||
|
||
|
||
</> | ||
) | ||
} | ||
|
||
export default page | ||
export default CompanyPage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
|
||
export const KeyTechnologiesSection: React.FC = () => { | ||
return ( | ||
<div className="key-technologies-section bg-gray-200 p-8 rounded-lg shadow-lg"> | ||
<h2 className="text-2xl font-bold mb-4">Key Technologies</h2> | ||
<p className="text-lg mb-4">At 3UM, we leverage cutting-edge technologies to drive innovation and create intelligent solutions:</p> | ||
<ul className="list-disc list-inside"> | ||
<li className="text-lg mb-2"> | ||
<strong>Artificial Intelligence:</strong> Implementing advanced AI algorithms to optimize processes and enhance user experiences. | ||
</li> | ||
<li className="text-lg mb-2"> | ||
<strong>Blockchain:</strong> Utilizing blockchain technology for secure and transparent transactions, ensuring data integrity. | ||
</li> | ||
<li className="text-lg mb-2"> | ||
<strong>Quantum Computing:</strong> Exploring quantum computing to solve complex problems faster and more efficiently. | ||
</li> | ||
</ul> | ||
</div> | ||
); | ||
}; | ||
|
||
interface TeamMember { | ||
name: string; | ||
position: string; | ||
photo: string; | ||
} | ||
|
||
const teamMembers: TeamMember[] = [ | ||
{ | ||
name: 'John Doe', | ||
position: 'CEO', | ||
photo: '/assets/team/john_doe.jpg', | ||
}, | ||
{ | ||
name: 'Jane Smith', | ||
position: 'CTO', | ||
photo: '/assets/team/jane_smith.jpg', | ||
}, | ||
{ | ||
name: 'Alice Johnson', | ||
position: 'Lead Developer', | ||
photo: '/assets/team/alice_johnson.jpg', | ||
}, | ||
]; | ||
|
||
export const TeamSection: React.FC = () => { | ||
return ( | ||
<div className="team-section bg-gray-100 p-8 rounded-lg shadow-lg mt-32"> | ||
<h2 className="text-3xl font-bold mb-8 text-center">Meet Our Team</h2> | ||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> | ||
{teamMembers.map((member, index) => ( | ||
<div key={index} className="team-member text-center"> | ||
<img | ||
src={member.photo} | ||
alt={member.name} | ||
className="w-32 h-32 rounded-full mx-auto mb-4" | ||
/> | ||
<h3 className="text-xl font-semibold">{member.name}</h3> | ||
<p className="text-gray-600">{member.position}</p> | ||
</div> | ||
))} | ||
</div> | ||
</div> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
'use client'; | ||
|
||
import React, { useEffect, useState } from 'react'; | ||
|
||
const ClientOnly: React.FC<{ children: React.ReactNode }> = ({ children }) => { | ||
const [hasMounted, setHasMounted] = useState(false); | ||
|
||
useEffect(() => { | ||
setHasMounted(true); | ||
}, []); | ||
|
||
if (!hasMounted) { | ||
return null; | ||
} | ||
|
||
return <>{children}</>; | ||
}; | ||
|
||
export default ClientOnly; |
Oops, something went wrong.