- {/* Sorting Options */}
-
- {tabs.map(tab => (
-
+ {/* Category Filter Buttons */}
+
+
+ {categories.map(category => (
+ setSelectedTag(category.id)}
+ selected={selectedTag === category.id}
+ label={category.label}
+ size="32"
+ />
))}
-
- {/* Categories Button */}
-
-
-
-
- {/* Category Filter Buttons */}
-
- {/* First Row */}
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Second Row */}
-
-
-
-
-
-
-
- {/* Apps Grid */}
-
- {currentApps.map(app => (
-
-
-
-
- {app.icon}
-
-
-
- {app.name}
-
-
-
- {app.category}
-
-
- {app.status}
-
-
-
-
-
-
-
- {app.rating}
-
- ⭐
-
-
{app.users} users
-
+ {/* Apps Grid */}
+ {currentApps.length > 0 ? (
+
+ {currentApps.map(app => (
+
+ ))}
+
+ ) : (
+
+
+
+ No apps found
+
+
+ Try adjusting your filters to see more apps
+
-
-
- {app.description}
-
-
-
- ))}
+ )}
diff --git a/apps/hub/src/constants/categories.ts b/apps/hub/src/constants/categories.ts
new file mode 100644
index 000000000..ebf284498
--- /dev/null
+++ b/apps/hub/src/constants/categories.ts
@@ -0,0 +1,18 @@
+import type { Category } from '~/types/app'
+
+export const categories: Category[] = [
+ { id: 'all-apps', label: '🧩 All apps' },
+ { id: 'ai', label: '✨ AI' },
+ { id: 'bridge', label: '🚗 Bridge' },
+ { id: 'community', label: '🐕 Community' },
+ { id: 'defi', label: '📈 DeFi' },
+ { id: 'gaming', label: '🎮 Gaming' },
+ { id: 'infra', label: '💻 Infra' },
+ { id: 'nft', label: '🖼️ NFT' },
+ { id: 'payment', label: '💰 Payment' },
+ { id: 'privacy', label: '🕵️ Privacy' },
+ { id: 'social', label: '☕ Social' },
+ { id: 'spending', label: '🐷 Spending' },
+ { id: 'tooling', label: '☂️ Tooling' },
+ { id: 'wallet', label: '💎 Wallet' },
+]
diff --git a/apps/hub/src/constants/tabs.ts b/apps/hub/src/constants/tabs.ts
new file mode 100644
index 000000000..35ee01a5e
--- /dev/null
+++ b/apps/hub/src/constants/tabs.ts
@@ -0,0 +1,7 @@
+import type { Tab } from '~/types/app'
+
+export const tabs: Tab[] = [
+ { id: 'popular', label: 'Popular' },
+ { id: 'new', label: 'New' },
+ { id: 'all', label: 'All' },
+]
diff --git a/apps/hub/src/data/apps.ts b/apps/hub/src/data/apps.ts
new file mode 100644
index 000000000..e92d25413
--- /dev/null
+++ b/apps/hub/src/data/apps.ts
@@ -0,0 +1,30 @@
+import type { App } from '~/types/app'
+
+export const apps: App[] = [
+ {
+ id: 1,
+ name: 'Cat Fishing',
+ category: 'Community',
+ status: 'Live',
+ description: 'You love cats, cats love fish.',
+ website: 'https://cats.fishing',
+ twitter: 'catsfishings',
+ icon: '/apps/cats-fishing-avatar.png',
+ cover: '/apps/cats-fishing-cover.png',
+ isPopular: true,
+ isNew: true,
+ },
+ {
+ id: 2,
+ name: 'Status Network Bridge',
+ category: 'Bridge',
+ status: 'Live',
+ description: "Saving for gas? We've got you covered!",
+ website: 'https://bridge.status.network',
+ twitter: 'StatusL2',
+ icon: '/apps/status-network-bridge-avatar.png',
+ cover: '/apps/status-network-bridge-cover.png',
+ isPopular: true,
+ isNew: true,
+ },
+]
diff --git a/apps/hub/src/data/featured-apps.ts b/apps/hub/src/data/featured-apps.ts
new file mode 100644
index 000000000..8e3d046e9
--- /dev/null
+++ b/apps/hub/src/data/featured-apps.ts
@@ -0,0 +1,26 @@
+import type { App } from '~/types/app'
+
+export const featuredApps: App[] = [
+ {
+ id: 1,
+ name: 'Cat Fishing',
+ category: 'Community',
+ status: 'Live',
+ description: 'You love cats, cats love fish.',
+ website: 'https://cats.fishing',
+ twitter: 'catsfishings',
+ icon: '/apps/cats-fishing-avatar.png',
+ cover: '/apps/cats-fishing-cover.png',
+ },
+ {
+ id: 2,
+ name: 'Status Network Bridge',
+ category: 'Bridge',
+ status: 'Live',
+ description: "Saving for gas? We've got you covered!",
+ website: 'https://bridge.status.network',
+ twitter: 'StatusL2',
+ icon: '/apps/status-network-bridge-avatar.png',
+ cover: '/apps/status-network-bridge-cover.png',
+ },
+]
diff --git a/apps/hub/src/types/app.ts b/apps/hub/src/types/app.ts
new file mode 100644
index 000000000..8c82825c4
--- /dev/null
+++ b/apps/hub/src/types/app.ts
@@ -0,0 +1,23 @@
+export type App = {
+ id: number
+ name: string
+ category: string
+ status: string
+ description: string
+ website: string
+ twitter?: string
+ cover: string
+ icon: string
+ isPopular?: boolean
+ isNew?: boolean
+}
+
+export type Category = {
+ id: string
+ label: string
+}
+
+export type Tab = {
+ id: 'popular' | 'new' | 'all'
+ label: string
+}
diff --git a/apps/hub/tailwind.config.ts b/apps/hub/tailwind.config.ts
index 737e118d6..4f68468e6 100644
--- a/apps/hub/tailwind.config.ts
+++ b/apps/hub/tailwind.config.ts
@@ -160,6 +160,17 @@ export default {
2: '0px 4px 20px rgba(9, 16, 28, 0.08)',
3: '0px 8px 30px rgba(9, 16, 28, 0.12)',
},
+
+ keyframes: {
+ skeleton: {
+ '0%, 100%': { backgroundPosition: '0% 50%' },
+ '50%': { backgroundPosition: '100% 50%' },
+ },
+ },
+
+ animation: {
+ skeleton: 'skeleton 1.5s ease infinite',
+ },
},
},
diff --git a/apps/status.network/public/hashvegas-avatar.png b/apps/status.network/public/hashvegas-avatar.png
deleted file mode 100644
index e77063309..000000000
Binary files a/apps/status.network/public/hashvegas-avatar.png and /dev/null differ
diff --git a/apps/status.network/public/hashvegas-cover.png b/apps/status.network/public/hashvegas-cover.png
deleted file mode 100644
index 5fdbf0fcd..000000000
Binary files a/apps/status.network/public/hashvegas-cover.png and /dev/null differ
diff --git a/apps/status.network/src/app/_components/partners.tsx b/apps/status.network/src/app/_components/partners.tsx
index a0d19c0bf..d970cfa8e 100644
--- a/apps/status.network/src/app/_components/partners.tsx
+++ b/apps/status.network/src/app/_components/partners.tsx
@@ -4,7 +4,6 @@ import {
CATS_FISHING_URL,
DIN_URL,
GATEWAY_URL,
- HASHVEGAS_URL,
LINEA_URL,
SPLA_LABS_URL,
} from '~/config/routes'
@@ -48,14 +47,6 @@ const Partners = () => {
twitter="splalabs"
icon="/spla-labs-avatar.png"
/>
-
diff --git a/apps/status.network/src/config/routes.ts b/apps/status.network/src/config/routes.ts
index 31c20f93b..5cad606fb 100644
--- a/apps/status.network/src/config/routes.ts
+++ b/apps/status.network/src/config/routes.ts
@@ -12,7 +12,6 @@ export const LINEA_URL = 'https://linea.build'
export const GATEWAY_URL = 'https://gateway.fm'
export const CATS_FISHING_URL = 'https://cats.fishing'
export const SPLA_LABS_URL = 'https://splalabs.xyz'
-export const HASHVEGAS_URL = 'https://hashvegas.casino'
export const DIN_URL = 'https://infura.io'
export const ROUTES = {
diff --git a/packages/status-network/src/components/button/index.tsx b/packages/status-network/src/components/button/index.tsx
index 8932d123a..7251e9514 100644
--- a/packages/status-network/src/components/button/index.tsx
+++ b/packages/status-network/src/components/button/index.tsx
@@ -3,7 +3,7 @@ import { forwardRef } from 'react'
import { cva, cx } from 'cva'
type Props = {
- variant?: 'primary' | 'secondary' | 'white'
+ variant?: 'primary' | 'secondary' | 'white' | 'grey'
backdropFilter?: boolean
children?: React.ReactNode
active?: boolean
@@ -22,6 +22,7 @@ const buttonStyles = cva({
'border-white-10 bg-white-5 text-white-100 hover:border-white-20 hover:bg-white-10',
white:
'border-neutral-30 bg-white-100 text-dark-100 hover:border-neutral-40 hover:bg-white-80',
+ grey: 'bg-neutral-10 text-neutral-100 hover:bg-neutral-20 hover:text-neutral-100',
},
withIcon: {
true: '',
@@ -51,6 +52,11 @@ const buttonStyles = cva({
{ size: '32', withIcon: true, className: 'pl-3 pr-2' },
{ size: '40', withIconBefore: true, className: 'pl-3 pr-4' },
{ size: '32', withIconBefore: true, className: 'pl-2 pr-3' },
+ {
+ variant: 'grey',
+ active: true,
+ className: 'bg-neutral-50 text-white-100',
+ },
],
})
diff --git a/packages/status-network/src/config/routes.ts b/packages/status-network/src/config/routes.ts
index 573848479..3b487894f 100644
--- a/packages/status-network/src/config/routes.ts
+++ b/packages/status-network/src/config/routes.ts
@@ -4,7 +4,6 @@ import twitterIcon from '../assets/social/twitter.svg'
export const CATS_FISHING_URL = 'https://cats.fishing'
export const SPLA_LABS_URL = 'https://splalabs.xyz'
-export const HASHVEGAS_URL = 'https://hashvegas.casino'
export const STATUS_NETWORK_BRIDGE_URL = 'https://bridge.status.network/'
export const BRAND = {