claudmax 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/claudmax-1.0.16.tgz +0 -0
  2. package/{packages/cli/index.js → index.js} +2 -0
  3. package/package.json +27 -55
  4. package/.claude/settings.local.json +0 -7
  5. package/.env.example +0 -24
  6. package/.github/workflows/publish.yml +0 -31
  7. package/README.md +0 -178
  8. package/claudmax-mcp-1.0.2.tgz +0 -0
  9. package/help +0 -0
  10. package/help-wal +0 -0
  11. package/next-env.d.ts +0 -6
  12. package/next.config.mjs +0 -43
  13. package/packages/cli/claudmax-1.0.16.tgz +0 -0
  14. package/packages/cli/package.json +0 -33
  15. package/packages/mcp/claudmax-mcp-1.0.0.tgz +0 -0
  16. package/packages/mcp/claudmax-mcp-1.0.1.tgz +0 -0
  17. package/packages/mcp/claudmax-mcp-1.0.2.tgz +0 -0
  18. package/packages/mcp/claudmax-mcp-1.0.3.tgz +0 -0
  19. package/packages/mcp/index.js +0 -129
  20. package/packages/mcp/package-lock.json +0 -1146
  21. package/packages/mcp/package.json +0 -32
  22. package/postcss.config.mjs +0 -6
  23. package/prisma/schema.prisma +0 -130
  24. package/prisma/seed.ts +0 -27
  25. package/public/favicon.svg +0 -10
  26. package/public/robots.txt +0 -10
  27. package/run_build.sh +0 -4
  28. package/scripts/migrate-plans.js +0 -98
  29. package/scripts/seed-blog.ts +0 -1014
  30. package/src/app/admin/dashboard/AdminDashboardClient.tsx +0 -1546
  31. package/src/app/admin/dashboard/page.tsx +0 -13
  32. package/src/app/admin/page.tsx +0 -132
  33. package/src/app/api/admin/auth/me/route.ts +0 -34
  34. package/src/app/api/admin/health/route.ts +0 -110
  35. package/src/app/api/admin/keys/[id]/route.ts +0 -116
  36. package/src/app/api/admin/keys/route.ts +0 -192
  37. package/src/app/api/admin/keys-list/route.ts +0 -81
  38. package/src/app/api/admin/login/route.ts +0 -72
  39. package/src/app/api/admin/logout/route.ts +0 -8
  40. package/src/app/api/admin/migrate/route.ts +0 -133
  41. package/src/app/api/admin/plans/[id]/route.ts +0 -65
  42. package/src/app/api/admin/plans/route.ts +0 -66
  43. package/src/app/api/admin/posts/[id]/route.ts +0 -81
  44. package/src/app/api/admin/posts/route.ts +0 -83
  45. package/src/app/api/admin/seed/route.ts +0 -145
  46. package/src/app/api/admin/settings/route.ts +0 -44
  47. package/src/app/api/admin/stats/route.ts +0 -74
  48. package/src/app/api/admin/users/[id]/route.ts +0 -166
  49. package/src/app/api/admin/users/plans/route.ts +0 -45
  50. package/src/app/api/admin/users/route.ts +0 -202
  51. package/src/app/api/blog/[slug]/route.ts +0 -22
  52. package/src/app/api/blog/route.ts +0 -40
  53. package/src/app/api/cron/daily-status/route.ts +0 -208
  54. package/src/app/api/support/chat/route.ts +0 -55
  55. package/src/app/api/support/chat/session/route.ts +0 -62
  56. package/src/app/api/support/chat/stream/route.ts +0 -44
  57. package/src/app/api/support/email/route.ts +0 -63
  58. package/src/app/api/tools/understand_image/route.ts +0 -113
  59. package/src/app/api/tools/upload/route.ts +0 -179
  60. package/src/app/api/tools/web_search/route.ts +0 -99
  61. package/src/app/api/v1/audio/route.ts +0 -67
  62. package/src/app/api/v1/audio/speech/route.ts +0 -73
  63. package/src/app/api/v1/chat/completions/route.ts +0 -3
  64. package/src/app/api/v1/chat/route.ts +0 -1079
  65. package/src/app/api/v1/images/generations/route.ts +0 -93
  66. package/src/app/api/v1/info/route.ts +0 -30
  67. package/src/app/api/v1/key-status/route.ts +0 -109
  68. package/src/app/api/v1/key-status/stream/route.ts +0 -135
  69. package/src/app/api/v1/messages/count_tokens/route.ts +0 -22
  70. package/src/app/api/v1/messages/route.ts +0 -807
  71. package/src/app/api/v1/models/route.ts +0 -14
  72. package/src/app/api/v1/route.ts +0 -18
  73. package/src/app/blog/BlogClient.tsx +0 -193
  74. package/src/app/blog/[slug]/page.tsx +0 -117
  75. package/src/app/blog/page.tsx +0 -20
  76. package/src/app/check-usage/CheckUsageClient.tsx +0 -186
  77. package/src/app/check-usage/layout.tsx +0 -11
  78. package/src/app/check-usage/page.tsx +0 -15
  79. package/src/app/docs/layout.tsx +0 -16
  80. package/src/app/docs/page.tsx +0 -1055
  81. package/src/app/faq/FAQClient.tsx +0 -227
  82. package/src/app/faq/page.tsx +0 -21
  83. package/src/app/globals.css +0 -75
  84. package/src/app/layout.tsx +0 -80
  85. package/src/app/page.tsx +0 -256
  86. package/src/app/reseller/ResellerClient.tsx +0 -435
  87. package/src/app/reseller/page.tsx +0 -15
  88. package/src/app/setup.ps1/route.ts +0 -79
  89. package/src/app/setup.sh/route.ts +0 -113
  90. package/src/app/sitemap.ts +0 -50
  91. package/src/app/status/StatusClient.tsx +0 -103
  92. package/src/app/status/layout.tsx +0 -11
  93. package/src/app/status/page.tsx +0 -15
  94. package/src/app/support/SupportClient.tsx +0 -411
  95. package/src/app/support/page.tsx +0 -25
  96. package/src/app/v1/chat/completions/route.ts +0 -3
  97. package/src/app/v1/chat/route.ts +0 -4
  98. package/src/app/v1/messages/route.ts +0 -3
  99. package/src/components/Footer.tsx +0 -120
  100. package/src/components/Header.tsx +0 -131
  101. package/src/components/landing/features.tsx +0 -99
  102. package/src/components/ui/badge.tsx +0 -32
  103. package/src/components/ui/button.tsx +0 -46
  104. package/src/components/ui/card.tsx +0 -50
  105. package/src/components/ui/dialog.tsx +0 -97
  106. package/src/components/ui/dropdown-menu.tsx +0 -156
  107. package/src/components/ui/input.tsx +0 -21
  108. package/src/components/ui/label.tsx +0 -15
  109. package/src/components/ui/separator.tsx +0 -22
  110. package/src/components/ui/switch.tsx +0 -27
  111. package/src/components/ui/tabs.tsx +0 -51
  112. package/src/components/ui/toast.tsx +0 -103
  113. package/src/lib/auth.ts +0 -45
  114. package/src/lib/prisma.ts +0 -20
  115. package/src/lib/providers.ts +0 -158
  116. package/src/lib/security.ts +0 -165
  117. package/src/lib/utils.ts +0 -14
  118. package/src/middleware.ts +0 -30
  119. package/tailwind.config.ts +0 -53
  120. package/tsconfig.json +0 -41
  121. package/tsconfig.tsbuildinfo +0 -1
  122. package/vercel.json +0 -8
  123. /package/{packages/cli/bin → bin}/claudmax.js +0 -0
  124. /package/{packages/cli/claudmax-1.0.17.tgz → claudmax-1.0.17.tgz} +0 -0
@@ -1,227 +0,0 @@
1
- 'use client';
2
-
3
- import { useState } from 'react';
4
- import Header from '@/components/Header';
5
- import Footer from '@/components/Footer';
6
- import { MessageCircle, Zap, Shield, Code2, CreditCard, RefreshCw, BookOpen, Search, ChevronRight, ChevronDown, Globe } from 'lucide-react';
7
-
8
- const CATEGORIES = [
9
- { id: 'all', label: 'All Topics' },
10
- { id: 'getting-started', label: 'Getting Started' },
11
- { id: 'api-keys', label: 'API Keys' },
12
- { id: 'usage', label: 'Usage & Limits' },
13
- { id: 'integrations', label: 'Integrations' },
14
- { id: 'billing', label: 'Billing & Plans' },
15
- { id: 'reseller', label: 'Reseller Program' },
16
- ];
17
-
18
- const FAQS = [
19
- // Getting Started
20
- {
21
- id: 'gs-1', category: 'getting-started', q: 'What is ClaudMax?',
22
- a: 'ClaudMax is a high-performance Claude API gateway that routes your requests through OpenRouter\'s free-tier infrastructure. It provides a unified endpoint compatible with the Anthropic API, so you can use Claude Opus 4.6, Sonnet 4.6, and Haiku 4.5 without a direct Anthropic subscription.',
23
- },
24
- {
25
- id: 'gs-2', category: 'getting-started', q: 'How do I sign up and get started?',
26
- a: 'Visit claudmax.pro, create a free account, and generate your first API key from the dashboard. Then set ANTHROPIC_BASE_URL=https://api.claudmax.pro and ANTHROPIC_API_KEY=your-key in your environment. That\'s it — you\'re ready to build.',
27
- },
28
- {
29
- id: 'gs-3', category: 'getting-started', q: 'What information do I need to provide?',
30
- a: 'Only your email address for account creation. No credit card is required for the free plan.',
31
- },
32
- {
33
- id: 'gs-4', category: 'getting-started', q: 'How quickly is my API key activated?',
34
- a: 'Immediately. Once you generate a key, it\'s live and usable right away.',
35
- },
36
- // API Keys
37
- {
38
- id: 'ak-1', category: 'api-keys', q: 'How do I create an API key?',
39
- a: 'Log into your ClaudMax dashboard, go to the Keys tab, and click "Create Key". Give it a name, select your plan, and choose the duration (7 or 30 days). Your new key will be displayed immediately — copy and save it securely.',
40
- },
41
- {
42
- id: 'ak-2', category: 'api-keys', q: 'Are my API keys secure?',
43
- a: 'Yes. Keys are stored with one-way hashing in our database. They\'re transmitted over HTTPS-only, and you can revoke them instantly from your dashboard at any time.',
44
- },
45
- {
46
- id: 'ak-3', category: 'api-keys', q: 'Can I have multiple API keys?',
47
- a: 'Yes. You can create multiple keys with different plans and durations for different use cases. Each key tracks its own usage independently.',
48
- },
49
- {
50
- id: 'ak-4', category: 'api-keys', q: 'What if my API key expires?',
51
- a: 'Expired keys stop working and you\'ll need to create a new one from your dashboard. You\'ll see a countdown timer on expiring keys.',
52
- },
53
- {
54
- id: 'ak-5', category: 'api-keys', q: 'Can I revoke an API key?',
55
- a: 'Yes. Click "Revoke" next to any key in your dashboard. It\'s immediately deactivated and any in-flight requests will fail.',
56
- },
57
- // Usage & Limits
58
- {
59
- id: 'ul-1', category: 'usage', q: 'How does usage tracking work?',
60
- a: 'Usage is tracked per 5-hour rolling window. Your dashboard shows real-time request counts and token usage. Limits reset automatically when the window expires.',
61
- },
62
- {
63
- id: 'ul-2', category: 'usage', q: 'What are the token display multipliers?',
64
- a: 'Tokens are displayed with a 3x multiplier to reflect the real-world value of smaller model outputs. For example, 1,000 tokens on the API may show as 3,000 in your dashboard usage stats.',
65
- },
66
- {
67
- id: 'ul-3', category: 'usage', q: 'What happens when I hit a limit?',
68
- a: 'Requests and tokens are capped per window. When you\'re close to a limit, your dashboard will show a warning. Once the limit is reached, new requests return a 429 error until the window resets.',
69
- },
70
- {
71
- id: 'ul-4', category: 'usage', q: 'Can I monitor my usage in real-time?',
72
- a: 'Yes. Your dashboard shows live usage stats, and you can use the /check-usage page for a detailed breakdown including plan limits and time remaining in your window.',
73
- },
74
- // Integrations
75
- {
76
- id: 'in-1', category: 'integrations', q: 'Which SDKs and tools are compatible with ClaudMax?',
77
- a: 'ClaudMax works with any tool or SDK that uses the Anthropic API format. This includes Claude Code, Cursor, Windsurf, Cline, Roo Code, and all official Anthropic SDKs for Python, TypeScript, Go, and more.',
78
- },
79
- {
80
- id: 'in-2', category: 'integrations', q: 'How do I configure Claude Code with ClaudMax?',
81
- a: 'Set two environment variables: ANTHROPIC_BASE_URL=https://api.claudmax.pro and ANTHROPIC_API_KEY=your-claudmax-key. That\'s all — Claude Code will use ClaudMax automatically.',
82
- },
83
- {
84
- id: 'in-3', category: 'integrations', q: 'Can I use Claude Code on iPhone or iPad?',
85
- a: 'Yes. Claude Code is available on Apple Silicon Macs and iOS devices. ClaudMax works the same way on mobile — just set the environment variables.',
86
- },
87
- {
88
- id: 'in-4', category: 'integrations', q: 'Does ClaudMax support MCP (Model Context Protocol)?',
89
- a: 'Yes. ClaudMax provides an MCP server package. Install it via: npm install -g claudmax-mcp and configure it in your MCP-compatible tool.',
90
- },
91
- {
92
- id: 'in-5', category: 'integrations', q: 'How do I use Claude in Cursor?',
93
- a: 'Go to Cursor Settings → Models → Custom Model. Set the base URL to https://api.claudmax.pro and enter your ClaudMax API key. Select any of the available models.',
94
- },
95
- {
96
- id: 'in-6', category: 'integrations', q: 'Does ClaudMax support image and audio generation?',
97
- a: 'Yes. Image generation uses a free endpoint via Pollinations AI (no API key needed). Audio TTS requires an OpenAI API key configured in your .env file as OPENAI_API_KEY.',
98
- },
99
- // Billing & Plans
100
- {
101
- id: 'bp-1', category: 'billing', q: 'What plans are available?',
102
- a: 'Free Trial (7 days), Standard (30 days), and custom plans for high-volume users. All plans include the 3x display multiplier on token tracking.',
103
- },
104
- {
105
- id: 'bp-2', category: 'billing', q: 'How do I upgrade my plan?',
106
- a: 'Contact us via the chat form on claudiapro.com/support or message us on WhatsApp. We\'ll set up a custom plan based on your volume needs.',
107
- },
108
- {
109
- id: 'bp-3', category: 'billing', q: 'Do you offer refunds?',
110
- a: 'Yes. We offer full refunds within 7 days of purchase for any billing-related issues. Contact support for assistance.',
111
- },
112
- {
113
- id: 'bp-4', category: 'billing', q: 'Is there a free trial available?',
114
- a: 'Yes. Every new account gets a free trial with limited usage to test the service. No credit card required.',
115
- },
116
- // Reseller
117
- {
118
- id: 'rs-1', category: 'reseller', q: 'Do you have a reseller program?',
119
- a: 'Yes. Approved resellers get access to a dedicated dashboard where they can create and manage API keys for their customers, set custom key limits, and apply their own pricing.',
120
- },
121
- {
122
- id: 'rs-2', category: 'reseller', q: 'How do I apply to become a reseller?',
123
- a: 'Contact us via the chat form below, WhatsApp, or email codewpremium@gmail.com with your use case and expected volume. We review applications within 24 hours.',
124
- },
125
- {
126
- id: 'rs-3', category: 'reseller', q: 'What controls do resellers have?',
127
- a: 'Resellers can set custom key durations (7–30 days), assign specific plans to users, and monitor all keys created under their account. Admins can also manage which plans each user is allowed to access.',
128
- },
129
- ];
130
-
131
- function FAQItem({ faq }: { faq: typeof FAQS[0] }) {
132
- const [expanded, setExpanded] = useState(false);
133
- return (
134
- <div className="border border-gray-200 rounded-xl overflow-hidden bg-white">
135
- <button onClick={() => setExpanded(e => !e)}
136
- className="w-full flex items-center justify-between px-5 py-4 text-left hover:bg-gray-50 transition-colors">
137
- <span className="text-sm font-medium text-gray-900 pr-4">{faq.q}</span>
138
- {expanded
139
- ? <ChevronDown className="w-4 h-4 text-gray-400 flex-shrink-0" />
140
- : <ChevronRight className="w-4 h-4 text-gray-400 flex-shrink-0" />}
141
- </button>
142
- {expanded && <div className="px-5 pb-4 text-sm text-gray-600 leading-relaxed">{faq.a}</div>}
143
- </div>
144
- );
145
- }
146
-
147
- function CategoryIcon({ id }: { id: string }) {
148
- const map: Record<string, React.ReactNode> = {
149
- 'getting-started': <Zap className="w-4 h-4" />,
150
- 'api-keys': <Shield className="w-4 h-4" />,
151
- 'usage': <Search className="w-4 h-4" />,
152
- 'integrations': <Code2 className="w-4 h-4" />,
153
- 'billing': <CreditCard className="w-4 h-4" />,
154
- 'reseller': <RefreshCw className="w-4 h-4" />,
155
- };
156
- return <>{map[id] ?? <BookOpen className="w-4 h-4" />}</>;
157
- }
158
-
159
- export default function FAQClient() {
160
- const [activeCategory, setActiveCategory] = useState('all');
161
- const [search, setSearch] = useState('');
162
-
163
- const filtered = FAQS.filter(faq => {
164
- const matchCat = activeCategory === 'all' || faq.category === activeCategory;
165
- const matchSearch = !search || faq.q.toLowerCase().includes(search.toLowerCase()) || faq.a.toLowerCase().includes(search.toLowerCase());
166
- return matchCat && matchSearch;
167
- });
168
-
169
- return (
170
- <div className="min-h-screen bg-gray-50 flex flex-col">
171
- <Header />
172
- <main className="flex-1">
173
- {/* Hero */}
174
- <section className="bg-gradient-to-br from-indigo-600 via-purple-600 to-indigo-800 text-white py-16">
175
- <div className="max-w-3xl mx-auto px-6 text-center">
176
- <div className="w-14 h-14 rounded-2xl bg-white/10 flex items-center justify-center mx-auto mb-5">
177
- <BookOpen className="w-7 h-7 text-white" />
178
- </div>
179
- <h1 className="text-3xl font-bold mb-3">Frequently Asked Questions</h1>
180
- <p className="text-indigo-100 text-base max-w-lg mx-auto">Quick answers to everything about ClaudMax — from setup to integrations and billing.</p>
181
- </div>
182
- </section>
183
-
184
- <div className="max-w-3xl mx-auto px-6">
185
- {/* Search */}
186
- <div className="-mt-5 mb-8">
187
- <div className="bg-white rounded-xl shadow-sm border border-gray-100 flex items-center gap-3 px-4 py-3">
188
- <Search className="w-4.5 h-4.5 text-gray-400 flex-shrink-0" />
189
- <input value={search} onChange={e => setSearch(e.target.value)} placeholder="Search questions..."
190
- className="flex-1 text-sm outline-none" />
191
- </div>
192
- </div>
193
-
194
- {/* Category Tabs */}
195
- <div className="flex gap-2 flex-wrap mb-6">
196
- {CATEGORIES.map(cat => (
197
- <button key={cat.id} onClick={() => setActiveCategory(cat.id)}
198
- className={`flex items-center gap-1.5 px-3.5 py-2 rounded-full text-xs font-medium transition-colors ${
199
- activeCategory === cat.id
200
- ? 'bg-indigo-600 text-white'
201
- : 'bg-white text-gray-600 border border-gray-200 hover:border-indigo-300 hover:text-indigo-600'
202
- }`}>
203
- {cat.id !== 'all' && <CategoryIcon id={cat.id} />}
204
- {cat.label}
205
- </button>
206
- ))}
207
- </div>
208
-
209
- {/* Results count */}
210
- <div className="text-xs text-gray-400 mb-4">{filtered.length} question{filtered.length !== 1 ? 's' : ''}</div>
211
-
212
- {/* FAQ Items */}
213
- <div className="space-y-2 pb-20">
214
- {filtered.length > 0
215
- ? filtered.map(faq => <FAQItem key={faq.id} faq={faq} />)
216
- : (
217
- <div className="text-center py-12 text-gray-500 text-sm">
218
- No questions found for &quot;{search}&quot;. Try a different search term.
219
- </div>
220
- )}
221
- </div>
222
- </div>
223
- </main>
224
- <Footer />
225
- </div>
226
- );
227
- }
@@ -1,21 +0,0 @@
1
- import type { Metadata } from 'next';
2
- import FAQClient from './FAQClient';
3
-
4
- export const metadata: Metadata = {
5
- title: 'FAQ | ClaudMax — Claude API Gateway',
6
- description: 'Frequently Asked Questions about ClaudMax — API keys, usage tracking, plans, integrations with Claude Code, Cursor, Windsurf, and more.',
7
- keywords: 'ClaudMax FAQ, Claude API FAQ, API gateway questions, usage limits, plans FAQ, Claude Code setup FAQ',
8
- openGraph: {
9
- title: 'FAQ | ClaudMax',
10
- description: 'Frequently Asked Questions about ClaudMax API gateway.',
11
- type: 'website',
12
- url: 'https://claudmax.pro/faq',
13
- siteName: 'ClaudMax',
14
- },
15
- twitter: { card: 'summary_large_image', title: 'FAQ | ClaudMax', description: 'Frequently Asked Questions about ClaudMax.' },
16
- robots: { index: true, follow: true },
17
- };
18
-
19
- export default function FAQPage() {
20
- return <FAQClient />;
21
- }
@@ -1,75 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @layer base {
6
- :root {
7
- --background: 210 20% 98%;
8
- --foreground: 222 47% 11%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 222 47% 11%;
11
- --popover: 0 0% 100%;
12
- --popover-foreground: 222 47% 11%;
13
- --primary: 250 100% 67%;
14
- --primary-foreground: 0 0% 100%;
15
- --secondary: 220 14% 96%;
16
- --secondary-foreground: 222 47% 11%;
17
- --muted: 220 14% 96%;
18
- --muted-foreground: 220 9% 46%;
19
- --accent: 250 100% 67%;
20
- --accent-foreground: 0 0% 100%;
21
- --destructive: 0 84% 60%;
22
- --destructive-foreground: 0 0% 100%;
23
- --border: 220 13% 91%;
24
- --input: 220 13% 91%;
25
- --ring: 250 100% 67%;
26
- --radius: 0.75rem;
27
- --success: 160 84% 39%;
28
- --success-bg: 150 94% 96%;
29
- --success-border: 150 76% 70%;
30
- --warning: 38 92% 50%;
31
- --warning-bg: 48 96% 95%;
32
- --warning-border: 38 92% 70%;
33
- }
34
- }
35
-
36
- @layer base {
37
- * { @apply border-border; }
38
- body { @apply bg-background text-foreground antialiased; }
39
- html { scroll-behavior: smooth; }
40
- }
41
-
42
- /* Custom scrollbar */
43
- ::-webkit-scrollbar { width: 6px; }
44
- ::-webkit-scrollbar-track { background: #F3F4F6; }
45
- ::-webkit-scrollbar-thumb { background: #D1D5DB; border-radius: 3px; }
46
- ::-webkit-scrollbar-thumb:hover { background: #9CA3AF; }
47
-
48
- /* Selection */
49
- ::selection { background: rgba(82, 68, 243, 0.15); }
50
-
51
- /* Card shadow */
52
- .card-shadow {
53
- box-shadow: 0 1px 3px 0 rgba(0,0,0,0.07), 0 1px 2px -1px rgba(0,0,0,0.07);
54
- }
55
-
56
- .card-shadow-md {
57
- box-shadow: 0 4px 6px -1px rgba(0,0,0,0.07), 0 2px 4px -2px rgba(0,0,0,0.07);
58
- }
59
-
60
- /* Gradient text */
61
- .gradient-text {
62
- background: linear-gradient(135deg, #5244F3, #818CF8);
63
- -webkit-background-clip: text;
64
- -webkit-text-fill-color: transparent;
65
- background-clip: text;
66
- }
67
-
68
- /* Pulse dot */
69
- @keyframes pulse-dot {
70
- 0%, 100% { opacity: 1; }
71
- 50% { opacity: 0.4; }
72
- }
73
- .pulse-dot {
74
- animation: pulse-dot 2s ease-in-out infinite;
75
- }
@@ -1,80 +0,0 @@
1
- import type { Metadata } from 'next';
2
- import { Inter } from 'next/font/google';
3
- import './globals.css';
4
-
5
- const inter = Inter({ subsets: ['latin'], variable: '--font-inter' });
6
-
7
- export const metadata: Metadata = {
8
- metadataBase: new URL('https://claudmax.pro'),
9
- title: {
10
- default: 'ClaudMax — Claude API Gateway',
11
- template: '%s | ClaudMax',
12
- },
13
- description:
14
- 'ClaudMax is a high-performance Claude API gateway powered by OpenRouter. Access Claude Opus 4.6, Sonnet 4.6, and Haiku 4.5 through a single endpoint. Works with Claude Code, Cursor, Windsurf, and every Anthropic SDK.',
15
- keywords: [
16
- 'Claude API',
17
- 'Claude Code',
18
- 'API gateway',
19
- 'Anthropic',
20
- 'OpenRouter',
21
- 'Cursor AI',
22
- 'Windsurf',
23
- 'MCP',
24
- 'Model Context Protocol',
25
- 'AI proxy',
26
- 'Sonnet 4.6',
27
- 'Opus 4.6',
28
- 'Haiku 4.5',
29
- ],
30
- authors: [{ name: 'ClaudMax' }],
31
- creator: 'ClaudMax',
32
- openGraph: {
33
- type: 'website',
34
- locale: 'en_US',
35
- url: 'https://claudmax.pro',
36
- siteName: 'ClaudMax',
37
- title: 'ClaudMax — Claude API Gateway',
38
- description: 'High-performance Claude API gateway. Works with Claude Code, Cursor, Windsurf, and every Anthropic SDK.',
39
- images: [
40
- {
41
- url: '/og-image.png',
42
- width: 1200,
43
- height: 630,
44
- alt: 'ClaudMax — Claude API Gateway',
45
- },
46
- ],
47
- },
48
- twitter: {
49
- card: 'summary_large_image',
50
- title: 'ClaudMax — Claude API Gateway',
51
- description: 'Access Claude Opus 4.6, Sonnet 4.6, and Haiku 4.5 through a single endpoint.',
52
- images: ['/og-image.png'],
53
- },
54
- robots: {
55
- index: true,
56
- follow: true,
57
- googleBot: {
58
- index: true,
59
- follow: true,
60
- 'max-video-preview': -1,
61
- 'max-image-preview': 'large',
62
- 'max-snippet': -1,
63
- },
64
- },
65
- };
66
-
67
- export default function RootLayout({ children }: { children: React.ReactNode }) {
68
- return (
69
- <html lang="en">
70
- <head>
71
- <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
72
- <link rel="preconnect" href="https://fonts.googleapis.com" />
73
- <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
74
- </head>
75
- <body className={`${inter.variable} font-sans antialiased bg-[#F9FAFB] min-h-screen flex flex-col`}>
76
- {children}
77
- </body>
78
- </html>
79
- );
80
- }
package/src/app/page.tsx DELETED
@@ -1,256 +0,0 @@
1
- import Link from 'next/link';
2
- import Header from '@/components/Header';
3
- import Footer from '@/components/Footer';
4
-
5
- export const metadata = {
6
- title: 'ClaudMax — Claude API Gateway',
7
- description: 'Access Claude Opus 4.6, Sonnet 4.6, and Haiku 4.5 through a single endpoint. Works with Claude Code, Cursor, Windsurf, and every Anthropic SDK instantly.',
8
- keywords: 'Claude API, Claude Code, API gateway, Anthropic, Cursor, Windsurf, MCP, OpenAI compatible',
9
- openGraph: {
10
- title: 'ClaudMax — Claude API Gateway',
11
- description: 'Drop-in Claude API gateway for Claude Code, Cursor, Windsurf and every Anthropic SDK.',
12
- url: 'https://claudmax.pro',
13
- siteName: 'ClaudMax',
14
- type: 'website',
15
- },
16
- };
17
-
18
- const NAV_LINKS = [
19
- { href: '/docs', label: 'Docs' },
20
- { href: '/docs?section=models', label: 'Models' },
21
- { href: '/docs?section=limits', label: 'Pricing' },
22
- { href: '/status', label: 'Status' },
23
- ];
24
-
25
- const FEATURES = [
26
- {
27
- icon: (
28
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
29
- <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/>
30
- </svg>
31
- ),
32
- title: 'Drop-in Replacement',
33
- desc: 'Works with Claude Code, Cursor, Windsurf, Cline, and any Anthropic SDK. Just swap your base URL.',
34
- },
35
- {
36
- icon: (
37
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
38
- <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
39
- </svg>
40
- ),
41
- title: 'Per-Key Budget Controls',
42
- desc: 'Set spending limits and token budgets per API key. Resellers can manage their own keys independently.',
43
- },
44
- {
45
- icon: (
46
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
47
- <circle cx="12" cy="12" r="10"/>
48
- <polyline points="12 6 12 12 16 14"/>
49
- </svg>
50
- ),
51
- title: '5-Hour Rolling Windows',
52
- desc: 'Isolated rate limits per key with automatic resets. Fair usage — no monthly caps that reset all at once.',
53
- },
54
- {
55
- icon: (
56
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
57
- <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/>
58
- </svg>
59
- ),
60
- title: 'Zero-Latency Streaming',
61
- desc: 'Pass-through SSE streaming with no buffering or delays. Real-time responses for interactive use cases.',
62
- },
63
- {
64
- icon: (
65
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
66
- <rect x="3" y="3" width="18" height="18" rx="2" ry="2"/>
67
- <line x1="3" y1="9" x2="21" y2="9"/>
68
- <line x1="9" y1="21" x2="9" y2="3"/>
69
- </svg>
70
- ),
71
- title: 'Claude Native API',
72
- desc: 'Full support for the Anthropic Messages API. Streaming, tools, and image input — everything Claude supports.',
73
- },
74
- {
75
- icon: (
76
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
77
- <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
78
- <circle cx="9" cy="7" r="4"/>
79
- <path d="M23 21v-2a4 4 0 0 0-3-3.87"/>
80
- <path d="M16 3.13a4 4 0 0 1 0 7.75"/>
81
- </svg>
82
- ),
83
- title: 'Multi-User & Resellers',
84
- desc: 'Super admins, admins, and resellers with role-based access. Each reseller manages their own keys and users.',
85
- },
86
- ];
87
-
88
- const IDES = [
89
- { name: 'Claude Code', icon: '⚡', color: 'bg-orange-50 border-orange-100 text-orange-600' },
90
- { name: 'Cursor', icon: '◉', color: 'bg-violet-50 border-violet-100 text-violet-600' },
91
- { name: 'VS Code', icon: '◇', color: 'bg-blue-50 border-blue-100 text-blue-600' },
92
- { name: 'Windsurf', icon: '≋', color: 'bg-teal-50 border-teal-100 text-teal-600' },
93
- { name: 'Cline', icon: '◈', color: 'bg-purple-50 border-purple-100 text-purple-600' },
94
- { name: 'Roo Code', icon: '◎', color: 'bg-rose-50 border-rose-100 text-rose-600' },
95
- ];
96
-
97
- export default function Home() {
98
- return (
99
- <div className="min-h-screen bg-[#F9FAFB] flex flex-col">
100
- <Header />
101
-
102
- {/* Hero */}
103
- <section className="relative overflow-hidden pt-20 pb-24 px-6">
104
- <div className="absolute top-[-200px] left-1/2 -translate-x-1/2 w-[600px] h-[600px] rounded-full bg-purple-200/20 blur-3xl pointer-events-none" />
105
- <div className="absolute top-20 right-[-100px] w-[300px] h-[300px] rounded-full bg-purple-300/10 blur-3xl pointer-events-none" />
106
-
107
- <div className="relative max-w-4xl mx-auto text-center">
108
- <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full border border-purple-200/60 bg-purple-50/80 text-purple-600 text-xs font-semibold mb-8 backdrop-blur-sm">
109
- <span className="relative flex h-2 w-2">
110
- <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-purple-400 opacity-75"></span>
111
- <span className="relative inline-flex rounded-full h-2 w-2 bg-purple-500"></span>
112
- </span>
113
- Powered by Claude Enterprise — 99.9% uptime
114
- </div>
115
-
116
- <h1 className="text-5xl sm:text-6xl lg:text-7xl font-black text-[#111827] leading-[1.1] tracking-tight mb-6">
117
- Claude API.<br />
118
- <span className="bg-gradient-to-r from-[#5244F3] via-[#7C3AED] to-[#9B59B6] bg-clip-text text-transparent">
119
- Supercharged.
120
- </span>
121
- </h1>
122
-
123
- <p className="text-lg sm:text-xl text-[#6B7280] max-w-2xl mx-auto mb-10 leading-relaxed">
124
- Access Opus 4.6, Sonnet 4.6, and Haiku 4.5 through a single endpoint.
125
- Works with Claude Code, Cursor, Windsurf, and every Anthropic SDK — instantly.
126
- </p>
127
-
128
- <div className="flex flex-col sm:flex-row items-center justify-center gap-3 mb-16">
129
- <Link href="/docs">
130
- <button className="w-full sm:w-auto bg-[#5244F3] hover:bg-[#4338CA] text-white rounded-full px-8 py-3 text-base font-semibold shadow-lg shadow-purple-200 transition-all hover:shadow-xl hover:shadow-purple-300 flex items-center gap-2">
131
- Get Started
132
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
133
- </button>
134
- </Link>
135
- <Link href="/docs">
136
- <button className="w-full sm:w-auto bg-white hover:bg-gray-50 text-[#374151] border border-gray-200 rounded-full px-8 py-3 text-base font-semibold transition-all flex items-center gap-2">
137
- Read the Docs
138
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
139
- </button>
140
- </Link>
141
- </div>
142
-
143
- {/* Terminal Preview */}
144
- <div className="max-w-2xl mx-auto rounded-2xl border border-gray-200 bg-[#0d0d0d] overflow-hidden shadow-2xl shadow-gray-200/50 text-left">
145
- <div className="flex items-center gap-1.5 px-4 py-3 border-b border-white/[0.06] bg-[#161616]">
146
- <div className="w-3 h-3 rounded-full bg-red-500/60" />
147
- <div className="w-3 h-3 rounded-full bg-yellow-500/60" />
148
- <div className="w-3 h-3 rounded-full bg-green-500/60" />
149
- <span className="ml-3 text-xs text-white/25 font-mono">terminal</span>
150
- </div>
151
- <div className="p-6 font-mono text-sm leading-relaxed space-y-2">
152
- <div className="text-white/40"># One command to set up everything</div>
153
- <div className="text-orange-400">$ <span className="text-white/80">curl -fsSL https://claudmax.pro/setup.sh | bash</span></div>
154
- <div className="text-white/20 h-px bg-white/5 my-3" />
155
- <div className="text-purple-400">⚡ ClaudMax Setup Wizard</div>
156
- <div className="text-white/30"> ✓ Node.js v22 detected</div>
157
- <div className="text-white/30"> ✓ Git detected</div>
158
- <div className="text-white/30"> ✓ Claude CLI detected</div>
159
- <div className="text-white/30"> → Configure IDEs: Claude Code, Cursor, Windsurf...</div>
160
- <div className="text-emerald-400/80"> ✓ All systems configured successfully.</div>
161
- <div className="text-white/20 mt-3"># Ready. Start building.</div>
162
- <div className="text-orange-400">$ <span className="text-white/80">claude --model opus</span></div>
163
- </div>
164
- </div>
165
- </div>
166
- </section>
167
-
168
- {/* Supported Platforms Strip */}
169
- <section className="py-10 px-6 border-y border-gray-200 bg-white">
170
- <div className="max-w-6xl mx-auto">
171
- <p className="text-center text-[#9CA3AF] text-xs font-bold uppercase tracking-widest mb-6">Works with your favorite tools</p>
172
- <div className="flex flex-wrap items-center justify-center gap-3">
173
- {IDES.map((ide) => (
174
- <div key={ide.name} className={`flex items-center gap-2 px-4 py-2 rounded-xl border text-sm font-semibold ${ide.color}`}>
175
- <span className="text-base">{ide.icon}</span>
176
- {ide.name}
177
- </div>
178
- ))}
179
- </div>
180
- </div>
181
- </section>
182
-
183
- {/* Features */}
184
- <section className="py-24 px-6">
185
- <div className="max-w-6xl mx-auto">
186
- <div className="text-center mb-16">
187
- <p className="text-[#5244F3] text-sm font-bold uppercase tracking-widest mb-3">Everything you need</p>
188
- <h2 className="text-3xl sm:text-4xl font-black text-[#111827] tracking-tight">
189
- Built for developers, by developers
190
- </h2>
191
- </div>
192
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5">
193
- {FEATURES.map((f) => (
194
- <div key={f.title} className="group bg-white rounded-2xl border border-gray-200 p-6 hover:border-purple-200 hover:shadow-lg hover:shadow-purple-100/50 transition-all duration-200">
195
- <div className="w-11 h-11 rounded-xl bg-purple-50 border border-purple-100 flex items-center justify-center text-[#5244F3] mb-4 group-hover:bg-[#5244F3] group-hover:text-white group-hover:border-transparent transition-all">
196
- {f.icon}
197
- </div>
198
- <h3 className="text-[#111827] font-bold text-base mb-2">{f.title}</h3>
199
- <p className="text-[#9CA3AF] text-sm leading-relaxed">{f.desc}</p>
200
- </div>
201
- ))}
202
- </div>
203
- </div>
204
- </section>
205
-
206
- {/* Quick Start */}
207
- <section className="py-24 px-6">
208
- <div className="max-w-4xl mx-auto">
209
- <div className="text-center mb-16">
210
- <p className="text-[#5244F3] text-sm font-bold uppercase tracking-widest mb-3">Quick Setup</p>
211
- <h2 className="text-3xl sm:text-4xl font-black text-[#111827] tracking-tight mb-4">
212
- Up and running in 60 seconds
213
- </h2>
214
- </div>
215
- <div className="space-y-4">
216
- {[
217
- {
218
- num: '01',
219
- title: 'Install ClaudMax CLI',
220
- desc: 'One command installs the CLI and all system dependencies (Node.js, Git, Claude CLI).',
221
- code: 'curl -fsSL https://claudmax.pro/setup.sh | bash',
222
- },
223
- {
224
- num: '02',
225
- title: 'Configure your API key',
226
- desc: 'Run the setup wizard, enter your API key, and choose which IDEs to configure.',
227
- code: 'npx claudmax',
228
- },
229
- {
230
- num: '03',
231
- title: 'Start building',
232
- desc: 'Claude Code, Python, Node.js — everything works out of the box.',
233
- code: 'claude --model opus',
234
- },
235
- ].map((step) => (
236
- <div key={step.num} className="flex gap-5 bg-white rounded-2xl border border-gray-200 p-6 hover:border-purple-200 transition-all">
237
- <div className="shrink-0 w-12 h-12 rounded-xl bg-[#5244F3]/5 border border-[#5244F3]/20 flex items-center justify-center text-[#5244F3] font-black text-lg">
238
- {step.num}
239
- </div>
240
- <div className="flex-1 pt-1">
241
- <h3 className="text-[#111827] font-bold text-base mb-1">{step.title}</h3>
242
- <p className="text-[#9CA3AF] text-sm mb-4">{step.desc}</p>
243
- <div className="bg-[#F9FAFB] rounded-xl border border-gray-200 px-4 py-3 font-mono text-sm text-[#5244F3] overflow-x-auto">
244
- {step.code}
245
- </div>
246
- </div>
247
- </div>
248
- ))}
249
- </div>
250
- </div>
251
- </section>
252
-
253
- <Footer />
254
- </div>
255
- );
256
- }