feat: add npm-like features to tool detail page and update keyword to tpmjs

- Add download trend sparkline chart showing 30-day download history
- Add bundle size component with minified/gzipped sizes via bundlephobia proxy
- Add more install commands: yarn, bun, deno (in addition to npm, pnpm)
- Change discovery keyword from "tpmjs-tool" to "tpmjs" across entire codebase
- Update sync endpoints to use new keyword
- Update all documentation and package.json files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ajax Davis 2025-12-29 21:30:42 +10:00
parent 6c28f01633
commit f24eebc196
42 changed files with 426 additions and 97 deletions

View file

@ -53,7 +53,7 @@ const tutorials = [
/>
</svg>
),
features: ['tpmjs-tool keyword', 'Schema extraction', 'Quality scoring'],
features: ['tpmjs keyword', 'Schema extraction', 'Quality scoring'],
},
];

View file

@ -3,7 +3,7 @@
import { motion } from 'framer-motion';
const steps = [
{ num: '1', text: 'Add "tpmjs-tool" to your package.json keywords' },
{ num: '1', text: 'Add "tpmjs" to your package.json keywords' },
{ num: '2', text: 'Define your tools in the "tpmjs" field' },
{ num: '3', text: 'npm publish' },
];

View file

@ -3,7 +3,7 @@
import { motion } from 'framer-motion';
const syncSteps = [
{ step: '1', text: 'You publish to npm with tpmjs-tool keyword', color: 'purple' },
{ step: '1', text: 'You publish to npm with tpmjs keyword', color: 'purple' },
{ step: '2', text: 'Registry detects your package within 2 minutes', color: 'cyan' },
{ step: '3', text: 'We extract schemas from your package.json', color: 'emerald' },
{ step: '4', text: 'Your tool appears in search results', color: 'yellow' },

View file

@ -7,7 +7,7 @@ const packageJson = [
{ id: 'name', line: ' "name": "@your-org/your-tools",' },
{ id: 'version', line: ' "version": "1.0.0",' },
{ id: 'keywords-open', line: ' "keywords": [' },
{ id: 'keyword', line: ' "tpmjs-tool"' },
{ id: 'keyword', line: ' "tpmjs"' },
{ id: 'keywords-close', line: ' ],' },
{ id: 'tpmjs-open', line: ' "tpmjs": {' },
{ id: 'tools-open', line: ' "tools": [{ ... }]' },
@ -43,7 +43,7 @@ export function PackageSetupSlide(): React.ReactElement {
<div
key={item.id}
className={
item.line.includes('tpmjs-tool')
item.line.includes('tpmjs')
? 'text-cyan-400'
: item.line.includes('"tpmjs"')
? 'text-purple-400'
@ -66,7 +66,7 @@ export function PackageSetupSlide(): React.ReactElement {
className="text-left space-y-4"
>
<div className="p-4 rounded-lg bg-white/5 border border-cyan-500/20">
<div className="text-sm font-medium text-cyan-400 mb-1">tpmjs-tool keyword</div>
<div className="text-sm font-medium text-cyan-400 mb-1">tpmjs keyword</div>
<div className="text-xs text-white/50">Required. This is how we find you on npm.</div>
</div>
<div className="p-4 rounded-lg bg-white/5 border border-purple-500/20">

View file

@ -5,7 +5,7 @@ import { motion } from 'framer-motion';
const packageJsonLines = [
{ id: 'open', line: '{' },
{ id: 'name', line: ' "name": "@your-org/your-tools",' },
{ id: 'keywords', line: ' "keywords": ["tpmjs-tool"],' },
{ id: 'keywords', line: ' "keywords": ["tpmjs"],' },
{ id: 'tpmjs', line: ' "tpmjs": {' },
{ id: 'tools', line: ' "tools": [{' },
{ id: 'toolName', line: ' "name": "yourTool",' },
@ -16,7 +16,7 @@ const packageJsonLines = [
];
const steps = [
{ step: '1', text: 'Add tpmjs-tool keyword', color: 'cyan' },
{ step: '1', text: 'Add tpmjs keyword', color: 'cyan' },
{ step: '2', text: 'Define tpmjs field with tool metadata', color: 'purple' },
{ step: '3', text: 'npm publish', color: 'emerald' },
];
@ -56,7 +56,7 @@ export function GetStartedSlide(): React.ReactElement {
<div
key={item.id}
className={
item.line.includes('tpmjs-tool')
item.line.includes('tpmjs')
? 'text-cyan-400'
: item.line.includes('tpmjs')
? 'text-purple-400'