diff --git a/TERMINAL_REBUILD_PLAN.md b/TERMINAL_REBUILD_PLAN.md
index bae24a2..26ebae0 100644
--- a/TERMINAL_REBUILD_PLAN.md
+++ b/TERMINAL_REBUILD_PLAN.md
@@ -40,12 +40,12 @@
## ✅ Master-Checkliste
-### Phase 1: Umbenennung & Routing
-- [ ] 1.1 Route `/command` → `/terminal` umbenennen
-- [ ] 1.2 `CommandCenterLayout` → `TerminalLayout` umbenennen
-- [ ] 1.3 Alle internen Links aktualisieren
-- [ ] 1.4 Redirect von `/command/*` → `/terminal/*` einrichten
-- [ ] 1.5 Sidebar-Navigation aktualisieren
+### Phase 1: Umbenennung & Routing ✅ ABGESCHLOSSEN
+- [x] 1.1 Route `/command` → `/terminal` umbenennen
+- [x] 1.2 `CommandCenterLayout` → `TerminalLayout` umbenennen
+- [x] 1.3 Alle internen Links aktualisieren
+- [x] 1.4 Redirect von `/command/*` → `/terminal/*` einrichten
+- [x] 1.5 Sidebar-Navigation aktualisieren
### Phase 2: Module neu strukturieren
- [ ] 2.1 **RADAR** Module (Dashboard)
diff --git a/frontend/next.config.js b/frontend/next.config.js
index 5f11810..9f0df75 100644
--- a/frontend/next.config.js
+++ b/frontend/next.config.js
@@ -3,6 +3,22 @@ const nextConfig = {
reactStrictMode: true,
// output: 'standalone', // Only needed for Docker deployment
+ // Redirects from old /command/* to new /terminal/*
+ async redirects() {
+ return [
+ {
+ source: '/command',
+ destination: '/terminal/dashboard',
+ permanent: true,
+ },
+ {
+ source: '/command/:path*',
+ destination: '/terminal/:path*',
+ permanent: true,
+ },
+ ]
+ },
+
// Proxy API requests to backend
// This ensures /api/v1/* works regardless of how the server is accessed
async rewrites() {
diff --git a/frontend/src/app/buy/page.tsx b/frontend/src/app/buy/page.tsx
index b331311..6359da8 100644
--- a/frontend/src/app/buy/page.tsx
+++ b/frontend/src/app/buy/page.tsx
@@ -216,7 +216,7 @@ export default function BrowseListingsPage() {
: 'Be the first to list your domain!'}
@@ -288,7 +288,7 @@ export default function BrowseListingsPage() {
DNS verification ensures only real owners can list.
List Your Domain
diff --git a/frontend/src/app/login/page.tsx b/frontend/src/app/login/page.tsx
index c803cf3..8b8dbf2 100644
--- a/frontend/src/app/login/page.tsx
+++ b/frontend/src/app/login/page.tsx
@@ -56,7 +56,7 @@ function LoginForm() {
// Get redirect URL from query params or localStorage (set during registration)
const paramRedirect = searchParams.get('redirect')
- const [redirectTo, setRedirectTo] = useState(paramRedirect || '/command/dashboard')
+ const [redirectTo, setRedirectTo] = useState(paramRedirect || '/terminal/dashboard')
// Check localStorage for redirect (set during registration before email verification)
useEffect(() => {
@@ -125,7 +125,7 @@ function LoginForm() {
}
// Generate register link with redirect preserved
- const registerLink = redirectTo !== '/command/dashboard'
+ const registerLink = redirectTo !== '/terminal/dashboard'
? `/register?redirect=${encodeURIComponent(redirectTo)}`
: '/register'
diff --git a/frontend/src/app/market/page.tsx b/frontend/src/app/market/page.tsx
index 8a4a8ea..2823dc2 100644
--- a/frontend/src/app/market/page.tsx
+++ b/frontend/src/app/market/page.tsx
@@ -4,7 +4,7 @@ import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import {
Search,
Filter,
@@ -97,7 +97,7 @@ export default function MarketPage() {
]
return (
-
@@ -247,7 +247,7 @@ export default function MarketPage() {
)}
-
+
)
}
diff --git a/frontend/src/app/oauth/callback/page.tsx b/frontend/src/app/oauth/callback/page.tsx
index c5d39d0..c3f81c8 100644
--- a/frontend/src/app/oauth/callback/page.tsx
+++ b/frontend/src/app/oauth/callback/page.tsx
@@ -12,7 +12,7 @@ function OAuthCallbackContent() {
useEffect(() => {
const token = searchParams.get('token')
- const redirect = searchParams.get('redirect') || '/command/dashboard'
+ const redirect = searchParams.get('redirect') || '/terminal/dashboard'
const isNew = searchParams.get('new') === 'true'
const error = searchParams.get('error')
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index b2bd36b..d090701 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -489,7 +489,7 @@ export default function HomePage() {
Set Up
@@ -536,7 +536,7 @@ export default function HomePage() {
Manage
@@ -772,7 +772,7 @@ export default function HomePage() {
{isAuthenticated ? "Go to Dashboard" : "Start Free"}
@@ -793,7 +793,7 @@ export default function HomePage() {
Track your first domain in under a minute. Free forever, no credit card.
{isAuthenticated ? "Command Center" : "Join the Hunt"}
diff --git a/frontend/src/app/register/page.tsx b/frontend/src/app/register/page.tsx
index 298afdb..a0dcdff 100644
--- a/frontend/src/app/register/page.tsx
+++ b/frontend/src/app/register/page.tsx
@@ -62,7 +62,7 @@ function RegisterForm() {
const [registered, setRegistered] = useState(false)
// Get redirect URL from query params
- const redirectTo = searchParams.get('redirect') || '/command/dashboard'
+ const redirectTo = searchParams.get('redirect') || '/terminal/dashboard'
// Load OAuth providers
useEffect(() => {
@@ -79,7 +79,7 @@ function RegisterForm() {
// Store redirect URL for after email verification
// This will be picked up by the login page after verification
- if (redirectTo !== '/command/dashboard') {
+ if (redirectTo !== '/terminal/dashboard') {
localStorage.setItem('pounce_redirect_after_login', redirectTo)
}
@@ -93,7 +93,7 @@ function RegisterForm() {
}
// Generate login link with redirect preserved
- const loginLink = redirectTo !== '/command/dashboard'
+ const loginLink = redirectTo !== '/terminal/dashboard'
? `/login?redirect=${encodeURIComponent(redirectTo)}`
: '/login'
diff --git a/frontend/src/app/command/alerts/page.tsx b/frontend/src/app/terminal/alerts/page.tsx
similarity index 99%
rename from frontend/src/app/command/alerts/page.tsx
rename to frontend/src/app/terminal/alerts/page.tsx
index f72098d..4e658c7 100644
--- a/frontend/src/app/command/alerts/page.tsx
+++ b/frontend/src/app/terminal/alerts/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState, useMemo, useCallback, memo } from 'react'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer, StatCard, Badge, ActionButton } from '@/components/PremiumTable'
import {
Plus,
@@ -205,7 +205,7 @@ export default function SniperAlertsPage() {
const maxAlerts = limits[tier as keyof typeof limits] || 2
return (
-
)}
-
+
)
}
diff --git a/frontend/src/app/command/auctions/page.tsx b/frontend/src/app/terminal/auctions/page.tsx
similarity index 99%
rename from frontend/src/app/command/auctions/page.tsx
rename to frontend/src/app/terminal/auctions/page.tsx
index 807f9c8..3dd1a91 100644
--- a/frontend/src/app/command/auctions/page.tsx
+++ b/frontend/src/app/terminal/auctions/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState, useMemo, useCallback, memo } from 'react'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import {
PremiumTable,
Badge,
@@ -465,7 +465,7 @@ export default function AuctionsPage() {
], [activeTab, isPaidUser, trackedDomains, trackingInProgress, handleTrackDomain, getOpportunityData])
return (
-
-
+
)
}
diff --git a/frontend/src/app/command/dashboard/page.tsx b/frontend/src/app/terminal/dashboard/page.tsx
similarity index 95%
rename from frontend/src/app/command/dashboard/page.tsx
rename to frontend/src/app/terminal/dashboard/page.tsx
index 8b2837f..c273cc5 100644
--- a/frontend/src/app/command/dashboard/page.tsx
+++ b/frontend/src/app/terminal/dashboard/page.tsx
@@ -4,7 +4,7 @@ import { useEffect, useState, useMemo, useCallback } from 'react'
import { useSearchParams } from 'next/navigation'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PremiumTable, StatCard, PageContainer, Badge, SectionHeader, SearchInput, ActionButton } from '@/components/PremiumTable'
import { Toast, useToast } from '@/components/Toast'
import {
@@ -64,7 +64,7 @@ export default function DashboardPage() {
useEffect(() => {
if (searchParams.get('upgraded') === 'true') {
showToast('Welcome to your upgraded plan! 🎉', 'success')
- window.history.replaceState({}, '', '/command/dashboard')
+ window.history.replaceState({}, '', '/terminal/dashboard')
}
}, [searchParams])
@@ -139,7 +139,7 @@ export default function DashboardPage() {
}
return (
-
@@ -185,14 +185,14 @@ export default function DashboardPage() {
{/* Stats Overview */}
-
+
-
+
0}
/>
-
+
+
View all →
}
@@ -291,7 +291,7 @@ export default function DashboardPage() {
icon={Gavel}
compact
action={
-
+
View all →
}
@@ -349,7 +349,7 @@ export default function DashboardPage() {
icon={TrendingUp}
compact
action={
-
+
View all →
}
@@ -398,6 +398,6 @@ export default function DashboardPage() {
-
+
)
}
diff --git a/frontend/src/app/command/listings/page.tsx b/frontend/src/app/terminal/listings/page.tsx
similarity index 99%
rename from frontend/src/app/command/listings/page.tsx
rename to frontend/src/app/terminal/listings/page.tsx
index 0eeb563..deb53b6 100755
--- a/frontend/src/app/command/listings/page.tsx
+++ b/frontend/src/app/terminal/listings/page.tsx
@@ -4,7 +4,7 @@ import { useEffect, useState, useMemo, useCallback } from 'react'
import { useSearchParams } from 'next/navigation'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer, StatCard, Badge, ActionButton } from '@/components/PremiumTable'
import {
Plus,
@@ -232,7 +232,7 @@ export default function MyListingsPage() {
const maxListings = limits[tier as keyof typeof limits] || 2
return (
-
)}
-
+
)
}
diff --git a/frontend/src/app/command/marketplace/page.tsx b/frontend/src/app/terminal/marketplace/page.tsx
similarity index 98%
rename from frontend/src/app/command/marketplace/page.tsx
rename to frontend/src/app/terminal/marketplace/page.tsx
index 97af871..15f9e9b 100644
--- a/frontend/src/app/command/marketplace/page.tsx
+++ b/frontend/src/app/terminal/marketplace/page.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState, useMemo, useCallback } from 'react'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import {
PageContainer,
StatCard,
@@ -114,11 +114,11 @@ export default function CommandMarketplacePage() {
}, [listings])
return (
-
+
My Listings
}
@@ -233,7 +233,7 @@ export default function CommandMarketplacePage() {
: 'No domains are currently listed for sale'}
@@ -296,7 +296,7 @@ export default function CommandMarketplacePage() {
)}
-
+
)
}
diff --git a/frontend/src/app/command/page.tsx b/frontend/src/app/terminal/page.tsx
similarity index 90%
rename from frontend/src/app/command/page.tsx
rename to frontend/src/app/terminal/page.tsx
index a4b01b0..acbff9b 100644
--- a/frontend/src/app/command/page.tsx
+++ b/frontend/src/app/terminal/page.tsx
@@ -7,7 +7,7 @@ export default function CommandPage() {
const router = useRouter()
useEffect(() => {
- router.replace('/command/dashboard')
+ router.replace('/terminal/dashboard')
}, [router])
return (
diff --git a/frontend/src/app/command/portfolio/page.tsx b/frontend/src/app/terminal/portfolio/page.tsx
similarity index 99%
rename from frontend/src/app/command/portfolio/page.tsx
rename to frontend/src/app/terminal/portfolio/page.tsx
index b5109ba..ae0b0e8 100644
--- a/frontend/src/app/command/portfolio/page.tsx
+++ b/frontend/src/app/terminal/portfolio/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState, useMemo, useCallback, memo } from 'react'
import { useStore } from '@/lib/store'
import { api, PortfolioDomain, PortfolioSummary, DomainValuation, DomainHealthReport, HealthStatus } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PremiumTable, StatCard, PageContainer, ActionButton } from '@/components/PremiumTable'
import { Toast, useToast } from '@/components/Toast'
import {
@@ -277,7 +277,7 @@ export default function PortfolioPage() {
}, [portfolio, loading])
return (
-
setOpenMenuId(null)}
className="w-full flex items-center gap-3 px-4 py-2.5 text-sm text-accent hover:bg-accent/5 transition-colors"
>
@@ -721,7 +721,7 @@ export default function PortfolioPage() {
onClose={() => setSelectedHealthDomain(null)}
/>
)}
-
+
)
}
diff --git a/frontend/src/app/command/pricing/[tld]/page.tsx b/frontend/src/app/terminal/pricing/[tld]/page.tsx
similarity index 98%
rename from frontend/src/app/command/pricing/[tld]/page.tsx
rename to frontend/src/app/terminal/pricing/[tld]/page.tsx
index f2bb738..dd0c6fa 100644
--- a/frontend/src/app/command/pricing/[tld]/page.tsx
+++ b/frontend/src/app/terminal/pricing/[tld]/page.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState, useMemo, useRef } from 'react'
import { useParams } from 'next/navigation'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer, StatCard } from '@/components/PremiumTable'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
@@ -356,19 +356,19 @@ export default function CommandTldDetailPage() {
if (loading) {
return (
-
+
-
+
)
}
if (error || !details) {
return (
-
+
@@ -377,7 +377,7 @@ export default function CommandTldDetailPage() {
TLD Not Found
{error || `The TLD .${tld} could not be found.`}
@@ -385,19 +385,19 @@ export default function CommandTldDetailPage() {
-
+
)
}
return (
-
{/* Breadcrumb */}
-
+
)
}
diff --git a/frontend/src/app/command/pricing/page.tsx b/frontend/src/app/terminal/pricing/page.tsx
similarity index 98%
rename from frontend/src/app/command/pricing/page.tsx
rename to frontend/src/app/terminal/pricing/page.tsx
index 88476d6..b73930a 100755
--- a/frontend/src/app/command/pricing/page.tsx
+++ b/frontend/src/app/terminal/pricing/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState, useMemo, useCallback, memo } from 'react'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import {
PremiumTable,
StatCard,
@@ -303,7 +303,7 @@ export default function TLDPricingPage() {
], [])
return (
- tld.tld}
loading={loading}
- onRowClick={(tld) => window.location.href = `/command/pricing/${tld.tld}`}
+ onRowClick={(tld) => window.location.href = `/terminal/pricing/${tld.tld}`}
emptyIcon={}
emptyTitle="No TLDs found"
emptyDescription={searchQuery ? `No TLDs matching "${searchQuery}"` : "Check back later for TLD data"}
@@ -382,6 +382,6 @@ export default function TLDPricingPage() {
)}
-
+
)
}
diff --git a/frontend/src/app/command/seo/page.tsx b/frontend/src/app/terminal/seo/page.tsx
similarity index 99%
rename from frontend/src/app/command/seo/page.tsx
rename to frontend/src/app/terminal/seo/page.tsx
index ba4161e..4f96841 100644
--- a/frontend/src/app/command/seo/page.tsx
+++ b/frontend/src/app/terminal/seo/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState } from 'react'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer, StatCard, Badge } from '@/components/PremiumTable'
import {
Search,
@@ -154,7 +154,7 @@ export default function SEOPage() {
// Show upgrade prompt for non-Tycoon users
if (!isTycoon) {
return (
-
@@ -197,12 +197,12 @@ export default function SEOPage() {
-
+
)
}
return (
-
@@ -502,7 +502,7 @@ export default function SEOPage() {
)}
-
+
)
}
diff --git a/frontend/src/app/command/settings/page.tsx b/frontend/src/app/terminal/settings/page.tsx
similarity index 99%
rename from frontend/src/app/command/settings/page.tsx
rename to frontend/src/app/terminal/settings/page.tsx
index 00d7818..50ff1c2 100644
--- a/frontend/src/app/command/settings/page.tsx
+++ b/frontend/src/app/terminal/settings/page.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState, useCallback, useMemo } from 'react'
import { useRouter } from 'next/navigation'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer, TabBar } from '@/components/PremiumTable'
import { useStore } from '@/lib/store'
import { api, PriceAlert } from '@/lib/api'
@@ -178,7 +178,7 @@ export default function SettingsPage() {
]
return (
-
@@ -360,7 +360,7 @@ export default function SettingsPage() {
No price alerts set
-
+
Browse TLD prices →
@@ -558,6 +558,6 @@ export default function SettingsPage() {
-
+
)
}
diff --git a/frontend/src/app/command/watchlist/page.tsx b/frontend/src/app/terminal/watchlist/page.tsx
similarity index 99%
rename from frontend/src/app/command/watchlist/page.tsx
rename to frontend/src/app/terminal/watchlist/page.tsx
index db8201f..ba4fba8 100755
--- a/frontend/src/app/command/watchlist/page.tsx
+++ b/frontend/src/app/terminal/watchlist/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState, useMemo, useCallback, memo } from 'react'
import { useStore } from '@/lib/store'
import { api, DomainHealthReport, HealthStatus } from '@/lib/api'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import {
PremiumTable,
Badge,
@@ -335,7 +335,7 @@ export default function WatchlistPage() {
], [healthReports, togglingNotifyId, loadingHealth, refreshingId, deletingId, handleToggleNotify, handleHealthCheck, handleRefresh, handleDelete])
return (
-
+
{toast && }
@@ -411,7 +411,7 @@ export default function WatchlistPage() {
/>
)}
-
+
)
}
diff --git a/frontend/src/app/command/welcome/page.tsx b/frontend/src/app/terminal/welcome/page.tsx
similarity index 90%
rename from frontend/src/app/command/welcome/page.tsx
rename to frontend/src/app/terminal/welcome/page.tsx
index 3b46849..bd26256 100644
--- a/frontend/src/app/command/welcome/page.tsx
+++ b/frontend/src/app/terminal/welcome/page.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState } from 'react'
import { useRouter, useSearchParams } from 'next/navigation'
-import { CommandCenterLayout } from '@/components/CommandCenterLayout'
+import { TerminalLayout } from '@/components/TerminalLayout'
import { PageContainer } from '@/components/PremiumTable'
import { useStore } from '@/lib/store'
import {
@@ -34,9 +34,9 @@ const planDetails = {
{ icon: BarChart3, text: 'Deal scores & valuations', description: 'Know what domains are worth' },
],
nextSteps: [
- { href: '/command/watchlist', label: 'Add domains to watchlist', icon: Eye },
- { href: '/command/alerts', label: 'Set up Sniper Alerts', icon: Bell },
- { href: '/command/portfolio', label: 'Track your portfolio', icon: BarChart3 },
+ { href: '/terminal/watchlist', label: 'Add domains to watchlist', icon: Eye },
+ { href: '/terminal/alerts', label: 'Set up Sniper Alerts', icon: Bell },
+ { href: '/terminal/portfolio', label: 'Track your portfolio', icon: BarChart3 },
],
},
tycoon: {
@@ -52,9 +52,9 @@ const planDetails = {
{ icon: Sparkles, text: 'SEO Juice Detector', description: 'Find domains with backlinks' },
],
nextSteps: [
- { href: '/command/watchlist', label: 'Add domains to watchlist', icon: Eye },
- { href: '/command/seo', label: 'Analyze SEO metrics', icon: Sparkles },
- { href: '/command/alerts', label: 'Create Sniper Alerts', icon: Bell },
+ { href: '/terminal/watchlist', label: 'Add domains to watchlist', icon: Eye },
+ { href: '/terminal/seo', label: 'Analyze SEO metrics', icon: Sparkles },
+ { href: '/terminal/alerts', label: 'Create Sniper Alerts', icon: Bell },
],
},
}
@@ -84,18 +84,18 @@ export default function WelcomePage() {
if (loading) {
return (
-
+
-
+
)
}
return (
-
+
{/* Confetti Effect */}
{showConfetti && (
@@ -188,7 +188,7 @@ export default function WelcomePage() {
{/* Go to Dashboard */}
@@ -215,7 +215,7 @@ export default function WelcomePage() {
}
}
`}
-
+
)
}
diff --git a/frontend/src/app/tld-pricing/[tld]/page.tsx b/frontend/src/app/tld-pricing/[tld]/page.tsx
index f228f5a..a058154 100644
--- a/frontend/src/app/tld-pricing/[tld]/page.tsx
+++ b/frontend/src/app/tld-pricing/[tld]/page.tsx
@@ -1170,7 +1170,7 @@ export default function TldDetailPage() {
Monitor specific domains and get instant notifications when they become available.
{isAuthenticated ? 'Go to Command Center' : 'Start Monitoring Free'}
diff --git a/frontend/src/components/AdminLayout.tsx b/frontend/src/components/AdminLayout.tsx
index d376cd6..e3b6a69 100644
--- a/frontend/src/components/AdminLayout.tsx
+++ b/frontend/src/components/AdminLayout.tsx
@@ -91,7 +91,7 @@ export function AdminLayout({
Access Denied
Admin privileges required