diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index d962b9fa..9b9b78a4 100644 --- a/apps/web/src/app/page.tsx +++ b/apps/web/src/app/page.tsx @@ -1,6 +1,5 @@ import type { Metadata } from "next"; import GitHubStats from '@/components/about/github-stats'; -import TechStack from '@/components/about/tech-stack'; import LifeStyles from '@/components/about/life-styles'; import PageHeader from '@/components/page-header'; import AboutHeader from '@/components/about/about-header'; @@ -10,6 +9,80 @@ import MarkdownRenderer from "@/components/markdown/markdown-renderer"; import { getBlogPosts } from "@/lib/db/blog"; import { FaRegPenToSquare } from "react-icons/fa6"; import config from '@/config'; +import TechStack from "@/components/about/tech-stack"; + +import React from "react"; +import { + TbBrandCpp, + TbBrandTypescript, + TbBrandGolang, + TbMarkdown, + TbBrandNextjs, + TbBrandDjango, + TbBrandApple, + TbBrandTailwind, + TbBrandDocker, + TbBrandMysql, +} from "react-icons/tb"; +import { FaReact, FaAws } from "react-icons/fa"; +import { AiOutlinePython } from "react-icons/ai"; +import { RiJavaLine, RiJavascriptLine } from "react-icons/ri"; +import { + SiLatex, + SiFastapi, + SiKubernetes, + SiMicrosoftazure, + SiAwslambda, +} from "react-icons/si"; +import { BiLogoFlask } from "react-icons/bi"; +import { VscTerminalLinux } from "react-icons/vsc"; +import { DiRedis } from "react-icons/di"; + +type TechStack = { + name: string; + icon: JSX.Element; +}; + +type TechStackCategory = { + category: string; + stacks: TechStack[]; +}; + +const techStacks: TechStackCategory[] = [ + { + category: "Programming Languages", + stacks: [ + { name: "Python", icon: }, + { name: "TypeScript", icon: }, + { name: "Go", icon: }, + { name: "C++", icon: }, + { name: "Java", icon: }, + { name: "Markdown", icon: }, + { name: "LaTeX", icon: }, + { name: "JavaScript", icon: }, + { name: "Linux", icon: }, + { name: "Apple", icon: }, + { name: "MySQL", icon: }, + { name: "Redis", icon: }, + { name: "Tailwind", icon: }, + ], + }, + { + category: "Frameworks and Tools", + stacks: [ + { name: "React", icon: }, + { name: "Next.js", icon: }, + { name: "AWS", icon: }, + { name: "FastAPI", icon: }, + { name: "Django", icon: }, + { name: "Flask", icon: }, + { name: "Docker", icon: }, + { name: "Kubernetes", icon: }, + { name: "Azure", icon: }, + { name: "Lambda", icon: }, + ], + }, +]; const { about, title @@ -58,8 +131,7 @@ const About = async () => { - - + diff --git a/apps/web/src/components/about/tech-item.tsx b/apps/web/src/components/about/tech-item.tsx new file mode 100644 index 00000000..0bd1b88f --- /dev/null +++ b/apps/web/src/components/about/tech-item.tsx @@ -0,0 +1,26 @@ +import type { IconType } from "react-icons"; +import type { Icon } from "@primer/octicons-react"; + +interface TechItemProps { + techSteck: TechStack; +} + +type TechStack = { + name: string; + icon: Icon | IconType; +}; + +const TechItem: React.FC = ({ techSteck }) => { + + return ( +
  • +
    +
    + +
    +
    +
  • + ); +}; + +export default TechItem; diff --git a/apps/web/src/components/about/tech-stack.css b/apps/web/src/components/about/tech-stack.css new file mode 100644 index 00000000..0b1731a0 --- /dev/null +++ b/apps/web/src/components/about/tech-stack.css @@ -0,0 +1,56 @@ +.service-item { + position: relative; + background: var(--border-gradient-onyx); + padding: 20px; + border-radius: 14px; + box-shadow: var(--shadow-2); + z-index: 1; + overflow: hidden; +} + +.service-item::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; +} + +.tech-stack-container { + display: flex; + flex-wrap: wrap; + gap: 15px; + overflow-y: auto; + max-height: 150px; + /* Adjust as needed */ + padding: 10px; +} + +.tech-icon { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 2rem; + /* Adjust icon size */ + color: white; + /* Icon color */ +} + +.icon-label { + margin-top: 5px; + font-size: 0.8rem; + color: var(--text-secondary); + text-align: center; +} + +@media (min-width: 580px) { + .service-item { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 18px; + padding: 30px; + } +} \ No newline at end of file diff --git a/apps/web/src/components/about/tech-stack.tsx b/apps/web/src/components/about/tech-stack.tsx index 38d521a1..1ab9dfa6 100644 --- a/apps/web/src/components/about/tech-stack.tsx +++ b/apps/web/src/components/about/tech-stack.tsx @@ -1,27 +1,38 @@ -import Image from 'next/image'; +import React from "react"; -import type { TechStack as TechStackType } from '@/types/about'; +import "./tech-stack.css"; -interface TechStackProps { - techStack: TechStackType[]; -} +type TechStack = { + name: string; + icon: JSX.Element; +}; -const TechStack: React.FC = ({ techStack }) => { +type TechStackCategory = { + category: string; + stacks: TechStack[]; +}; + + +type TechStackV1Props = { + techStacks: TechStackCategory[]; +}; + +const TechStackV1: React.FC = ( {techStacks} ) => { return ( -
      - {techStack.map((item: TechStackType) => ( -
    • - {item.alt} +
        + {techStacks.map(({ category, stacks }) => ( +
      • +
        + {stacks.map((stack) => ( +
        + {stack.icon} +
        + ))} +
      • ))}
      ); -} +}; -export default TechStack; +export default TechStackV1;