{"id":27134671,"url":"https://github.com/cabtava/portfolio-website","last_synced_at":"2026-05-05T14:05:32.805Z","repository":{"id":286601292,"uuid":"961917085","full_name":"Cabtava/Portfolio-Website","owner":"Cabtava","description":"gigsdevelop.com portfolio website","archived":false,"fork":false,"pushed_at":"2025-04-07T11:23:05.000Z","size":19676,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T12:28:09.748Z","etag":null,"topics":["3d-graphics","frontend","nextjs","portfolio","react","reactjs","web","website"],"latest_commit_sha":null,"homepage":"https://gigsdevelop.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cabtava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-07T11:19:21.000Z","updated_at":"2025-04-07T11:43:02.000Z","dependencies_parsed_at":"2025-04-07T12:38:54.559Z","dependency_job_id":null,"html_url":"https://github.com/Cabtava/Portfolio-Website","commit_stats":null,"previous_names":["cabtava/portfolio-website"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cabtava%2FPortfolio-Website","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cabtava%2FPortfolio-Website/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cabtava%2FPortfolio-Website/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cabtava%2FPortfolio-Website/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cabtava","download_url":"https://codeload.github.com/Cabtava/Portfolio-Website/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247755591,"owners_count":20990626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-graphics","frontend","nextjs","portfolio","react","reactjs","web","website"],"created_at":"2025-04-08T00:49:09.009Z","updated_at":"2025-10-20T09:16:15.112Z","avatar_url":"https://github.com/Cabtava.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cdiv\u003e\n    \u003cimg src=\"https://img.shields.io/badge/-React_JS-black?style=for-the-badge\u0026logoColor=white\u0026logo=react\u0026color=61DAFB\" alt=\"react.js\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/-Three_JS-black?style=for-the-badge\u0026logoColor=white\u0026logo=threedotjs\u0026color=000000\" alt=\"three.js\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/-Tailwind_CSS-black?style=for-the-badge\u0026logoColor=white\u0026logo=tailwindcss\u0026color=06B6D4\" alt=\"tailwindcss\" /\u003e\n  \u003c/div\u003e\n\n  \u003ch3 align=\"center\"\u003eA Frontend Developer Portfolio\u003c/h3\u003e\n\u003c/div\u003e\n\n## \u003ca name=\"tech-stack\"\u003e⚙️ Tech Stack\u003c/a\u003e\n\n- React.js\n- Three.js\n- React Three Fiber\n- React Three Drei\n- Email JS\n- Vite\n- Tailwind CSS\n\n## \u003ca name=\"features\"\u003e🔋 Features\u003c/a\u003e\n\n👉 **Customizable 3D Hero Section**: Includes a 3D desktop model easily customizable to suit specific needs.\n\n👉 **Interactive Experience and Work Sections**: Utilizes animations powered by framer motion for engaging user experience.\n\n👉 **3D Skills Section**: Showcases skills using 3D geometries through three.js and React Three fiber\n\n👉 **Animated Projects and Testimonials**: Features animated sections using framer motion for projects and client testimonials.\n\n👉 **Contact Section with 3D Earth Model**:Integrates a 3D earth model with email functionality powered by emailjs.\n\n👉 **3D Stars**: Generate stars progressively at random positions using Three.js for background display.\n\n👉 **Consistent Animations**: Implements cohesive animations throughout the website using framer motion.\n\n👉 **Responsive Design**: Ensures optimal display and functionality across all devices.\n\nand many more, including code architecture and reusability\n\nFollow these steps to set up the project locally on your machine.\n\n**Prerequisites**\n\nMake sure you have the following installed on your machine:\n\n- [Git](https://git-scm.com/)\n- [Node.js](https://nodejs.org/en)\n- [npm](https://www.npmjs.com/) (Node Package Manager)\n\n**Cloning the Repository**\n\n**Installation**\n\nInstall the project dependencies using npm:\n\n```bash\nnpm install\n```\n\n**Set Up Environment Variables**\n\nCreate a new file named `.env` in the root of your project and add the following content:\n\n```env\nREACT_APP_EMAILJS_USERID=your_emailjs_user_id\nREACT_APP_EMAILJS_TEMPLATEID=your_emailjs_template_id\nREACT_APP_EMAILJS_RECEIVERID=your_emailjs_receiver_id\n```\n\nReplace the placeholder values with your actual EmailJS credentials. You can obtain these credentials by signing up on the [EmailJS website](https://www.emailjs.com/).\n\n**Running the Project**\n\n```bash\nnpm run dev\n```\n\nOpen [http://localhost:5173](http://localhost:5173) in your browser to view the project.\n\n## \u003ca name=\"snippets\"\u003e🕸️ Snippets\u003c/a\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003econstants.js\u003c/code\u003e\u003c/summary\u003e\n\n```javascript\nimport {\n  mobile,\n  backend,\n  creator,\n  web,\n  javascript,\n  typescript,\n  html,\n  css,\n  reactjs,\n  redux,\n  tailwind,\n  nodejs,\n  mongodb,\n  git,\n  figma,\n  docker,\n  meta,\n  shindi,\n  prodware,\n  shopify,\n  carrent,\n  jobit,\n  tripguide,\n  threejs,\n} from \"../assets\";\n\nexport const navLinks = [\n  {\n    id: \"about\",\n    title: \"About\",\n  },\n  {\n    id: \"work\",\n    title: \"Work\",\n  },\n  {\n    id: \"contact\",\n    title: \"Contact\",\n  },\n];\n\nconst services = [\n  {\n    title: \"Web Developer\",\n    icon: web,\n  },\n  {\n    title: \"React Developer\",\n    icon: mobile,\n  },\n  {\n    title: \"Wordpress Developer\",\n    icon: backend,\n  },\n  {\n    title: \"UI / UX Designer\",\n    icon: creator,\n  },\n];\n\nconst technologies = [\n  {\n    name: \"HTML 5\",\n    icon: html,\n  },\n  {\n    name: \"CSS 3\",\n    icon: css,\n  },\n  {\n    name: \"JavaScript\",\n    icon: javascript,\n  },\n  {\n    name: \"TypeScript\",\n    icon: typescript,\n  },\n  {\n    name: \"React JS\",\n    icon: reactjs,\n  },\n  {\n    name: \"Redux Toolkit\",\n    icon: redux,\n  },\n  {\n    name: \"Tailwind CSS\",\n    icon: tailwind,\n  },\n  {\n    name: \"Node JS\",\n    icon: nodejs,\n  },\n  {\n    name: \"MongoDB\",\n    icon: mongodb,\n  },\n  {\n    name: \"Three JS\",\n    icon: threejs,\n  },\n  {\n    name: \"git\",\n    icon: git,\n  },\n  {\n    name: \"figma\",\n    icon: figma,\n  },\n  {\n    name: \"docker\",\n    icon: docker,\n  },\n];\n\nconst experiences = [\n  {\n    title: \"React.js Developer\",\n    company_name: \"Shindi\",\n    icon: shindi,\n    iconBg: \"#383E56\",\n    date: \"September 2017 - October 2022\",\n    points: [\n      \"Developing and maintaining web applications using React.js and other related technologies.\",\n      \"Collaborating with cross-functional teams including designers, product managers, and other developers to create high-quality products.\",\n      \"Implementing responsive design and ensuring cross-browser compatibility.\",\n      \"Participating in code reviews and providing constructive feedback to other developers.\",\n    ],\n  },\n  {\n    title: \"React Frontend Developer\",\n    company_name: \"Prodware\",\n    icon: prodware,\n    iconBg: \"#E6DEDD\",\n    date: \"October 2022 - Still Working\",\n    points: [\n      \"Assisted in updating backend services (Node.js/Express) when required to support new frontend features and API requirements. \",\n      \"Maintained clear documentation for features and workflows, improving onboarding time for new developers.\",\n      \"Optimized existing applications for load performance, responsiveness, and SEO readiness.\",\n      \"Designed responsive interfaces with HTML5 and CSS3, ensuring consistency across devices and screen sizes.\",\n    ],\n  },\n  {\n    title: \"Web Developer\",\n    company_name: \"Shopify\",\n    icon: shopify,\n    iconBg: \"#383E56\",\n    date: \"Jan 2022 - Jan 2023\",\n    points: [\n      \"Developing and maintaining web applications using React.js and other related technologies.\",\n      \"Collaborating with cross-functional teams including designers, product managers, and other developers to create high-quality products.\",\n      \"Implementing responsive design and ensuring cross-browser compatibility.\",\n      \"Participating in code reviews and providing constructive feedback to other developers.\",\n    ],\n  },\n  {\n    title: \"Markup Specialist - UI / UX Developer\",\n    company_name: \"Custolys\",\n    icon: meta,\n    iconBg: \"#E6DEDD\",\n    date: \"Jan 2023 - Present\",\n    points: [\n      \"Developed and maintained fast, responsive web applications using React, TypeScript, HTML, and CSS, with a strong focus on performance and user experience.\",\n      \"Built complex UI components and interfaces in React, implementing modern design principles in collaboration with designers and product teams.\",\n      \"Managed application state using Redux and XState, ensuring predictable data flow and scalable architecture.\",\n      \"Participated in cross-functional projects involving updates to backend services to support frontend functionality, contributing to full-stack development when needed.\",\n    ],\n  },\n];\n\nconst testimonials = [\n  {\n    testimonial:\n      \"I thought it was impossible to make a website as beautiful as our product, but Rick proved me wrong.\",\n    name: \"Veriko\",\n    designation: \"HR\",\n    company: \"Prodware\",\n    image: \"https://randomuser.me/api/portraits/women/4.jpg\",\n  },\n  {\n    testimonial:\n      \"I've never met a web developer who truly cares about their clients' success like Rick does.\",\n    name: \"Arthur\",\n    designation: \"Project Manager\",\n    company: \"Custolys\",\n    image: \"https://randomuser.me/api/portraits/men/5.jpg\",\n  },\n  {\n    testimonial:\n      \"After Rick optimized our website, our traffic increased by 50%. We can't thank them enough!\",\n    name: \"Vako Apkhazava\",\n    designation: \"CTO\",\n    company: \"456 Enterprises\",\n    image: \"https://randomuser.me/api/portraits/women/6.jpg\",\n  },\n];\n\nconst projects = [\n  {\n    name: \"Car Rent\",\n    description:\n      \"Web-based platform that allows users to search, book, and manage car rentals from various providers, providing a convenient and efficient solution for transportation needs.\",\n    tags: [\n      {\n        name: \"react\",\n        color: \"blue-text-gradient\",\n      },\n      {\n        name: \"mongodb\",\n        color: \"green-text-gradient\",\n      },\n      {\n        name: \"tailwind\",\n        color: \"pink-text-gradient\",\n      },\n    ],\n    image: carrent,\n    source_code_link: \"https://github.com/Cabtava/Social-Media-App\",\n  },\n  {\n    name: \"Job IT\",\n    description:\n      \"Web application that enables users to search for job openings, view estimated salary ranges for positions, and locate available jobs based on their current location.\",\n    tags: [\n      {\n        name: \"react\",\n        color: \"blue-text-gradient\",\n      },\n      {\n        name: \"restapi\",\n        color: \"green-text-gradient\",\n      },\n      {\n        name: \"scss\",\n        color: \"pink-text-gradient\",\n      },\n    ],\n    image: jobit,\n    source_code_link: \"https://github.com/Cabtava/AI-Assistant\",\n  },\n  {\n    name: \"Trip Guide\",\n    description:\n      \"A comprehensive travel booking platform that allows users to book flights, hotels, and rental cars, and offers curated recommendations for popular destinations.\",\n    tags: [\n      {\n        name: \"nextjs\",\n        color: \"blue-text-gradient\",\n      },\n      {\n        name: \"supabase\",\n        color: \"green-text-gradient\",\n      },\n      {\n        name: \"css\",\n        color: \"pink-text-gradient\",\n      },\n    ],\n    image: tripguide,\n    source_code_link: \"https://github.com/Cabtava/JBSeekers\",\n  },\n];\n\nexport { services, technologies, experiences, testimonials, projects };\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eindex.css\u003c/code\u003e\u003c/summary\u003e\n\n```css\n@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900\u0026display=swap\");\n\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  font-family: \"Poppins\", sans-serif;\n  scroll-behavior: smooth;\n  color-scheme: dark;\n}\n\n.hash-span {\n  margin-top: -100px;\n  padding-bottom: 100px;\n  display: block;\n}\n\n.black-gradient {\n  background: #000000; /* fallback for old browsers */\n  background: -webkit-linear-gradient(\n    to right,\n    #434343,\n    #000000\n  ); /* Chrome 10-25, Safari 5.1-6 */\n  background: linear-gradient(\n    to right,\n    #434343,\n    #000000\n  ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n}\n\n.violet-gradient {\n  background: #804dee;\n  background: linear-gradient(-90deg, #804dee 0%, rgba(60, 51, 80, 0) 100%);\n  background: -webkit-linear-gradient(\n    -90deg,\n    #804dee 0%,\n    rgba(60, 51, 80, 0) 100%\n  );\n}\n\n.green-pink-gradient {\n  background: \"#00cea8\";\n  background: linear-gradient(90.13deg, #00cea8 1.9%, #bf61ff 97.5%);\n  background: -webkit-linear-gradient(-90.13deg, #00cea8 1.9%, #bf61ff 97.5%);\n}\n\n.orange-text-gradient {\n  background: #f12711; /* fallback for old browsers */\n  background: -webkit-linear-gradient(\n    to top,\n    #f12711,\n    #f5af19\n  ); /* Chrome 10-25, Safari 5.1-6 */\n  background: linear-gradient(\n    to top,\n    #f12711,\n    #f5af19\n  ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n\n.green-text-gradient {\n  background: #11998e; /* fallback for old browsers */\n  background: -webkit-linear-gradient(\n    to top,\n    #11998e,\n    #38ef7d\n  ); /* Chrome 10-25, Safari 5.1-6 */\n  background: linear-gradient(\n    to top,\n    #11998e,\n    #38ef7d\n  ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n\n.blue-text-gradient {\n  /* background: -webkit-linear-gradient(#eee, #333); */\n  background: #56ccf2; /* fallback for old browsers */\n  background: -webkit-linear-gradient(\n    to top,\n    #2f80ed,\n    #56ccf2\n  ); /* Chrome 10-25, Safari 5.1-6 */\n  background: linear-gradient(\n    to top,\n    #2f80ed,\n    #56ccf2\n  ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n\n.pink-text-gradient {\n  background: #ec008c; /* fallback for old browsers */\n  background: -webkit-linear-gradient(\n    to top,\n    #ec008c,\n    #fc6767\n  ); /* Chrome 10-25, Safari 5.1-6 */\n  background: linear-gradient(\n    to top,\n    #ec008c,\n    #fc6767\n  ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n\n/* canvas- styles */\n.canvas-loader {\n  font-size: 10px;\n  width: 1em;\n  height: 1em;\n  border-radius: 50%;\n  position: relative;\n  text-indent: -9999em;\n  animation: mulShdSpin 1.1s infinite ease;\n  transform: translateZ(0);\n}\n\n@keyframes mulShdSpin {\n  0%,\n  100% {\n    box-shadow: 0em -2.6em 0em 0em #ffffff, 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2),\n      2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2),\n      0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.5), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7);\n  }\n  12.5% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.7), 1.8em -1.8em 0 0em\n        #ffffff, 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em\n        rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em\n        1.8em 0 0em rgba(255, 255, 255, 0.2),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5);\n  }\n  25% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.5), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.7), 2.5em 0em 0 0em #ffffff, 1.75em 1.75em 0 0em\n        rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em\n        1.8em 0 0em rgba(255, 255, 255, 0.2),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);\n  }\n  37.5% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.5), 2.5em 0em 0 0em rgba(255, 255, 255, 0.7), 1.75em\n        1.75em 0 0em #ffffff, 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em\n        1.8em 0 0em rgba(255, 255, 255, 0.2),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);\n  }\n  50% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.5), 1.75em\n        1.75em 0 0em rgba(255, 255, 255, 0.7), 0em 2.5em 0 0em #ffffff, -1.8em\n        1.8em 0 0em rgba(255, 255, 255, 0.2),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);\n  }\n  62.5% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em\n        1.75em 0 0em rgba(255, 255, 255, 0.5),\n      0em 2.5em 0 0em rgba(255, 255, 255, 0.7), -1.8em 1.8em 0 0em #ffffff,\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);\n  }\n  75% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em\n        1.75em 0 0em rgba(255, 255, 255, 0.2),\n      0em 2.5em 0 0em rgba(255, 255, 255, 0.5), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.7),\n      -2.6em 0em 0 0em #ffffff, -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);\n  }\n  87.5% {\n    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em\n        rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em\n        1.75em 0 0em rgba(255, 255, 255, 0.2),\n      0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.5),\n      -2.6em 0em 0 0em rgba(255, 255, 255, 0.7), -1.8em -1.8em 0 0em #ffffff;\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eMotion.js\u003c/code\u003e\u003c/summary\u003e\n\n```javascript\nexport const textVariant = (delay) =\u003e {\n  return {\n    hidden: {\n      y: -50,\n      opacity: 0,\n    },\n    show: {\n      y: 0,\n      opacity: 1,\n      transition: {\n        type: \"spring\",\n        duration: 1.25,\n        delay: delay,\n      },\n    },\n  };\n};\n\nexport const fadeIn = (direction, type, delay, duration) =\u003e {\n  return {\n    hidden: {\n      x: direction === \"left\" ? 100 : direction === \"right\" ? -100 : 0,\n      y: direction === \"up\" ? 100 : direction === \"down\" ? -100 : 0,\n      opacity: 0,\n    },\n    show: {\n      x: 0,\n      y: 0,\n      opacity: 1,\n      transition: {\n        type: type,\n        delay: delay,\n        duration: duration,\n        ease: \"easeOut\",\n      },\n    },\n  };\n};\n\nexport const zoomIn = (delay, duration) =\u003e {\n  return {\n    hidden: {\n      scale: 0,\n      opacity: 0,\n    },\n    show: {\n      scale: 1,\n      opacity: 1,\n      transition: {\n        type: \"tween\",\n        delay: delay,\n        duration: duration,\n        ease: \"easeOut\",\n      },\n    },\n  };\n};\n\nexport const slideIn = (direction, type, delay, duration) =\u003e {\n  return {\n    hidden: {\n      x: direction === \"left\" ? \"-100%\" : direction === \"right\" ? \"100%\" : 0,\n      y: direction === \"up\" ? \"100%\" : direction === \"down\" ? \"100%\" : 0,\n    },\n    show: {\n      x: 0,\n      y: 0,\n      transition: {\n        type: type,\n        delay: delay,\n        duration: duration,\n        ease: \"easeOut\",\n      },\n    },\n  };\n};\n\nexport const staggerContainer = (staggerChildren, delayChildren) =\u003e {\n  return {\n    hidden: {},\n    show: {\n      transition: {\n        staggerChildren: staggerChildren,\n        delayChildren: delayChildren || 0,\n      },\n    },\n  };\n};\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003estyles.js\u003c/code\u003e\u003c/summary\u003e\n\n```javascript\nconst styles = {\n  paddingX: \"sm:px-16 px-6\",\n  paddingY: \"sm:py-16 py-6\",\n  padding: \"sm:px-16 px-6 sm:py-16 py-10\",\n\n  heroHeadText:\n    \"font-black text-white lg:text-[80px] sm:text-[60px] xs:text-[50px] text-[40px] lg:leading-[98px] mt-2\",\n  heroSubText:\n    \"text-[#dfd9ff] font-medium lg:text-[30px] sm:text-[26px] xs:text-[20px] text-[16px] lg:leading-[40px]\",\n\n  sectionHeadText:\n    \"text-white font-black md:text-[60px] sm:text-[50px] xs:text-[40px] text-[30px]\",\n  sectionSubText:\n    \"sm:text-[18px] text-[14px] text-secondary uppercase tracking-wider\",\n};\n\nexport { styles };\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003etailwind.config.cjs\u003c/code\u003e\u003c/summary\u003e\n\n```javascript\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"./src/**/*.{js,jsx}\"],\n  mode: \"jit\",\n  theme: {\n    extend: {\n      colors: {\n        primary: \"#050816\",\n        secondary: \"#aaa6c3\",\n        tertiary: \"#151030\",\n        \"black-100\": \"#100d25\",\n        \"black-200\": \"#090325\",\n        \"white-100\": \"#f3f3f3\",\n      },\n      boxShadow: {\n        card: \"0px 35px 120px -15px #211e35\",\n      },\n      screens: {\n        xs: \"450px\",\n      },\n      backgroundImage: {\n        \"hero-pattern\": \"url('/src/assets/herobg.png')\",\n      },\n    },\n  },\n  plugins: [],\n};\n```\n\n\u003c/details\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcabtava%2Fportfolio-website","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcabtava%2Fportfolio-website","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcabtava%2Fportfolio-website/lists"}