diff --git a/v2/package-lock.json b/v2/package-lock.json
index 509021c..8f410a3 100644
--- a/v2/package-lock.json
+++ b/v2/package-lock.json
@@ -13,6 +13,7 @@
"@types/react-dom": "18.2.4",
"autoprefixer": "10.4.14",
"class-variance-authority": "^0.6.0",
+ "embla-carousel-react": "^8.0.0-rc17",
"eslint": "8.40.0",
"eslint-config-next": "13.4.2",
"framer-motion": "^10.12.12",
@@ -1228,6 +1229,31 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.394.tgz",
"integrity": "sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw=="
},
+ "node_modules/embla-carousel": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.0.0-rc17.tgz",
+ "integrity": "sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ=="
+ },
+ "node_modules/embla-carousel-react": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.0.0-rc17.tgz",
+ "integrity": "sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==",
+ "dependencies": {
+ "embla-carousel": "8.0.0-rc17",
+ "embla-carousel-reactive-utils": "8.0.0-rc17"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.1 || ^18.0.0"
+ }
+ },
+ "node_modules/embla-carousel-reactive-utils": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0-rc17.tgz",
+ "integrity": "sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==",
+ "peerDependencies": {
+ "embla-carousel": "8.0.0-rc17"
+ }
+ },
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -5259,6 +5285,26 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.394.tgz",
"integrity": "sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw=="
},
+ "embla-carousel": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.0.0-rc17.tgz",
+ "integrity": "sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ=="
+ },
+ "embla-carousel-react": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.0.0-rc17.tgz",
+ "integrity": "sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==",
+ "requires": {
+ "embla-carousel": "8.0.0-rc17",
+ "embla-carousel-reactive-utils": "8.0.0-rc17"
+ }
+ },
+ "embla-carousel-reactive-utils": {
+ "version": "8.0.0-rc17",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0-rc17.tgz",
+ "integrity": "sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==",
+ "requires": {}
+ },
"emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
diff --git a/v2/package.json b/v2/package.json
index d1e7370..286d286 100644
--- a/v2/package.json
+++ b/v2/package.json
@@ -14,6 +14,7 @@
"@types/react-dom": "18.2.4",
"autoprefixer": "10.4.14",
"class-variance-authority": "^0.6.0",
+ "embla-carousel-react": "^8.0.0-rc17",
"eslint": "8.40.0",
"eslint-config-next": "13.4.2",
"framer-motion": "^10.12.12",
diff --git a/v2/src/Components/Container/Container.tsx b/v2/src/Components/Container/Container.tsx
index 7bd1537..ae6bd14 100644
--- a/v2/src/Components/Container/Container.tsx
+++ b/v2/src/Components/Container/Container.tsx
@@ -4,11 +4,13 @@ interface Props {
children: JSX.Element | JSX.Element[];
wide?: boolean;
className?: string;
+ id?: string;
}
-export default function Container({ children, wide, className }: Props) {
+export default function Container({ id, children, wide, className }: Props) {
return (
diff --git a/v2/src/Components/NavLink/NavLink.tsx b/v2/src/Components/NavLink/NavLink.tsx
index d0006da..ec9de88 100644
--- a/v2/src/Components/NavLink/NavLink.tsx
+++ b/v2/src/Components/NavLink/NavLink.tsx
@@ -8,10 +8,12 @@ type LinkProps = ComponentProps
;
type Props = LinkProps & {
activeClassName?: string | undefined;
+ isExternal?: boolean;
};
export default function NavLink({
className,
+ isExternal,
activeClassName,
children,
...props
@@ -23,7 +25,11 @@ export default function NavLink({
}`;
return (
-
+
{children}
);
diff --git a/v2/src/Components/Navbar/Navbar.tsx b/v2/src/Components/Navbar/Navbar.tsx
index 92cba9c..751a65e 100644
--- a/v2/src/Components/Navbar/Navbar.tsx
+++ b/v2/src/Components/Navbar/Navbar.tsx
@@ -8,21 +8,29 @@ import Container from "../Container/Container";
import NavLink from "../NavLink/NavLink";
const links = [
+ {
+ text: "Projects",
+ href: "/#projects",
+ },
{
text: "Twitter",
href: "https://twitter.com/peakshift",
+ isExternal: true,
},
{
text: "BOLT.FUN",
href: "https://bolt.fun",
+ isExternal: true,
},
{
text: "Contact",
href: "mailto:team@peakshift.com",
+ isExternal: true,
},
{
text: "Book Consultation",
href: "https://calendly.com/johnsbeharry",
+ isExternal: true,
},
];
@@ -101,8 +109,7 @@ export default function Navbar() {
className={`md:pr-20 block font-normal uppercase hover:text-primary`}
activeClassName="text-primary"
href={link.href}
- target="_blank"
- rel="noopener noreferrer"
+ isExternal={link.isExternal}
>
/ {link.text}
@@ -155,6 +162,8 @@ export default function Navbar() {
className={`md:pr-20 block font-normal uppercase hover:text-primary`}
activeClassName="text-primary"
href={link.href}
+ isExternal={link.isExternal}
+ onClick={toggleNav}
>
/
diff --git a/v2/src/Components/ProjectsSelect/ProjectsSelect.tsx b/v2/src/Components/ProjectsSelect/ProjectsSelect.tsx
index 4d860d4..8439827 100644
--- a/v2/src/Components/ProjectsSelect/ProjectsSelect.tsx
+++ b/v2/src/Components/ProjectsSelect/ProjectsSelect.tsx
@@ -1,48 +1,66 @@
+"use client";
import React from "react";
import { projects } from "./projects";
import Link from "next/link";
import { serifText } from "@/assets/fonts";
import Image from "next/image";
+import useEmblaCarousel from "embla-carousel-react";
-export default function ProjectsSelect() {
- const options = projects;
+interface Props {
+ excludeProjects?: string[];
+}
+
+export default function ProjectsSelect({ excludeProjects }: Props) {
+ const [emblaRef] = useEmblaCarousel();
+
+ const options = projects.filter(
+ (project) => !excludeProjects?.includes(project.slug)
+ );
return (
-
- {options.map((option) => (
- -
-
-
-
-
{option.tagline}
-
{option.title}
-
-
- {option.tags.map((tag) => (
-
- / {tag}
+
+
+ {options.map((option, idx) => (
+ -
+
+
+
+
{option.tagline}
+
+ {option.title}
- ))}
+
+
+ {option.tags.map((tag) => (
+
+ / {tag}
+
+ ))}
+
+
+
+
-
-
-
-
-
-
- ))}
-
+
+
+ ))}
+
+
);
}
diff --git a/v2/src/Components/ProjectsSelect/projects.ts b/v2/src/Components/ProjectsSelect/projects.ts
index edc599e..f2ff8b3 100644
--- a/v2/src/Components/ProjectsSelect/projects.ts
+++ b/v2/src/Components/ProjectsSelect/projects.ts
@@ -1,6 +1,8 @@
import { StaticImageData } from "next/image";
import AdoptingBitcoinImage from "@/assets/images/projects/adopting-bitcoin.jpg";
+import AI4ALLImage from "@/assets/images/projects/ai4all.jpg";
+import BoltFunImage from "@/assets/images/projects/bolt-fun.jpg";
type Project = {
title: string;
@@ -10,6 +12,7 @@ type Project = {
image: StaticImageData;
backgroundColor?: string;
backgroundImage?: string;
+ externalLink?: string;
};
export const projects: Project[] = [
@@ -21,4 +24,22 @@ export const projects: Project[] = [
backgroundColor: "#EADC72",
image: AdoptingBitcoinImage,
},
+ {
+ title: "AI4ALL",
+ slug: "ai4all",
+ tagline: "DEMOCRATISING ACCESS TO AI",
+ tags: ["experience", "brand"],
+ backgroundColor: "#FF6B00",
+ image: AI4ALLImage,
+ externalLink: "https://bolt.fun/tournaments/ai4all",
+ },
+ {
+ title: "BOLT.FUN",
+ slug: "bolt-fun",
+ tagline: "BUILDING A VIRTUAL INCUBATOR HELPING FOUNDERS GO FROM 0-1",
+ tags: ["experience", "community"],
+ backgroundColor: "#AF59FE",
+ image: BoltFunImage,
+ externalLink: "https://bolt.fun",
+ },
];
diff --git a/v2/src/app/home/Projects.tsx b/v2/src/app/home/Projects.tsx
index 3ea0453..6156017 100644
--- a/v2/src/app/home/Projects.tsx
+++ b/v2/src/app/home/Projects.tsx
@@ -5,7 +5,7 @@ import React from "react";
export default function Projects() {
return (
-
+
-
+
- {/* */}
+
diff --git a/v2/src/app/project/adopting-bitcoin/page.styles.css b/v2/src/app/project/adopting-bitcoin/page.styles.css
new file mode 100644
index 0000000..0270565
--- /dev/null
+++ b/v2/src/app/project/adopting-bitcoin/page.styles.css
@@ -0,0 +1,7 @@
+body:has(#adopting-bitcoin-page) {
+ --page-bg-color: #eedb5f;
+ --text-color: #000;
+ --frame-color: #000;
+ --footer-bg-color: #eedb5f;
+ --footer-text-color: #000;
+}
diff --git a/v2/src/app/project/adopting-bitcoin/page.tsx b/v2/src/app/project/adopting-bitcoin/page.tsx
index 01a2926..eaa10a4 100644
--- a/v2/src/app/project/adopting-bitcoin/page.tsx
+++ b/v2/src/app/project/adopting-bitcoin/page.tsx
@@ -13,6 +13,7 @@ import AdoptingBitcoinWireframe from "./assets/adopting-bitcoin-wireframe.svg";
import AdoptingBitcoinPosterImage from "./assets/adopting-bitcoin-poster.jpg";
import ScatteredCardsImage from "./assets/scattered-cards.png";
import MerchImage from "./assets/merch.png";
+import "./page.styles.css";
import { condensedHeadings, monoText, serifText } from "@/assets/fonts";
import ColorsPalette from "../Components/ColorsPalette";
@@ -27,14 +28,7 @@ export const metadata: Metadata = {
export default function AdoptingBitcoinPage() {
return (
<>
-
-
+
-
+
>
@@ -323,12 +317,6 @@ export default function AdoptingBitcoinPage() {
}
const projectData = {
- colors: {
- pageColor: "#EEDB5F",
- frameColor: "#000",
- footerBackgroundColor: "#EEDB5F",
- footerTextColor: "#000",
- },
tags: ["branding", "identity", "website"],
client: "Galoy INC",
year: "2023",
diff --git a/v2/src/assets/images/projects/ai4all.jpg b/v2/src/assets/images/projects/ai4all.jpg
new file mode 100644
index 0000000..e0017d8
Binary files /dev/null and b/v2/src/assets/images/projects/ai4all.jpg differ
diff --git a/v2/src/assets/images/projects/bolt-fun.jpg b/v2/src/assets/images/projects/bolt-fun.jpg
new file mode 100644
index 0000000..ad320d1
Binary files /dev/null and b/v2/src/assets/images/projects/bolt-fun.jpg differ