diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(configure)/cf/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(deploy)/dp/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(success)/sc/[id]/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(configure)/cf/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/(create)/cr/(template)/tm/(deploy)/dp/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(deployments)/dep/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(integrations)/int/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(collaborators)/col/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/cf/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(domains)/dom/(add)/config/cf/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(environment-variables)/env/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/(settings)/set/(git)/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(projects)/ps/[id]/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(settings)/set/page.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(settings)/set/page.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/[provider]/[orgSlug]/(settings)/set/page.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/[provider]/[orgSlug]/(settings)/set/page.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/error.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/error.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/error.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/error.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/loading.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/loading.tsx
similarity index 100%
rename from apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/pr/loading.tsx
rename to apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/(projects)/projects/loading.tsx
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/_Navigation/TopNavigation.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/_Navigation/TopNavigation.tsx
deleted file mode 100644
index 4c030e5..0000000
--- a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/_Navigation/TopNavigation.tsx
+++ /dev/null
@@ -1,217 +0,0 @@
-// 'use client';
-
-// import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet';
-// import { LaconicMark } from '@/laconic-assets/laconic-mark';
-// import { Menu, Plus, Shapes, Wallet } from 'lucide-react';
-// import Link from 'next/link';
-// import { useRouter } from 'next/navigation';
-// import { useState } from 'react';
-// import { ProjectSearchBar } from '../search/ProjectSearchBar';
-// import { ColorModeToggle } from './components/ColorModeToggle';
-// import { GitHubSessionButton } from './components/GitHubSessionButton';
-// import { WalletSessionId } from './components/WalletSessionId';
-// import { Button } from '@workspace/ui/components/button';
-
-// /**
-// * TopNavigation Component
-// *
-// * Renders the top navigation bar, adapting its layout for desktop and mobile views.
-// * It includes the project search bar, navigation links, user authentication via GitHub,
-// * color mode toggle, and wallet session information. On mobile, it utilizes a sheet
-// * for a responsive and accessible navigation experience.
-// */
-// export function TopNavigation() {
-// const router = useRouter();
-// const [showOnboarding, setShowOnboarding] = useState(false);
-
-// // In a real implementation, these would be from context/hooks
-// const isGitHubConnected = true; // Example value
-// const defaultOrg = { slug: 'demo-org' }; // Example value
-// const isReady = true; // Wallet ready status
-
-// const handleOnboardingClose = () => {
-// setShowOnboarding(false);
-// // In a real implementation, would refresh organization data after onboarding
-// };
-
-// // Navigate to create page with organization slug
-// const handleCreateNew = () => {
-// if (defaultOrg) {
-// router.push(`/${defaultOrg.slug}/ps/cr`);
-// } else {
-// // If no organization is available, show onboarding
-// setShowOnboarding(true);
-// }
-// };
-
-// const handleRunOnboarding = () => {
-// // Clear existing onboarding progress data
-// if (typeof window !== 'undefined') {
-// localStorage.removeItem('onboarding_progress');
-// localStorage.removeItem('onboarding_state');
-// // Force starting from connect step
-// localStorage.setItem('onboarding_force_connect', 'true');
-// }
-
-// setShowOnboarding(true);
-// };
-
-// return (
-//
-// {/* Top Navigation - Desktop */}
-//
-
-// {/* Top Navigation - Mobile */}
-//
-
-//
-// );
-// }
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/buy-prepaid-service/BuyServices.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/buy-prepaid-service/BuyServices.tsx
new file mode 100644
index 0000000..70f372b
--- /dev/null
+++ b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/buy-prepaid-service/BuyServices.tsx
@@ -0,0 +1,128 @@
+'use client'
+
+import PageWrapper from '@/components/foundation/page-wrapper'
+import { Button } from '@workspace/ui/components/button'
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle
+} from '@workspace/ui/components/card'
+/**
+ * BuyPrepaidService component allows users to buy prepaid services.
+ * It checks if the user's balance is sufficient and redirects them to the home page if it is.
+ *
+ * @returns {JSX.Element} A JSX element that renders the buy prepaid service page.
+ */
+const BuyPrepaidService = () => {
+ return (
+
+
+
+
+
+ Laconic
+
+
+ Webapp Deployment Plans
+
+
+ Choose the perfect deployment plan for your needs. Scale your
+ applications with confidence.
+
+
+
+
+ {/* Basic Plan */}
+
+
+ Basic
+
+ A simple deployment option for small projects
+
+
+ $5.00
+ /month
+
+
+
+
+ 1 monthly webapp deployment
+
+
+
+
+
+
+
+ {/* Standard Plan */}
+
+
+ Most popular
+
+
+ Standard
+
+ Perfect for growing projects and businesses
+
+
+ $50.00
+ /month
+
+
+
+
+ 10 monthly webapp deployments
+
+
+
+
+
+
+
+ {/* Premium Plan */}
+
+
+ Premium
+
+ For enterprises with high-volume needs
+
+
- Hello from (web3-authenticated)/(dashboard)/(buy-prepaid-service)/bp
-
-
- )
+ return
}
export default Page
diff --git a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/layout.tsx b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/layout.tsx
index d4d8d2d..65afc8a 100644
--- a/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/layout.tsx
+++ b/apps/deploy-fe/src/app/(web3-authenticated)/(dashboard)/layout.tsx
@@ -1,8 +1,7 @@
'use client'
-import { DashboardLayout } from '@/components/layouts'
-import { defaultDashboardConfig } from '@/config/dashboard'
-import type React from 'react'
+import NavigationWrapper from '@/components/foundation/navigation-wrapper'
+import { TopNavigation } from '@/components/foundation/top-navigation/top-navigation'
interface LayoutProps {
children: React.ReactNode
@@ -10,13 +9,10 @@ interface LayoutProps {
const Layout: React.FC = ({ children }) => {
return (
- //
- //
-
+
+
{children}
-
- //
- //
+
)
}
diff --git a/apps/deploy-fe/src/app/favicon.ico b/apps/deploy-fe/src/app/favicon.ico
index 718d6fe..ebae81e 100644
Binary files a/apps/deploy-fe/src/app/favicon.ico and b/apps/deploy-fe/src/app/favicon.ico differ
diff --git a/apps/deploy-fe/src/app/layout.tsx b/apps/deploy-fe/src/app/layout.tsx
index 5115821..0b4d4c1 100644
--- a/apps/deploy-fe/src/app/layout.tsx
+++ b/apps/deploy-fe/src/app/layout.tsx
@@ -1,4 +1,4 @@
-import { Providers } from '@/components/providers'
+import { Providers } from '@/components/foundation/providers'
// import '@workspace/ui/globals.css'
import type { Metadata } from 'next'
@@ -26,16 +26,8 @@ export default function RootLayout({
}>) {
return (
-
+
-
{children}
diff --git a/apps/deploy-fe/src/app/loading.tsx b/apps/deploy-fe/src/app/loading.tsx
new file mode 100644
index 0000000..4170997
--- /dev/null
+++ b/apps/deploy-fe/src/app/loading.tsx
@@ -0,0 +1,5 @@
+import { LoadingOverlay } from '@/components/foundation/loading/loading-overlay'
+
+export default function Loading() {
+ return
+}
diff --git a/apps/deploy-fe/src/app/not-found.tsx b/apps/deploy-fe/src/app/not-found.tsx
index 965cc12..73e0e4a 100644
--- a/apps/deploy-fe/src/app/not-found.tsx
+++ b/apps/deploy-fe/src/app/not-found.tsx
@@ -2,21 +2,62 @@ import type { Metadata } from 'next'
import Link from 'next/link'
export const metadata: Metadata = {
- title: 'Page Not Found',
- description: 'The requested page could not be found'
+ title: '404',
+ description: 'Page not found'
}
export default function NotFound() {
return (
-
404 - Page Not Found
-
The page you are looking for does not exist.
-
- Return Home
-
+
+
404
+
Page not found
+
+ Add a brief, empathetic explanation that acknowledges the error while
+ maintaining brand voice. Keep it light and helpful.
+
+
+
+
+
+
Go back to homepage
+
+ Lorem ipsum dolor sit amet, consectetur adipisci.
+
+
+ →
+
+
+
+
+
Read our documentation
+
+ Lorem ipsum dolor sit amet, consectetur adipisci.
+
+
+ →
+
+
+
+
+
Explore our blog
+
+ Lorem ipsum dolor sit amet, consectetur adipisci.
+
+
+ →
+
+
+
)
}
diff --git a/apps/deploy-fe/src/app/page.tsx b/apps/deploy-fe/src/app/page.tsx
index 45c225d..928ebe4 100644
--- a/apps/deploy-fe/src/app/page.tsx
+++ b/apps/deploy-fe/src/app/page.tsx
@@ -1,3 +1,4 @@
+import PageWrapper from '@/components/foundation/page-wrapper'
import { Button } from '@workspace/ui/components/button'
import type { Metadata } from 'next'
@@ -7,5 +8,20 @@ export const metadata: Metadata = {
}
export default function Page() {
- return
+ return (
+
+
+
Hero section
+
+ Headline that solves user's main problem
+
+
+ Follow with one or two sentences that expand on your value
+ proposition. Focus on key benefits and address why users should take
+ action now. Keep it scannable, short and benefit-driven.
+
+
+
+
+ )
}
diff --git a/apps/deploy-fe/src/components/.gitkeep b/apps/deploy-fe/src/components/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/apps/deploy-fe/src/components/assets/laconic-mark.tsx b/apps/deploy-fe/src/components/assets/laconic-mark.tsx
new file mode 100644
index 0000000..faa858e
--- /dev/null
+++ b/apps/deploy-fe/src/components/assets/laconic-mark.tsx
@@ -0,0 +1,43 @@
+/**
+ * The Laconic logo mark component.
+ *
+ * @component
+ * @example
+ * // Basic usage
+ *
+ *
+ * // With custom color
+ *
+ *
+ * // With custom size
+ *
+ */
+export function LaconicMark({
+ /**
+ * Optional className for styling the SVG
+ * Use this to customize the size, color, and other SVG properties
+ */
+ className = ''
+}: {
+ className?: string
+}) {
+ return (
+
+ )
+}
diff --git a/apps/deploy-fe/src/components/foundation/loading/loading-overlay.tsx b/apps/deploy-fe/src/components/foundation/loading/loading-overlay.tsx
new file mode 100644
index 0000000..c8c2c8a
--- /dev/null
+++ b/apps/deploy-fe/src/components/foundation/loading/loading-overlay.tsx
@@ -0,0 +1,83 @@
+'use client'
+
+import { LaconicMark } from '@/components/assets/laconic-mark'
+import { cn } from '@workspace/ui/lib/utils'
+import { Loader2 } from 'lucide-react'
+
+export interface LoadingOverlayProps {
+ /**
+ * Controls the visibility of the overlay.
+ * When false, the component returns null.
+ * @default true
+ */
+ isLoading?: boolean
+
+ /**
+ * Optional className for styling the overlay container.
+ * This will be merged with the default styles.
+ */
+ className?: string
+
+ /**
+ * Whether to show the Laconic logo in the overlay.
+ * @default true
+ */
+ showLogo?: boolean
+
+ /**
+ * Whether to show the loading spinner below the logo.
+ * @default true
+ */
+ showSpinner?: boolean
+
+ /**
+ * The z-index value for the overlay.
+ * Adjust this if you need the overlay to appear above or below other elements.
+ * @default 50
+ */
+ zIndex?: number
+
+ /**
+ * Whether to use solid black background instead of semi-transparent.
+ * Useful for initial page load and full-screen loading states.
+ * @default false
+ */
+ solid?: boolean
+}
+
+export function LoadingOverlay({
+ isLoading = true,
+ className,
+ showLogo = true,
+ showSpinner = true,
+ zIndex = 50,
+ solid = false
+}: LoadingOverlayProps) {
+ if (!isLoading) return null
+
+ return (
+
+ {showLogo && (
+
+
+
+ )}
+ {showSpinner && (
+
+ )}
+
+ )
+}
diff --git a/apps/deploy-fe/src/components/foundation/navigation-wrapper.tsx b/apps/deploy-fe/src/components/foundation/navigation-wrapper.tsx
new file mode 100644
index 0000000..d249da9
--- /dev/null
+++ b/apps/deploy-fe/src/components/foundation/navigation-wrapper.tsx
@@ -0,0 +1,74 @@
+import { cn } from '@workspace/ui/lib/utils'
+import type { NavigationWrapperProps } from './types'
+
+/**
+ * NavigationWrapper component
+ *
+ * Provides a layout wrapper with a top navigation bar.
+ * This component is intended to be used at the layout level,
+ * wrapping the entire application or major sections of it.
+ *
+ * @example
+ * ```tsx
+ * // In app/layout.tsx
+ * export default function RootLayout({ children }) {
+ * return (
+ *
+ *
+ *
+ * {children}
+ *
+ *
+ *
+ * );
+ * }
+ * ```
+ *
+ * @param props - The component props
+ * @returns A layout wrapper with top navigation
+ */
+export default function NavigationWrapper({
+ children,
+ className
+}: NavigationWrapperProps) {
+ return (
+
-
-```
-
-## State Management
-
-### useNavigation
-
-A Zustand store hook that provides access to the navigation state. This can be used directly from any component without needing a provider.
-
-```tsx
-import { useNavigation } from "@/navigation";
-
-function MyComponent() {
- const { activePath, mobileMenuOpen, toggleMobileMenu } = useNavigation();
-
- return (
-
-
-
Active path: {activePath}
-
- );
-}
-```
-
-### NavigationProvider (Optional)
-
-The navigation provider component that syncs the active path with the URL. This is optional and only needed if you want to automatically update the active path based on the current URL.
-
-```tsx
-import { NavigationProvider } from "@/navigation";
-
-
-
-
-```
-
-## Example
-
-See the `example-usage.tsx` file for a complete example of how to use these components together.
diff --git a/apps/deploy-fe/src/navigation/breadcrumb.tsx b/apps/deploy-fe/src/navigation/breadcrumb.tsx
deleted file mode 100644
index 9bd3108..0000000
--- a/apps/deploy-fe/src/navigation/breadcrumb.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { cn } from '@workspace/ui/lib/utils'
-import { ChevronRight } from 'lucide-react'
-import Link from 'next/link'
-
-import type { BreadcrumbProps } from './types'
-
-/**
- * Breadcrumb component
- * Displays a breadcrumb trail for navigation
- *
- * @param props - Component props
- * @returns Breadcrumb component
- */
-export function Breadcrumb({
- items,
- separator = ,
- className
-}: BreadcrumbProps) {
- if (!items || items.length === 0) {
- return null
- }
-
- return (
-
-
- {items.map((item, index) => {
- const isLast = index === items.length - 1
-
- return (
-