Revert "feat(homepage): update positioning to "Infinite Toolspace""

This reverts commit ce44aeab3a.
This commit is contained in:
Ajax Davis 2026-02-04 04:12:04 +10:00
parent ce44aeab3a
commit 86e523f3dc
4 changed files with 52 additions and 190 deletions

View file

@ -7,7 +7,6 @@ import Link from 'next/link';
import { AppHeader } from '../components/AppHeader';
import { FeaturesSection } from '../components/home/FeaturesSection';
import { HeroSection } from '../components/home/HeroSection';
import { ToolspaceSection } from '../components/home/ToolspaceSection';
export const dynamic = 'force-dynamic';
@ -136,9 +135,6 @@ export default async function HomePage(): Promise<React.ReactElement> {
{/* Hero Section - Dithered Design */}
<HeroSection stats={data.stats} />
{/* Toolspace Virtualization Concept */}
<ToolspaceSection />
{/* Features Section */}
<FeaturesSection />
@ -162,14 +158,11 @@ export default async function HomePage(): Promise<React.ReactElement> {
<section className="py-16 bg-background">
<Container size="xl" padding="lg">
<div className="text-center mb-12">
<p className="font-mono text-xs text-primary uppercase tracking-widest mb-3">
from the toolspace
</p>
<h2 className="font-mono text-3xl md:text-4xl font-semibold mb-4 text-foreground lowercase">
top quality tools
<h2 className="text-3xl md:text-4xl font-bold mb-4 text-foreground">
Featured Tools
</h2>
<p className="text-base text-foreground-secondary max-w-2xl mx-auto mb-8 font-sans">
Surfaced by quality signals: health checks, downloads, documentation richness.
<p className="text-lg text-foreground-secondary max-w-2xl mx-auto mb-8">
Production-ready tools you can use today. Add to your AI agent in one line.
</p>
</div>
@ -365,14 +358,13 @@ export default async function HomePage(): Promise<React.ReactElement> {
{/* Section Header */}
<div className="text-center mb-16">
<p className="font-mono text-xs text-primary uppercase tracking-widest mb-3">
mcp is the socket
universal compatibility
</p>
<h2 className="font-mono text-3xl md:text-4xl font-semibold mb-4 text-foreground lowercase">
plug into the toolspace
works everywhere
</h2>
<p className="text-base text-foreground-secondary max-w-xl mx-auto font-sans">
Any MCP client becomes a window into the infinite toolspace. One URL unlocks
everything.
Use TPMJS tools with any MCP-compatible AI client. One URL, instant access.
</p>
</div>
@ -430,7 +422,7 @@ export default async function HomePage(): Promise<React.ReactElement> {
{/* Code Example - Fieldset Style */}
<fieldset className="border border-dashed border-border p-8 max-w-2xl mx-auto">
<legend className="font-mono text-sm text-foreground-secondary px-3 lowercase">
connect to the toolspace
quick start
</legend>
<div className="mb-4">
<p className="font-mono text-xs text-foreground-tertiary uppercase tracking-wider mb-2">
@ -466,8 +458,8 @@ export default async function HomePage(): Promise<React.ReactElement> {
<div className="flex items-center gap-3 pt-4 border-t border-dashed border-border">
<div className="w-2 h-2 bg-success rounded-full animate-pulse" />
<p className="font-mono text-xs text-foreground-secondary">
one url infinite toolspace {' '}
<span className="text-primary font-medium">tools load on-demand</span>
add to config instant access to{' '}
<span className="text-primary font-medium">170+ tools</span>
</p>
</div>
</fieldset>
@ -479,11 +471,11 @@ export default async function HomePage(): Promise<React.ReactElement> {
<Container size="xl" padding="lg">
<div className="text-center max-w-3xl mx-auto">
<h2 className="text-3xl md:text-4xl font-bold mb-4 text-foreground">
Join the Infinite Toolspace
Publish Your AI Tool
</h2>
<p className="text-lg text-foreground-secondary mb-8">
Publish to npm, reach every agent. Your tool becomes discoverable to any AI that
needs it, without manual integration.
Share your tool with the AI community. Automatic discovery, quality scoring, and
integration with Vercel AI SDK, LangChain, and more.
</p>
{/* Generator Highlight Box */}
@ -494,11 +486,11 @@ export default async function HomePage(): Promise<React.ReactElement> {
</div>
<div className="flex-1">
<h3 className="text-xl font-bold mb-2 text-foreground">
One Command. Infinite Reach.
Start with Our Package Generator
</h3>
<p className="text-sm text-foreground-secondary mb-4">
Generate a production-ready tool package in seconds. Once published, your tool
is discoverable by every agent in the toolspace.
Create a production-ready TPMJS tool package in seconds with our CLI
generator. Includes 2-3 tools, complete setup, and best practices.
</p>
<div className="flex flex-col sm:flex-row gap-3">
<code className="text-sm bg-surface px-4 py-2 rounded text-foreground border border-border">
@ -523,27 +515,27 @@ export default async function HomePage(): Promise<React.ReactElement> {
<div className="text-3xl mb-2" aria-hidden="true">
🚀
</div>
<h3 className="font-semibold mb-1 text-foreground">Publish Once</h3>
<h3 className="font-semibold mb-1 text-foreground">Quick Setup</h3>
<p className="text-sm text-foreground-secondary">
Add one keyword. Publish to npm. Done.
Add one keyword to package.json and publish to NPM
</p>
</div>
<div className="p-4">
<div className="text-3xl mb-2" aria-hidden="true">
</div>
<h3 className="font-semibold mb-1 text-foreground">Reach All Agents</h3>
<h3 className="font-semibold mb-1 text-foreground">Auto Discovery</h3>
<p className="text-sm text-foreground-secondary">
Discoverable by every agent using the toolspace
Your tool appears on tpmjs.com within 15 minutes
</p>
</div>
<div className="p-4">
<div className="text-3xl mb-2" aria-hidden="true">
📊
</div>
<h3 className="font-semibold mb-1 text-foreground">Surface Quality</h3>
<h3 className="font-semibold mb-1 text-foreground">Quality Metrics</h3>
<p className="text-sm text-foreground-secondary">
Health checks and metrics help tools get discovered
Automatic scoring based on docs, downloads, and stars
</p>
</div>
</div>

View file

@ -3,7 +3,6 @@
import { Badge } from '@tpmjs/ui/Badge/Badge';
import { Button } from '@tpmjs/ui/Button/Button';
import { Container } from '@tpmjs/ui/Container/Container';
import type { IconName } from '@tpmjs/ui/Icon/Icon';
import { Icon } from '@tpmjs/ui/Icon/Icon';
import Link from 'next/link';
@ -12,26 +11,20 @@ import Link from 'next/link';
// ============================================================================
interface FeatureCardProps {
icon: IconName;
icon: string;
title: string;
description: string;
badge?: string;
href?: string;
}
function FeatureCard({
icon,
title,
description,
badge,
href,
}: FeatureCardProps): React.ReactElement {
function FeatureCard({ icon, title, description, badge, href }: FeatureCardProps): React.ReactElement {
const content = (
<div className="group h-full p-6 border border-dashed border-border bg-surface hover:border-primary hover:bg-primary/5 transition-all duration-200">
{/* Icon */}
<div className="w-12 h-12 flex items-center justify-center mb-4 border border-dashed border-border bg-background group-hover:border-primary group-hover:bg-primary/10 transition-all duration-200">
<Icon
icon={icon}
icon={icon as any}
size="md"
className="text-foreground-secondary group-hover:text-primary transition-colors duration-200"
/>
@ -68,34 +61,28 @@ function FeatureCard({
// ============================================================================
export function FeaturesSection(): React.ReactElement {
const features: Array<{
icon: IconName;
title: string;
description: string;
badge: string;
href?: string;
}> = [
const features = [
{
icon: 'search',
title: 'semantic retrieval',
title: 'tool registry',
description:
'Agent describes what it needs, TPMJS returns the right tools. Selection at scale through semantic search and quality scoring.',
badge: 'core',
'Browse 1M+ AI tools from npm. Auto-discovered within minutes of publication with quality scoring and health monitoring.',
badge: 'auto-sync',
href: '/tool/tool-search',
},
{
icon: 'puzzle',
title: 'omega agent',
description:
'See toolspace virtualization in action. Omega discovers and executes from 1M+ tools on-demand. No pre-configuration.',
badge: 'demo',
'Chat with an AI that dynamically discovers and executes tools based on your requests. No configuration needed.',
badge: 'live',
href: '/omega',
},
{
icon: 'folder',
title: 'collections',
description:
'Curate domain-specific toolsets. Collections become instant MCP servers with stable URLs and progressive tool loading.',
'Curate tool sets for specific use cases. Add test scenarios to validate behavior and generate living documentation.',
badge: 'shareable',
href: '/collections',
},
@ -103,7 +90,7 @@ export function FeaturesSection(): React.ReactElement {
icon: 'user',
title: 'custom agents',
description:
'Build agents with any LLM and custom prompts. The toolspace scales independently of agent complexity.',
'Build AI agents with your choice of LLM, custom prompts, and curated tool collections. Share publicly or keep private.',
badge: 'unlimited',
href: '/agents',
},
@ -111,22 +98,22 @@ export function FeaturesSection(): React.ReactElement {
icon: 'link',
title: 'mcp protocol',
description:
'MCP is the socket. TPMJS is the operating system. Works with Claude, Cursor, Windsurf, and any MCP client.',
'Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client. One URL, instant access to all tools.',
badge: 'universal',
href: '/integrations',
},
{
icon: 'key',
title: 'sandboxed execution',
title: 'secure execution',
description:
'Every tool runs isolated with timeouts and rate limits. npm is storage, TPMJS is the secure runtime.',
badge: 'secure',
'Every tool runs in an isolated sandbox with rate limiting and timeout handling. Your credentials are encrypted at rest.',
badge: 'sandboxed',
},
{
icon: 'checkCircle',
title: 'quality signals',
title: 'test scenarios',
description:
'Health checks, test scenarios, and usage metrics. Surface the best tools from the infinite toolspace.',
'AI-generated test scenarios validate tool behavior. Track pass rates, execution times, and quality scores.',
badge: 'automated',
href: '/scenarios',
},
@ -134,15 +121,15 @@ export function FeaturesSection(): React.ReactElement {
icon: 'message',
title: 'living skills',
description:
'Documentation emerges from real usage. Tools teach agents how to use them through proven patterns.',
badge: 'evolving',
'Documentation that evolves from real usage. Skills emerge from question patterns and proven behaviors.',
badge: 'new',
href: '/docs/skills',
},
{
icon: 'terminal',
title: 'publish once',
title: 'developer sdk',
description:
'Add one keyword to package.json. Your tool joins the infinite toolspace within minutes. Zero configuration.',
'Publish tools with one keyword. Full TypeScript support, Vercel AI SDK integration, and automatic schema extraction.',
badge: 'npm',
href: '/publish',
},
@ -154,14 +141,14 @@ export function FeaturesSection(): React.ReactElement {
{/* Section Header */}
<div className="text-center mb-16">
<p className="font-mono text-xs text-primary uppercase tracking-widest mb-3">
toolspace virtualization
platform capabilities
</p>
<h2 className="font-mono text-3xl md:text-4xl font-semibold mb-4 text-foreground lowercase">
the retrieval layer
everything you need
</h2>
<p className="text-base text-foreground-secondary max-w-2xl mx-auto font-sans">
npm stores the tools. TPMJS retrieves the right ones. Agents get infinite capabilities
without infinite context windows.
From discovery to execution, TPMJS provides the complete infrastructure for AI tool
development and deployment.
</p>
</div>

View file

@ -62,19 +62,14 @@ export function HeroSection({ stats }: HeroSectionProps): React.ReactElement {
{/* Main Heading */}
<div className="max-w-7xl">
<h1
className="mb-4 font-bold leading-none tracking-tight text-foreground"
className="mb-8 font-bold leading-none tracking-tight text-foreground"
style={{ fontSize: 'clamp(48px, 10vw, 96px)' }}
>
INFINITE TOOLSPACE
THE NPM FOR AI TOOLS
</h1>
{/* Tagline */}
<p className="mb-8 font-mono text-lg md:text-xl text-brutalist-accent uppercase tracking-wide">
A million tools. Zero configuration.
</p>
{/* Live Metrics Strip */}
<div className="mb-10 flex flex-wrap items-center gap-3 border-l-[6px] border-foreground/20 pl-6 font-mono text-base md:text-lg font-bold uppercase tracking-wider">
<div className="mb-12 flex flex-wrap items-center gap-3 border-l-[6px] border-brutalist-accent pl-6 font-mono text-base md:text-lg font-bold uppercase tracking-wider">
<div className="flex items-center gap-2">
<span className="text-foreground">{formatNumber(stats.packageCount)}</span>
<span className="text-foreground-secondary">PACKAGES</span>
@ -84,17 +79,12 @@ export function HeroSection({ stats }: HeroSectionProps): React.ReactElement {
<span className="text-foreground">{formatNumber(stats.toolCount)}</span>
<span className="text-foreground-secondary">TOOLS</span>
</div>
<span className="text-foreground-tertiary">/</span>
<div className="flex items-center gap-2">
<span className="text-foreground">1M+</span>
<span className="text-foreground-secondary">ON NPM</span>
</div>
</div>
{/* Subheading */}
<p className="mb-12 max-w-3xl text-xl md:text-2xl font-medium leading-relaxed text-foreground-secondary tracking-tight">
Any agent can use a million tools without loading a million tools. TPMJS is the
retrieval layer between npm and AI agents.
Discover and use npm packages as AI agent tools. Works with Claude, GPT, LangChain, and
any MCP-compatible client.
</p>
{/* Brutalist Search Interface */}

View file

@ -1,107 +0,0 @@
'use client';
import { Container } from '@tpmjs/ui/Container/Container';
import type { IconName } from '@tpmjs/ui/Icon/Icon';
import { Icon } from '@tpmjs/ui/Icon/Icon';
const stages: Array<{
number: string;
title: string;
description: string;
icon: IconName;
color: string;
}> = [
{
number: '01',
title: 'npm stores everything',
description: '1M+ packages. Every tool ever published. Too many for any context window.',
icon: 'box',
color: 'text-foreground-tertiary',
},
{
number: '02',
title: 'TPMJS retrieves what matters',
description:
'Semantic search + quality signals surface the right tools for any task. Selection at scale.',
icon: 'search',
color: 'text-primary',
},
{
number: '03',
title: 'Agent uses what it needs',
description:
'Progressive disclosure. Tools load on-demand. Infinite capabilities, finite tokens.',
icon: 'puzzle',
color: 'text-brutalist-accent',
},
];
export function ToolspaceSection(): React.ReactElement {
return (
<section className="py-20 bg-surface border-t border-border">
<Container size="xl" padding="lg">
{/* Section Header */}
<div className="text-center mb-16">
<p className="font-mono text-xs text-primary uppercase tracking-widest mb-3">
how it works
</p>
<h2 className="font-mono text-3xl md:text-4xl font-semibold mb-4 text-foreground lowercase">
toolspace virtualization
</h2>
<p className="text-base text-foreground-secondary max-w-2xl mx-auto font-sans">
Use a million tools without loading a million tools. TPMJS is the retrieval layer
between npm and your agent.
</p>
</div>
{/* Pipeline Visualization */}
<div className="max-w-4xl mx-auto">
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 md:gap-4">
{stages.map((stage, index) => (
<div key={stage.number} className="relative">
{/* Connector Line (hidden on mobile, between cards on desktop) */}
{index < stages.length - 1 && (
<div className="hidden md:block absolute top-1/2 -right-2 w-4 h-[2px] bg-border" />
)}
<div className="p-6 border border-dashed border-border bg-background h-full">
{/* Stage Number */}
<div className="flex items-center gap-4 mb-4">
<span className={`font-mono text-3xl font-bold ${stage.color}`}>
{stage.number}
</span>
<div
className={`w-10 h-10 flex items-center justify-center border border-dashed border-border ${stage.color}`}
>
<Icon icon={stage.icon} size="sm" />
</div>
</div>
{/* Content */}
<h3 className="font-mono text-lg font-semibold text-foreground mb-2 lowercase">
{stage.title}
</h3>
<p className="text-sm text-foreground-secondary leading-relaxed">
{stage.description}
</p>
</div>
</div>
))}
</div>
{/* Bottom Tagline */}
<div className="mt-12 text-center">
<div className="inline-flex items-center gap-4 px-6 py-4 border border-dashed border-primary bg-primary/5">
<Icon icon="star" size="md" className="text-primary" />
<p className="font-mono text-sm text-foreground">
<span className="text-primary font-semibold">npm</span> is storage.{' '}
<span className="text-primary font-semibold">TPMJS</span> is the operating system
for tool access.
</p>
</div>
</div>
</div>
</Container>
</section>
);
}