diff --git a/src/components/TrainingZones.vue b/src/components/TrainingZones.vue new file mode 100644 index 0000000..6501192 --- /dev/null +++ b/src/components/TrainingZones.vue @@ -0,0 +1,353 @@ + + + + + \ No newline at end of file diff --git a/src/components/UserDashboard.vue b/src/components/UserDashboard.vue index e77a754..7cc0f5d 100644 --- a/src/components/UserDashboard.vue +++ b/src/components/UserDashboard.vue @@ -5,7 +5,10 @@

RideAware

@@ -30,20 +33,35 @@

0 hrs

+ +
+ +

🚴 Manage Equipment

+

Track your bikes and gear

+
+ +

âš¡ Training Zones

+

View your personalized zones

+
+ +

👤 Edit Profile

+

Update your stats and info

+
+
@@ -70,8 +88,9 @@ async function handleLogout() { .navbar-menu { display: flex; - gap: 1rem; + gap: 1.5rem; align-items: center; + flex-wrap: wrap; } .navbar-menu a { @@ -129,6 +148,7 @@ async function handleLogout() { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; + margin-bottom: 2rem; } .stat-card { @@ -152,4 +172,37 @@ async function handleLogout() { color: #667eea; font-weight: 700; } + +.quick-actions { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; +} + +.action-card { + background: white; + padding: 1.5rem; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + text-decoration: none; + color: inherit; + transition: transform 0.2s, box-shadow 0.2s; + border-left: 4px solid #667eea; +} + +.action-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); +} + +.action-card h4 { + margin: 0 0 0.5rem 0; + color: #2c3e50; +} + +.action-card p { + margin: 0; + color: #7f8c8d; + font-size: 0.95rem; +} \ No newline at end of file diff --git a/src/components/UserEquipment.vue b/src/components/UserEquipment.vue new file mode 100644 index 0000000..4fc2513 --- /dev/null +++ b/src/components/UserEquipment.vue @@ -0,0 +1,482 @@ + + + + + \ No newline at end of file diff --git a/src/components/UserProfile.vue b/src/components/UserProfile.vue index 04ab741..9fae1a8 100644 --- a/src/components/UserProfile.vue +++ b/src/components/UserProfile.vue @@ -6,6 +6,8 @@ @@ -18,11 +20,11 @@
- +
- +
@@ -34,15 +36,15 @@
- +
- +
- +
@@ -51,13 +53,13 @@ - -
- {{ auth.error }} +
+ {{ error }}
@@ -69,64 +71,94 @@ @@ -153,7 +185,7 @@ function handleLogout() { .navbar-menu { display: flex; - gap: 1rem; + gap: 1.5rem; align-items: center; } @@ -253,6 +285,7 @@ textarea { font-weight: 600; cursor: pointer; transition: transform 0.2s; + margin-top: 1rem; } .btn-primary:hover:not(:disabled) { diff --git a/src/router/index.js b/src/router/index.js index 7586f0b..e863f5d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -5,6 +5,8 @@ import UserLogin from '@/components/UserLogin.vue' import UserSignup from '@/components/UserSignup.vue' import UserDashboard from '@/components/UserDashboard.vue' import UserProfile from '@/components/UserProfile.vue' +import UserEquipment from '@/components/UserEquipment.vue' +import TrainingZones from '@/components/TrainingZones.vue' import PasswordReset from '@/components/PasswordReset.vue' const routes = [ @@ -38,6 +40,18 @@ const routes = [ component: UserProfile, meta: { requiresAuth: true }, }, + { + path: '/equipment', + name: 'Equipment', + component: UserEquipment, + meta: { requiresAuth: true }, + }, + { + path: '/zones', + name: 'Zones', + component: TrainingZones, + meta: { requiresAuth: true }, + }, { path: '/', redirect: '/dashboard',