diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5a4d4bf
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "user-profile-dashboard",
+ "version": "1.0.0",
+ "private": true,
+ "dependencies": {
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-router-dom": "^6.14.1"
+ },
+ "scripts": {
+ "start": "react-scripts start",
+ "build": "react-scripts build",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject"
+ },
+ "devDependencies": {
+ "react-scripts": "5.0.1"
+ }
+}
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..52fb051
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
+import UserProfileDashboard from './components/UserProfileDashboard';
+import { AuthProvider } from './contexts/AuthContext';
+
+function App() {
+ return (
+
+
+
+ } />
+ Settings Page} />
+ Messages Page} />
+
+
+
+ );
+}
+
+export default App;
diff --git a/src/api/userApi.js b/src/api/userApi.js
new file mode 100644
index 0000000..34f5415
--- /dev/null
+++ b/src/api/userApi.js
@@ -0,0 +1,13 @@
+export async function fetchUserData(userId, token) {
+ const response = await fetch(`https://api.example.com/users/${userId}`, {
+ headers: {
+ Authorization: `Bearer ${token}`
+ }
+ });
+
+ if (!response.ok) {
+ throw new Error('API error');
+ }
+
+ return await response.json();
+}
diff --git a/src/components/.DS_Store b/src/components/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/src/components/.DS_Store differ
diff --git a/src/components/UserInfo.jsx b/src/components/UserInfo.jsx
new file mode 100644
index 0000000..cdf4c80
--- /dev/null
+++ b/src/components/UserInfo.jsx
@@ -0,0 +1,11 @@
+import React from 'react';
+
+export default function UserInfo({ info }) {
+ return (
+
+ User Information
+ Email: {info.email}
+ Location: {info.location}
+
+ );
+}
diff --git a/src/components/UserProfileDashboard.jsx b/src/components/UserProfileDashboard.jsx
new file mode 100644
index 0000000..0fd9057
--- /dev/null
+++ b/src/components/UserProfileDashboard.jsx
@@ -0,0 +1,49 @@
+import React, { useContext, useEffect, useState } from 'react';
+import { AuthContext } from '../contexts/AuthContext';
+import { fetchUserData } from '../api/userApi';
+import UserInfo from './UserInfo';
+import UserStats from './UserStats';
+import { Link } from 'react-router-dom';
+
+export default function UserProfileDashboard() {
+ const { userId, token } = useContext(AuthContext);
+ const [userData, setUserData] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ useEffect(() => {
+ if (!userId || !token) {
+ setError('User not authenticated');
+ setLoading(false);
+ return;
+ }
+
+ fetchUserData(userId, token)
+ .then(data => {
+ setUserData(data);
+ setLoading(false);
+ })
+ .catch(err => {
+ setError('Failed to fetch user data');
+ setLoading(false);
+ });
+ }, [userId, token]);
+
+ if (loading) return
Loading user data...
;
+ if (error) return Error: {error}
;
+
+ return (
+
+
Welcome, {userData.name}
+
+
+
+
+
+ );
+}
diff --git a/src/components/UserStats.jsx b/src/components/UserStats.jsx
new file mode 100644
index 0000000..9709bc7
--- /dev/null
+++ b/src/components/UserStats.jsx
@@ -0,0 +1,14 @@
+import React from 'react';
+
+export default function UserStats({ stats }) {
+ return (
+
+ User Stats
+
+ - Posts: {stats.posts}
+ - Followers: {stats.followers}
+ - Following: {stats.following}
+
+
+ );
+}
diff --git a/src/contexts/AuthContext.jsx b/src/contexts/AuthContext.jsx
new file mode 100644
index 0000000..0c9e7df
--- /dev/null
+++ b/src/contexts/AuthContext.jsx
@@ -0,0 +1,17 @@
+import React, { createContext, useState } from 'react';
+
+export const AuthContext = createContext({
+ userId: null,
+ token: null,
+});
+
+export function AuthProvider({ children }) {
+ const [userId, setUserId] = useState('12345');
+ const [token, setToken] = useState(null); // TODO: Provide a valid token after user login
+
+ return (
+
+ {children}
+
+ );
+}