diff --git a/src/app/globals.css b/src/app/globals.css
index b5c61c95..cc294bc0 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,3 +1,22 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
+
+
+::-webkit-scrollbar {
+ width: 4px;
+}
+
+::-webkit-scrollbar-track {
+ background: #919191;
+ border-radius: 2px;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #C0C0C0;
+ border-radius: 5px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #C0C0C0;
+}
\ No newline at end of file
diff --git a/src/app/index.ts b/src/app/index.ts
index b351a848..b90a9a6b 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -1 +1 @@
-export { default as CounterPage } from "./counter/page";
+export { TeckStackPage } from "./tech-stack/";
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index c0cca4d2..19afe4df 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -9,7 +9,6 @@ export const metadata: Metadata = {
description: "Generated by create next app",
};
-
// If loading a variable font, you don't need to specify the font weight
const inter = Inter({
weight: ["400", "500", "600", "700"],
diff --git a/src/app/tech-stack/components/TechStackCard.tsx b/src/app/tech-stack/components/TechStackCard.tsx
new file mode 100644
index 00000000..2b1c33a9
--- /dev/null
+++ b/src/app/tech-stack/components/TechStackCard.tsx
@@ -0,0 +1,37 @@
+import { TechItem } from "./fixtures/TechStack";
+import { Avatar, EditButton } from "@/components";
+
+interface TechStackCardProps {
+ title: string;
+ data: TechItem[];
+}
+
+export default function TechStackCard({ title, data }: TechStackCardProps) {
+ return (
+
+
+
+ {title}
+
+
+
+
+
+ {data.map((element) => (
+ -
+ {element.value}
+
+ {element.users.map((user) => (
+
+ ))}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/app/tech-stack/components/TechStackContainer.module.css b/src/app/tech-stack/components/TechStackContainer.module.css
new file mode 100644
index 00000000..61221827
--- /dev/null
+++ b/src/app/tech-stack/components/TechStackContainer.module.css
@@ -0,0 +1,3 @@
+.tech-container-width {
+ max-width: 85.5625rem;
+}
\ No newline at end of file
diff --git a/src/app/tech-stack/components/TechStackContainer.tsx b/src/app/tech-stack/components/TechStackContainer.tsx
new file mode 100644
index 00000000..97e0e6d6
--- /dev/null
+++ b/src/app/tech-stack/components/TechStackContainer.tsx
@@ -0,0 +1,29 @@
+import { techStack } from "./fixtures/TechStack";
+import styles from "./TechStackContainer.module.css";
+import { TechStackCard } from ".";
+
+export default function TechStackContainer() {
+ return (
+
+
+ {Object.keys(techStack).map((cardType, index) => (
+ -
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/app/tech-stack/components/fixtures/TechStack.ts b/src/app/tech-stack/components/fixtures/TechStack.ts
new file mode 100644
index 00000000..56c216f9
--- /dev/null
+++ b/src/app/tech-stack/components/fixtures/TechStack.ts
@@ -0,0 +1,52 @@
+import { CardType } from "../types/types";
+
+export interface TechItem {
+ id: number;
+ value: string;
+ users: string[];
+}
+
+export const techStack: Record = {
+ Frontend: [
+ { id: 1, value: "JavaScript", users: ["Tim", "John"] },
+ { id: 2, value: "React", users: ["John"] },
+ { id: 3, value: "Vue", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Angular", users: ["John"] },
+ { id: 5, value: "TypeScript", users: ["Jack", "John"] },
+ ],
+ "CSS Library": [
+ { id: 1, value: "Tailwind", users: ["Tim", "John"] },
+ { id: 2, value: "Bootstrap", users: ["John"] },
+ { id: 3, value: "Daisy UI", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Vanilla CSS", users: ["John"] },
+ { id: 5, value: "Materialize", users: ["Jack", "John"] },
+ ],
+ Backend: [
+ { id: 1, value: "Node", users: ["Tim", "John"] },
+ { id: 2, value: "NET", users: ["John"] },
+ { id: 3, value: "Ruby", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Java", users: ["John"] },
+ { id: 5, value: "Python", users: ["Jack", "John"] },
+ ],
+ "Project Management": [
+ { id: 1, value: "Jira", users: ["Tim", "John"] },
+ { id: 2, value: "GitLab", users: ["John"] },
+ { id: 3, value: "Trello", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Notion", users: ["John"] },
+ { id: 5, value: "Obsidian", users: ["Jack", "John"] },
+ ],
+ "Cloud Provider": [
+ { id: 1, value: "AWS", users: ["Tim", "John"] },
+ { id: 2, value: "Azure", users: ["John"] },
+ { id: 3, value: "Firebase", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Linode", users: ["John"] },
+ { id: 5, value: "Google Cloud", users: ["Jack", "John"] },
+ ],
+ Hosting: [
+ { id: 1, value: "Heroku", users: ["Tim", "John"] },
+ { id: 2, value: "Netlify", users: ["John"] },
+ { id: 3, value: "Github", users: ["Myke", "Josh", "Jack"] },
+ { id: 4, value: "Render", users: ["John"] },
+ { id: 5, value: "Bluocean", users: ["Jack", "John"] },
+ ],
+};
diff --git a/src/app/tech-stack/components/index.ts b/src/app/tech-stack/components/index.ts
new file mode 100644
index 00000000..b49b4cb9
--- /dev/null
+++ b/src/app/tech-stack/components/index.ts
@@ -0,0 +1,2 @@
+export { default as TechStackCard } from "./TechStackCard";
+export { default as TechStackContainer } from "./TechStackContainer";
diff --git a/src/app/tech-stack/components/types/types.ts b/src/app/tech-stack/components/types/types.ts
new file mode 100644
index 00000000..23b66261
--- /dev/null
+++ b/src/app/tech-stack/components/types/types.ts
@@ -0,0 +1,7 @@
+export type CardType =
+ | "Frontend"
+ | "CSS Library"
+ | "Backend"
+ | "Project Management"
+ | "Cloud Provider"
+ | "Hosting";
diff --git a/src/app/tech-stack/index.ts b/src/app/tech-stack/index.ts
new file mode 100644
index 00000000..0adbbb0d
--- /dev/null
+++ b/src/app/tech-stack/index.ts
@@ -0,0 +1 @@
+export { default as TeckStackPage } from "./page";
diff --git a/src/app/tech-stack/page.tsx b/src/app/tech-stack/page.tsx
new file mode 100644
index 00000000..1eacd571
--- /dev/null
+++ b/src/app/tech-stack/page.tsx
@@ -0,0 +1,5 @@
+import { TechStackContainer } from "./components";
+
+export default function TeckStackPage() {
+ return ;
+}
diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx
new file mode 100644
index 00000000..f12304ba
--- /dev/null
+++ b/src/components/Avatar.tsx
@@ -0,0 +1,7 @@
+export default function Avatar() {
+ return (
+
+ );
+}
diff --git a/src/components/EditButton.tsx b/src/components/EditButton.tsx
new file mode 100644
index 00000000..94885b63
--- /dev/null
+++ b/src/components/EditButton.tsx
@@ -0,0 +1,18 @@
+import { PencilSquareIcon } from "@heroicons/react/24/solid";
+
+interface EditButtonProps {
+ title: string;
+}
+
+export default function EditButton({ title }: EditButtonProps) {
+ return (
+
+ );
+}
diff --git a/src/components/index.ts b/src/components/index.ts
index 396a2b73..2b77dcee 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -1 +1,3 @@
export { default as StoreProvider } from "./StoreProvider";
+export { default as Avatar } from "./Avatar";
+export { default as EditButton } from "./EditButton";