Added new UI for Home and Bug Fixes and Discord Intg

This commit is contained in:
Jyotirmoy Bandyopadhayaya 2022-03-31 23:45:12 +05:30
parent 100f05a79c
commit 99dbdd45cd
25 changed files with 328 additions and 87 deletions

2
.gitignore vendored
View File

@ -32,3 +32,5 @@ yarn-error.log*
# vercel # vercel
.vercel .vercel
/public/core
/public/ui

0
components/art.js Normal file
View File

0
components/art.style.jsx Normal file
View File

0
components/contact.js Normal file
View File

View File

View File

@ -105,59 +105,102 @@ export default function DiscordActivity() {
</DicordActivityStyle> </DicordActivityStyle>
); );
} else { } else {
return ( console.log("Hmmm Recv");
<DicordActivityStyle> if (status.activities[1].name === "Spotify") {
{!loading && ( return (
<> <DicordActivityStyle>
<div className="discord-icons"> {!loading && (
<div className="discord-large-icon"> <>
{status.activities[1] && ( <div className="discord-icons">
<img <div className="discord-large-icon">
src={ {<img src={status.spotify.album_art_url} />}
baseURL + </div>
status.activities[1].application_id + <div className="discord-small-icon">
"/" + {
status.activities[1].assets.large_image + <img
".png" src={
} "https://www.freepnglogos.com/uploads/spotify-logo-png/spotify-icon-marilyn-scott-0.png"
/> }
)} />
}
</div>
</div> </div>
<div className="discord-small-icon"> <div className="discord-messageBox">
{status.activities[1] && ( <div className="discord-message-application">
<img <b>{status.activities[1] && status.activities[1].name}</b>
src={ </div>
baseURL + <div className="discord-message-activity">
status.activities[1].application_id + {status.activities[1] && status.activities[1].details}
"/" + </div>
status.activities[1].assets.small_image + <div className="discord-message-files">
".png" {status.activities[1] && status.activities[1].state
} ? status.activities[1].state
/> : null}
)} </div>
<br />
<div className="time-elapsed">
{status?.activities[1]?.timestamps?.start && time}
</div>
</div> </div>
</div> </>
<div className="discord-messageBox"> )}
<div className="discord-message-application"> </DicordActivityStyle>
<b>{status.activities[1] && status.activities[1].name}</b> );
} else {
return (
<DicordActivityStyle>
{!loading && (
<>
<div className="discord-icons">
<div className="discord-large-icon">
{status.activities[1] && (
<img
src={
baseURL +
status.activities[1].application_id +
"/" +
status.activities[1].assets.large_image +
".png"
}
/>
)}
</div>
<div className="discord-small-icon">
{status.activities[1] && (
<img
src={
baseURL +
status.activities[1].application_id +
"/" +
status.activities[1].assets.small_image +
".png"
}
/>
)}
</div>
</div> </div>
<div className="discord-message-activity"> <div className="discord-messageBox">
{status.activities[1] && status.activities[1].details} <div className="discord-message-application">
<b>{status.activities[1] && status.activities[1].name}</b>
</div>
<div className="discord-message-activity">
{status.activities[1] && status.activities[1].details}
</div>
<div className="discord-message-files">
{status.activities[1] && status.activities[1].state
? status.activities[1].state
: null}
</div>
<br />
<div className="time-elapsed">
{status?.activities[1]?.timestamps?.start && time}
</div>
</div> </div>
<div className="discord-message-files"> </>
{status.activities[1] && status.activities[1].state )}
? status.activities[1].state </DicordActivityStyle>
: null} );
</div> }
<br />
<div className="time-elapsed">
{status?.activities[1]?.timestamps?.start && time}
</div>
</div>
</>
)}
</DicordActivityStyle>
);
} }
} else if ( } else if (
!loading && !loading &&

View File

@ -7,9 +7,15 @@ export const DicordActivityStyle = styled.div`
justify-content: start; justify-content: start;
width: 400px; width: 400px;
min-height: 75px; min-height: 75px;
background-color: #7289da; background: rgb(131, 58, 180);
background: linear-gradient(
90deg,
rgba(131, 58, 180, 1) 0%,
rgba(253, 29, 29, 1) 50%,
rgba(252, 176, 69, 1) 100%
);
border-radius: 6px; border-radius: 6px;
padding: 1em 0.8em; padding: 0.3em 0.8em;
.discord-icons { .discord-icons {
display: flex; display: flex;
@ -52,4 +58,10 @@ export const DicordActivityStyle = styled.div`
margin-left: 1em; margin-left: 1em;
font-size: 0.9em; font-size: 0.9em;
} }
.discord-message-application {
font-size: 1.3em;
}
.discord-message-activity {
font-size: 1.1em;
}
`; `;

View File

@ -31,6 +31,7 @@ function Main() {
<div> <div>
<DiscordActivity /> <DiscordActivity />
</div> </div>
<br />
<div className="social-buttons"> <div className="social-buttons">
<a href={github_url}> <a href={github_url}>
<IconButton> <IconButton>
@ -58,7 +59,7 @@ function Main() {
</IconButton> </IconButton>
</a> </a>
</div> </div>
<div className="buttons"> {/* <div className="buttons">
<a href={resume_url}> <a href={resume_url}>
<Button variant="contained " size="large"> <Button variant="contained " size="large">
Resume Resume
@ -69,7 +70,7 @@ function Main() {
Email Me Email Me
</Button> </Button>
</a> </a>
</div> </div> */}
</div> </div>
</MainStyle> </MainStyle>
); );

View File

@ -1,11 +1,20 @@
import styled from "styled-components"; import styled from "styled-components";
export default styled.main` export default styled.main`
padding-top: 15px;
display: flex; display: flex;
height: 100vh; height: 100vh;
width: 100%; width: 100%;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
background-image: url("/images/background.jpg");
background-size: cover;
background-position: center;
.backimage {
filter: blur(8px);
-webkit-filter: blur(8px);
}
.content { .content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -29,7 +38,7 @@ export default styled.main`
} }
} }
.profile { .profile {
heigth: 250px; height: 250px;
width: 250px; width: 250px;
img { img {
max-height: 100%; max-height: 100%;
@ -41,4 +50,13 @@ export default styled.main`
font-size: 1.5rem; font-size: 1.5rem;
font-weight: 600; font-weight: 600;
} }
.social-buttons {
background: rgb(64, 63, 79);
background: linear-gradient(
90deg,
rgba(64, 63, 79, 1) 0%,
rgba(92, 84, 90, 1) 43%
);
border-radius: 12px;
}
`; `;

View File

@ -1,23 +1,51 @@
import React from "react"; import React from "react";
import NavStyle from "./nav.style"; import NavStyle from "./nav.style";
import Link from "next/link"; import Link from "next/link";
import { useLanyard } from "react-use-lanyard";
const LINKS = [ const LINKS = [
{ {
title: "Skills", title: "Skills",
href: "/skills", href: "/skills",
}, },
{
title: "Resume",
href: "/resume",
},
{
title: "Mail Me",
href: "mailto:me@bravo68web.me",
},
]; ];
function Nav() { function Nav() {
const { loading, status /*, websocket */ } = useLanyard({
userId: "457039372009865226",
socket: true,
});
return ( return (
<NavStyle> <NavStyle>
<Link href="/" className="title"> <Link href="/">
<h1>echo &quot;Bravo&quot;</h1> <div className="title">
<h1>echo &quot;Bravo&quot;</h1>
<div className="indicator">
<div
className={`circle ${
!loading &&
(status?.discord_status === "online" ||
status?.discord_status === "idle" ||
status?.discord_status === "dnd")
? "green"
: "red"
}`}
></div>
</div>
</div>
</Link> </Link>
<div className="links"> <div className="links">
{LINKS.map(({ title, href }, index) => ( {LINKS.map(({ title, href }, index) => (
<div key={index} className="link"> <div key={index} className="link">
<Link href={href}>{title}</Link> <Link href={href}>{title}</Link> |
</div> </div>
))} ))}
</div> </div>

View File

@ -8,6 +8,35 @@ export default styled.nav`
left: 0; left: 0;
width: 100vw; width: 100vw;
display: flex; display: flex;
font-size: 1.5em;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.title {
display: flex;
}
.links {
display: flex;
.link {
/* padding: 20px; */
margin-left: 10px;
}
}
.indicator {
.circle {
height: 10px;
width: 10px;
border-radius: 100%;
margin-top: 8px;
margin-left: 5px;
/* margin-right: auto;
flex: start; */
}
.green {
background-color: green;
}
.red {
background-color: red;
}
}
`; `;

View File

@ -1,22 +1,28 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState, useRef } from "react";
import { ResumeStyle } from "./resume.style"; import { ResumeStyle } from "./resume.style";
import { Document, Page } from "react-pdf/dist/esm/entry.webpack5";
function Resume() { function Resume() {
const [resume, setResume] = useState({}); const viewer = useRef(null);
useEffect(() => { useEffect(() => {
// axios.get("").then((res) => { import("@pdftron/webviewer").then(() => {
// setResume(res.data); WebViewer(
// }); {
path: ".",
mobileRedirect: true,
initialDoc:
"https://raw.githubusercontent.com/BRAVO68WEB/certificates/master/Jyotirmoy's%20Resume.pdf",
},
viewer.current
).then((instance) => {
const { docViewer } = instance;
// you can now call WebViewer APIs here...
});
});
}, []); }, []);
// console.log(Document);
return ( return (
<ResumeStyle> <ResumeStyle>
<div className="resume"> <div className="webviewer" ref={viewer} style={{ height: "100vh" }}></div>
<Document file="https://raw.githubusercontent.com/BRAVO68WEB/certificates/master/Jyotirmoy's%20Resume.pdf">
<Page pageNumber={0} />
</Document>
</div>
</ResumeStyle> </ResumeStyle>
); );
} }

View File

@ -1,3 +1,5 @@
import styled from "styled-components"; import styled from "styled-components";
export const ResumeStyle = styled.div``; export const ResumeStyle = styled.div`
padding: 10%;
`;

View File

@ -5,7 +5,8 @@
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint" "lint": "next lint",
"postinstall": "node tools/copy-webviewer-files.js"
}, },
"dependencies": { "dependencies": {
"@emotion/react": "^11.7.1", "@emotion/react": "^11.7.1",

41
pages/art.js Normal file
View File

@ -0,0 +1,41 @@
import Head from "next/head";
import Nav from "components/nav";
import { useEffect, useRef } from "react";
import Resume from "components/Art";
import Footer from "components/footer";
export default function Home() {
return (
<div>
<Head>
<title>
Jyotirmoy Bandyopadhayaya | Full Stack and DevOps Platform Developer
</title>
<meta
name="description"
content="Jyotirmoy Bandyopadhayaya's Website | A Student, Full Stack and DevOps Platform Developer | Jyotirmoy Bandyopadhayaya's Tech Stack"
/>
<meta
name="keywords"
content="bravo, bravo68web, Jyotirmoy, Bandyopadhayaya, dev, web, Full Stack Developer, DevOps, gcp, linux, server, api, rest, lpu"
/>
<meta name="language" content="EN" />
<meta name="author" content="Jyotirmoy Bandyopadhayaya | Bravo68web" />
<meta
name="publisher"
content="Jyotirmoy Bandyopadhayaya | Bravo68web"
/>
<link rel="icon" href="/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link
href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
/>
</Head>
<Nav />
<Art />
<Footer />
</div>
);
}

41
pages/contact.js Normal file
View File

@ -0,0 +1,41 @@
import Head from "next/head";
import Nav from "components/nav";
import { useEffect, useRef } from "react";
import Resume from "components/contact";
import Footer from "components/footer";
export default function Home() {
return (
<div>
<Head>
<title>
Jyotirmoy Bandyopadhayaya | Full Stack and DevOps Platform Developer
</title>
<meta
name="description"
content="Jyotirmoy Bandyopadhayaya's Website | A Student, Full Stack and DevOps Platform Developer | Jyotirmoy Bandyopadhayaya's Tech Stack"
/>
<meta
name="keywords"
content="bravo, bravo68web, Jyotirmoy, Bandyopadhayaya, dev, web, Full Stack Developer, DevOps, gcp, linux, server, api, rest, lpu"
/>
<meta name="language" content="EN" />
<meta name="author" content="Jyotirmoy Bandyopadhayaya | Bravo68web" />
<meta
name="publisher"
content="Jyotirmoy Bandyopadhayaya | Bravo68web"
/>
<link rel="icon" href="/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link
href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
/>
</Head>
<Nav />
<Contact />
<Footer />
</div>
);
}

View File

@ -35,7 +35,7 @@ export default function Home() {
<Nav /> <Nav />
<Main /> <Main />
<Footer /> {/* <Footer /> */}
</div> </div>
); );
} }

View File

@ -1,5 +1,6 @@
import Head from "next/head"; import Head from "next/head";
import Nav from "components/nav"; import Nav from "components/nav";
import { useEffect, useRef } from "react";
import Resume from "components/resume"; import Resume from "components/resume";
import Footer from "components/footer"; import Footer from "components/footer";

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -1,27 +1,28 @@
@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;300;400;500;600;700;800;900&display=swap'); @import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;300;400;500;600;700;800;900&display=swap");
:root{ :root {
--color1:#11052C; --color1: #11052c;
--color2:#3D087B; --color2: #3d087b;
--color3:#F43B86; --color3: #f43b86;
--color4:#FFE459; --color4: #ffe459;
--font:'Source Code Pro', monospace; --font: "Source Code Pro", monospace;
} }
*{ * {
margin:0; margin: 0;
padding:0; padding: 0;
} }
html, html,
body { body {
overflow-x: hidden;
background: var(--color2); background: var(--color2);
padding: 0; padding: 0;
margin: 0; margin: 0;
font-family: var(--font), -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, font-family: var(--font), -apple-system, BlinkMacSystemFont, Segoe UI, Roboto,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
height:100vh; height: 100vh;
width:100vw; width: 100vw;
/* color:var(--color3) */ /* color:var(--color3) */
color:#fff; color: #fff;
} }
a { a {
color: inherit; color: inherit;

View File

@ -0,0 +1,15 @@
const fs = require("fs-extra");
const copyFiles = async () => {
try {
await fs.copy(
"./node_modules/@pdftron/webviewer/public",
"./public/webviewer/lib"
);
console.log("WebViewer files copied over successfully");
} catch (err) {
console.error(err);
}
};
copyFiles();