diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index a7dc3415..2aec605c 100644 --- a/apps/web/src/app/page.tsx +++ b/apps/web/src/app/page.tsx @@ -6,76 +6,18 @@ import AboutHeader from '@/components/about/about-header'; import SeeMoreButton from "@/components/about/see-more-btn"; import LatestArticles from "@/components/about/latest-articles"; import MarkdownRenderer from "@/components/markdown/markdown-renderer"; +import TechStack from "@/components/about/tech-stack"; 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"; - -const techStacks = { - programmingLanguages: [ - { 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: }, - ], - tools: [ - { 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 -} = config; +const { about, title } = config; const { subHeader, pronouns, firstName, lastName, preferredName, introduction, - lifestyles + lifestyles, techStacks } = about; export const metadata: Metadata = { @@ -116,7 +58,7 @@ const About = async () => { - + diff --git a/apps/web/src/components/about/tech-stack.tsx b/apps/web/src/components/about/tech-stack.tsx index 6a798208..d4399d02 100644 --- a/apps/web/src/components/about/tech-stack.tsx +++ b/apps/web/src/components/about/tech-stack.tsx @@ -1,10 +1,12 @@ import React from "react"; +import type { Icon } from '@primer/octicons-react'; +import type { IconType } from 'react-icons'; import "@/styles/about/tech-stack.css"; type TechStack = { name: string; - icon: JSX.Element; + icon: Icon | IconType; }; type TechStackProps = { @@ -22,7 +24,7 @@ const TechStack: React.FC = ({ techStacks }) => {
{stacks.map((stack) => (
- {stack.icon} +
))}
diff --git a/apps/web/src/config/index.ts b/apps/web/src/config/index.ts index 11298fb5..fe3216e4 100644 --- a/apps/web/src/config/index.ts +++ b/apps/web/src/config/index.ts @@ -8,8 +8,27 @@ import { IoSchoolOutline } from "react-icons/io5"; import { PiTrophy, PiBooks } from "react-icons/pi"; import { GoalIcon } from '@primer/octicons-react' import { LuGithub, LuPencil } from "react-icons/lu"; -import { TbPhotoSquareRounded } from "react-icons/tb"; -import { TbBrandCpp } from "react-icons/tb"; +import { + TbBrandCpp, TbBrandTypescript, + TbBrandGolang, TbMarkdown, + TbBrandNextjs, TbBrandDjango, + TbBrandApple, TbBrandTailwind, + TbBrandDocker, TbBrandMysql, + TbPhotoSquareRounded +} 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"; const config: Config = { @@ -86,26 +105,35 @@ In my spare time, I do workouts 💪🏻, street photography 📸, and tech cont text: "Sky brings freedom; streets, a reminder of others' contributions." } ], - "programmingLanguage": [ - { id: 'python', src: 'https://skillicons.dev/icons?i=python', alt: 'python' }, - { id: 'ts', src: 'https://skillicons.dev/icons?i=ts', alt: 'ts' }, - { id: 'go', src: 'https://skillicons.dev/icons?i=go', alt: 'go' }, - { id: 'cpp', src: 'https://skillicons.dev/icons?i=cpp', alt: 'cpp' }, - { id: 'java', src: 'https://skillicons.dev/icons?i=java', alt: 'java' }, - { id: 'md', src: 'https://skillicons.dev/icons?i=md', alt: 'md' }, - { id: 'bash', src: 'https://skillicons.dev/icons?i=bash', alt: 'bash' }, - { id: 'latex', src: 'https://skillicons.dev/icons?i=latex', alt: 'latex' }, - ], - "devOps": [ - { id: 'linux', src: 'https://skillicons.dev/icons?i=linux', alt: 'linux' }, - { id: 'aws', src: 'https://skillicons.dev/icons?i=aws', alt: 'aws' }, - { id: 'fastapi', src: 'https://skillicons.dev/icons?i=fastapi', alt: 'fastapi' }, - { id: 'react', src: 'https://skillicons.dev/icons?i=react', alt: 'react' }, - { id: 'nextjs', src: 'https://skillicons.dev/icons?i=nextjs', alt: 'nextjs' }, - { id: 'flask', src: 'https://skillicons.dev/icons?i=flask', alt: 'flask' }, - { id: 'docker', src: 'https://skillicons.dev/icons?i=docker', alt: 'docker' }, - { id: 'githubactions', src: 'https://skillicons.dev/icons?i=githubactions', alt: 'githubactions' }, - ] + "techStacks": { + "programmingLanguages": [ + { name: "Python", icon: AiOutlinePython }, + { name: "TypeScript", icon: TbBrandTypescript }, + { name: "Go", icon: TbBrandGolang }, + { name: "C++", icon: TbBrandCpp }, + { name: "Java", icon: RiJavaLine }, + { name: "Markdown", icon: TbMarkdown }, + { name: "LaTeX", icon: SiLatex }, + { name: "JavaScript", icon: RiJavascriptLine }, + { name: "Linux", icon: VscTerminalLinux }, + { name: "Apple", icon: TbBrandApple }, + { name: "MySQL", icon: TbBrandMysql }, + { name: "Redis", icon: DiRedis }, + { name: "Tailwind", icon: TbBrandTailwind }, + ], + "tools": [ + { name: "React", icon: FaReact }, + { name: "Next.js", icon: TbBrandNextjs }, + { name: "AWS", icon: FaAws }, + { name: "FastAPI", icon: SiFastapi }, + { name: "Django", icon: TbBrandDjango }, + { name: "Flask", icon: BiLogoFlask }, + { name: "Docker", icon: TbBrandDocker }, + { name: "Kubernetes", icon: SiKubernetes }, + { name: "Azure", icon: SiMicrosoftazure }, + { name: "Lambda", icon: SiAwslambda }, + ], + }, }, resume: { "educations": { diff --git a/apps/web/src/types/about.d.ts b/apps/web/src/types/about.d.ts index c357b1d2..e9f8aab2 100644 --- a/apps/web/src/types/about.d.ts +++ b/apps/web/src/types/about.d.ts @@ -1,6 +1,7 @@ // https://github.com/afiiif/pokemon-world/blob/main/src/types/pokemon.ts import type { Icon } from '@primer/octicons-react'; +import type { IconType } from 'react-icons'; export type LifeStyle = { icon: Icon; @@ -9,10 +10,16 @@ export type LifeStyle = { } export type TechStack = { - id: string; - src: string; - alt: string; -} + name: string; + icon: Icon | IconType; +}; + +type TechStackProps = { + techStacks: { + programmingLanguages: TechStack[]; + tools: TechStack[]; + }; +}; export type SocialMedia = { githubUsername: string; @@ -48,6 +55,10 @@ export type About = { socialMedia: SocialMedia; introduction: string; lifestyles: LifeStyle[]; - programmingLanguage: TechStack[]; - devOps: TechStack[]; + techStacks: { + programmingLanguages: TechStack[]; + tools: TechStack[]; + }; } + +