├── .eslintrc.json
├── .gitignore
├── README.md
├── jsconfig.json
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── fonts
│ ├── MARKPRO.woff
│ ├── MARKPROBLACK.woff
│ ├── MARKPROBOLD.woff
│ ├── MARKPROBOOK.woff
│ ├── MARKPROEXTRALIGHT.woff
│ ├── MARKPROHEAVY.woff
│ ├── MARKPROLIGHT.woff
│ └── MARKPROMEDIUM.woff
├── images
│ ├── Logo.png
│ ├── MobileLogo.png
│ ├── Tomcy.jpg
│ ├── blog-wp-2-1.png
│ ├── developmentProjects
│ │ ├── budget.png
│ │ ├── campustrack.png
│ │ ├── predicted.png
│ │ ├── quotes.png
│ │ └── test.png
│ ├── gfx
│ │ ├── AK_STORY.jpg
│ │ ├── AbhishekUpmanyu.png
│ │ ├── AppPromo.png
│ │ ├── AtriumBanner.png
│ │ ├── ID.png
│ │ ├── PajamaDay.png
│ │ ├── PublicityPoster.jpg
│ │ └── RoseDay22ndApril.png
│ ├── test.png
│ ├── tomc.png
│ ├── uiuxProjects
│ │ ├── Passmate.png
│ │ ├── eveels.png
│ │ ├── getbele.png
│ │ ├── repairify.jpg
│ │ ├── spotifyRedesign.jpg
│ │ └── starbi.png
│ └── zsh.png
├── next.svg
└── vercel.svg
├── src
├── Shared
│ └── Data.js
├── components
│ ├── blog.js
│ ├── contact.js
│ ├── dev.js
│ ├── footer.js
│ ├── gfx.js
│ ├── heroSection.js
│ ├── layout.js
│ ├── navbar.js
│ └── uiux.js
├── pages
│ ├── _app.js
│ ├── _document.js
│ ├── about.js
│ └── index.js
└── styles
│ ├── About.module.scss
│ ├── Blog.module.scss
│ ├── Contact.module.scss
│ ├── Dev.module.scss
│ ├── Footer.module.scss
│ ├── Gfx.module.scss
│ ├── HeroSection.module.scss
│ ├── Navbar.module.scss
│ ├── UIUX.module.scss
│ ├── customAos.scss
│ └── globals.scss
└── tailwind.config.js
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | .next
5 | /node_modules
6 | /.pnp
7 | .pnp.js
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | My personal website built with nextjs
2 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./src/*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: true,
4 | distDir: "build",
5 | };
6 |
7 | module.exports = nextConfig;
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@emotion/react": "^11.11.0",
13 | "@mantine/carousel": "^6.0.10",
14 | "@mantine/core": "^6.0.10",
15 | "@mantine/hooks": "^6.0.10",
16 | "@vercel/analytics": "^1.0.1",
17 | "aos": "^2.3.4",
18 | "embla-carousel-react": "^7.1.0",
19 | "eslint": "8.39.0",
20 | "eslint-config-next": "13.3.1",
21 | "next": "13.3.1",
22 | "react": "18.2.0",
23 | "react-dom": "18.2.0",
24 | "react-icons": "^4.8.0",
25 | "react-scroll": "^1.8.9",
26 | "react-scroll-to-top": "^3.0.0",
27 | "sass": "^1.69.5"
28 | },
29 | "devDependencies": {
30 | "autoprefixer": "^10.4.14",
31 | "postcss": "^8.4.23",
32 | "postcss-import": "^15.1.0",
33 | "scss": "^0.2.4",
34 | "tailwindcss": "^3.3.2"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | "postcss-import": {},
4 | tailwindcss: {},
5 | "tailwindcss/nesting": {},
6 | autoprefixer: {},
7 | },
8 | };
9 |
--------------------------------------------------------------------------------
/public/fonts/MARKPRO.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPRO.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROBLACK.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROBLACK.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROBOLD.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROBOLD.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROBOOK.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROBOOK.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROEXTRALIGHT.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROEXTRALIGHT.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROHEAVY.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROHEAVY.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROLIGHT.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROLIGHT.woff
--------------------------------------------------------------------------------
/public/fonts/MARKPROMEDIUM.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/fonts/MARKPROMEDIUM.woff
--------------------------------------------------------------------------------
/public/images/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/Logo.png
--------------------------------------------------------------------------------
/public/images/MobileLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/MobileLogo.png
--------------------------------------------------------------------------------
/public/images/Tomcy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/Tomcy.jpg
--------------------------------------------------------------------------------
/public/images/blog-wp-2-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/blog-wp-2-1.png
--------------------------------------------------------------------------------
/public/images/developmentProjects/budget.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/developmentProjects/budget.png
--------------------------------------------------------------------------------
/public/images/developmentProjects/campustrack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/developmentProjects/campustrack.png
--------------------------------------------------------------------------------
/public/images/developmentProjects/predicted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/developmentProjects/predicted.png
--------------------------------------------------------------------------------
/public/images/developmentProjects/quotes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/developmentProjects/quotes.png
--------------------------------------------------------------------------------
/public/images/developmentProjects/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/developmentProjects/test.png
--------------------------------------------------------------------------------
/public/images/gfx/AK_STORY.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/AK_STORY.jpg
--------------------------------------------------------------------------------
/public/images/gfx/AbhishekUpmanyu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/AbhishekUpmanyu.png
--------------------------------------------------------------------------------
/public/images/gfx/AppPromo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/AppPromo.png
--------------------------------------------------------------------------------
/public/images/gfx/AtriumBanner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/AtriumBanner.png
--------------------------------------------------------------------------------
/public/images/gfx/ID.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/ID.png
--------------------------------------------------------------------------------
/public/images/gfx/PajamaDay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/PajamaDay.png
--------------------------------------------------------------------------------
/public/images/gfx/PublicityPoster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/PublicityPoster.jpg
--------------------------------------------------------------------------------
/public/images/gfx/RoseDay22ndApril.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/gfx/RoseDay22ndApril.png
--------------------------------------------------------------------------------
/public/images/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/test.png
--------------------------------------------------------------------------------
/public/images/tomc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/tomc.png
--------------------------------------------------------------------------------
/public/images/uiuxProjects/Passmate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/Passmate.png
--------------------------------------------------------------------------------
/public/images/uiuxProjects/eveels.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/eveels.png
--------------------------------------------------------------------------------
/public/images/uiuxProjects/getbele.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/getbele.png
--------------------------------------------------------------------------------
/public/images/uiuxProjects/repairify.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/repairify.jpg
--------------------------------------------------------------------------------
/public/images/uiuxProjects/spotifyRedesign.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/spotifyRedesign.jpg
--------------------------------------------------------------------------------
/public/images/uiuxProjects/starbi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/uiuxProjects/starbi.png
--------------------------------------------------------------------------------
/public/images/zsh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SkTomsi/react-portfolio/97f52053dd888df6ef5f617cd31a6a32771f5602/public/images/zsh.png
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Shared/Data.js:
--------------------------------------------------------------------------------
1 | export const uxProjects = [
2 | {
3 | id: 1,
4 | title: "passmate",
5 | projectName: "passmate",
6 | projectDesc:
7 | "Designed an application where users can securely store Passwords, Credit Cards, and Secure Notes.",
8 | image: require("../../public/images/uiuxProjects/Passmate.png"),
9 | },
10 | {
11 | id: 2,
12 | title: "eveels",
13 | projectName: "eveels",
14 | projectDesc:
15 | "An app designed to bring the future at your fingertips by providing easy access to all things EV for you and creating a hassle-free relationship amongst the buyer and the seller.",
16 | image: require("../../public/images/uiuxProjects/eveels.png"),
17 | },
18 | {
19 | id: 3,
20 | title: "get-bele",
21 | projectName: "get belle app concept",
22 | image: require("../../public/images/uiuxProjects/getbele.png"),
23 | },
24 | {
25 | id: 4,
26 | title: "spotifyProfile",
27 | projectName: "spotify profile page redesign",
28 | image: require("../../public/images/uiuxProjects/spotifyRedesign.jpg"),
29 | },
30 | {
31 | id: 5,
32 | title: "starbi",
33 | projectName: "starbucks product page redesign",
34 | image: require("../../public/images/uiuxProjects/starbi.png"),
35 | },
36 | {
37 | id: 6,
38 | title: "repairify",
39 | projectName: "repair service app concept",
40 | image: require("../../public/images/uiuxProjects/repairify.jpg"),
41 | },
42 | ];
43 |
44 | export const DevelopmentProjects = [
45 | {
46 | id: 1,
47 | title: "CampusTrack",
48 | desc: "A Web Application based vehicle identification system",
49 | stack: "PHP, MYSQL, HTML, CSS",
50 | link: "https://github.com/TomcyT/CampusTrack",
51 | image: require("../../public/images/developmentProjects/campustrack.png"),
52 | color: "#CDF0EA",
53 | },
54 | {
55 | id: 2,
56 | title: "Disease Prediction using Machine Learning",
57 | desc: " A system which predicts the disease based on the symptoms",
58 | stack: "Python",
59 | link: "https://github.com/TomcyT/Disease-Predictor",
60 | image: require("../../public/images/developmentProjects/predicted.png"),
61 | color: "#FAF4B7",
62 | },
63 | {
64 | id: 3,
65 | title: "React Quotes App",
66 | desc: "A simple random quote generator",
67 | stack: "ReactJs",
68 | link: "https://reactquotes-app.netlify.app/",
69 | image: require("../../public/images/developmentProjects/quotes.png"),
70 | color: "#FFE6E6",
71 | },
72 | {
73 | id: 4,
74 | title: "Bug Tracking System",
75 | desc: "A software application that is designed to help programmers to keep track of reported software bugs in their work",
76 | stack: "ReactJs, NodeJs, Express, Mongodb, JsonWebTokens",
77 | link: "https://github.com/TomcyT/bug-tracker",
78 | image: require("../../public/images/developmentProjects/test.png"),
79 | color: "#CCF3EE",
80 | },
81 | ];
82 |
83 | export const GfxDesigns = [
84 | {
85 | id: 1,
86 | path: require("../../public/images/gfx/AbhishekUpmanyu.png"),
87 | },
88 | {
89 | id: 2,
90 | path: require("../../public/images/gfx/AK_STORY.jpg"),
91 | },
92 | {
93 | id: 3,
94 | path: require("../../public/images/gfx/AtriumBanner.png"),
95 | },
96 | {
97 | id: 4,
98 | path: require("../../public/images/gfx/ID.png"),
99 | },
100 | {
101 | id: 5,
102 | path: require("../../public/images/gfx/PublicityPoster.jpg"),
103 | },
104 | {
105 | id: 6,
106 | path: require("../../public/images/gfx/AppPromo.png"),
107 | },
108 | {
109 | id: 7,
110 | path: require("../../public/images/gfx/PajamaDay.png"),
111 | },
112 | {
113 | id: 8,
114 | path: require("../../public/images/gfx/RoseDay22ndApril.png"),
115 | },
116 | ];
117 |
118 | export const BlogData = [
119 | {
120 | id: 1,
121 | title: "THE ALEGRIA EXPERIENCE #5: GRAPHICS COMMITTEE",
122 | desc: "Students from the graphics team use their artistic abilities to communicate ideas and present them in a visual form... ",
123 | image: require("../../public/images/blog-wp-2-1.png"),
124 | link: "https://pillaialegria.wordpress.com/2022/12/25/the-alegria-experience-5-graphics-committee/",
125 | date: "December 25, 2022",
126 | },
127 | {
128 | id: 2,
129 | title: "ZSH - The Z Shell for windows",
130 |
131 | desc: "No WSL or WSL2 approach to install zsh on windows",
132 | image: require("../../public/images/zsh.png"),
133 | link: "https://github.com/TomcyT/zsh-for-windows",
134 | date: "December 25, 2022",
135 | },
136 | ];
137 |
--------------------------------------------------------------------------------
/src/components/blog.js:
--------------------------------------------------------------------------------
1 | import { BlogData } from "@/Shared/Data";
2 | import styles from "@/styles/Blog.module.scss";
3 | import Image from "next/image";
4 | const Blog = () => {
5 | return (
6 |
7 |
Blog
8 |
9 | {BlogData.map((blog) => {
10 | return (
11 |
17 |
18 |
19 |
20 |
21 |
22 |
{blog.title}
23 |
{blog.date}
24 |
25 |
28 |
29 |
34 |
35 | );
36 | })}
37 |
38 |
39 | );
40 | };
41 |
42 | export default Blog;
43 |
--------------------------------------------------------------------------------
/src/components/contact.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | /* STYLING */
4 | import styles from "@/styles/Contact.module.scss";
5 | /* ICONS */
6 | import { FaBehance } from "react-icons/fa";
7 | import { FaLinkedinIn } from "react-icons/fa";
8 | import { FaDribbble } from "react-icons/fa";
9 | import { FaGithub } from "react-icons/fa";
10 | import { FaTwitter } from "react-icons/fa";
11 |
12 | /* */
13 |
14 | import { Element } from "react-scroll";
15 |
16 | const ContactLink = ({ Icon, link, delay }) => {
17 | return (
18 |
32 | );
33 | };
34 |
35 | const ContactSection = () => {
36 | return (
37 |
38 |
39 |
40 |
sold yet?
41 |
42 | Thanks for stopping by, I’m currently looking to join a new team of
43 | creative designers and developers. If you think we might be a good
44 | fit for one another, please do connect with me online
45 |
46 |
47 |
48 |
53 |
58 |
63 |
68 |
73 |
74 |
75 |
76 | );
77 | };
78 |
79 | export default ContactSection;
80 |
--------------------------------------------------------------------------------
/src/components/dev.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import styles from "@/styles/Dev.module.scss";
4 | import { DevelopmentProjects } from "@/Shared/Data";
5 | import Image from "next/image";
6 |
7 | const DevProjectCard = ({ development }) => {
8 | const { title, desc, link, stack, image } = development;
9 | return (
10 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
{title}
22 |
23 |
26 |
{stack}
27 |
28 |
33 |
34 |
35 | );
36 | };
37 |
38 | const DevProjects = () => {
39 | return (
40 |
41 |
Development Projects
42 |
43 | {DevelopmentProjects.map((development) => {
44 | return (
45 |
46 | );
47 | })}
48 |
49 |
50 | );
51 | };
52 |
53 | export default DevProjects;
54 |
--------------------------------------------------------------------------------
/src/components/footer.js:
--------------------------------------------------------------------------------
1 | import styles from "@/styles/Footer.module.scss";
2 |
3 | function Footer() {
4 | const currYear = new Date().getFullYear();
5 | return (
6 |
12 | );
13 | }
14 |
15 | export default Footer;
16 |
--------------------------------------------------------------------------------
/src/components/gfx.js:
--------------------------------------------------------------------------------
1 | import { GfxDesigns } from "@/Shared/Data";
2 | import Image from "next/image";
3 |
4 | import styles from "@/styles/Gfx.module.scss";
5 | import { Carousel } from "@mantine/carousel";
6 | import { FaAngleLeft } from "react-icons/fa";
7 | import { FaAngleRight } from "react-icons/fa";
8 |
9 | export default function Gfx() {
10 | return (
11 |
12 |
Graphic Designs
13 |
14 |
15 |
23 | {GfxDesigns.map((design) => {
24 | return (
25 |
26 |
27 |
28 | );
29 | })}
30 |
31 |
32 |
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/src/components/heroSection.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import styles from "@/styles/HeroSection.module.scss";
4 | import { Link } from "react-scroll";
5 |
6 | const HeroSection = () => {
7 | return (
8 |
9 |
10 |
11 |
Hi! my name is Tomcy, I love
12 |
13 | building products and{" "}
14 | experiences .
15 |
16 |
17 |
22 | Final Year Computer Engineering student from Mumbai, working as a
23 | freelance User Experience Designer since a year and currently
24 | building cool stuff with ReactJS and React Native
25 |
26 |
27 |
28 |
46 |
47 |
48 | );
49 | };
50 |
51 | export default HeroSection;
52 |
--------------------------------------------------------------------------------
/src/components/layout.js:
--------------------------------------------------------------------------------
1 | import ScrollToTop from "react-scroll-to-top";
2 | import Footer from "./footer";
3 | import React from "react";
4 | import Navbar from "./navbar";
5 |
6 | export default function Layout({ children }) {
7 | return (
8 | <>
9 |
10 | {children}
11 |
12 |
13 | >
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/components/navbar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "@/styles/Navbar.module.scss";
3 | import Link from "next/link";
4 | import { Link as LinkS } from "react-scroll";
5 | import TDLogo from "../../public/images/Logo.png";
6 | import TDMobile from "../../public/images/MobileLogo.png";
7 | import Image from "next/image";
8 | import { Router, useRouter } from "next/router";
9 |
10 | const Navbar = () => {
11 | const location = useRouter();
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
55 |
56 |
57 | );
58 | };
59 |
60 | export default Navbar;
61 |
--------------------------------------------------------------------------------
/src/components/uiux.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "@/styles/UIUX.module.scss";
3 | import { uxProjects } from "../Shared/Data";
4 | import Image from "next/image";
5 |
6 | const UxCard = ({ uxProject }) => {
7 | const { image, projectName, projectDesc } = uxProject;
8 | return (
9 |
14 |
15 |
16 |
17 |
18 |
{projectName}
19 |
{projectDesc}
20 |
21 |
22 | );
23 | };
24 |
25 | const UIUXSection = () => {
26 | return (
27 |
28 |
UI/UX Designs
29 |
30 | {uxProjects.map((uxProject) => {
31 | return ;
32 | })}
33 |
34 |
35 | );
36 | };
37 |
38 | export default UIUXSection;
39 |
--------------------------------------------------------------------------------
/src/pages/_app.js:
--------------------------------------------------------------------------------
1 | import Layout from "@/components/layout";
2 | import "@/styles/customAos.scss";
3 | import "@/styles/globals.scss";
4 |
5 | import AOS from "aos";
6 | import "aos/dist/aos.css";
7 | import { Analytics } from "@vercel/analytics/react";
8 |
9 | import Head from "next/head";
10 | import { useEffect } from "react";
11 |
12 | export default function App({ Component, pageProps }) {
13 | useEffect(() => {
14 | AOS.init({
15 | duration: 1000,
16 | easing: "ease-out-cubic",
17 | });
18 | }, []);
19 | return (
20 |
21 |
22 | Tomcy Thomas - React Developer & User Experience Designer
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/pages/_document.js:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from "next/document";
2 |
3 | export default function Document() {
4 | return (
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/pages/about.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import Head from "next/head";
3 | import styles from "@/styles/About.module.scss";
4 | import Me from "../../public/images/Tomcy.jpg";
5 |
6 | export default function About() {
7 | return (
8 | <>
9 |
10 |
11 |
12 |
About Me
13 |
14 |
15 |
16 | I'm a self-taught UI/UX and Graphic Designer who is now
17 | learning React JS and React Native. I'm pursuing my
18 | Bachelor's Degree in Computer Engineering from Pillai
19 | College of Engineering, graduation in 2023.
20 |
21 |
22 | I have more than a year of experience in User Experience
23 | designing. I've worked as a freelance designer and helped
24 | many clients, colleagues get their ideas designed. I worked as
25 | a UI/UX designer for the official website of our collegiate
26 | festival Alegria.
27 |
28 |
29 | I have two years of graphic design expertise. As part of my
30 | career, I have worked on a variety of graphic design projects.
31 | For the year 2022, I was the Graphic Head of our collegiate
32 | festival Alegria, and also the Graphic Head of Pillai College
33 | of Engineering's Student Council.
34 |
35 |
36 |
37 |
38 |
44 |
45 |
46 |
47 |
48 |
49 |
Skills
50 |
51 |
57 |
Expertise
58 |
UI UX Design
59 |
Graphic Design
60 |
Development
61 |
62 |
68 |
Tech Stack
69 |
React Js
70 |
Javascript
71 |
React Native
72 |
PHP
73 |
CSS
74 |
SASS
75 |
Styled Components
76 |
Redux
77 |
MySql
78 |
Firebase
79 |
80 |
86 |
Design Tools
87 |
Figma
88 |
Photoshop
89 |
Illustrator
90 |
91 |
92 |
93 |
94 |
95 |
96 | >
97 | );
98 | }
99 |
--------------------------------------------------------------------------------
/src/pages/index.js:
--------------------------------------------------------------------------------
1 | import Head from "next/head";
2 |
3 | import HeroSection from "@/components/heroSection";
4 | import UIUXSection from "@/components/uiux";
5 | import ContactSection from "@/components/contact";
6 | import { useEffect } from "react";
7 | import { useRouter } from "next/router";
8 | import { scroller } from "react-scroll";
9 |
10 | import DevProjects from "@/components/dev";
11 | import Blog from "@/components/blog";
12 | import Gfx from "@/components/gfx";
13 |
14 | export default function Home() {
15 | const { asPath } = useRouter();
16 | useEffect(() => {
17 | if (asPath.includes("scrollToContact")) {
18 | scroller.scrollTo("contact", {
19 | delay: 150,
20 | duration: 1500,
21 | smooth: "easeInOutQuint",
22 | });
23 | }
24 | });
25 | return (
26 | <>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | >
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/src/styles/About.module.scss:
--------------------------------------------------------------------------------
1 | @media screen and (max-width: 60em) {
2 | .detailsSection {
3 | .about {
4 | margin-top: 2rem;
5 | h1 {
6 | text-align: center;
7 | padding-bottom: 1rem;
8 | font-weight: 800;
9 | }
10 |
11 | .aboutContainer {
12 | display: flex;
13 | flex-direction: column;
14 | gap: 2rem;
15 |
16 | .aboutInfo {
17 | p {
18 | padding-bottom: 1rem;
19 | font-size: 1rem;
20 | width: 100%;
21 | }
22 | }
23 |
24 | .aboutImage {
25 | img {
26 | object-fit: contain;
27 | max-width: 100%;
28 | height: 80%;
29 | }
30 | }
31 | }
32 | }
33 | .skills {
34 | padding-top: 4rem;
35 | .skillsContainer {
36 | text-align: center;
37 | h1 {
38 | font-weight: 800;
39 | font-size: 2rem;
40 | padding-bottom: 1rem;
41 | }
42 | .skillCards {
43 | display: flex;
44 | flex-direction: column;
45 | justify-content: center;
46 | gap: 2rem;
47 |
48 | .skillCard {
49 | padding: 2rem;
50 | background-color: #cf92fb;
51 | border-radius: 22px;
52 | display: flex;
53 | flex-direction: column;
54 | align-items: center;
55 |
56 | h2 {
57 | font-weight: 800;
58 | font-size: 1.8rem;
59 | padding-bottom: 0.8rem;
60 | color: #ffffff;
61 | }
62 | p {
63 | font-size: 1rem;
64 | font-weight: 400;
65 | padding-top: 0.4rem;
66 | }
67 | }
68 | }
69 | }
70 | }
71 | }
72 | }
73 |
74 | @media screen and (min-width: 60em) {
75 | .detailsSection {
76 | margin-top: 5rem;
77 | padding: 0 10rem;
78 |
79 | .about {
80 | display: flex;
81 | flex-direction: column;
82 | margin-top: 2rem;
83 | h1 {
84 | text-align: center;
85 | padding-bottom: 3rem;
86 | font-size: 3rem;
87 | font-weight: 800;
88 | }
89 | .aboutContainer {
90 | display: grid;
91 | grid-template-columns: 70% 30%;
92 |
93 | .aboutInfo {
94 | display: flex;
95 | flex-direction: column;
96 | p {
97 | padding-bottom: 2rem;
98 | font-size: 1.1rem;
99 | width: 70%;
100 | }
101 | }
102 |
103 | .aboutImage {
104 | img {
105 | object-fit: contain;
106 | width: 100%;
107 | height: 100%;
108 | }
109 | }
110 | }
111 | }
112 | .skills {
113 | padding-top: 4rem;
114 | .skillsContainer {
115 | h1 {
116 | text-align: center;
117 | font-weight: 800;
118 | font-size: 3rem;
119 | padding-bottom: 3rem;
120 | }
121 | .skillCards {
122 | display: grid;
123 | grid-template-columns: repeat(3, 33%);
124 | grid-column-gap: 1rem;
125 | justify-content: center;
126 |
127 | .skillCard {
128 | padding: 2rem;
129 | background-color: #cf92fb;
130 | border-radius: 22px;
131 | display: flex;
132 | flex-direction: column;
133 | align-items: center;
134 |
135 | h2 {
136 | font-weight: 800;
137 | font-size: 2rem;
138 | padding-bottom: 0.8rem;
139 | color: #ffffff;
140 | }
141 | p {
142 | font-size: 1rem;
143 | font-weight: 400;
144 | padding-top: 0.4rem;
145 | }
146 | }
147 | }
148 | }
149 | }
150 | }
151 | }
152 |
--------------------------------------------------------------------------------
/src/styles/Blog.module.scss:
--------------------------------------------------------------------------------
1 | .blog {
2 | padding: 0 10rem;
3 | margin-top: 8rem;
4 | > h1 {
5 | font-size: 3rem;
6 | font-weight: 800;
7 | padding: 2rem 0;
8 | }
9 | }
10 |
11 | .blogGrid {
12 | display: grid;
13 | grid-template-columns: repeat(auto-fit, minmax(10rem, 30rem));
14 | grid-column-gap: 8rem;
15 | grid-row-gap: 2rem;
16 | justify-content: center;
17 | }
18 |
19 | .blogContainer {
20 | display: flex;
21 | flex-direction: column;
22 | justify-content: space-between;
23 | padding: 1.4rem;
24 | border-radius: 22px;
25 | background-color: rgba(255, 255, 255, 0.019);
26 | border: 1px solid rgba(255, 255, 255, 0.079);
27 | .blogImage {
28 | > img {
29 | max-width: 100%;
30 | border-radius: 12px;
31 | object-fit: cover;
32 | height: 15rem !important;
33 | }
34 | }
35 | .blogHeader {
36 | padding-top: 1rem;
37 | > h2 {
38 | font-size: 2rem;
39 | }
40 | > p {
41 | font-size: 1rem;
42 | color: #ce8dff;
43 | }
44 | }
45 | .blogDescription {
46 | padding: 1rem 0;
47 | font-weight: 200;
48 | font-size: 1rem;
49 | width: fit-content;
50 | > p {
51 | color: #9f9f9f;
52 | }
53 | }
54 | .blogButton {
55 | padding: 1.5rem 0;
56 | > a {
57 | color: #fff;
58 | padding: 18px 32px;
59 | font-size: 1rem;
60 | background-color: transparent;
61 | border: 1px solid #cc84ff;
62 | border-radius: 12px;
63 | cursor: pointer;
64 | text-decoration: none;
65 | }
66 | }
67 | }
68 |
69 | @media screen and (max-width: 60em) {
70 | .blog {
71 | padding: 0 0;
72 | > h1 {
73 | text-align: center;
74 | font-size: 2rem;
75 | font-weight: 800;
76 | }
77 | }
78 |
79 | .blogContainer {
80 | padding: 1rem;
81 | border-radius: 22px;
82 | justify-content: space-between;
83 | background-color: rgba(255, 255, 255, 0.019);
84 | border: 1px solid rgba(255, 255, 255, 0.079);
85 | .blogImage {
86 | > img {
87 | max-width: 100%;
88 | border-radius: 12px;
89 | }
90 | }
91 | .blogHeader {
92 | padding-top: 0.8rem;
93 | > h2 {
94 | font-size: 1.2rem;
95 | }
96 | > p {
97 | padding-top: 0.2rem;
98 | font-size: 0.8rem;
99 | color: #ce8dff;
100 | }
101 | }
102 | .blogDescription {
103 | padding: 1rem 0;
104 | font-weight: 200;
105 | font-size: 0.8rem;
106 | color: #585858;
107 | }
108 | .blogButton {
109 | padding: 0.5rem 0;
110 | > a {
111 | padding: 8px 16px;
112 | font-size: 0.8rem;
113 | }
114 | }
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/styles/Contact.module.scss:
--------------------------------------------------------------------------------
1 | .contactLinkContainer {
2 | background-color: blueviolet;
3 | border-radius: 12px;
4 | padding: 0.5rem;
5 |
6 | a {
7 | margin: auto 12px;
8 | }
9 |
10 | .icon {
11 | padding-top: 5px;
12 | font-size: 2rem;
13 | }
14 | }
15 |
16 | @media screen and (max-width: 60em) {
17 | .contactLinkContainer {
18 | background-color: blueviolet;
19 | border-radius: 12px;
20 | padding: 0.5rem;
21 |
22 | a {
23 | margin: auto 5px;
24 | }
25 | .icon {
26 | padding-top: 5px;
27 | font-size: 1.5rem;
28 | }
29 | }
30 | }
31 |
32 | .contactContainer {
33 | margin: 8rem 10rem 2rem 10rem;
34 | max-width: 100%;
35 |
36 | .contactIntro {
37 | h1 {
38 | font-size: 4rem;
39 | color: transparent;
40 | background: linear-gradient(to right, #9500ff 1px, #daa7ff 120px);
41 | background-clip: text;
42 | }
43 | p {
44 | padding: 2rem 0;
45 | font-size: 1.8rem;
46 | color: #cbcbcb;
47 | width: 70%;
48 | }
49 | }
50 |
51 | .contactLinks {
52 | display: flex;
53 | gap: 1rem;
54 | }
55 | }
56 |
57 | @media screen and (max-width: 60em) {
58 | .contactContainer {
59 | margin: 5rem 0rem 0rem 0rem;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 |
64 | .contactIntro {
65 | h1 {
66 | font-size: 3rem;
67 | color: transparent;
68 | background: linear-gradient(to right, #9500ff 1px, #daa7ff 120px);
69 | background-clip: text;
70 | }
71 | p {
72 | padding-top: 0.5rem;
73 | font-size: 1rem;
74 | color: #fff;
75 | width: 100%;
76 | }
77 | }
78 |
79 | .contactLinks {
80 | display: flex;
81 | gap: 1rem;
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/src/styles/Dev.module.scss:
--------------------------------------------------------------------------------
1 | .devProjectCard {
2 | .devProjectCardContainer {
3 | padding: 1.4rem;
4 | border-radius: 22px;
5 | background-color: rgba(255, 255, 255, 0.019);
6 | margin-top: 1rem;
7 | min-height: 600px;
8 | display: flex;
9 | flex-direction: column;
10 | justify-content: space-between;
11 | flex-wrap: wrap;
12 | border: 1px solid rgba(255, 255, 255, 0.079);
13 | }
14 |
15 | .devProjectDetails {
16 | .devProjectCardImage {
17 | height: 17rem;
18 | border-radius: 12px;
19 | > img {
20 | width: 100%;
21 | height: 16rem;
22 | object-fit: cover;
23 | border-radius: 12px;
24 | }
25 | }
26 |
27 | .devProjectCardTitle > h1 {
28 | padding-top: 1rem;
29 | font-size: 2rem;
30 | line-height: 40px;
31 | }
32 |
33 | .devProjectCardDescription {
34 | padding-top: 0.2rem;
35 | > p {
36 | font-size: 1rem;
37 | color: #9f9f9f;
38 | font-weight: 200;
39 | }
40 | }
41 |
42 | .devProjectCardStack {
43 | padding-top: 1.5rem;
44 | color: #ce8dff;
45 | }
46 | }
47 | .devProjectCardButton {
48 | > a > button {
49 | color: #fff;
50 | padding: 18px 32px;
51 | font-size: 1rem;
52 | background-color: transparent;
53 | border: 1px solid #cc84ff;
54 | border-radius: 12px;
55 | outline: none;
56 | cursor: pointer;
57 | margin-top: 2rem;
58 | }
59 | }
60 | }
61 |
62 | @media screen and (max-width: 60em) {
63 | .devProjectCard {
64 | .devProjectCardContainer {
65 | padding: 1rem;
66 | border-radius: 22px;
67 | background-color: rgba(255, 255, 255, 0.041);
68 | min-height: 500px;
69 | display: flex;
70 | flex-direction: column;
71 | justify-content: space-between;
72 | flex-wrap: wrap;
73 | }
74 |
75 | .devProjectDetails {
76 | .devProjectCardImage {
77 | > img {
78 | width: 100%;
79 | height: 16rem;
80 | object-fit: cover;
81 | border-radius: 12px;
82 | }
83 | }
84 |
85 | .devProjectCardTitle > h1 {
86 | padding-top: 1rem;
87 | font-size: 1.2rem;
88 | line-height: 22px;
89 | }
90 |
91 | .devProjectCardDescription {
92 | padding-top: 0.4rem;
93 | > p {
94 | font-size: 1rem;
95 | color: #9f9f9f;
96 | font-weight: 200;
97 | }
98 | }
99 |
100 | .devProjectCardStack {
101 | padding-top: 0.8rem;
102 | color: #ce8dff;
103 | font-size: 0.8rem;
104 | }
105 | }
106 | .devProjectCardButton {
107 | > a > button {
108 | padding: 8px 16px;
109 | font-size: 0.8rem;
110 | }
111 | }
112 | }
113 | }
114 | .devProjectContainer {
115 | margin-top: 8rem;
116 | padding: 0 10rem;
117 | > h1 {
118 | font-size: 3rem;
119 | font-weight: 800;
120 | padding: 2rem 0;
121 | }
122 | }
123 |
124 | .devProjectGrid {
125 | display: grid;
126 | grid-template-columns: repeat(auto-fit, minmax(10rem, 30rem));
127 | justify-content: center;
128 | grid-column-gap: 8rem;
129 | grid-row-gap: 2rem;
130 | }
131 |
132 | @media screen and (max-width: 60em) {
133 | .devProjectContainer {
134 | margin-top: 8rem;
135 | padding: 0 0rem;
136 | > h1 {
137 | text-align: center;
138 | font-size: 2rem;
139 | font-weight: 800;
140 | }
141 | }
142 |
143 | .devProjectGrid {
144 | grid-row-gap: 1rem;
145 | }
146 | }
147 |
--------------------------------------------------------------------------------
/src/styles/Footer.module.scss:
--------------------------------------------------------------------------------
1 | .footer {
2 | text-align: center;
3 | bottom: 0;
4 | padding: 4rem 0 2rem 0;
5 |
6 | @media screen and (max-width: 960px) {
7 | padding: 2rem 3rem;
8 | }
9 |
10 | > a {
11 | color: #cc84ff;
12 | text-decoration: none;
13 | }
14 | }
15 |
16 | @media screen and (max-width: 400px) {
17 | .footer {
18 | font-size: 0.8rem;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/styles/Gfx.module.scss:
--------------------------------------------------------------------------------
1 | @media screen and (max-width: 60em) {
2 | .gfxContainer {
3 | text-align: center;
4 | margin-top: 8rem;
5 | display: flex;
6 | flex-direction: column;
7 | justify-content: center;
8 | align-items: center;
9 | h1 {
10 | padding: 2rem 0rem;
11 | font-size: 2rem;
12 | font-weight: 800;
13 | }
14 | img {
15 | object-fit: contain !important;
16 | width: 100% !important;
17 | }
18 | }
19 | }
20 | @media screen and (min-width: 60em) {
21 | .gfxContainer {
22 | padding: 0 10rem;
23 | width: 100%;
24 | margin-top: 8rem;
25 | > h1 {
26 | padding: 2rem 0;
27 | font-size: 3rem;
28 | font-weight: 800;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/styles/HeroSection.module.scss:
--------------------------------------------------------------------------------
1 | @media screen and (min-width: 60em) {
2 | @keyframes taadaa {
3 | 0% {
4 | opacity: 0;
5 | }
6 |
7 | 100% {
8 | opacity: 1;
9 | }
10 | }
11 | .heroSection {
12 | margin-top: 4rem;
13 | padding: 0 10rem;
14 |
15 | .heroContainer {
16 | display: flex;
17 | flex-direction: column;
18 | width: 90%;
19 |
20 | .heroIntro {
21 | display: flex;
22 | flex-direction: column;
23 | justify-content: flex-start;
24 |
25 | > p {
26 | padding-left: 1px;
27 | font-size: 1rem;
28 | font-weight: 300;
29 | color: #dfdfdf;
30 | }
31 | > h1 {
32 | width: 60%;
33 | font-weight: 800;
34 | font-size: 6rem;
35 | line-height: 100px;
36 | padding: 1rem 0rem;
37 | }
38 | @keyframes background-pan {
39 | from {
40 | background-position: 0% 200% center;
41 | }
42 | to {
43 | background-position: -200% 0% center;
44 | }
45 | }
46 | @keyframes background-pan-reverse {
47 | from {
48 | background-position: -200% center;
49 | }
50 | to {
51 | background-position: 0% center;
52 | }
53 | }
54 | .heroColor {
55 | animation: background-pan 3s forwards infinite;
56 | font-weight: 800;
57 | color: transparent;
58 | background: linear-gradient(
59 | 120deg,
60 | #9500ff,
61 | #bb5cff,
62 | #ffffff,
63 | #bb5cff,
64 | #9500ff
65 | );
66 | background-clip: text;
67 | -webkit-background-clip: text;
68 | -webkit-text-fill-color: transparent;
69 | background-size: 200%;
70 | cursor: pointer;
71 | }
72 | .heroColor2 {
73 | font-weight: 800;
74 | color: transparent;
75 | background: linear-gradient(
76 | 120deg,
77 | #9500ff,
78 | #bb5cff,
79 | #ffffff,
80 | #bb5cff,
81 | #9500ff
82 | );
83 | background-clip: text;
84 | -webkit-background-clip: text;
85 | -webkit-text-fill-color: transparent;
86 | background-size: 200%;
87 | animation: background-pan-reverse 4s linear infinite;
88 | }
89 | }
90 | .heroShortIntro {
91 | > p {
92 | font-size: 1rem;
93 | padding-top: 0.5rem;
94 | color: #dfdfdf;
95 | width: 70%;
96 | }
97 | }
98 | }
99 | .heroCta {
100 | padding: 0rem 0rem 12vh 0rem;
101 | .resume {
102 | display: none;
103 | }
104 | .heroCtaButtonLink {
105 | > button {
106 | background-color: #cc84ff;
107 | border-radius: 10px;
108 | margin-top: 5vh;
109 | font-size: 14px;
110 | padding: 16px 20px;
111 | font-weight: 500;
112 | cursor: pointer;
113 | border: none;
114 | color: #121212;
115 | transition: 0.3s;
116 |
117 | &:hover {
118 | background-color: #edd5ff;
119 | color: #911ae5;
120 | }
121 | }
122 | }
123 | }
124 | }
125 | }
126 |
127 | @media screen and (max-width: 60em) {
128 | .heroSection {
129 | margin-top: 4rem;
130 | text-align: center;
131 |
132 | .heroContainer {
133 | display: flex;
134 | flex-direction: column;
135 | align-items: center;
136 |
137 | .heroIntro {
138 | display: flex;
139 | flex-direction: column;
140 | align-items: center;
141 |
142 | > p {
143 | font-size: 1rem;
144 | font-weight: 300;
145 | color: #c4c4c4;
146 | }
147 | > h1 {
148 | font-weight: 800;
149 | font-size: 3rem;
150 | line-height: 50px;
151 | padding: 1rem 0rem;
152 | }
153 | @keyframes background-pan {
154 | from {
155 | background-position: 0% center;
156 | }
157 | to {
158 | background-position: -200% center;
159 | }
160 | }
161 | @keyframes background-pan-reverse {
162 | from {
163 | background-position: -200% center;
164 | }
165 | to {
166 | background-position: 0% center;
167 | }
168 | }
169 | .heroColor {
170 | font-weight: 800;
171 | color: transparent;
172 | background: linear-gradient(
173 | 120deg,
174 | #9500ff,
175 | #bb5cff,
176 | #ffffff,
177 | #bb5cff,
178 | #9500ff
179 | );
180 | background-clip: text;
181 | -webkit-background-clip: text;
182 | -webkit-text-fill-color: transparent;
183 | background-size: 200%;
184 | animation: background-pan 2s linear infinite;
185 | }
186 | .heroColor2 {
187 | font-weight: 800;
188 | color: transparent;
189 | background: linear-gradient(
190 | 120deg,
191 | #9500ff,
192 | #bb5cff,
193 | #ffffff,
194 | #bb5cff,
195 | #9500ff
196 | );
197 | background-clip: text;
198 | -webkit-background-clip: text;
199 | -webkit-text-fill-color: transparent;
200 | background-size: 200%;
201 | animation: background-pan-reverse 3s linear infinite;
202 | }
203 | .heroShortIntro {
204 | > p {
205 | font-size: 0.8rem;
206 | padding-top: 0.5rem;
207 | color: #dfdfdf;
208 | text-align: center;
209 | }
210 | }
211 | }
212 | .heroCta {
213 | display: flex;
214 | flex-direction: column;
215 | padding: 2rem 0rem 12vh 0rem;
216 |
217 | .resume {
218 | text-decoration: none;
219 | background-color: #cc84ff;
220 | border-radius: 10px;
221 | margin-top: 1rem;
222 | font-size: 14px;
223 | padding: 16px 20px;
224 | font-weight: 500;
225 | cursor: pointer;
226 | border: none;
227 | color: #121212;
228 | transition: 0.3s;
229 | &:hover {
230 | background-color: #edd5ff;
231 | color: #911ae5;
232 | }
233 | }
234 | .heroCtaButtonLink {
235 | > button {
236 | background-color: #cc84ff;
237 | border-radius: 10px;
238 | margin-top: 5vh;
239 | font-size: 14px;
240 | padding: 16px 20px;
241 | font-weight: 500;
242 | cursor: pointer;
243 | border: none;
244 | color: #121212;
245 | transition: 0.3s;
246 |
247 | &:hover {
248 | background-color: #edd5ff;
249 | color: #911ae5;
250 | }
251 | }
252 | }
253 | }
254 | }
255 | }
256 | }
257 |
--------------------------------------------------------------------------------
/src/styles/Navbar.module.scss:
--------------------------------------------------------------------------------
1 | .navbar {
2 | align-items: center;
3 | display: flex;
4 | justify-content: center;
5 | margin-top: 2rem;
6 | width: 100%;
7 | transition: all 0.3s;
8 | }
9 |
10 | .navbarContainer {
11 | display: flex;
12 | align-items: center;
13 | justify-content: space-between;
14 | padding: 0 6rem;
15 | width: 100%;
16 |
17 | @media screen and (max-width: 960px) {
18 | padding: 0 0rem;
19 | }
20 | }
21 |
22 | .navbarLogo .navbarLogoLink {
23 | display: flex;
24 | flex-direction: row;
25 | justify-content: space-evenly;
26 | gap: 8px;
27 | cursor: pointer;
28 |
29 | .mobileLogo {
30 | display: none;
31 |
32 | @media screen and (max-width: 960px) {
33 | display: flex;
34 | object-fit: contain;
35 | height: 3rem;
36 | }
37 | }
38 |
39 | > img {
40 | object-fit: contain;
41 | height: 4rem;
42 | }
43 |
44 | @media (max-width: 960px) {
45 | > img {
46 | display: none;
47 | }
48 | }
49 | }
50 |
51 | .navbarLinks {
52 | color: #fff;
53 | display: flex;
54 | align-items: center;
55 | gap: 30px;
56 | :hover {
57 | color: #911ae5;
58 | cursor: pointer;
59 | }
60 | }
61 |
62 | .v2wip {
63 | background-color: rgba(149, 0, 255, 0.384);
64 | padding: 8px 12px;
65 | border-radius: 5px;
66 | border: 1px solid #911ae5;
67 | border-style: dashed;
68 | border-width: 2px;
69 | transition: all 0.3s;
70 |
71 | &:hover {
72 | background-color: rgba(255, 255, 255, 0.04) !important;
73 | border: 1px solid #ffffff;
74 | border-style: dashed;
75 | border-width: 2px;
76 | }
77 | }
78 |
79 | .navbarLinks > a {
80 | // margin-left: 30px;
81 | font-size: 1rem;
82 | font-weight: medium;
83 | transition: all 0.3s;
84 | padding: 8px 12px;
85 | border-radius: 12px;
86 | text-decoration: none;
87 | cursor: pointer;
88 |
89 | &.resume {
90 | // background-color: #911ae5;
91 | border-radius: 4px;
92 | color: #fff;
93 | }
94 | }
95 |
96 | @media screen and (max-width: 60em) {
97 | .navbarLinks > a {
98 | font-size: 0.8rem;
99 | &.resume {
100 | display: none;
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/src/styles/UIUX.module.scss:
--------------------------------------------------------------------------------
1 | @media screen and (min-width: 60em) {
2 | .uxCardContainer {
3 | background-color: rgba(255, 255, 255, 0.019);
4 | padding: 1.4rem;
5 | border-radius: 22px;
6 | border: 1px solid rgba(255, 255, 255, 0.079);
7 |
8 | .uxCardImage {
9 | > img {
10 | object-fit: contain;
11 | width: 100%;
12 | border-radius: 12px;
13 | height: auto !important;
14 | }
15 | }
16 |
17 | .uxCardInfo {
18 | padding-top: 1rem;
19 |
20 | h1 {
21 | font-size: 1.5rem;
22 | }
23 |
24 | p {
25 | font-size: 1rem;
26 | font-weight: 200;
27 | color: #9f9f9f;
28 | padding-top: 6px;
29 | }
30 | }
31 | }
32 | }
33 |
34 | @media screen and (max-width: 60em) {
35 | .uxCardContainer {
36 | background-color: rgba(255, 255, 255, 0.019);
37 | padding: 1rem;
38 | border-radius: 22px;
39 | border: 1px solid rgba(255, 255, 255, 0.079);
40 |
41 | .uxCardImage {
42 | > img {
43 | object-fit: contain;
44 | width: 100%;
45 | border-radius: 12px;
46 | height: auto !important;
47 | }
48 | }
49 |
50 | .uxCardInfo {
51 | padding-top: 1rem;
52 |
53 | h1 {
54 | font-size: 1.3rem;
55 | }
56 |
57 | p {
58 | font-size: 0.9rem;
59 | font-weight: 200;
60 | color: #9f9f9f;
61 | padding-top: 6px;
62 | }
63 | }
64 | }
65 | }
66 | .uiUx {
67 | margin-top: 8rem;
68 | padding: 0 10rem;
69 | > h1 {
70 | font-size: 3rem;
71 | padding: 2rem 0;
72 | font-weight: 800;
73 | }
74 |
75 | @media screen and (max-width: 60em) {
76 | padding: 0 0;
77 | > h1 {
78 | text-align: center;
79 | font-size: 2rem;
80 | }
81 | }
82 | }
83 |
84 | .uiUxContainer {
85 | display: grid;
86 | grid-template-columns: repeat(auto-fit, minmax(10rem, 30rem));
87 | grid-column-gap: 8rem;
88 | grid-row-gap: 2rem;
89 | justify-content: center;
90 | }
91 |
--------------------------------------------------------------------------------
/src/styles/customAos.scss:
--------------------------------------------------------------------------------
1 | /* Custom AOS distance */
2 | @media screen {
3 | html:not(.no-js) [data-aos="fade-up"] {
4 | -webkit-transform: translate3d(0, 14px, 0);
5 | transform: translate3d(0, 14px, 0);
6 | }
7 |
8 | html:not(.no-js) [data-aos="fade-down"] {
9 | -webkit-transform: translate3d(0, -14px, 0);
10 | transform: translate3d(0, -1rem, 0);
11 | }
12 |
13 | html:not(.no-js) [data-aos="fade-right"] {
14 | -webkit-transform: translate3d(-14px, 0, 0);
15 | transform: translate3d(-14px, 0, 0);
16 | }
17 |
18 | html:not(.no-js) [data-aos="fade-left"] {
19 | -webkit-transform: translate3d(14px, 0, 0);
20 | transform: translate3d(14px, 0, 0);
21 | }
22 |
23 | html:not(.no-js) [data-aos="fade-up-right"] {
24 | -webkit-transform: translate3d(-14px, 14px, 0);
25 | transform: translate3d(-14px, 14px, 0);
26 | }
27 |
28 | html:not(.no-js) [data-aos="fade-up-left"] {
29 | -webkit-transform: translate3d(14px, 14px, 0);
30 | transform: translate3d(14px, 14px, 0);
31 | }
32 |
33 | html:not(.no-js) [data-aos="fade-down-right"] {
34 | -webkit-transform: translate3d(-14px, -14px, 0);
35 | transform: translate3d(-14px, -14px, 0);
36 | }
37 |
38 | html:not(.no-js) [data-aos="fade-down-left"] {
39 | -webkit-transform: translate3d(14px, -14px, 0);
40 | transform: translate3d(14px, -14px, 0);
41 | }
42 |
43 | html:not(.no-js) [data-aos="zoom-in-up"] {
44 | -webkit-transform: translate3d(0, 14px, 0) scale(0.6);
45 | transform: translate3d(0, 14px, 0) scale(0.6);
46 | }
47 |
48 | html:not(.no-js) [data-aos="zoom-in-down"] {
49 | -webkit-transform: translate3d(0, -14px, 0) scale(0.6);
50 | transform: translate3d(0, -14px, 0) scale(0.6);
51 | }
52 |
53 | html:not(.no-js) [data-aos="zoom-in-right"] {
54 | -webkit-transform: translate3d(-14px, 0, 0) scale(0.6);
55 | transform: translate3d(-14px, 0, 0) scale(0.6);
56 | }
57 |
58 | html:not(.no-js) [data-aos="zoom-in-left"] {
59 | -webkit-transform: translate3d(14px, 0, 0) scale(0.6);
60 | transform: translate3d(14px, 0, 0) scale(0.6);
61 | }
62 |
63 | html:not(.no-js) [data-aos="zoom-out-up"] {
64 | -webkit-transform: translate3d(0, 14px, 0) scale(1.2);
65 | transform: translate3d(0, 14px, 0) scale(1.2);
66 | }
67 |
68 | html:not(.no-js) [data-aos="zoom-out-down"] {
69 | -webkit-transform: translate3d(0, -14px, 0) scale(1.2);
70 | transform: translate3d(0, -14px, 0) scale(1.2);
71 | }
72 |
73 | html:not(.no-js) [data-aos="zoom-out-right"] {
74 | -webkit-transform: translate3d(-14px, 0, 0) scale(1.2);
75 | transform: translate3d(-14px, 0, 0) scale(1.2);
76 | }
77 |
78 | html:not(.no-js) [data-aos="zoom-out-left"] {
79 | -webkit-transform: translate3d(14px, 0, 0) scale(1.2);
80 | transform: translate3d(14px, 0, 0) scale(1.2);
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/styles/globals.scss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "Mark Pro";
3 | font-style: normal;
4 | font-weight: 400;
5 | src: local("Mark Pro"), url("../../public/fonts/MARKPRO.woff") format("woff");
6 | font-display: swap;
7 | }
8 |
9 | @font-face {
10 | font-family: "Mark Pro";
11 | font-style: normal;
12 | font-weight: 300;
13 | src: local("Mark Pro"),
14 | url("../../public/fonts/MARKPROEXTRALIGHT.woff") format("woff");
15 | font-display: swap;
16 | }
17 |
18 | @font-face {
19 | font-family: "Mark Pro";
20 | font-style: normal;
21 | font-weight: 350;
22 | src: local("Mark Pro"),
23 | url("../../public/fonts/MARKPROLIGHT.woff") format("woff");
24 | font-display: swap;
25 | }
26 |
27 | @font-face {
28 | font-family: "Mark Pro";
29 | font-style: normal;
30 | font-weight: 450;
31 | src: local("Mark Pro"),
32 | url("../../public/fonts/MARKPROBOOK.woff") format("woff");
33 | font-display: swap;
34 | }
35 |
36 | @font-face {
37 | font-family: "Mark Pro";
38 | font-style: normal;
39 | font-weight: 500;
40 | src: local("Mark Pro"),
41 | url("../../public/fonts/MARKPROMEDIUM.woff") format("woff");
42 | font-display: swap;
43 | }
44 |
45 | @font-face {
46 | font-family: "Mark Pro";
47 | font-style: normal;
48 | font-weight: 700;
49 | src: local("Mark Pro"),
50 | url("../../public/fonts/MARKPROBOLD.woff") format("woff");
51 | font-display: swap;
52 | }
53 |
54 | @font-face {
55 | font-family: "Mark Pro";
56 | font-style: normal;
57 | font-weight: 800;
58 | src: local("Mark Pro"),
59 | url("../../public/fonts/MARKPROHEAVY.woff") format("woff");
60 | font-display: swap;
61 | }
62 |
63 | @font-face {
64 | font-family: "Mark Pro";
65 | font-style: normal;
66 | font-weight: 900;
67 | src: local("Mark Pro"),
68 | url("../../public/fonts/MARKPROBLACK.woff") format("woff");
69 | font-display: swap;
70 | }
71 |
72 | * {
73 | font-family: "Mark Pro";
74 | margin: 0;
75 | padding: 0;
76 | box-sizing: border-box;
77 | color: white;
78 | }
79 |
80 | body {
81 | background-color: #121212;
82 |
83 | padding: 0 2rem;
84 | }
85 |
86 | #root {
87 | width: 100%;
88 | max-width: 1920px;
89 | }
90 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ["./src/components/**/*.js", "./src/pages/**/*.js"],
4 | theme: {
5 | extend: {
6 | fontFamily: {
7 | raleway: ["Raleway", "sans-serif"],
8 | },
9 | },
10 | },
11 | plugins: [],
12 | };
13 |
--------------------------------------------------------------------------------