diff --git a/Components/Elements/ContactThreeJsComponent.jsx b/Components/Elements/ContactThreeJsComponent.jsx
new file mode 100644
index 0000000..0fbc1ae
--- /dev/null
+++ b/Components/Elements/ContactThreeJsComponent.jsx
@@ -0,0 +1,98 @@
+import React, { useRef, useEffect, useState } from 'react';
+import * as THREE from 'three';
+import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
+import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
+import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
+import { RGBShiftShader } from 'three/examples/jsm/shaders/RGBShiftShader.js';
+import { DotScreenShader } from 'three/examples/jsm/shaders/DotScreenShader.js';
+
+const ContactThreeJsComponent = React.memo(() => {
+ const [isMounted, setIsMounted] = useState(false);
+ const mountRef = useRef(null);
+
+ useEffect(() => {
+ setIsMounted(true);
+
+ if (isMounted) {
+ console.log("useEffect called");
+ let camera, renderer, composer;
+ let object;
+
+ function init() {
+ renderer = new THREE.WebGLRenderer();
+ renderer.setPixelRatio(window.devicePixelRatio);
+ renderer.setSize(window.innerWidth, window.innerHeight);
+ mountRef.current.appendChild(renderer.domElement);
+
+ camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);
+ camera.position.z = 400;
+
+ const scene = new THREE.Scene();
+ scene.fog = new THREE.Fog(0x000000, 1, 1000);
+
+ object = new THREE.Object3D();
+ scene.add(object);
+
+ const geometry = new THREE.SphereGeometry(1, 4, 4);
+ const material = new THREE.MeshPhongMaterial({ color: 0xffffff, flatShading: true });
+
+ for (let i = 0; i < 100; i++) {
+ const mesh = new THREE.Mesh(geometry, material);
+ mesh.position.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5).normalize();
+ mesh.position.multiplyScalar(Math.random() * 400);
+ mesh.rotation.set(Math.random() * 2, Math.random() * 2, Math.random() * 2);
+ mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 50;
+ object.add(mesh);
+ }
+
+ scene.add(new THREE.AmbientLight(0x222222));
+
+ const light = new THREE.DirectionalLight(0xffffff);
+ light.position.set(1, 1, 1);
+ scene.add(light);
+
+ composer = new EffectComposer(renderer);
+ composer.addPass(new RenderPass(scene, camera));
+
+ const effect1 = new ShaderPass(DotScreenShader);
+ effect1.uniforms['scale'].value = 4;
+ composer.addPass(effect1);
+
+ const effect2 = new ShaderPass(RGBShiftShader);
+ effect2.uniforms['amount'].value = 0.0015;
+ composer.addPass(effect2);
+
+ window.addEventListener('resize', onWindowResize);
+ }
+
+ function onWindowResize() {
+ camera.aspect = window.innerWidth / window.innerHeight;
+ camera.updateProjectionMatrix();
+
+ renderer.setSize(window.innerWidth, window.innerHeight);
+ composer.setSize(window.innerWidth, window.innerHeight);
+ }
+
+ function animate() {
+ requestAnimationFrame(animate);
+ object.rotation.x += 0.005;
+ object.rotation.y += 0.01;
+ composer.render();
+ }
+
+ init();
+ animate();
+
+ return () => {
+ // cleanup logic
+ window.removeEventListener('resize', onWindowResize);
+ renderer.dispose();
+ composer.dispose();
+ };
+ }
+ }, [isMounted]);
+
+ return
;
+});
+
+export default ContactThreeJsComponent;
diff --git a/Components/Layout/ContactFormSection.jsx b/Components/Layout/ContactFormSection.jsx
new file mode 100644
index 0000000..7f53426
--- /dev/null
+++ b/Components/Layout/ContactFormSection.jsx
@@ -0,0 +1,36 @@
+import VideoButton from "/home/clyde/Code/shiloh/Components/Buttons/video-button.jsx";
+import Link from "next/link";
+import ContactThreeJsComponent from "../Elements/ContactThreeJsComponent.jsx";
+
+const ContactFormSection = ({
+ text,
+ videoId,
+ buttonOneText,
+ buttonTwoText,
+ buttonLink = "/", // add a default value,
+}) => {
+
+ return (
+
+
+
+
+
+
+
{text}
+
+
+
+
+ {buttonTwoText}
+
+
+
+
+ );
+};
+
+export default ContactFormSection;
\ No newline at end of file
diff --git a/Components/Layout/sub-section.jsx b/Components/Layout/sub-section.jsx
new file mode 100644
index 0000000..92e1a8a
--- /dev/null
+++ b/Components/Layout/sub-section.jsx
@@ -0,0 +1,18 @@
+import Link from "next/link";
+
+const SubSection = ({ h2Text, p1Text, h3Text, p2Text }) => {
+ return (
+
+
+
+
{h2Text}
+
+
{p1Text}
+
{h3Text}
+
{p2Text}
+
+
+ );
+};
+
+export default SubSection;
diff --git a/package-lock.json b/package-lock.json
index 607c367..8533439 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,15 +12,18 @@
"animejs": "^3.2.1",
"autoprefixer": "10.4.14",
"framer-motion": "^10.12.4",
+ "grid": "^4.10.8",
"next": "13.3.0",
"observer": "^0.0.2",
+ "pagination": "^0.4.6",
"postcss": "8.4.22",
"react": "^18.2.0",
"react-dom": "18.2.0",
"react-intersection-observer": "^9.4.3",
"react-modal-video": "^2.0.0",
"react-player": "^2.12.0",
- "tailwindcss": "3.3.1"
+ "tailwindcss": "3.3.1",
+ "three": "^0.151.3"
}
},
"node_modules/@ampproject/remapping": {
@@ -2187,6 +2190,11 @@
}
]
},
+ "node_modules/capitalize": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/capitalize/-/capitalize-0.5.0.tgz",
+ "integrity": "sha512-PaTkpRT5BKne4tmt7a80HqCikvZCOKKbHkZIycqo77VSKfY/mGW3foKUky6Gi/6MsZmYegctEakY7o5YZXwz5w=="
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -2360,6 +2368,11 @@
"node": ">= 10"
}
},
+ "node_modules/click-off": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/click-off/-/click-off-0.2.1.tgz",
+ "integrity": "sha512-EL4RXbrwIr/Sv3tcvnm5gVGqix8vna4X9q9nm3vZ2co9PmRVwH7XVdd+0sJLZZ/HZQaBPvF9fNRrWeUlBfRgvg=="
+ },
"node_modules/client-only": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
@@ -3181,6 +3194,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/element-class": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/element-class/-/element-class-0.1.1.tgz",
+ "integrity": "sha512-jUN7QxMb2Yv255s/5DYSD0UZoAqC/J1tLVbbYAqzrwDp+yrTcjh6QfinLJEw0lT2h1R23wk27Vcfm/66LfXiIg==",
+ "dependencies": {
+ "inherits": "~1.0.0"
+ }
+ },
+ "node_modules/element-class/node_modules/inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha512-Al67oatbRSo3RV5hRqIoln6Y5yMVbJSIn4jEJNL7VCImzq/kLr7vvb6sFRJXqr8rpHc/2kJOM+y0sPKN47VdzA=="
+ },
"node_modules/elliptic": {
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
@@ -3392,6 +3418,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es6-object-assign": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
+ "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="
+ },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -3416,6 +3447,11 @@
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
+ "node_modules/escape-stack": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/escape-stack/-/escape-stack-0.1.2.tgz",
+ "integrity": "sha512-nP/9OVJS7anQGhIYsVhWv1pXtwiuMB5E/N73iux0yjuOpwv5bDvOrtyMGOdB4uz4AYVnDGpe9wqSIOL72X13DA=="
+ },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -4497,6 +4533,24 @@
"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
},
+ "node_modules/grid": {
+ "version": "4.10.8",
+ "resolved": "https://registry.npmjs.org/grid/-/grid-4.10.8.tgz",
+ "integrity": "sha512-OKq4zhEj0ojpV+DyskQLpaGr8mSa1ZgA753NPTlJ67xeagqUA0tUjhDg3s0kEF0dEOigxVQ/cWjBMNfzcExtyg==",
+ "dependencies": {
+ "capitalize": "^0.5.0",
+ "click-off": "~0.2.1",
+ "element-class": "^0.1.1",
+ "es6-object-assign": "~1.1.0",
+ "escape-stack": "~0.1.2",
+ "inner-text-shim": "~1.0.1",
+ "key": "^0.1.11",
+ "time-now": "~0.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -5010,6 +5064,11 @@
"source-map": "~0.5.3"
}
},
+ "node_modules/inner-text-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/inner-text-shim/-/inner-text-shim-1.0.1.tgz",
+ "integrity": "sha512-8phW5hjjTpaxobktHFpW0YJcerSc5YS27lPSiF06LJmp5c7/Cms0zw8YORNE3Uy3+pOVjLLHApYA4KEIJiAh3Q=="
+ },
"node_modules/inquirer": {
"version": "7.3.3",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
@@ -5927,6 +5986,11 @@
"node": ">=4.0"
}
},
+ "node_modules/key": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/key/-/key-0.1.11.tgz",
+ "integrity": "sha512-VCXx+Fo7vtA4/TnNJZg3znjQ9br6egswvnvObuu5gQfgsGay7kpxgbnqZk51y68qLceOYbR0/CUphWfMr9H09w=="
+ },
"node_modules/keyv": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
@@ -8263,6 +8327,11 @@
"node": ">=6"
}
},
+ "node_modules/pagination": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/pagination/-/pagination-0.4.6.tgz",
+ "integrity": "sha512-TnZ3l17uuC5H9Wlc9FMYuEi65JlUCSn1ZAbnLnvUGkR7RgaFknUNGQTEumhjq1Jy1ePkXSiYUFFbHH70LGb9dA=="
+ },
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -10489,6 +10558,11 @@
"node": ">=0.8"
}
},
+ "node_modules/three": {
+ "version": "0.151.3",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.151.3.tgz",
+ "integrity": "sha512-+vbuqxFy8kzLeO5MgpBHUvP/EAiecaDwDuOPPDe6SbrZr96kccF0ktLngXc7xA7bzyd3N0t2f6mw3Z9y6JCojQ=="
+ },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -10503,6 +10577,11 @@
"xtend": "~4.0.1"
}
},
+ "node_modules/time-now": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/time-now/-/time-now-0.2.1.tgz",
+ "integrity": "sha512-DVmKHeai63/4uu1//Ao8HyXOY6jmZYuhk3hng6KwY0y8sa+f8gYPu9UIG58JcRH+sMhcms7iFSEa7TqsUhZeig=="
+ },
"node_modules/timers-browserify": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
diff --git a/package.json b/package.json
index 55b887b..45eab89 100644
--- a/package.json
+++ b/package.json
@@ -13,14 +13,17 @@
"animejs": "^3.2.1",
"autoprefixer": "10.4.14",
"framer-motion": "^10.12.4",
+ "grid": "^4.10.8",
"next": "13.3.0",
"observer": "^0.0.2",
+ "pagination": "^0.4.6",
"postcss": "8.4.22",
"react": "^18.2.0",
"react-dom": "18.2.0",
"react-intersection-observer": "^9.4.3",
"react-modal-video": "^2.0.0",
"react-player": "^2.12.0",
- "tailwindcss": "3.3.1"
+ "tailwindcss": "3.3.1",
+ "three": "^0.151.3"
}
}
diff --git a/pages/about.js b/pages/about.js
index 00d0c3c..ea9b71a 100644
--- a/pages/about.js
+++ b/pages/about.js
@@ -1,7 +1,8 @@
import React from "react";
import Navbar from "../Components/Layout/navbar.jsx";
-import Section from "../Components/Layout/section.jsx"
-
+import Section from "../Components/Layout/section.jsx";
+import SubSection from "../Components/Layout/sub-section.jsx";
+import ContactFormSection from "@/Components/Layout/ContactFormSection.jsx";
export default function Home() {
return (
<>
@@ -10,9 +11,33 @@ export default function Home() {
key="aboutSection0"
videoUrl="https://vid.puffyan.us/latest_version?id=--khbXchTeE&itag=22"
text="about"
- buttonTwoText="learn more"
- buttonOneText="watch" videoId="uu01xBw_BVE"
+ buttonTwoText="reach out"
+ buttonOneText="watch"
+ videoId="uu01xBw_BVE"
/>
- >
+
+
+
+
+
+ >
);
}
diff --git a/pages/index.js b/pages/index.js
index 3caa4b4..57a00a7 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -3,7 +3,6 @@ import React from "react";
import Navbar from "../Components/Layout/navbar.jsx";
import Section from "../Components/Layout/section.jsx"
-
export default function Home() {
return (
<>
diff --git a/styles/globals.css b/styles/globals.css
index 7eddeb5..217e0fd 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -5,7 +5,7 @@
:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 39,40,34;
- --background-end-rgb:117,113,94;
+ --background-end-rgb:39,40,34;
}
@media (prefers-color-scheme: dark) {
diff --git a/tailwind.config.js b/tailwind.config.js
index e9a97d2..9bf7dca 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -54,6 +54,10 @@ module.exports = {
"px-5",
"text-base",
"px-2",
+ "text-5xl",
+ "mx-4",
+ "px-2",
+
],
theme: {
extend: {