Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 5 additions & 13 deletions app/components/AppShell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { Toaster } from 'sonner';
import { getActiveParent, NAV_ITEMS, NavChild, NavIcon } from '../navigation';
import { BLUE, BORDER, BRAND_BLUE, DISABLED, INK, MUTED, SELECTED } from '../theme';
import { getChangeBySlug } from '../upgrades/data/changes';
import { demoLabel } from '../demos/catalogue';
import { demoLabel } from '../vibenet/demos/catalogue';
import { getUpgradeById } from '../upgrades/data/upgrades';
import { titleForPath } from '../navigation';

Expand Down Expand Up @@ -641,7 +641,7 @@ function GlobalBanner({ dismissed, onDismiss, className }: GlobalBannerProps) {
<Text as="span" variant="label.medium" className="whitespace-nowrap">New!</Text>
<Text as="span" variant="label.medium" className="whitespace-nowrap">EIP-8130: Native Account Abstraction</Text>
<span className="inline-block h-3.5 w-px shrink-0 bg-bds-gray-20"></span>
<Link href="/demos/account" className="group flex shrink-0 items-center gap-1 no-underline">
<Link href="/vibenet/demos/account" className="group flex shrink-0 items-center gap-1 no-underline">
<Text as="span" variant="label.medium" className="text-base-blue">Test on Vibenet</Text>
<AnimatedArrowIcon size={14} strokeWidth={2} className="text-base-blue transition-transform duration-200 ease-out group-hover:translate-x-[3px]" />
</Link>
Expand Down Expand Up @@ -789,27 +789,19 @@ export function AppShell({ children }: PropsWithChildren) {
/>
);
}
const demoMatch = pathname.match(/^\/demos\/(.+)$/);
if (demoMatch) {
const slug = demoMatch[1].split('/')[0];
return (
<Breadcrumb
parentLabel="Demos"
parentHref="/demos"
childLabel={demoLabel(slug)}
/>
);
}
if (pathname.startsWith('/vibenet') && pathname !== '/vibenet') {
let childLabel = title;
let middle: { label: string; href: string } | undefined;
const explorerDetailMatch = pathname.match(/^\/vibenet\/explorer\/(tx|block|address)\/(.+)$/);
const demoMatch = pathname.match(/^\/vibenet\/demos\/(.+)$/);
if (explorerDetailMatch) {
middle = { label: 'Explorer', href: '/vibenet/explorer' };
const raw = explorerDetailMatch[2];
childLabel = raw.startsWith('0x') && raw.length > 12
? `${raw.slice(0, 6)}…${raw.slice(-4)}`
: raw;
} else if (demoMatch) {
childLabel = demoLabel(demoMatch[1].split('/')[0]);
}
return (
<Breadcrumb
Expand Down
23 changes: 0 additions & 23 deletions app/demos/b20/layout.tsx

This file was deleted.

18 changes: 0 additions & 18 deletions app/demos/layout.tsx

This file was deleted.

27 changes: 0 additions & 27 deletions app/demos/loading.tsx

This file was deleted.

69 changes: 0 additions & 69 deletions app/demos/page.tsx

This file was deleted.

1 change: 0 additions & 1 deletion app/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ export const NAV_ITEMS: NavItem[] = [
{ label: 'Explorer', href: '/vibenet/explorer', icon: 'explorer' },
],
},
{ label: 'Demos', href: '/demos', icon: 'demos', enabled: true },
{ label: 'Upgrades', href: '/upgrades', icon: 'upgrades', enabled: true },
{ label: 'Changelog', href: '/upgrades/changelog', icon: 'changelog', enabled: true },
{ label: 'Snapshots', href: '/snapshots', icon: 'snapshots', enabled: true },
Expand Down
5 changes: 2 additions & 3 deletions app/sitemap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ export default function sitemap(): MetadataRoute.Sitemap {
{ path: '/vibenet', priority: 0.8, changeFrequency: 'weekly' },
{ path: '/vibenet/explorer', priority: 0.6, changeFrequency: 'daily' },
{ path: '/vibenet/faucet', priority: 0.5, changeFrequency: 'monthly' },
{ path: '/demos', priority: 0.6, changeFrequency: 'weekly' },
{ path: '/demos/account', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/demos/b20', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/vibenet/demos/account', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/vibenet/demos/b20', priority: 0.5, changeFrequency: 'weekly' },
];

return routes.map(({ path, priority, changeFrequency }) => ({
Expand Down
4 changes: 2 additions & 2 deletions app/upgrades/data/vibenet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ const vibenetAvailability: VibenetAvailability[] = [
timestamp: '2026-07-02',
featured: true,
image: '/images/upgrades/layered-squares.png',
demo: '/demos/account'
demo: '/vibenet/demos/account'
},
{
changeId: 'base-0005',
status: 'live',
demo: '/demos/b20'
demo: '/vibenet/demos/b20'
},
];

Expand Down
2 changes: 1 addition & 1 deletion app/upgrades/library/upgrades.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ describe('upgrades route helpers', () => {
it('links the B20 changelog entry to its Vibenet demo', () => {
const b20 = getVibenetChangeById('base-0005');
expect(b20?.vibenet.status).toBe('live');
expect(b20?.vibenet.demo).toBe('/demos/b20');
expect(b20?.vibenet.demo).toBe('/vibenet/demos/b20');
// Not featured — the demo link surfaces on the changelog entry, not the
// featured-changes rail.
expect(b20?.vibenet.featured).toBe(false);
Expand Down
2 changes: 1 addition & 1 deletion app/vibenet/data/features.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export const FEATURES: VibenetFeature[] = [
// The account demo has shipped, so the card links straight to it and shows
// as `live` (which hides the "coming-soon" badge). "Build your own" points at
// the EIP-8130 build guide.
cta: { label: 'Try It Out', href: '/demos/account' },
cta: { label: 'Try It Out', href: '/vibenet/demos/account' },
secondaryCta: { label: 'Build Your Own', href: 'https://docs.base.org/base-chain/specs/upgrades/cobalt/eip-8130', external: true },
links: [{ label: 'EIP-8130', href: 'https://eip.tools/eip/8130', external: true }],
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { useCallback, useEffect, useRef, useState } from 'react';
import { animate, motion, useMotionValue, useTransform } from 'motion/react';

import { cn } from '../../components/ui/cn';
import { cn } from '../../../components/ui/cn';

type AnimatedAmountProps = {
text: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ReactNode } from 'react';

import { Text } from '../../components/ui/Text';
import { Text } from '../../../components/ui/Text';

type DemoHeaderProps = {
eyebrow?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { motion } from 'motion/react';

import { cn } from '../../components/ui/cn';
import { cn } from '../../../components/ui/cn';

export type DemoTabItem = {
value: string;
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,19 @@ import Link from 'next/link';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { AnimatePresence, motion } from 'motion/react';

import { Button } from '../../components/ui/Button';
import { Card } from '../../components/ui/Card';
import { cn } from '../../components/ui/cn';
import { AnimatedArrowIcon, CloseIcon } from '../../components/ui/icons';
import { Modal } from '../../components/ui/Modal';
import { Select } from '../../components/ui/Select';
import { Text } from '../../components/ui/Text';
import { Button } from '../../../components/ui/Button';
import { Card } from '../../../components/ui/Card';
import { cn } from '../../../components/ui/cn';
import { AnimatedArrowIcon, CloseIcon } from '../../../components/ui/icons';
import { Modal } from '../../../components/ui/Modal';
import { Select } from '../../../components/ui/Select';
import { Text } from '../../../components/ui/Text';
import { toast } from 'sonner';
import { vibenetApi } from '../../vibenet/library/client';
import { ACCOUNT_RPC_URL, VIBENET_EXPLORER_PATH } from '../../vibenet/library/config';
import { vibenetApi } from '../../library/client';
import { ACCOUNT_RPC_URL, VIBENET_EXPLORER_PATH } from '../../library/config';
import { AnimatedAmount } from '../_components/AnimatedAmount';
import { Spinner } from '../../components/ui/Spinner';
import { Tabs } from '../../components/ui/Tabs';
import { Spinner } from '../../../components/ui/Spinner';
import { Tabs } from '../../../components/ui/Tabs';
import { Stat } from '../_components/Stat';
import { ActivityLog } from './components/ActivityLog';
import { AppsView } from './components/AppsView';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import Link from 'next/link';
import { useEffect, useRef, useState } from 'react';
import { motion, useReducedMotion } from 'motion/react';

import { Button } from '../../../components/ui/Button';
import { cn } from '../../../components/ui/cn';
import { Text } from '../../../components/ui/Text';
import { VIBENET_EXPLORER_PATH } from '../../../vibenet/library/config';
import { Button } from '../../../../components/ui/Button';
import { cn } from '../../../../components/ui/cn';
import { Text } from '../../../../components/ui/Text';
import { VIBENET_EXPLORER_PATH } from '../../../library/config';
import { type ActivityEntry, type StoredAccount, formatTime } from '../library/model';
import { short } from '../shared';
import { AccountIdentity, Badge } from './primitives';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use client';

import { Button } from '../../../components/ui/Button';
import { Card } from '../../../components/ui/Card';
import { cn } from '../../../components/ui/cn';
import { Text } from '../../../components/ui/Text';
import { Button } from '../../../../components/ui/Button';
import { Card } from '../../../../components/ui/Card';
import { cn } from '../../../../components/ui/cn';
import { Text } from '../../../../components/ui/Text';
import type { DemoApp } from '../library/apps';
import type { DemoChain } from '../library/chains';
import { formatExpiry, type AppSessionKey, type AppSubAccount, type StoredAccount } from '../library/model';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import type { Address, Hex } from '@aa';
import Link from 'next/link';
import { AnimatePresence, motion } from 'motion/react';

import { Button } from '../../../components/ui/Button';
import { Card } from '../../../components/ui/Card';
import { cn } from '../../../components/ui/cn';
import { CloseIcon } from '../../../components/ui/icons';
import { Spinner } from '../../../components/ui/Spinner';
import { Select } from '../../../components/ui/Select';
import { Text } from '../../../components/ui/Text';
import { VIBENET_EXPLORER_PATH } from '../../../vibenet/library/config';
import { Button } from '../../../../components/ui/Button';
import { Card } from '../../../../components/ui/Card';
import { cn } from '../../../../components/ui/cn';
import { CloseIcon } from '../../../../components/ui/icons';
import { Spinner } from '../../../../components/ui/Spinner';
import { Select } from '../../../../components/ui/Select';
import { Text } from '../../../../components/ui/Text';
import { VIBENET_EXPLORER_PATH } from '../../../library/config';
import { AnimatedAmount } from '../../_components/AnimatedAmount';
import {
DEMO_CHAINS,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { ReactNode } from 'react';
import { AnimatePresence, motion } from 'motion/react';

import { cn } from '../../../components/ui/cn';
import { Text } from '../../../components/ui/Text';
import { cn } from '../../../../components/ui/cn';
import { Text } from '../../../../components/ui/Text';
import type { SignerKind } from '../library/model';
import { KIND_LABEL, short } from '../shared';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import type { Metadata } from 'next';
import type { ReactNode } from 'react';

import { MaintenanceBanner } from '../../vibenet/components/MaintenanceBanner';

// The account demo page is a client component; this passthrough layout carries
// its title/description.
//
Expand All @@ -12,19 +10,13 @@ import { MaintenanceBanner } from '../../vibenet/components/MaintenanceBanner';
// generator resolves a template to its `default` and would publish the bare page
// title, disagreeing with what the browser renders.
export const metadata: Metadata = {
title: 'Native Account Abstraction · Demos',
title: 'Native Account Abstraction · Vibenet',
description:
'Create native account abstraction accounts from in-browser keys, fund them from the faucet, and inspect balances on Vibenet.',
};

// This demo runs on Vibenet, so it carries Vibenet's maintenance notice — the
// demo is unusable while the devnet is down. Scoped here rather than to the
// /demos section, since other demos may run on other test networks.
// Passthrough. The demo runs on Vibenet and lives under /vibenet/demos, so it
// inherits Vibenet's maintenance notice from app/vibenet/layout.tsx.
export default function AccountDemoLayout({ children }: { children: ReactNode }) {
return (
<>
<MaintenanceBanner />
{children}
</>
);
return <>{children}</>;
}
Loading
Loading