diff --git a/README.md b/README.md index 7524db5f..8b137891 100644 --- a/README.md +++ b/README.md @@ -1,671 +1 @@ -
-
- - Project Banner - -
-
- nextdotjs - framer - three.js - tailwindcss -
- -

A Modern Next.js Portfolio

- -
- Build this project step by step with our detailed tutorial on JavaScript Mastery YouTube. Join the JSM family! -
-
- -## πŸ“‹ Table of Contents - -1. πŸ€– [Introduction](#introduction) -2. βš™οΈ [Tech Stack](#tech-stack) -3. πŸ”‹ [Features](#features) -4. 🀸 [Quick Start](#quick-start) -5. πŸ•ΈοΈ [Code to Copy](#snippets) -6. πŸ”— [Assets](#links) -7. πŸš€ [More](#more) - -## 🚨 Tutorial - -This repository contains the code corresponding to an in-depth tutorial available on our YouTube channel, JavaScript Mastery. - -If you prefer visual learning, this is the perfect resource for you. Follow our tutorial to learn how to build projects like these step-by-step in a beginner-friendly manner! - - - -## πŸ€– Introduction - -Built with Next.js for handling the user interface, Three.js for rendering 3D elements, Framer motion for beautiful animations, and styled with TailwindCSS, this portfolio demonstrates the developer's skills in a unique manner that creates a lasting impact. - -If you're getting started and need assistance or face any bugs, join our active Discord community with over **34k+** members. It's a place where people help each other out. - - - -## βš™οΈ Tech Stack - -- Next.js -- Three.js -- Framer Motion -- Tailwind CSS - -## πŸ”‹ Features - -πŸ‘‰ **Hero**: Captivating introduction featuring a spotlight effect and dynamic background. - -πŸ‘‰ **Bento Grid**: Modern layout presenting personal information using cutting-edge CSS design techniques. - -πŸ‘‰ **3D Elements**: Interactive 3D design elements, such as a GitHub-style globe and card hover effects, adding depth and engagement. - -πŸ‘‰ **Testimonials**: Dynamic testimonials area with scrolling or animated content for enhanced engagement. - -πŸ‘‰ **Work Experience**: Prominent display of professional background for emphasis and credibility. - -πŸ‘‰ **Canvas Effect**: Innovative use of HTML5 canvas to create visually striking effects in the "approaches" section. - -πŸ‘‰ **Responsiveness**: Seamless adaptability across all devices, ensuring optimal viewing experience for every user. - -and many more, including code architecture and reusability - -## 🀸 Quick Start - -Follow these steps to set up the project locally on your machine. - -**Prerequisites** - -Make sure you have the following installed on your machine: - -- [Git](https://git-scm.com/) -- [Node.js](https://nodejs.org/en) -- [npm](https://www.npmjs.com/) (Node Package Manager) - -**Cloning the Repository** - -```bash -git clone https://github.com/adrianhajdin/portfolio.git -cd portfolio -``` - -**Installation** - -Install the project dependencies using npm: - -```bash -npm install -``` - -**Running the Project** - -```bash -npm run dev -``` - -Open [http://localhost:3000](http://localhost:3000) in your browser to view the project. - -## πŸ•ΈοΈ Snippets - -
-data/index.ts - -```typescript -export const navItems = [ - { name: "About", link: "#about" }, - { name: "Projects", link: "#projects" }, - { name: "Testimonials", link: "#testimonials" }, - { name: "Contact", link: "#contact" }, -]; - -export const gridItems = [ - { - id: 1, - title: "I prioritize client collaboration, fostering open communication ", - description: "", - className: "lg:col-span-3 md:col-span-6 md:row-span-4 lg:min-h-[60vh]", - imgClassName: "w-full h-full", - titleClassName: "justify-end", - img: "/b1.svg", - spareImg: "", - }, - { - id: 2, - title: "I'm very flexible with time zone communications", - description: "", - className: "lg:col-span-2 md:col-span-3 md:row-span-2", - imgClassName: "", - titleClassName: "justify-start", - img: "", - spareImg: "", - }, - { - id: 3, - title: "My tech stack", - description: "I constantly try to improve", - className: "lg:col-span-2 md:col-span-3 md:row-span-2", - imgClassName: "", - titleClassName: "justify-center", - img: "", - spareImg: "", - }, - { - id: 4, - title: "Tech enthusiast with a passion for development.", - description: "", - className: "lg:col-span-2 md:col-span-3 md:row-span-1", - imgClassName: "", - titleClassName: "justify-start", - img: "/grid.svg", - spareImg: "/b4.svg", - }, - - { - id: 5, - title: "Currently building a JS Animation library", - description: "The Inside Scoop", - className: "md:col-span-3 md:row-span-2", - imgClassName: "absolute right-0 bottom-0 md:w-96 w-60", - titleClassName: "justify-center md:justify-start lg:justify-center", - img: "/b5.svg", - spareImg: "/grid.svg", - }, - { - id: 6, - title: "Do you want to start a project together?", - description: "", - className: "lg:col-span-2 md:col-span-3 md:row-span-1", - imgClassName: "", - titleClassName: "justify-center md:max-w-full max-w-60 text-center", - img: "", - spareImg: "", - }, -]; - -export const projects = [ - { - id: 1, - title: "3D Solar System Planets to Explore", - des: "Explore the wonders of our solar system with this captivating 3D simulation of the planets using Three.js.", - img: "/p1.svg", - iconLists: ["/re.svg", "/tail.svg", "/ts.svg", "/three.svg", "/fm.svg"], - link: "https://github.com/adrianhajdin?tab=repositories", - }, - { - id: 2, - title: "Yoom - Video Conferencing App", - des: "Simplify your video conferencing experience with Yoom. Seamlessly connect with colleagues and friends.", - img: "/p2.svg", - iconLists: ["/next.svg", "/tail.svg", "/ts.svg", "/stream.svg", "/c.svg"], - link: "https://github.com/adrianhajdin/zoom-clone", - }, - { - id: 3, - title: "AI Image SaaS - Canva Application", - des: "A REAL Software-as-a-Service app with AI features and a payments and credits system using the latest tech stack.", - img: "/p3.svg", - iconLists: ["/re.svg", "/tail.svg", "/ts.svg", "/three.svg", "/c.svg"], - link: "https://github.com/adrianhajdin/ai_saas_app", - }, - { - id: 4, - title: "Animated Apple Iphone 3D Website", - des: "Recreated the Apple iPhone 15 Pro website, combining GSAP animations and Three.js 3D effects..", - img: "/p4.svg", - iconLists: ["/next.svg", "/tail.svg", "/ts.svg", "/three.svg", "/gsap.svg"], - link: "https://github.com/adrianhajdin/iphone", - }, -]; - -export const testimonials = [ - { - quote: - "Collaborating with Adrian was an absolute pleasure. His professionalism, promptness, and dedication to delivering exceptional results were evident throughout our project. Adrian's enthusiasm for every facet of development truly stands out. If you're seeking to elevate your website and elevate your brand, Adrian is the ideal partner.", - name: "Michael Johnson", - title: "Director of AlphaStream Technologies", - }, - { - quote: - "Collaborating with Adrian was an absolute pleasure. His professionalism, promptness, and dedication to delivering exceptional results were evident throughout our project. Adrian's enthusiasm for every facet of development truly stands out. If you're seeking to elevate your website and elevate your brand, Adrian is the ideal partner.", - name: "Michael Johnson", - title: "Director of AlphaStream Technologies", - }, - { - quote: - "Collaborating with Adrian was an absolute pleasure. His professionalism, promptness, and dedication to delivering exceptional results were evident throughout our project. Adrian's enthusiasm for every facet of development truly stands out. If you're seeking to elevate your website and elevate your brand, Adrian is the ideal partner.", - name: "Michael Johnson", - title: "Director of AlphaStream Technologies", - }, - { - quote: - "Collaborating with Adrian was an absolute pleasure. His professionalism, promptness, and dedication to delivering exceptional results were evident throughout our project. Adrian's enthusiasm for every facet of development truly stands out. If you're seeking to elevate your website and elevate your brand, Adrian is the ideal partner.", - name: "Michael Johnson", - title: "Director of AlphaStream Technologies", - }, - { - quote: - "Collaborating with Adrian was an absolute pleasure. His professionalism, promptness, and dedication to delivering exceptional results were evident throughout our project. Adrian's enthusiasm for every facet of development truly stands out. If you're seeking to elevate your website and elevate your brand, Adrian is the ideal partner.", - name: "Michael Johnson", - title: "Director of AlphaStream Technologies", - }, -]; - -export const companies = [ - { - id: 1, - name: "cloudinary", - img: "/cloud.svg", - nameImg: "/cloudName.svg", - }, - { - id: 2, - name: "appwrite", - img: "/app.svg", - nameImg: "/appName.svg", - }, - { - id: 3, - name: "HOSTINGER", - img: "/host.svg", - nameImg: "/hostName.svg", - }, - { - id: 4, - name: "stream", - img: "/s.svg", - nameImg: "/streamName.svg", - }, - { - id: 5, - name: "docker.", - img: "/dock.svg", - nameImg: "/dockerName.svg", - }, -]; - -export const workExperience = [ - { - id: 1, - title: "Frontend Engineer Intern", - desc: "Assisted in the development of a web-based platform using React.js, enhancing interactivity.", - className: "md:col-span-2", - thumbnail: "/exp1.svg", - }, - { - id: 2, - title: "Mobile App Dev - JSM Tech", - desc: "Designed and developed mobile app for both iOS & Android platforms using React Native.", - className: "md:col-span-2", // change to md:col-span-2 - thumbnail: "/exp2.svg", - }, - { - id: 3, - title: "Freelance App Dev Project", - desc: "Led the dev of a mobile app for a client, from initial concept to deployment on app stores.", - className: "md:col-span-2", // change to md:col-span-2 - thumbnail: "/exp3.svg", - }, - { - id: 4, - title: "Lead Frontend Developer", - desc: "Developed and maintained user-facing features using modern frontend technologies.", - className: "md:col-span-2", - thumbnail: "/exp4.svg", - }, -]; - -export const socialMedia = [ - { - id: 1, - img: "/git.svg", - }, - { - id: 2, - img: "/twit.svg", - }, - { - id: 3, - img: "/link.svg", - }, -]; -``` - -
- -
-tailwind.config.ts - -```ts -import type { Config } from "tailwindcss"; - -const svgToDataUri = require("mini-svg-data-uri"); - -const colors = require("tailwindcss/colors"); -const { - default: flattenColorPalette, -} = require("tailwindcss/lib/util/flattenColorPalette"); - -const config = { - darkMode: ["class"], - content: [ - "./pages/**/*.{ts,tsx}", - "./components/**/*.{ts,tsx}", - "./app/**/*.{ts,tsx}", - "./src/**/*.{ts,tsx}", - "./data/**/*.{ts,tsx}", - ], - prefix: "", - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - black: { - DEFAULT: "#000", - 100: "#000319", - 200: "rgba(17, 25, 40, 0.75)", - 300: "rgba(255, 255, 255, 0.125)", - }, - white: { - DEFAULT: "#FFF", - 100: "#BEC1DD", - 200: "#C1C2D3", - }, - blue: { - "100": "#E4ECFF", - }, - purple: "#CBACF9", - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: "0" }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: "0" }, - }, - spotlight: { - "0%": { - opacity: "0", - transform: "translate(-72%, -62%) scale(0.5)", - }, - "100%": { - opacity: "1", - transform: "translate(-50%,-40%) scale(1)", - }, - }, - shimmer: { - from: { - backgroundPosition: "0 0", - }, - to: { - backgroundPosition: "-200% 0", - }, - }, - moveHorizontal: { - "0%": { - transform: "translateX(-50%) translateY(-10%)", - }, - "50%": { - transform: "translateX(50%) translateY(10%)", - }, - "100%": { - transform: "translateX(-50%) translateY(-10%)", - }, - }, - moveInCircle: { - "0%": { - transform: "rotate(0deg)", - }, - "50%": { - transform: "rotate(180deg)", - }, - "100%": { - transform: "rotate(360deg)", - }, - }, - moveVertical: { - "0%": { - transform: "translateY(-50%)", - }, - "50%": { - transform: "translateY(50%)", - }, - "100%": { - transform: "translateY(-50%)", - }, - }, - scroll: { - to: { - transform: "translate(calc(-50% - 0.5rem))", - }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - spotlight: "spotlight 2s ease .75s 1 forwards", - shimmer: "shimmer 2s linear infinite", - first: "moveVertical 30s ease infinite", - second: "moveInCircle 20s reverse infinite", - third: "moveInCircle 40s linear infinite", - fourth: "moveHorizontal 40s ease infinite", - fifth: "moveInCircle 20s ease infinite", - scroll: - "scroll var(--animation-duration, 40s) var(--animation-direction, forwards) linear infinite", - }, - }, - }, - plugins: [ - require("tailwindcss-animate"), - addVariablesForColors, - function ({ matchUtilities, theme }: any) { - matchUtilities( - { - "bg-grid": (value: any) => ({ - backgroundImage: `url("${svgToDataUri( - `` - )}")`, - }), - "bg-grid-small": (value: any) => ({ - backgroundImage: `url("${svgToDataUri( - `` - )}")`, - }), - "bg-dot": (value: any) => ({ - backgroundImage: `url("${svgToDataUri( - `` - )}")`, - }), - }, - { values: flattenColorPalette(theme("backgroundColor")), type: "color" } - ); - }, - ], -} satisfies Config; - -function addVariablesForColors({ addBase, theme }: any) { - let allColors = flattenColorPalette(theme("colors")); - let newVars = Object.fromEntries( - Object.entries(allColors).map(([key, val]) => [`--${key}`, val]) - ); - - addBase({ - ":root": newVars, - }); -} - -export default config; -``` - -
- -
-globals.css - -```css -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 240 10% 3.9%; - - --card: 0 0% 100%; - --card-foreground: 240 10% 3.9%; - - --popover: 0 0% 100%; - --popover-foreground: 240 10% 3.9%; - - --primary: 240 5.9% 10%; - --primary-foreground: 0 0% 98%; - - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - - --border: 240 5.9% 90%; - --input: 240 5.9% 90%; - --ring: 240 10% 3.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 240 10% 3.9%; - --foreground: 0 0% 98%; - - --card: 240 10% 3.9%; - --card-foreground: 0 0% 98%; - - --popover: 240 10% 3.9%; - --popover-foreground: 0 0% 98%; - - --primary: 0 0% 98%; - --primary-foreground: 240 5.9% 10%; - - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - - --muted: 240 3.7% 15.9%; - --muted-foreground: 240 5% 64.9%; - - --accent: 240 3.7% 15.9%; - --accent-foreground: 0 0% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 240 4.9% 83.9%; - } -} - -@layer base { - * { - @apply border-border !scroll-smooth; - } - body { - @apply bg-background text-foreground; - } - button { - @apply active:outline-none; - } -} - -@layer utilities { - .heading { - @apply font-bold text-4xl md:text-5xl text-center; - } - - .black-gradient { - background: linear-gradient(90deg, #161a31 0%, #06091f 100%); - } -} -``` - -
- - -
-Linear Gradient - -```js -style={{ - // add these two - // you can generate the color from here https://cssgradient.io/ - background: "rgb(4,7,29)", - backgroundColor: - "linear-gradient(90deg, rgba(4,7,29,1) 0%, rgba(12,14,35,1) 100%)", - }} -``` -
- - -## πŸ”— Assets - -Assets used in the project can be found [here](https://drive.google.com/file/d/1ZmtiMilUYTp1wkiXWMFX6AUk-msE981-/view?usp=sharing) - -## πŸš€ More -**Advance your skills with Next.js Pro Course** - -Enjoyed creating this project? Dive deeper into our PRO courses for a richer learning experience. They're packed with detailed explanations, cool features, and exercises to boost your skills. Give it a go! - - -Project Banner - diff --git a/app/layout.tsx b/app/layout.tsx index 010cfb5e..c4a2668f 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,8 +7,8 @@ import { ThemeProvider } from "./provider"; const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { - title: "Adrian's Portfolio", - description: "Modern & Minimal JS Mastery Portfolio", + title: "Raghav's Portfolio", + description: "My Web Dev Portfolio", }; export default function RootLayout({ diff --git a/components/Footer.tsx b/components/Footer.tsx index 86199bb1..666afd54 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -24,7 +24,7 @@ const Footer = () => { Reach out to me today and let's discuss how I can help you achieve your goals.

- + } @@ -34,7 +34,7 @@ const Footer = () => {

- Copyright Β© 2024 Adrian Hajdin + Copyright Β© 2024 Raghav Goel

@@ -42,6 +42,11 @@ const Footer = () => {
{ + if (info.link) { + window.open(info.link, "_blank"); + } + }} > icons
diff --git a/components/Hero.tsx b/components/Hero.tsx index 353a088f..91e60d99 100644 --- a/components/Hero.tsx +++ b/components/Hero.tsx @@ -42,22 +42,15 @@ const Hero = () => {
-

- Dynamic Web Magic with Next.js -

- - {/** - * Link: https://ui.aceternity.com/components/text-generate-effect - * - * change md:text-6xl, add more responsive code - */}

- Hi! I'm Adrian, a Next.js Developer based in Croatia. + Hi! I'm Raghav, a Web Developer passionate about building + innovative, user-centric websites that drive results and elevates + digital experiences.

diff --git a/components/ui/BentoGrid.tsx b/components/ui/BentoGrid.tsx index 8d5b0f4b..a9ecc239 100644 --- a/components/ui/BentoGrid.tsx +++ b/components/ui/BentoGrid.tsx @@ -6,7 +6,6 @@ import Lottie from "react-lottie"; import { cn } from "@/lib/utils"; - import { BackgroundGradientAnimation } from "./GradientBg"; import GridGlobe from "./GridGlobe"; import animationData from "@/data/confetti.json"; @@ -52,8 +51,8 @@ export const BentoGridItem = ({ titleClassName?: string; spareImg?: string; }) => { - const leftLists = ["ReactJS", "Express", "Typescript"]; - const rightLists = ["VueJS", "NuxtJS", "GraphQL"]; + const leftLists = ["Express", "SvelteJS", "ReactJS"]; + const rightLists = ["NextJS", "GraphQL", "NodeJS"]; const [copied, setCopied] = useState(false); @@ -67,7 +66,7 @@ export const BentoGridItem = ({ }; const handleCopy = () => { - const text = "hsu@jsmastery.pro"; + const text = "raghavworkspace847@gmail.com"; navigator.clipboard.writeText(text); setCopied(true); }; @@ -94,20 +93,24 @@ export const BentoGridItem = ({ {img} )}
{spareImg && ( {spareImg} )}
@@ -176,8 +179,9 @@ export const BentoGridItem = ({ {/* remove focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 focus:ring-offset-slate-50 */} {/* add handleCopy() for the copy the text */}
{/* confetti */} diff --git a/data/index.ts b/data/index.ts index a1e1ff28..ca7d15e6 100644 --- a/data/index.ts +++ b/data/index.ts @@ -13,7 +13,7 @@ export const gridItems = [ className: "lg:col-span-3 md:col-span-6 md:row-span-4 lg:min-h-[60vh]", imgClassName: "w-full h-full", titleClassName: "justify-end", - img: "/b1.svg", + img: "/RaghavProfile.png", spareImg: "", }, { @@ -49,7 +49,8 @@ export const gridItems = [ { id: 5, - title: "Currently building a JS Animation library", + title: + "Currently building a Ai Vudio Dashboard - A Video Commerce Platform", description: "The Inside Scoop", className: "md:col-span-3 md:row-span-2", imgClassName: "absolute right-0 bottom-0 md:w-96 w-60", @@ -205,13 +206,16 @@ export const socialMedia = [ { id: 1, img: "/git.svg", + link: "https://github.com/goelRagga", }, { id: 2, img: "/twit.svg", + link: "", }, { id: 3, img: "/link.svg", + link: "https://www.linkedin.com/in/raghavgoeljod/", }, ]; diff --git a/public/RaghavProfile.png b/public/RaghavProfile.png new file mode 100644 index 00000000..c3f186ba Binary files /dev/null and b/public/RaghavProfile.png differ