- pdf is loaded on page

- added links to github, linkedin, gitea, and bside website
- adjusted styling and added footer block
This commit is contained in:
oonyeje 2023-11-27 21:33:12 -05:00
parent 5f715a1ce9
commit 99183d9162
11 changed files with 91 additions and 59 deletions

View File

@ -4,6 +4,7 @@ import { StaticImport } from "next/dist/shared/lib/get-img-props";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faChevronCircleLeft, faChevronCircleRight } from "@fortawesome/free-solid-svg-icons";
import IframeResizer from "iframe-resizer-react";
import Link from "next/link";
interface ContentCarouselProps {
data: Array<{
@ -28,19 +29,19 @@ const ContentCarousel = ({
<div className=" w-fit pb-1 mb-8 border-b-2 border-white">{portfolioData.title}</div>
{portfolioData.heroImgSrc && <div className="mb-8"><Image src={portfolioData.heroImgSrc} alt=""/></div>}
<div>{portfolioData.description}</div>
{portfolioData.prototypeIframeURL && <div style={{height: 1000, minHeight: '100%'}}>
{<IframeResizer
{portfolioData.prototypeIframeURL && <div style={{height: 100, minHeight: '100%'}} className="flex flex-row justify-center">
{/* {<embed
src={portfolioData.prototypeIframeURL}
log
style={{
width: "100%",
minWidth: "100%",
minHeight: '100%',
height: '1px'
}}
frameBorder= "0"
/>}
/>} */}
<Link href={portfolioData.prototypeIframeURL} target="#">
{portfolioData.title}
</Link>
</div>}
</div>
{(currentPageIdx < pageLength - 1) && <span className="cursor-pointer" onClick={() => setCurrentPageIdx(currentPageIdx + 1)}><FontAwesomeIcon width={25} height={50} icon={faChevronCircleRight} className="fas fa-chevron-circle-right" style={{ color: "white" }} /></span>}

View File

@ -4,10 +4,11 @@ import { StaticImport } from "next/dist/shared/lib/get-img-props";
interface ContentProps {
title: string,
heroImgSrc: string | StaticImport,
heroImgSrc: string | StaticImport | null,
description?: string,
innerChildren?: ReactNode
}
const Content = ({
title = '',
heroImgSrc = '',
@ -17,7 +18,7 @@ const Content = ({
return (
<div className="p-4 px-10 flex flex-col">
<div className=" w-fit pb-1 mb-8 border-b-2 border-white">{title}</div>
{heroImgSrc && <div className="mb-8 h-1/2"><Image src={heroImgSrc} alt=""/></div>}
{heroImgSrc && <div className="mb-8 h-full flex flex-row justify-center"><Image height={200} src={heroImgSrc} alt=""/></div>}
<div>{description}</div>
<div>{innerChildren}</div>
</div>

8
components/footer.tsx Normal file
View File

@ -0,0 +1,8 @@
import React from "react";
export default function Footer({}) {
return (
<div className="w-full bg-black h-12">
</div>
);
};

View File

@ -1,13 +1,15 @@
// import Navbar from './navbar'
// import Footer from './footer'
import Navbar from './navbar'
import Footer from './footer'
import React from 'react'
export default function Layout({ children }) {
return (
<>
{/* <Navbar /> */}
<main>{children}</main>
{/* <Footer /> */}
</>
<div style={{height: '100vh', width: '100vw'}}>
<Navbar />
<main style={{height: '86%'}}>
{children}
</main>
<Footer />
</div>
)
}

23
components/navbar.tsx Normal file
View File

@ -0,0 +1,23 @@
import Link from "next/link";
import React from "react";
export default function Navbar({}) {
return (
<div className="text-white w-full middle align-middle bg-black h-11">
<div className="h-full flex flex-col justify-center">
<div className="flex flex-row justify-between ml-2">
<div>
Okechi Onyeje
</div>
<div className="flex flex-row gap-4 mr-2">
<Link href="https://www.linkedin.com/in/okechi-onyeje-57129b9a/">LinkedIn</Link>
<span className="flex flex-row">
<Link href="https://github.com/oonyeje">Github</Link>/
<Link href="https://gitea.bsidesolutions.net/oonyeje">Gitea</Link>
</span>
{/* <Link href="https://bsidesol.com">BSide</Link> */}
</div>
</div>
</div>
</div>
);
};

View File

@ -1,15 +1,10 @@
const contentValues = {
intro: {
name: 'INTRO',
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Rhoncus urna neque viverra justo nec ultrices dui. Quis risus sed vulputate odio ut. Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit. Mi ipsum faucibus vitae aliquet nec. Adipiscing elit ut aliquam purus sit amet luctus. Morbi tempus iaculis urna id. Vitae congue mauris rhoncus aenean vel elit scelerisque. Cursus turpis massa tincidunt dui. Vulputate sapien nec sagittis aliquam malesuada. Lectus proin nibh nisl condimentum id venenatis a condimentum. Est lorem ipsum dolor sit amet consectetur. Blandit aliquam etiam erat velit.
Vel turpis nunc eget lorem dolor. Volutpat commodo sed egestas egestas fringilla phasellus faucibus. Auctor eu augue ut lectus arcu bibendum. Suscipit tellus mauris a diam maecenas sed enim ut sem. Vivamus at augue eget arcu dictum varius. Vitae et leo duis ut diam quam nulla porttitor. Enim eu turpis egestas pretium. A diam sollicitudin tempor id eu nisl nunc mi. Venenatis cras sed felis eget. Sagittis eu volutpat odio facilisis mauris sit amet massa vitae. Tempor orci eu lobortis elementum nibh tellus molestie. Semper auctor neque vitae tempus quam pellentesque nec nam. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. Tristique nulla aliquet enim tortor. Volutpat commodo sed egestas egestas fringilla phasellus. Enim ut sem viverra aliquet eget sit amet tellus cras. Cras semper auctor neque vitae tempus quam.
In nibh mauris cursus mattis molestie. Vivamus arcu felis bibendum ut tristique et egestas quis ipsum. Dolor purus non enim praesent elementum facilisis leo. Enim ut tellus elementum sagittis. Sed libero enim sed faucibus turpis in. Ac turpis egestas maecenas pharetra convallis posuere morbi leo. Nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Arcu dictum varius duis at consectetur lorem donec massa. Tellus cras adipiscing enim eu turpis egestas pretium. Phasellus faucibus scelerisque eleifend donec pretium vulputate. Sollicitudin nibh sit amet commodo nulla facilisi nullam. Bibendum enim facilisis gravida neque convallis. Quis viverra nibh cras pulvinar mattis nunc. Quam nulla porttitor massa id neque aliquam vestibulum. Pharetra diam sit amet nisl suscipit adipiscing bibendum est ultricies. Faucibus turpis in eu mi bibendum neque. Curabitur gravida arcu ac tortor. Purus sit amet luctus venenatis lectus magna fringilla. Tincidunt vitae semper quis lectus nulla at volutpat. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis.
Mi quis hendrerit dolor magna eget est lorem. Ut lectus arcu bibendum at. Elit at imperdiet dui accumsan sit amet nulla. Tristique et egestas quis ipsum suspendisse ultrices. A arcu cursus vitae congue. Dolor sed viverra ipsum nunc aliquet bibendum enim facilisis. Nec dui nunc mattis enim ut tellus elementum sagittis. Posuere ac ut consequat semper. Eu non diam phasellus vestibulum lorem sed risus. Arcu ac tortor dignissim convallis aenean et tortor at. Velit scelerisque in dictum non consectetur a erat. Condimentum mattis pellentesque id nibh. Quam quisque id diam vel quam. At lectus urna duis convallis convallis tellus id interdum velit. Aliquam vestibulum morbi blandit cursus risus at ultrices. Ullamcorper velit sed ullamcorper morbi tincidunt ornare massa. Mattis molestie a iaculis at erat pellentesque adipiscing. In nulla posuere sollicitudin aliquam ultrices sagittis. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique.
Amet consectetur adipiscing elit ut aliquam purus sit amet luctus. Et ultrices neque ornare aenean euismod elementum. Orci sagittis eu volutpat odio. Vitae aliquet nec ullamcorper sit amet risus nullam. A scelerisque purus semper eget duis at. Risus viverra adipiscing at in tellus integer feugiat scelerisque varius. Quis auctor elit sed vulputate. Enim ut sem viverra aliquet eget sit. Nulla aliquet porttitor lacus luctus. Mi sit amet mauris commodo quis imperdiet. Ac felis donec et odio pellentesque diam volutpat commodo sed. Lacus viverra vitae congue eu consequat ac felis donec et. Facilisis magna etiam tempor orci eu lobortis elementum nibh tellus. Velit egestas dui id ornare arcu.`
description: `A seasoned software developer and architect, building bespoke software solutions\n
for the modern small business. With almost a decade of experience in mobile and web development\n
in both the website hosting and streaming media industries, you can trust me to deliver your next\n
project venture or business need.`
},
work: {
name: 'WORK',

View File

@ -5,9 +5,8 @@ import ContentCarousel from '../components/content/carousel';
import ContactForm from '../components/form/ContactForm';
import contentValues from './content';
import portfolioValues from './portfolio';
import { pdfjs, Document, Page } from 'react-pdf';
const resumePdf = '../public/assets/Okechi_Onyeje_Resume_Professional_2023.pdf'
const resumePdf: string = '/assets/Okechi_Onyeje_Resume_Professional_2023.pdf'
export default [
{
@ -24,16 +23,14 @@ export default [
url: '#work',
content: <Content
title='Work'
heroImgSrc={backgroundPic}
heroImgSrc={null}
description={contentValues.work.description}
innerChildren={
<div>
<Document
file={resumePdf}
/>
<ContentCarousel
data={portfolioValues}
/>
<embed className='w-full' src={resumePdf} type="application/pdf"/>
</div>
}
/>

View File

@ -5,12 +5,12 @@ const portfolioValues = [
description: '',
prototypeIframeURL: 'https://www.kroleo.com/invision/Vendoo/#/screens'
},
{
title: 'Garage2Garage',
heroImgSrc: '',
description: '',
prototypeIframeURL: ''
},
// {
// title: 'Garage2Garage',
// heroImgSrc: '',
// description: '',
// prototypeIframeURL: ''
// },
{
title: 'Aqua',
heroImgSrc: '',

View File

@ -14,6 +14,7 @@
"@fortawesome/react-fontawesome": "^0.2.0",
"iframe-resizer-react": "^1.1.0",
"next": "latest",
"pdfjs-dist": "^4.0.269",
"react": "latest",
"react-dom": "latest",
"react-hook-form": "^7.47.0",

View File

@ -5,7 +5,6 @@ import { Inter } from 'next/font/google'
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faGem } from "@fortawesome/free-solid-svg-icons";
import navigationContent from '../lib/navigationContent'
import Modal from 'react-modal';
const inter = Inter({ subsets: ['latin'] })
export default function Home() {
@ -26,13 +25,13 @@ export default function Home() {
}
const [showModal, setShowModal] = useState(false);
const [modalData, setModalData] = useState<{name: string, url: string, content?: any}>({
const [modalData, setModalData] = useState<{name: string, url: string, content?: string | React.JSX.Element | null}>({
name: '',
url: '',
content: ''
});
const renderNav = (navData: Array<{name: string, url: string, content: (string | React.ElementType | null)}>) => {
const renderNav = (navData: Array<{name: string, url: string, content: (string | React.JSX.Element | null)}>) => {
return navData.map((data, idx) => (
<span
onClick={() => {
@ -46,11 +45,10 @@ export default function Home() {
</span>
));
};
Modal.setAppElement('#info-anchor');
return (
<div id="info-anchor" className='relative w-full flex-row justify-center'>
{!showModal && <div style={{height: '100vh', width: '100vw'}} className='tablet:w-full flex flex-row justify-center h-full bg-cover bg-black bg-opacity-30'>
<div className='relative h-full w-full flex-row justify-center'>
{!showModal && <div className='tablet:w-full flex flex-row justify-center h-full bg-cover bg-black bg-opacity-30'>
{/* <Image src={backgroundPic} alt="record background"/> */}
<div className='w-1/2 flex flex-col justify-center text-center'>
{/* <FontAwesomeIcon width={25} height={50} icon={faGem} className="fas fa-gem" style={{ color: "red" }} /> */}
@ -78,10 +76,10 @@ export default function Home() {
</div>
</div>}
{showModal && (
<div style={{height: '100vh', width: '100vw'}} className='justify-center flex flex-row bg-black bg-opacity-40'>
<div style={{height: '100vh'}} className="laptop:px-24 absolute z-10 p-10 overflow-y-auto flex flex-row justify-center">
<div className='justify-center flex flex-row bg-black bg-opacity-40'>
<div style={{height: '100%'}} className="laptop:px-24 absolute z-10 p-10 overflow-y-auto">
<div className='flex flex-row justify-center'>
<div className=" laptop:w-1/2 h-min z-20 bg-black bg-opacity-90 text-white rounded">
<div className="h-min z-20 bg-black bg-opacity-90 text-white rounded overflow-clip">
<div className="w-full flex flex-row justify-end p-4">
<span className="cursor-pointer" onClick={() => setShowModal(false)}>X</span>
</div>

View File

@ -1785,9 +1785,9 @@ lru-cache@^6.0.0:
yallist "^4.0.0"
make-cancellable-promise@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/make-cancellable-promise/-/make-cancellable-promise-1.3.1.tgz#3bd89704c75afe6251cdd6a82baca1fcfbd2c792"
integrity sha512-DWOzWdO3xhY5ESjVR+wVFy03rpt0ZccS4bunccNwngoX6rllKlMZm6S9ZnJ5nMuDDweqDMjtaO0g6tZeh+cCUA==
version "1.3.2"
resolved "https://registry.yarnpkg.com/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz#993c8c8b79cff13c74fa93de0bd8a17fe66685c1"
integrity sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==
make-dir@^3.1.0:
version "3.1.0"
@ -1797,16 +1797,14 @@ make-dir@^3.1.0:
semver "^6.0.0"
make-event-props@^1.6.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.6.1.tgz#1d587017c3f1f3b42719b775af93d5253656ccdd"
integrity sha512-JhvWq/iz1BvlmnPvLJjXv+xnMPJZuychrDC68V+yCGQJn5chcA8rLGKo5EP1XwIKVrigSXKLmbeXAGkf36wdCQ==
version "1.6.2"
resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.6.2.tgz#c8e0e48eb28b9b808730de38359f6341de7ec5a2"
integrity sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==
merge-refs@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.2.1.tgz#abddc800375395a4a4eb5c45ebf2a52557fdbe34"
integrity sha512-pRPz39HQz2xzHdXAGvtJ9S8aEpNgpUjzb5yPC3ytozodmsHg+9nqgRs7/YOmn9fM/TLzntAC8AdGTidKxOq9TQ==
dependencies:
"@types/react" "*"
version "1.2.2"
resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.2.2.tgz#6142633398dd0d10a37626cae77ddeb1db26db0c"
integrity sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw==
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
@ -2113,6 +2111,14 @@ pdfjs-dist@3.11.174:
canvas "^2.11.2"
path2d-polyfill "^2.0.1"
pdfjs-dist@^4.0.269:
version "4.0.269"
resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-4.0.269.tgz#3a319367f441e84f9c8aae01d88b0fb5a7defc4e"
integrity sha512-jjWO56tcOjnmPqDf8PmXDeZ781AGvpHMYI3HhNtaFKTRXXPaD1ArSrhVe38/XsrIQJ0onISCND/vuXaWJkiDWw==
optionalDependencies:
canvas "^2.11.2"
path2d-polyfill "^2.0.1"
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@ -2253,9 +2259,9 @@ react-modal@^3.16.1:
warning "^4.0.3"
react-pdf@^7.4.0:
version "7.4.0"
resolved "https://registry.yarnpkg.com/react-pdf/-/react-pdf-7.4.0.tgz#b8b01dab7a9dece8d99e767baa26cc1219626a8d"
integrity sha512-L2GIUc9eBLdb51DRqUe3zlkTmvOq7KQN5cKmgcrWdnWNwhYgrOGgpJQ3f56kG26G+B5GoasAHI6RjQrLfTjTnw==
version "7.5.1"
resolved "https://registry.yarnpkg.com/react-pdf/-/react-pdf-7.5.1.tgz#ef6e3f72d0bc02aee16b77b54196825068ef23b7"
integrity sha512-NVno97L3wfX3RLGB3C+QtroOiQrgCKPHLMFKMSQaRqDlH3gkq2CB2NyXJ+IDQNLrT/gSMPPgtZQL8cOUySc/3w==
dependencies:
clsx "^2.0.0"
make-cancellable-promise "^1.3.1"