diff --git a/public/demo.jpeg b/public/demo.jpeg
new file mode 100644
index 0000000..a29b83b
Binary files /dev/null and b/public/demo.jpeg differ
diff --git a/public/icons/devdotto.svg b/public/icons/devdotto.svg
new file mode 100644
index 0000000..e4b18cf
--- /dev/null
+++ b/public/icons/devdotto.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/github.svg b/public/icons/github.svg
new file mode 100644
index 0000000..538ec5b
--- /dev/null
+++ b/public/icons/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/linkedIn.png b/public/icons/linkedIn.png
new file mode 100644
index 0000000..2c28b27
Binary files /dev/null and b/public/icons/linkedIn.png differ
diff --git a/public/icons/x.svg b/public/icons/x.svg
new file mode 100644
index 0000000..a7c37cf
--- /dev/null
+++ b/public/icons/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/(home)/layout.tsx b/src/app/(home)/layout.tsx
new file mode 100644
index 0000000..c8c234c
--- /dev/null
+++ b/src/app/(home)/layout.tsx
@@ -0,0 +1,16 @@
+import Header from "@/components/layout/Header";
+import Footer from "@/components/layout/Footer";
+
+export default function HomeLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/page.tsx b/src/app/(home)/page.tsx
similarity index 69%
rename from src/app/page.tsx
rename to src/app/(home)/page.tsx
index 01eb45f..958e16f 100644
--- a/src/app/page.tsx
+++ b/src/app/(home)/page.tsx
@@ -6,13 +6,13 @@ const HomePage = () => {
return (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
);
diff --git a/src/app/(user)/components/profile-card.tsx b/src/app/(user)/components/profile-card.tsx
new file mode 100644
index 0000000..0334768
--- /dev/null
+++ b/src/app/(user)/components/profile-card.tsx
@@ -0,0 +1,44 @@
+import Image from "next/image";
+import { USER_SOCIALS_ICONS } from "@/constants";
+
+export default function ProfileCard() {
+ return (
+
+
+ {/* profile user info */}
+
+
Navid Abbaszedeh
+
+ Fullstack Engineer and Systems Architect
+
+
+
+ {/* profile user socials */}
+
+
+
+ {/* social icons */}
+
+ {USER_SOCIALS_ICONS.map((icon) => (
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/src/app/(user)/components/profile-tabs.tsx b/src/app/(user)/components/profile-tabs.tsx
new file mode 100644
index 0000000..9906c30
--- /dev/null
+++ b/src/app/(user)/components/profile-tabs.tsx
@@ -0,0 +1,41 @@
+"use client";
+import { useState } from "react";
+import { USER_PROFILE_TABS } from "@/constants";
+
+export default function ProfileTabs() {
+ const [activeTab, setActiveTab] = useState("achievements");
+
+ return (
+
+ {/* Tab buttons */}
+
+ {USER_PROFILE_TABS.map((tab) => (
+
+ ))}
+
+
+ {/* Tab content */}
+
+ {USER_PROFILE_TABS.map((tab) => (
+
+
{tab.heading}
+
{tab.content}
+
+ ))}
+
+
+ );
+}
diff --git a/src/app/(user)/profile/layout.tsx b/src/app/(user)/profile/layout.tsx
new file mode 100644
index 0000000..060d5fc
--- /dev/null
+++ b/src/app/(user)/profile/layout.tsx
@@ -0,0 +1,12 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Frontend Advanced user profile",
+ description: "View user profile, achievements, badges and certifications",
+};
+
+export default function UserLayout({
+ children,
+}: Readonly<{ children: React.ReactNode }>) {
+ return ;
+}
diff --git a/src/app/(user)/profile/page.tsx b/src/app/(user)/profile/page.tsx
new file mode 100644
index 0000000..32088f9
--- /dev/null
+++ b/src/app/(user)/profile/page.tsx
@@ -0,0 +1,37 @@
+import Image from "next/image";
+import ProfileCard from "@/app/(user)/components/profile-card";
+import ProfileTabs from "../components/profile-tabs";
+
+const UserProfile = () => {
+ return (
+ // black background section
+
+
+ {/* profile card centered on black background*/}
+
+
+
+ {/* Profile info */}
+
+
+ {/* profile tabs */}
+
+
+ );
+};
+
+export default UserProfile;
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 8835845..9174fa1 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,26 +1,21 @@
import type { Metadata } from "next";
import { inter } from "@/lib/font";
import "./globals.css";
-import Header from "@/components/layout/Header";
-import Footer from "@/components/layout/Footer";
export const metadata: Metadata = {
title: "Frontend Advanced",
- description: "All-in-one educational platform for junior to senior frontend developers to lean advanced topics with interactive tools & hands-on coding sessions",
+ description:
+ "All-in-one educational platform for junior to senior frontend developers to lean advanced topics with interactive tools & hands-on coding sessions",
};
export default function RootLayout({
children,
-}: Readonly<{
+}: {
children: React.ReactNode;
-}>) {
+}) {
return (
-
-
- {children}
-
-
+ {children}
);
}
diff --git a/src/constants/index.ts b/src/constants/index.ts
index e67e164..df4b71c 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -27,7 +27,62 @@ export interface SectionItem {
}
export const SECTION_CONTENT: SectionItem[] = [
- { id: 1, h1Content: "Deep dives into frameworks.", pContent: "Unpack the complexities of React, Vue, and other cutting-edge libraries with real-world scenarios.", src: "/Section-1-img.webp", alt: "This image contains the vue.js logo and a developer who is working with his laptop and exploring the framework." },
- { id: 2, h1Content: "Performance and architecture.", pContent: "Learn advanced techniques in performance optimization and scalable frontend architecture.", src: "/Section-2-img.webp", alt: "This image shows a high-level overview of a web application's architecture, with various components and layers." },
- { id: 3, h1Content: "Modern tooling mastery.", pContent: "Expert workflows covering build tools, testing, accessibility, and much more.", src: "/Section-3-img.webp", alt: "This image features modern web development coding and HTML on the sides of a laptop." },
-];
\ No newline at end of file
+ {
+ id: 1,
+ h1Content: "Deep dives into frameworks.",
+ pContent:
+ "Unpack the complexities of React, Vue, and other cutting-edge libraries with real-world scenarios.",
+ src: "/Section-1-img.webp",
+ alt: "This image contains the vue.js logo and a developer who is working with his laptop and exploring the framework.",
+ },
+ {
+ id: 2,
+ h1Content: "Performance and architecture.",
+ pContent:
+ "Learn advanced techniques in performance optimization and scalable frontend architecture.",
+ src: "/Section-2-img.webp",
+ alt: "This image shows a high-level overview of a web application's architecture, with various components and layers.",
+ },
+ {
+ id: 3,
+ h1Content: "Modern tooling mastery.",
+ pContent:
+ "Expert workflows covering build tools, testing, accessibility, and much more.",
+ src: "/Section-3-img.webp",
+ alt: "This image features modern web development coding and HTML on the sides of a laptop.",
+ },
+];
+
+export const USER_SOCIALS_ICONS = [
+ { id: 1, label: "X", src: "/icons/x.svg" },
+ { id: 2, label: "Devto", src: "/icons/devdotto.svg" },
+ { id: 3, label: "LinkedIn", src: "/icons/linkedIn.png" },
+ { id: 4, label: "GitHub", src: "/icons/github.svg" },
+];
+
+export interface UserProfileTabItem {
+ id: string;
+ label: string;
+ heading?: string;
+ content: string;
+}
+
+export const USER_PROFILE_TABS: UserProfileTabItem[] = [
+ {
+ id: "achievements",
+ label: "Achievements",
+ heading: "System architect",
+ content:
+ "Responsible for designing and overseeing complex enterprise technical implementation with business objectives, define architectural standards, and guides development teams through strategic technology decisions",
+ },
+ {
+ id: "trophies",
+ label: "Trophies",
+ content: "trophies.....",
+ },
+ {
+ id: "badges",
+ label: "Badges",
+ content: "list of badges.....",
+ },
+];