auramaxx 1.0.0-alpha.4

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 (363) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +112 -0
  3. package/bin/aurawallet.js +121 -0
  4. package/docs/ADAPTERS.md +467 -0
  5. package/docs/API.md +2679 -0
  6. package/docs/APPS.md +198 -0
  7. package/docs/ARCHITECTURE.md +350 -0
  8. package/docs/AUTH.md +698 -0
  9. package/docs/BEST-PRACTICES.md +121 -0
  10. package/docs/CLI.md +61 -0
  11. package/docs/DEVELOPING-APPS.md +452 -0
  12. package/docs/EXTENSION.md +97 -0
  13. package/docs/JOBS.md +33 -0
  14. package/docs/MCP.md +76 -0
  15. package/docs/PROTOCOL.md +142 -0
  16. package/docs/SETUP.md +219 -0
  17. package/docs/WORKSPACE.md +672 -0
  18. package/docs/agent-auth.md +63 -0
  19. package/docs/aura-file.md +48 -0
  20. package/docs/credentials.md +53 -0
  21. package/docs/external/getting-started.md +65 -0
  22. package/docs/external/overview.md +45 -0
  23. package/docs/external/use-cases.md +48 -0
  24. package/docs/external/why-aura.md +35 -0
  25. package/docs/jobs/connect-agent.md +77 -0
  26. package/docs/jobs/migrate-from-dotenv.md +79 -0
  27. package/docs/jobs/recover-from-lockout.md +72 -0
  28. package/docs/jobs/secure-ci.md +63 -0
  29. package/docs/oauth2.md +42 -0
  30. package/docs/passkeys.md +60 -0
  31. package/docs/security.md +540 -0
  32. package/docs/specs/aura-open-protocol.md +61 -0
  33. package/docs/specs/aura-provider-plugin.md +24 -0
  34. package/docs/specs/aura-registry-model.md +31 -0
  35. package/docs/specs/fixtures/invalid-bad-key.aura +1 -0
  36. package/docs/specs/fixtures/invalid-bad-unicode-escape.aura +1 -0
  37. package/docs/specs/fixtures/invalid-duplicate-key.aura +2 -0
  38. package/docs/specs/fixtures/valid-basic.aura +4 -0
  39. package/docs/specs/fixtures/valid-provider-ref.aura +1 -0
  40. package/docs/specs/fixtures/valid-quoted-escapes.aura +2 -0
  41. package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
  42. package/docs/totp.md +40 -0
  43. package/docs/wallet/AI.md +508 -0
  44. package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
  45. package/docs/wallet/README.md +47 -0
  46. package/docs/wallet/STRATEGY.md +89 -0
  47. package/next.config.ts +21 -0
  48. package/package.json +151 -0
  49. package/postcss.config.mjs +8 -0
  50. package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
  51. package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
  52. package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
  53. package/prisma/migrations/migration_lock.toml +3 -0
  54. package/prisma/schema.prisma +447 -0
  55. package/public/logo-chevron.svg +31 -0
  56. package/public/logo-concentric.svg +31 -0
  57. package/public/logo-crosshatch.svg +39 -0
  58. package/public/logo-dashed.svg +39 -0
  59. package/public/logo-horizontal.svg +31 -0
  60. package/public/logo-m56.svg +64 -0
  61. package/public/logo.webp +0 -0
  62. package/scripts/add-app.js +245 -0
  63. package/scripts/init.sh +57 -0
  64. package/scripts/migrate-apikeys-to-credentials.ts +35 -0
  65. package/scripts/sandbox-agent-flow.sh +235 -0
  66. package/scripts/sandbox.sh +175 -0
  67. package/scripts/validate-job-docs.mjs +125 -0
  68. package/server/abi/SwapHelper.json +438 -0
  69. package/server/cli/approval.ts +447 -0
  70. package/server/cli/commands/app.ts +204 -0
  71. package/server/cli/commands/cron.ts +24 -0
  72. package/server/cli/commands/doctor.ts +1007 -0
  73. package/server/cli/commands/env.ts +456 -0
  74. package/server/cli/commands/init.ts +752 -0
  75. package/server/cli/commands/mcp.ts +125 -0
  76. package/server/cli/commands/restore.ts +314 -0
  77. package/server/cli/commands/shell-hook.ts +468 -0
  78. package/server/cli/commands/start.ts +62 -0
  79. package/server/cli/commands/status.ts +59 -0
  80. package/server/cli/commands/stop.ts +14 -0
  81. package/server/cli/commands/token.ts +180 -0
  82. package/server/cli/commands/unlock.ts +49 -0
  83. package/server/cli/commands/vault.ts +417 -0
  84. package/server/cli/index.ts +328 -0
  85. package/server/cli/lib/aura-parser.ts +64 -0
  86. package/server/cli/lib/credential-create.ts +74 -0
  87. package/server/cli/lib/credential-resolve.ts +254 -0
  88. package/server/cli/lib/dotenv-migrate.ts +116 -0
  89. package/server/cli/lib/dotenv-parser.ts +146 -0
  90. package/server/cli/lib/http.ts +91 -0
  91. package/server/cli/lib/init-steps.ts +76 -0
  92. package/server/cli/lib/local-agent-trust.ts +45 -0
  93. package/server/cli/lib/process.ts +136 -0
  94. package/server/cli/lib/prompt.ts +85 -0
  95. package/server/cli/lib/theme.ts +240 -0
  96. package/server/cli/socket.ts +570 -0
  97. package/server/cli/transport-client.ts +50 -0
  98. package/server/cron/index.ts +137 -0
  99. package/server/cron/job.ts +31 -0
  100. package/server/cron/jobs/balance-sync.ts +436 -0
  101. package/server/cron/jobs/incoming-scan.ts +506 -0
  102. package/server/cron/jobs/native-price.ts +70 -0
  103. package/server/cron/jobs/orphan-cleanup.ts +40 -0
  104. package/server/cron/jobs/strategy-runner.ts +175 -0
  105. package/server/cron/scheduler.ts +125 -0
  106. package/server/index.ts +406 -0
  107. package/server/lib/adapters/factory.ts +110 -0
  108. package/server/lib/adapters/index.ts +19 -0
  109. package/server/lib/adapters/router.ts +297 -0
  110. package/server/lib/adapters/telegram.ts +645 -0
  111. package/server/lib/adapters/types.ts +89 -0
  112. package/server/lib/adapters/webhook.ts +95 -0
  113. package/server/lib/address.ts +49 -0
  114. package/server/lib/agent-auth/contracts.ts +1194 -0
  115. package/server/lib/agent-profiles.ts +328 -0
  116. package/server/lib/ai.ts +285 -0
  117. package/server/lib/api-registry/contracts.ts +86 -0
  118. package/server/lib/api-registry/validation.ts +172 -0
  119. package/server/lib/apikey-migration.ts +189 -0
  120. package/server/lib/app-installer.ts +505 -0
  121. package/server/lib/app-tokens.ts +247 -0
  122. package/server/lib/auth.ts +314 -0
  123. package/server/lib/batch.ts +242 -0
  124. package/server/lib/cold.ts +874 -0
  125. package/server/lib/config.ts +381 -0
  126. package/server/lib/credential-access-audit.ts +85 -0
  127. package/server/lib/credential-access-policy.ts +110 -0
  128. package/server/lib/credential-health.ts +343 -0
  129. package/server/lib/credential-import.ts +487 -0
  130. package/server/lib/credential-scope.ts +87 -0
  131. package/server/lib/credential-shares.ts +190 -0
  132. package/server/lib/credential-transport.ts +342 -0
  133. package/server/lib/credential-vault.ts +77 -0
  134. package/server/lib/credentials.ts +333 -0
  135. package/server/lib/crypto.ts +8 -0
  136. package/server/lib/db.ts +15 -0
  137. package/server/lib/defaults.ts +366 -0
  138. package/server/lib/dex/index.ts +80 -0
  139. package/server/lib/dex/relay.ts +235 -0
  140. package/server/lib/dex/types.ts +59 -0
  141. package/server/lib/dex/uniswap.ts +370 -0
  142. package/server/lib/e2e-agent/artifacts.ts +36 -0
  143. package/server/lib/e2e-agent/contracts.ts +112 -0
  144. package/server/lib/e2e-agent/validation.ts +135 -0
  145. package/server/lib/encrypt.ts +128 -0
  146. package/server/lib/error.ts +20 -0
  147. package/server/lib/events.ts +205 -0
  148. package/server/lib/hot.ts +357 -0
  149. package/server/lib/key-fingerprint.ts +28 -0
  150. package/server/lib/logger.ts +331 -0
  151. package/server/lib/network.ts +137 -0
  152. package/server/lib/notifications.ts +219 -0
  153. package/server/lib/oauth2-refresh.ts +241 -0
  154. package/server/lib/oursecret.ts +54 -0
  155. package/server/lib/passkey-credential.ts +360 -0
  156. package/server/lib/passkey.ts +68 -0
  157. package/server/lib/permissions.ts +248 -0
  158. package/server/lib/pino.ts +24 -0
  159. package/server/lib/policy-preview.ts +138 -0
  160. package/server/lib/price.ts +338 -0
  161. package/server/lib/prices.ts +34 -0
  162. package/server/lib/project-scope.ts +239 -0
  163. package/server/lib/resolve-action.ts +427 -0
  164. package/server/lib/resolve.ts +36 -0
  165. package/server/lib/sessions.ts +632 -0
  166. package/server/lib/solana/connection.ts +26 -0
  167. package/server/lib/solana/jupiter.ts +128 -0
  168. package/server/lib/solana/transfer.ts +108 -0
  169. package/server/lib/solana/wallet.ts +136 -0
  170. package/server/lib/strategy/emits.ts +21 -0
  171. package/server/lib/strategy/engine.ts +1305 -0
  172. package/server/lib/strategy/executor.ts +115 -0
  173. package/server/lib/strategy/hook-context.ts +158 -0
  174. package/server/lib/strategy/hooks.ts +990 -0
  175. package/server/lib/strategy/index.ts +28 -0
  176. package/server/lib/strategy/installer.ts +305 -0
  177. package/server/lib/strategy/loader.ts +256 -0
  178. package/server/lib/strategy/message.ts +235 -0
  179. package/server/lib/strategy/repository.ts +218 -0
  180. package/server/lib/strategy/session-logger.ts +693 -0
  181. package/server/lib/strategy/sources.ts +288 -0
  182. package/server/lib/strategy/state.ts +189 -0
  183. package/server/lib/strategy/templates.ts +403 -0
  184. package/server/lib/strategy/tick.ts +404 -0
  185. package/server/lib/strategy/types.ts +230 -0
  186. package/server/lib/swap.ts +3 -0
  187. package/server/lib/temp.ts +86 -0
  188. package/server/lib/token-metadata.ts +86 -0
  189. package/server/lib/token-safety.ts +200 -0
  190. package/server/lib/token-search.ts +444 -0
  191. package/server/lib/totp.ts +194 -0
  192. package/server/lib/transactions.ts +123 -0
  193. package/server/lib/transport.ts +75 -0
  194. package/server/lib/txhistory/decoder.ts +262 -0
  195. package/server/lib/txhistory/enricher.ts +652 -0
  196. package/server/lib/txhistory/index.ts +391 -0
  197. package/server/lib/txhistory/signatures.ts +59 -0
  198. package/server/lib/verified-summary.ts +421 -0
  199. package/server/mcp/profile-policy.ts +30 -0
  200. package/server/mcp/server.ts +619 -0
  201. package/server/mcp/tools.ts +523 -0
  202. package/server/middleware/auth.ts +119 -0
  203. package/server/middleware/requestLogger.ts +84 -0
  204. package/server/routes/actions.ts +459 -0
  205. package/server/routes/adapters.ts +703 -0
  206. package/server/routes/addressbook.ts +113 -0
  207. package/server/routes/ai.ts +34 -0
  208. package/server/routes/apikeys.ts +295 -0
  209. package/server/routes/apps.ts +601 -0
  210. package/server/routes/auth.ts +457 -0
  211. package/server/routes/backup.ts +340 -0
  212. package/server/routes/batch.ts +270 -0
  213. package/server/routes/bookmarks.ts +162 -0
  214. package/server/routes/credential-shares.ts +198 -0
  215. package/server/routes/credential-vaults.ts +154 -0
  216. package/server/routes/credentials.ts +1290 -0
  217. package/server/routes/dashboard.ts +71 -0
  218. package/server/routes/defaults.ts +124 -0
  219. package/server/routes/fund.ts +229 -0
  220. package/server/routes/import.ts +352 -0
  221. package/server/routes/launch.ts +665 -0
  222. package/server/routes/lock.ts +54 -0
  223. package/server/routes/logs.ts +68 -0
  224. package/server/routes/nuke.ts +111 -0
  225. package/server/routes/passkey-credentials.ts +99 -0
  226. package/server/routes/passkey.ts +346 -0
  227. package/server/routes/portfolio.ts +217 -0
  228. package/server/routes/price.ts +63 -0
  229. package/server/routes/resolve.ts +31 -0
  230. package/server/routes/security.ts +45 -0
  231. package/server/routes/send-evm.ts +241 -0
  232. package/server/routes/send-solana.ts +281 -0
  233. package/server/routes/send.ts +178 -0
  234. package/server/routes/setup.ts +210 -0
  235. package/server/routes/strategy.ts +894 -0
  236. package/server/routes/swap-evm.ts +353 -0
  237. package/server/routes/swap-solana.ts +177 -0
  238. package/server/routes/swap.ts +356 -0
  239. package/server/routes/token.ts +247 -0
  240. package/server/routes/unlock.ts +403 -0
  241. package/server/routes/wallet-assets.ts +361 -0
  242. package/server/routes/wallet-transactions.ts +515 -0
  243. package/server/routes/wallet.ts +710 -0
  244. package/server/types.ts +146 -0
  245. package/skills/aurawallet/SKILL.md +739 -0
  246. package/skills/aurawallet-setup/SKILL.md +74 -0
  247. package/skills/security-review/SKILL.md +148 -0
  248. package/src/app/api/agent-requests/route.ts +30 -0
  249. package/src/app/api/apps/install/route.ts +126 -0
  250. package/src/app/api/apps/manifests/route.ts +16 -0
  251. package/src/app/api/apps/static/[...path]/route.ts +57 -0
  252. package/src/app/api/events/route.ts +92 -0
  253. package/src/app/api/page.tsx +212 -0
  254. package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
  255. package/src/app/api/workspace/[id]/apps/route.ts +81 -0
  256. package/src/app/api/workspace/[id]/export/route.ts +67 -0
  257. package/src/app/api/workspace/[id]/route.ts +168 -0
  258. package/src/app/api/workspace/auth.ts +34 -0
  259. package/src/app/api/workspace/config/route.ts +106 -0
  260. package/src/app/api/workspace/import/route.ts +127 -0
  261. package/src/app/api/workspace/route.ts +116 -0
  262. package/src/app/app/page.tsx +2122 -0
  263. package/src/app/apple-icon.png +0 -0
  264. package/src/app/docs/page.tsx +178 -0
  265. package/src/app/favicon.ico +0 -0
  266. package/src/app/globals.css +572 -0
  267. package/src/app/health/page.tsx +5 -0
  268. package/src/app/hello/page.tsx +15 -0
  269. package/src/app/icon.png +0 -0
  270. package/src/app/layout.tsx +34 -0
  271. package/src/app/page.tsx +986 -0
  272. package/src/app/providers.tsx +90 -0
  273. package/src/app/share/[token]/page.tsx +295 -0
  274. package/src/components/ChainSelector.tsx +144 -0
  275. package/src/components/HumanActionBar.tsx +695 -0
  276. package/src/components/NotificationDrawer.tsx +129 -0
  277. package/src/components/apps/AgentKeysApp.tsx +490 -0
  278. package/src/components/apps/App.tsx +153 -0
  279. package/src/components/apps/AppGrid.tsx +15 -0
  280. package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
  281. package/src/components/apps/DraggableApp.tsx +562 -0
  282. package/src/components/apps/IFrameApp.tsx +73 -0
  283. package/src/components/apps/LogsApp.tsx +360 -0
  284. package/src/components/apps/SendApp.tsx +394 -0
  285. package/src/components/apps/SetupWizardApp.tsx +1004 -0
  286. package/src/components/apps/SystemDefaultsApp.tsx +845 -0
  287. package/src/components/apps/ThirdPartyApp.tsx +428 -0
  288. package/src/components/apps/TokenApp.tsx +319 -0
  289. package/src/components/apps/TransactionsApp.tsx +438 -0
  290. package/src/components/apps/WalletDetailApp.tsx +1505 -0
  291. package/src/components/apps/index.ts +13 -0
  292. package/src/components/design-system/Button.tsx +53 -0
  293. package/src/components/design-system/ChainIndicator.tsx +65 -0
  294. package/src/components/design-system/ChainSelector.tsx +137 -0
  295. package/src/components/design-system/ConfirmationModal.tsx +106 -0
  296. package/src/components/design-system/ConfirmationPopover.tsx +81 -0
  297. package/src/components/design-system/Drawer.tsx +123 -0
  298. package/src/components/design-system/FilterDropdown.tsx +72 -0
  299. package/src/components/design-system/Modal.tsx +206 -0
  300. package/src/components/design-system/Popover.tsx +142 -0
  301. package/src/components/design-system/TextInput.tsx +85 -0
  302. package/src/components/design-system/Toggle.tsx +58 -0
  303. package/src/components/design-system/index.ts +11 -0
  304. package/src/components/docs/DocsThemeToggle.tsx +49 -0
  305. package/src/components/health/CredentialHealthDashboard.tsx +214 -0
  306. package/src/components/icons/ChainIcons.tsx +72 -0
  307. package/src/components/layout/AppStoreDrawer.tsx +369 -0
  308. package/src/components/layout/ContentArea.tsx +21 -0
  309. package/src/components/layout/TabBar.tsx +278 -0
  310. package/src/components/layout/WalletSidebar.tsx +1033 -0
  311. package/src/components/layout/index.ts +4 -0
  312. package/src/components/marketing/AuraWalletSpecOverlay.tsx +635 -0
  313. package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
  314. package/src/components/vault/ApiKeysConsole.tsx +1080 -0
  315. package/src/components/vault/AuditConsole.tsx +584 -0
  316. package/src/components/vault/CredentialDetail.tsx +455 -0
  317. package/src/components/vault/CredentialEmpty.tsx +55 -0
  318. package/src/components/vault/CredentialField.tsx +361 -0
  319. package/src/components/vault/CredentialForm.tsx +1212 -0
  320. package/src/components/vault/CredentialList.tsx +165 -0
  321. package/src/components/vault/CredentialRow.tsx +97 -0
  322. package/src/components/vault/CredentialShareModal.tsx +178 -0
  323. package/src/components/vault/CredentialVault.tsx +754 -0
  324. package/src/components/vault/CredentialWalletWidget.tsx +103 -0
  325. package/src/components/vault/ImportCredentialsModal.tsx +515 -0
  326. package/src/components/vault/LargeTypeModal.tsx +64 -0
  327. package/src/components/vault/PasswordGenerator.tsx +224 -0
  328. package/src/components/vault/TOTPDisplay.tsx +123 -0
  329. package/src/components/vault/VaultSidebar.tsx +413 -0
  330. package/src/components/vault/types.ts +54 -0
  331. package/src/context/AuthContext.tsx +337 -0
  332. package/src/context/PriceContext.tsx +113 -0
  333. package/src/context/ThemeContext.tsx +164 -0
  334. package/src/context/WebSocketContext.tsx +269 -0
  335. package/src/context/WorkspaceContext.tsx +668 -0
  336. package/src/hooks/index.ts +3 -0
  337. package/src/hooks/useAgentActions.ts +368 -0
  338. package/src/hooks/useBalance.ts +103 -0
  339. package/src/hooks/useBalances.ts +129 -0
  340. package/src/instrumentation.ts +12 -0
  341. package/src/lib/api.ts +449 -0
  342. package/src/lib/app-loader.ts +148 -0
  343. package/src/lib/app-registry.ts +178 -0
  344. package/src/lib/app-sdk.ts +157 -0
  345. package/src/lib/audit-console-adapter.ts +151 -0
  346. package/src/lib/auth-client.ts +75 -0
  347. package/src/lib/config.ts +74 -0
  348. package/src/lib/crypto.ts +112 -0
  349. package/src/lib/db.ts +21 -0
  350. package/src/lib/docs.ts +390 -0
  351. package/src/lib/events.ts +361 -0
  352. package/src/lib/pino.ts +24 -0
  353. package/src/lib/theme-handlers.ts +168 -0
  354. package/src/lib/theme.ts +351 -0
  355. package/src/lib/tokenData.ts +378 -0
  356. package/src/lib/vault-crypto.ts +129 -0
  357. package/src/lib/websocket-server.ts +302 -0
  358. package/src/lib/websocket-setup.ts +79 -0
  359. package/src/lib/wordlist.ts +2050 -0
  360. package/src/lib/workspace-handlers.ts +285 -0
  361. package/start.sh +80 -0
  362. package/tailwind.config.ts +99 -0
  363. package/tsconfig.json +42 -0
@@ -0,0 +1,4 @@
1
+ export { WalletSidebar } from './WalletSidebar';
2
+ export { TabBar, type WorkspaceTab } from './TabBar';
3
+ export { ContentArea } from './ContentArea';
4
+ export { AppStoreDrawer } from './AppStoreDrawer';
@@ -0,0 +1,635 @@
1
+ /*
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ LANDING PAGE REWRITE — CONTENT BLUEPRINT ║
4
+ * ║ Date: 2025-02-15 | Source: team audit of docs, todos, page copy ║
5
+ * ╚══════════════════════════════════════════════════════════════════════╝
6
+ *
7
+ * DIAGNOSIS
8
+ * ─────────
9
+ * Current page starts at Level 2 (wallet tiers, multi-chain, memory-only auth)
10
+ * and assumes the visitor already knows what "agent wallets" means.
11
+ * It's impressive but alienating. The mecha/spec-sheet aesthetic is strong —
12
+ * keep the visual language, rewrite the content progression.
13
+ *
14
+ * CORE MESSAGE (one sentence)
15
+ * ───────────────────────────
16
+ * "Your AI agent can move money — and you stay in control."
17
+ *
18
+ * That's it. Everything else is detail.
19
+ *
20
+ *
21
+ * ═══════════════════════════════════════════════════════════════════════
22
+ * REWRITE: SIMPLE → COMPLEX PROGRESSION
23
+ * ═══════════════════════════════════════════════════════════════════════
24
+ *
25
+ *
26
+ * ── SECTION 01: HERO (5 seconds) ─────────────────────────────────────
27
+ *
28
+ * What someone should understand before they even scroll:
29
+ *
30
+ * Headline:
31
+ * "YOUR AGENT CAN MOVE MONEY NOW."
32
+ *
33
+ * Subline:
34
+ * "You approve every transaction. From anywhere."
35
+ *
36
+ * CTA:
37
+ * [ GET STARTED ] [ SEE HOW IT WORKS ↓ ]
38
+ *
39
+ * That's the entire hero. No jargon. No "multi-tier crypto wallet
40
+ * with agent token system." A person with zero context reads this
41
+ * and understands: my AI can handle money, I'm still in charge.
42
+ *
43
+ *
44
+ * ── SECTION 02: HOW IT WORKS (30 seconds) ────────────────────────────
45
+ *
46
+ * Three steps. Visual. Replaces the "fragmentation problem" section
47
+ * (which assumes the visitor has *already tried* other solutions).
48
+ *
49
+ * ┌─────────────────────────────────────────────────────┐
50
+ * │ 1. AGENT PROPOSES "Swap 100 USDC → ETH" │
51
+ * │ 2. YOU APPROVE Tap once — phone, laptop, │
52
+ * │ terminal, Telegram, anywhere │
53
+ * │ 3. IT HAPPENS Transaction executes. │
54
+ * │ Spending limit decremented. │
55
+ * └─────────────────────────────────────────────────────┘
56
+ *
57
+ * This is the "aha" moment. Show the DeviceMorph here — the morphing
58
+ * device visual *now has context* because the visitor understands
59
+ * what "approve from anywhere" means.
60
+ *
61
+ *
62
+ * ── SECTION 03: WHY IT'S SAFE (2 minutes) ────────────────────────────
63
+ *
64
+ * Now we earn trust. Three guarantees, each one sentence:
65
+ *
66
+ * "KEYS NEVER LEAVE YOUR MACHINE."
67
+ * Local-first. No cloud. Your keys, your hardware.
68
+ *
69
+ * "SPENDING LIMITS ARE ENFORCED IN MEMORY."
70
+ * Not in a database. Not in a config file. In volatile RAM.
71
+ * Server restart = every token revoked instantly.
72
+ *
73
+ * "NOTHING MOVES WITHOUT YOUR APPROVAL."
74
+ * Agents propose. You approve. Cold wallets are human-only.
75
+ * Hot wallets have per-token caps. Temp wallets auto-sweep.
76
+ *
77
+ * This is where the current security Q&A cards live — but promoted
78
+ * to a full section instead of hidden scroll-reveals. The memory-only
79
+ * auth model is the moat. Lead with it.
80
+ *
81
+ *
82
+ * ── SECTION 04: WHAT IT DOES (2 minutes) ─────────────────────────────
83
+ *
84
+ * Now the spec sheet. For people who stayed this long, give them
85
+ * everything. This is where the mecha cards shine:
86
+ *
87
+ * WALLET TIERS
88
+ * Cold — human-only, password-protected, source of funds
89
+ * Hot — agent-accessible, spending limits, token-gated
90
+ * Temp — ephemeral, full agent control, auto-sweep back
91
+ *
92
+ * OPERATIONS
93
+ * send / swap / fund / launch / wallet-create / approvals
94
+ *
95
+ * CHAINS
96
+ * Base · Ethereum · Solana — one backend, one permission model
97
+ *
98
+ * INTERFACES
99
+ * Dashboard · Terminal · Telegram · MCP · Claude Code
100
+ * Same wallet. Same limits. Everywhere.
101
+ *
102
+ *
103
+ * ── SECTION 05: GET STARTED (30 seconds) ─────────────────────────────
104
+ *
105
+ * Code block. Copy-paste. Done.
106
+ *
107
+ * npx aurawallet init
108
+ * npx aurawallet start
109
+ *
110
+ * Then three paths:
111
+ * → "I'm a developer" → /docs
112
+ * → "I'm an AI agent" → /api
113
+ * → "Show me the app" → /app
114
+ *
115
+ *
116
+ * ── SECTION 06: CLOSING (5 seconds) ──────────────────────────────────
117
+ *
118
+ * Keep the current vision statement — it's good:
119
+ *
120
+ * "AI MAKES AGENTS POWERFUL. WE MAKE THEM SAFE."
121
+ *
122
+ * Add: "Open source. MIT licensed. Built for agents."
123
+ *
124
+ *
125
+ * ═══════════════════════════════════════════════════════════════════════
126
+ * DESIGN NOTES
127
+ * ═══════════════════════════════════════════════════════════════════════
128
+ *
129
+ * KEEP:
130
+ * - Mecha/industrial aesthetic (crop marks, clip-paths, hazard stripes)
131
+ * - Tyvek texture background, voltage yellow, void black palette
132
+ * - Ghost numbers (01, 02, 03...) as structural anchors
133
+ * - ManifestSection sidebar labels
134
+ * - ScrollReveal animations
135
+ * - DeviceMorphExperience component (move to Section 02)
136
+ *
137
+ * CHANGE:
138
+ * - Hero: strip to one headline + one subline + two CTAs
139
+ * - Move "how it works" before "why it's safe" before "what it does"
140
+ * - Promote security from scroll-reveal cards to full section
141
+ * - Add quickstart code block as its own section
142
+ * - Add CTA buttons to hero (currently first CTA is in Section 04)
143
+ * - Footer: add "Open source · MIT licensed" + GitHub link
144
+ *
145
+ * CUT:
146
+ * - "THE FRAGMENTATION PROBLEM" card (Section 02)
147
+ * → The visitor hasn't experienced fragmentation yet.
148
+ * Replace with the 3-step "how it works" which is universally
149
+ * understandable. The fragmentation argument can live in /docs.
150
+ * - "EVERY INTERFACE IS AN ISLAND" pull quote
151
+ * → Assumes prior pain. The device morph already shows
152
+ * multi-interface support visually.
153
+ *
154
+ *
155
+ * ═══════════════════════════════════════════════════════════════════════
156
+ * COPY REFERENCE — FINAL HEADLINES
157
+ * ═══════════════════════════════════════════════════════════════════════
158
+ *
159
+ * Section 01: YOUR AGENT CAN MOVE MONEY NOW.
160
+ * Section 02: THREE STEPS. THAT'S IT.
161
+ * Section 03: KEYS NEVER LEAVE YOUR MACHINE.
162
+ * Section 04: SEND. SWAP. LAUNCH. TRACK.
163
+ * Section 05: TWO COMMANDS. YOU'RE LIVE.
164
+ * Section 06: AI MAKES AGENTS POWERFUL. WE MAKE THEM SAFE.
165
+ *
166
+ * ═══════════════════════════════════════════════════════════════════════
167
+ */
168
+
169
+ 'use client';
170
+
171
+ import React, { useEffect, useRef, useState } from 'react';
172
+ import Link from 'next/link';
173
+
174
+ /* ─── Inline Sub-Components ──────────────────────────────────────────── */
175
+
176
+ const CropMark = ({ className }: { className?: string }) => (
177
+ <div className={`absolute w-8 h-8 border-voltage/50 pointer-events-none ${className}`} />
178
+ );
179
+
180
+ const ManifestSection: React.FC<{
181
+ children: React.ReactNode;
182
+ className?: string;
183
+ label?: string;
184
+ }> = ({ children, className = '', label }) => (
185
+ <section
186
+ className={`relative min-h-screen w-full flex flex-col justify-center border-b border-ink px-4 md:px-12 pointer-events-none ${className}`}
187
+ >
188
+ {/* Sidebar label rail */}
189
+ <div className="absolute left-0 top-0 bottom-0 w-12 border-r border-ink hidden md:flex flex-col items-center justify-between py-8 bg-tyvek-dim/50 backdrop-blur-sm z-20">
190
+ <div className="text-[10px] font-mono rotate-180 text-vertical text-ink/50 tracking-widest">
191
+ {label || 'UNLABELED_SEC'}
192
+ </div>
193
+ <div className="w-px h-12 bg-voltage" />
194
+ </div>
195
+ <div className="pointer-events-auto relative z-10 w-full h-full flex flex-col justify-center pl-0 md:pl-12">
196
+ {children}
197
+ </div>
198
+ </section>
199
+ );
200
+
201
+ const MechaCard: React.FC<{
202
+ children: React.ReactNode;
203
+ className?: string;
204
+ dark?: boolean;
205
+ allowOverflow?: boolean;
206
+ }> = ({ children, className = '', dark = false, allowOverflow = false }) => (
207
+ <div
208
+ className={`relative clip-mech-modal border-mech ${dark ? 'bg-void text-tyvek' : 'bg-tyvek text-ink'} ${allowOverflow ? '' : 'overflow-hidden'} ${className}`}
209
+ >
210
+ <div
211
+ className={`absolute top-0 right-0 w-8 h-8 ${dark ? 'bg-voltage' : 'bg-ink'}`}
212
+ style={{ clipPath: 'polygon(100% 0, 0 0, 100% 100%)' }}
213
+ />
214
+ <div className="absolute inset-0 bg-grid-pattern opacity-5 pointer-events-none" />
215
+ {children}
216
+ </div>
217
+ );
218
+
219
+ const MechaButton: React.FC<{
220
+ children: React.ReactNode;
221
+ href?: string;
222
+ variant?: 'primary' | 'secondary';
223
+ className?: string;
224
+ }> = ({ children, href, variant = 'primary', className = '' }) => {
225
+ const isPrimary = variant === 'primary';
226
+ const classes = `relative h-14 px-8 font-mono font-bold text-sm uppercase tracking-wider flex items-center justify-center gap-3 clip-mech-header border-mech transition-all duration-200 group ${isPrimary ? 'bg-voltage text-void hover:bg-void hover:text-voltage' : 'bg-void text-tyvek hover:bg-tyvek hover:text-void border border-concrete'} ${className}`;
227
+
228
+ const inner = (
229
+ <>
230
+ <div className={`absolute left-0 top-0 w-1 h-full ${isPrimary ? 'bg-void' : 'bg-voltage'}`} />
231
+ {children}
232
+ <div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none" />
233
+ </>
234
+ );
235
+
236
+ if (href) {
237
+ return (
238
+ <Link href={href} className={classes}>
239
+ {inner}
240
+ </Link>
241
+ );
242
+ }
243
+ return <button className={classes}>{inner}</button>;
244
+ };
245
+
246
+ /** IntersectionObserver-based scroll reveal (replaces framer-motion whileInView) */
247
+ const ScrollReveal: React.FC<{
248
+ children: React.ReactNode;
249
+ className?: string;
250
+ delay?: number;
251
+ }> = ({ children, className = '', delay = 0 }) => {
252
+ const ref = useRef<HTMLDivElement>(null);
253
+ const [visible, setVisible] = useState(false);
254
+
255
+ useEffect(() => {
256
+ const el = ref.current;
257
+ if (!el) return;
258
+ const observer = new IntersectionObserver(
259
+ ([entry]) => {
260
+ if (entry.isIntersecting) {
261
+ setVisible(true);
262
+ observer.disconnect();
263
+ }
264
+ },
265
+ { threshold: 0.15 }
266
+ );
267
+ observer.observe(el);
268
+ return () => observer.disconnect();
269
+ }, []);
270
+
271
+ return (
272
+ <div
273
+ ref={ref}
274
+ className={className}
275
+ style={{
276
+ opacity: visible ? 1 : 0,
277
+ transform: visible ? 'translateY(0)' : 'translateY(24px)',
278
+ transition: `opacity 0.6s cubic-bezier(0.16,1,0.3,1) ${delay}ms, transform 0.6s cubic-bezier(0.16,1,0.3,1) ${delay}ms`,
279
+ }}
280
+ >
281
+ {children}
282
+ </div>
283
+ );
284
+ };
285
+
286
+ /* ─── Main Component ─────────────────────────────────────────────────── */
287
+
288
+ export const AuraWalletSpecOverlay = () => {
289
+ return (
290
+ <main className="relative z-[10] w-full text-ink font-sans selection:bg-voltage selection:text-void">
291
+
292
+ {/* ── FIXED HUD HEADER ─────────────────────────────────────── */}
293
+ <header className="fixed top-0 left-0 w-full z-50 pointer-events-none mix-blend-difference text-white p-4 md:p-6 flex justify-between items-start">
294
+ <div className="flex items-center gap-3">
295
+ <img src="/logo.webp" alt="AuraWallet" className="w-10 h-10 md:w-14 md:h-14 invert" />
296
+ <div>
297
+ <h1 className="text-2xl md:text-4xl font-black tracking-tighter leading-[0.9]">
298
+ AURAWALLET
299
+ </h1>
300
+ <div className="mt-0.5 text-[9px] font-mono tracking-widest opacity-70">
301
+ AGENT WALLET INFRASTRUCTURE
302
+ </div>
303
+ </div>
304
+ </div>
305
+ <div className="text-right font-mono text-xs">
306
+ <div className="flex items-center gap-2 justify-end mb-1">
307
+ <div className="w-2 h-2 bg-voltage rounded-full animate-pulse shadow-[0_0_8px_#ccff00]" />
308
+ <span className="hidden md:inline">SYSTEM: READY</span>
309
+ </div>
310
+ <nav className="flex gap-3 pointer-events-auto">
311
+ <Link href="/docs" className="text-[10px] tracking-widest hover:text-voltage transition-colors">DOCS</Link>
312
+ <Link href="/api" className="text-[10px] tracking-widest hover:text-voltage transition-colors">API</Link>
313
+ <Link href="/app" className="text-[10px] tracking-widest hover:text-voltage transition-colors">APP</Link>
314
+ </nav>
315
+ </div>
316
+ </header>
317
+
318
+ {/* ── SECTION 01: HERO ─────────────────────────────────────── */}
319
+ <ManifestSection label="001_IDENTIFICATION" className="justify-end pb-12">
320
+ <div className="relative max-w-4xl">
321
+ <div
322
+ className="text-[12rem] md:text-[16rem] font-black leading-none text-transparent opacity-10 absolute -top-60 -left-20 select-none pointer-events-none"
323
+ style={{ WebkitTextStroke: '2px #050505' }}
324
+ >
325
+ 01
326
+ </div>
327
+
328
+ <MechaCard dark className="max-w-2xl p-6 md:p-10">
329
+ <div className="font-mono text-xs mb-4 text-voltage flex justify-between">
330
+ <span>[ MANIFEST // AURAWALLET ]</span>
331
+ </div>
332
+ <h2 className="text-3xl md:text-6xl font-black tracking-tighter mb-6 leading-[1.05]">
333
+ <span className="bg-voltage text-void inline-block px-2 py-0.5">AGENTS NEED</span><br />
334
+ <span className="bg-voltage text-void inline-block px-2 py-0.5 mt-1">WALLETS. YOURS</span><br />
335
+ <span className="bg-voltage text-void inline-block px-2 py-0.5 mt-1">NEED AURAWALLET.</span>
336
+ </h2>
337
+ <p className="font-mono text-sm leading-relaxed text-concrete">
338
+ Secure wallets, approvals, swaps, and transfers — same actions, same guardrails, whichever interface you prefer.
339
+ </p>
340
+ </MechaCard>
341
+ </div>
342
+
343
+ <div className="absolute bottom-12 right-12 hidden md:flex flex-col items-center animate-bounce">
344
+ <span className="font-mono text-xs text-ink mb-2">SCROLL_TO_INSPECT</span>
345
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 5v14M19 12l-7 7-7-7" /></svg>
346
+ </div>
347
+ </ManifestSection>
348
+
349
+ {/* ── SECTION 02: CONTEXT (FRAGMENTATION PROBLEM) ──────────── */}
350
+ <ManifestSection label="002_CONTEXT" className="items-center md:items-end">
351
+ <div className="relative max-w-6xl w-full mx-auto flex flex-col md:flex-row items-start justify-between gap-12 z-10">
352
+ {/* Left: Title */}
353
+ <div className="flex-1 text-left pt-12 md:pt-32">
354
+ <div className="relative">
355
+ <div
356
+ className="text-[12rem] md:text-[16rem] font-black leading-none text-transparent opacity-10 absolute -top-60 -left-20 select-none pointer-events-none"
357
+ style={{ WebkitTextStroke: '2px #050505' }}
358
+ >
359
+ 02
360
+ </div>
361
+ <h3 className="text-2xl md:text-4xl font-black leading-[0.9] tracking-tight bg-void text-voltage inline-block px-2 py-1">
362
+ AGENTS OPERATE<br />EVERYWHERE.<br />WALLETS DON&apos;T.
363
+ </h3>
364
+ </div>
365
+ </div>
366
+
367
+ {/* Right: Content Card */}
368
+ <div className="w-full md:w-auto md:max-w-xl relative">
369
+ {/* Alert badge */}
370
+ <div className="absolute -top-6 -right-6 bg-alert text-white px-6 py-3 font-mono text-sm font-bold transform rotate-3 clip-mech-header z-20 shadow-xl border border-white/20">
371
+ THE FRAGMENTATION PROBLEM
372
+ </div>
373
+
374
+ <MechaCard className="p-8 md:p-12 w-full bg-tyvek text-ink shadow-2xl" allowOverflow>
375
+ <CropMark className="top-0 left-0 border-t-2 border-l-2" />
376
+ <CropMark className="bottom-0 right-0 border-b-2 border-r-2" />
377
+
378
+ <h3 className="text-2xl font-black uppercase tracking-tight mb-2">
379
+ &quot;EVERY INTERFACE IS AN ISLAND&quot;
380
+ </h3>
381
+ <p className="font-mono text-sm text-concrete mb-8">
382
+ Agents need wallets across every surface — but they get fragmented access instead.
383
+ </p>
384
+
385
+ <div className="space-y-4 font-mono text-sm text-left mb-8">
386
+ <div className="flex items-start gap-3">
387
+ <span className="text-concrete mt-1 shrink-0">BROWSER</span>
388
+ <div>Web dashboard — but only when you&apos;re at a screen</div>
389
+ </div>
390
+ <div className="flex items-start gap-3">
391
+ <span className="text-concrete mt-1 shrink-0">TERMINAL</span>
392
+ <div>CLI access — but separate auth, separate limits</div>
393
+ </div>
394
+ <div className="flex items-start gap-3">
395
+ <span className="text-concrete mt-1 shrink-0">TELEGRAM</span>
396
+ <div>Bot commands — but no approval flow, no guardrails</div>
397
+ </div>
398
+ <div className="bg-void text-tyvek p-4 clip-mech-header -mx-4 shadow-lg relative">
399
+ <div className="absolute top-0 right-0 w-2 h-2 bg-alert animate-pulse" />
400
+ <div className="flex items-start gap-3">
401
+ <span className="text-voltage mt-1 shrink-0">RESULT</span>
402
+ <div>
403
+ <span className="text-voltage font-bold">4 interfaces, 4 permission models</span> — no consistency
404
+ </div>
405
+ </div>
406
+ </div>
407
+ </div>
408
+
409
+ <p className="font-mono text-sm text-concrete italic text-right border-t border-concrete/20 pt-4">
410
+ &quot;Same agent, different wallet experience everywhere.&quot;
411
+ </p>
412
+ </MechaCard>
413
+ </div>
414
+ </div>
415
+ </ManifestSection>
416
+
417
+ {/* ── SECTION 03: CAPABILITIES ─────────────────────────────── */}
418
+ <ManifestSection label="003_CAPABILITIES">
419
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-12 items-start">
420
+ {/* Left: Title + Capability Card */}
421
+ <div className="flex flex-col gap-8">
422
+ <div className="relative">
423
+ <div
424
+ className="text-[12rem] md:text-[16rem] font-black leading-none text-transparent opacity-10 absolute -top-40 -left-20 select-none pointer-events-none"
425
+ style={{ WebkitTextStroke: '2px #050505' }}
426
+ >
427
+ 03
428
+ </div>
429
+ <h3 className="text-3xl md:text-5xl font-black leading-[0.9] tracking-tight bg-void text-voltage inline-block px-2 py-1 transform -rotate-1 relative z-10 clip-mech-header">
430
+ SEND. SWAP.<br />LAUNCH. TRACK.
431
+ </h3>
432
+ </div>
433
+
434
+ <MechaCard className="p-8 md:p-10 bg-tyvek text-ink shadow-2xl" allowOverflow>
435
+ <ul className="space-y-6 font-mono text-sm leading-relaxed">
436
+ <li className="flex items-start gap-4 group">
437
+ <div className="w-2 h-2 bg-ink mt-2 group-hover:bg-voltage transition-colors shrink-0" />
438
+ <div>
439
+ <span className="font-bold">Wallet tiers</span> — cold (human-only), hot (agent + limits), temp (ephemeral)
440
+ </div>
441
+ </li>
442
+ <li className="flex items-start gap-4 group">
443
+ <div className="w-2 h-2 bg-ink mt-2 group-hover:bg-voltage transition-colors shrink-0" />
444
+ <div>
445
+ <span className="font-bold">Human approvals</span> — agents propose, humans approve, nothing moves silently
446
+ </div>
447
+ </li>
448
+ <li className="flex items-start gap-4 group">
449
+ <div className="w-2 h-2 bg-ink mt-2 group-hover:bg-voltage transition-colors shrink-0" />
450
+ <div>
451
+ <span className="font-bold">Multi-chain</span> — EVM (Base, Ethereum) + Solana from one backend
452
+ </div>
453
+ </li>
454
+ <li className="flex items-start gap-4 group">
455
+ <div className="w-2 h-2 bg-ink mt-2 group-hover:bg-voltage transition-colors shrink-0" />
456
+ <div className="flex flex-col gap-2">
457
+ <span className="text-voltage font-bold bg-void px-2 py-0.5 w-fit">Spending limits</span>
458
+ <span className="font-bold border-l-2 border-voltage pl-3">
459
+ Per-token caps, session tracking, auto-revoke on restart
460
+ </span>
461
+ </div>
462
+ </li>
463
+ </ul>
464
+ </MechaCard>
465
+ </div>
466
+
467
+ {/* Right: ScrollReveal Q&A cards */}
468
+ <div className="relative min-h-[600px] flex flex-col justify-center gap-6">
469
+ <ScrollReveal>
470
+ <div className="flex items-center gap-2 mb-2 pl-1">
471
+ <span className="font-mono text-xs font-bold text-voltage uppercase tracking-widest">HOW DOES APPROVAL WORK?</span>
472
+ </div>
473
+ <MechaCard dark className="p-4 border border-voltage/50 bg-void/90">
474
+ <p className="font-mono text-sm text-tyvek leading-tight">
475
+ Agents request actions via the API. Humans approve in the dashboard, CLI, or Telegram. Token-gated with spending limits enforced in-memory.
476
+ </p>
477
+ </MechaCard>
478
+ </ScrollReveal>
479
+
480
+ <ScrollReveal delay={200}>
481
+ <div className="flex items-center gap-2 mb-2 justify-end pr-1">
482
+ <span className="font-mono text-xs font-bold text-ink uppercase tracking-widest">WHAT ABOUT SECURITY?</span>
483
+ </div>
484
+ <MechaCard className="p-5 border-l-4 border-l-ink bg-tyvek shadow-[0_10px_40px_-10px_rgba(0,0,0,0.3)]">
485
+ <div className="space-y-3 font-mono text-sm text-ink">
486
+ <p className="font-bold">Signing keys live in memory only.</p>
487
+ <p>Server restart = forced re-approval. Stolen DB is useless without the runtime key.</p>
488
+ <div className="bg-void text-voltage p-3 clip-mech-footer mt-2 font-bold text-center text-xs md:text-sm">
489
+ Memory-only auth. Restart = revoke all.
490
+ </div>
491
+ </div>
492
+ </MechaCard>
493
+ </ScrollReveal>
494
+
495
+ <ScrollReveal delay={400}>
496
+ <MechaCard dark className="p-4 border border-concrete/30">
497
+ <div className="font-mono text-xs text-concrete mb-2">SUPPORTED OPERATIONS</div>
498
+ <div className="grid grid-cols-2 gap-2 font-mono text-sm text-voltage">
499
+ <span>▸ send</span>
500
+ <span>▸ swap</span>
501
+ <span>▸ fund</span>
502
+ <span>▸ launch</span>
503
+ <span>▸ wallet/create</span>
504
+ <span>▸ approvals</span>
505
+ </div>
506
+ </MechaCard>
507
+ </ScrollReveal>
508
+ </div>
509
+ </div>
510
+ </ManifestSection>
511
+
512
+ {/* ── SECTION 04: INTERFACE (VOLTAGE BG) ───────────────────── */}
513
+ <ManifestSection label="004_INTERFACE" className="bg-voltage text-void min-h-screen relative overflow-hidden">
514
+ <div className="absolute inset-0 bg-grid-pattern-dark opacity-10 pointer-events-none mix-blend-multiply" />
515
+ {/* Hazard Stripes */}
516
+ <div className="absolute top-0 left-0 w-full h-3 bg-hazard-stripes" />
517
+ <div className="absolute bottom-0 left-0 w-full h-3 bg-hazard-stripes" />
518
+
519
+ <div className="relative z-10 w-full max-w-5xl mx-auto flex flex-col items-center justify-center text-center py-20">
520
+ {/* Ghost number */}
521
+ <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-[20rem] md:text-[30rem] font-black leading-none text-void opacity-5 select-none pointer-events-none z-0">
522
+ 04
523
+ </div>
524
+
525
+ <div className="relative z-10 w-full flex flex-col items-center gap-10">
526
+ <div className="relative">
527
+ <h3 className="text-5xl md:text-8xl font-black leading-[0.9] tracking-tighter text-void uppercase">
528
+ ONE AGENT.<br />
529
+ <span className="text-voltage bg-void px-4 inline-block transform -skew-x-12 mt-2">EVERY INTERFACE.</span>
530
+ </h3>
531
+ </div>
532
+
533
+ {/* Bullet points */}
534
+ <div className="bg-void/5 backdrop-blur-sm p-8 clip-mech-modal border border-void/10 max-w-2xl w-full">
535
+ <div className="space-y-6 font-mono text-base md:text-lg text-left">
536
+ <div className="flex items-start gap-4">
537
+ <div className="w-2 h-2 bg-void mt-2.5 shrink-0" />
538
+ <p><span className="font-bold">Browser</span> — dashboard, approvals, wallet detail, real-time WebSocket</p>
539
+ </div>
540
+ <div className="flex items-start gap-4">
541
+ <div className="w-2 h-2 bg-void mt-2.5 shrink-0" />
542
+ <p><span className="font-bold">Terminal</span> — Claude Code, headless CLI, Unix socket IPC</p>
543
+ </div>
544
+ <div className="flex items-start gap-4">
545
+ <div className="w-2 h-2 bg-void mt-2.5 shrink-0" />
546
+ <p><span className="font-bold">Telegram</span> — approval adapter, bot commands, remote signing</p>
547
+ </div>
548
+ <div className="flex items-start gap-4">
549
+ <div className="w-2 h-2 bg-void mt-2.5 shrink-0" />
550
+ <p><span className="font-bold">Same wallet, same permissions</span> — everywhere</p>
551
+ </div>
552
+ </div>
553
+ </div>
554
+
555
+ <div className="pt-4">
556
+ <MechaButton
557
+ variant="secondary"
558
+ href="/docs"
559
+ className="min-w-[240px] border-2 border-void hover:bg-void hover:text-voltage"
560
+ >
561
+ READ DOCS
562
+ </MechaButton>
563
+ </div>
564
+ </div>
565
+
566
+ {/* Floating device silhouettes (CSS-only) */}
567
+ <div className="absolute inset-0 z-0 pointer-events-none overflow-hidden">
568
+ <div className="absolute top-24 left-8 md:left-16 w-40 md:w-56 h-28 md:h-36 border-2 border-void/10 rounded-lg opacity-40 animate-[float-left_6s_ease-in-out_infinite]" />
569
+ <div className="absolute bottom-20 right-8 md:right-16 w-24 md:w-32 h-44 md:h-56 border-2 border-void/10 rounded-2xl opacity-30 animate-[float-right_7s_ease-in-out_infinite_1s]" />
570
+ <div className="hidden md:block absolute top-8 right-1/4 w-48 h-32 border-2 border-void/10 rounded-md opacity-20 animate-[float-left_5s_ease-in-out_infinite_0.5s]" />
571
+ </div>
572
+ </div>
573
+ </ManifestSection>
574
+
575
+ {/* ── FOOTER ───────────────────────────────────────────────── */}
576
+ <footer className="bg-void text-tyvek py-24 px-6 md:px-12 font-mono text-xs relative overflow-hidden">
577
+ <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full text-center pointer-events-none z-0 flex flex-col items-center justify-center">
578
+ <div className="text-[20vw] font-black leading-[0.8] text-white opacity-5 select-none">
579
+ 05
580
+ </div>
581
+ <div className="text-[10vw] font-black leading-[0.8] text-white opacity-5 select-none whitespace-nowrap">
582
+ BUILT FOR AGENTS
583
+ </div>
584
+ </div>
585
+
586
+ <div className="flex flex-col md:flex-row justify-between items-end relative z-10 gap-8">
587
+ <div className="space-y-6 max-w-lg">
588
+ <div className="space-y-3 font-mono text-sm border-l-2 border-voltage pl-4">
589
+ <p className="font-bold text-lg mb-2 text-white">ABOUT</p>
590
+ <div className="flex items-start gap-3">
591
+ <div className="w-1 h-1 bg-concrete mt-2 shrink-0" />
592
+ <span>Local-first crypto wallet infrastructure for AI agents</span>
593
+ </div>
594
+ <div className="flex items-start gap-3">
595
+ <div className="w-1 h-1 bg-concrete mt-2 shrink-0" />
596
+ <span>Multi-chain: Base, Ethereum, Solana</span>
597
+ </div>
598
+ <div className="flex items-start gap-3">
599
+ <div className="w-1 h-1 bg-voltage mt-2 shrink-0" />
600
+ <span className="font-bold text-voltage">Memory-only auth, human approvals, spending limits</span>
601
+ </div>
602
+ </div>
603
+ <p className="text-concrete/50 pt-8">ALL RIGHTS RESERVED.</p>
604
+ </div>
605
+
606
+ <div className="text-right mt-8 md:mt-0 space-y-4 flex flex-col items-end">
607
+ <img src="/logo.webp" alt="AuraWallet" className="w-16 h-16 invert" />
608
+ <p className="text-concrete text-[10px] tracking-widest uppercase">Agent wallet infrastructure</p>
609
+ <nav className="flex gap-4 text-[11px] tracking-widest">
610
+ <Link href="/docs" className="hover:text-voltage transition-colors">DOCS</Link>
611
+ <Link href="/api" className="hover:text-voltage transition-colors">API</Link>
612
+ <Link href="/app" className="hover:text-voltage transition-colors">APP</Link>
613
+ </nav>
614
+ <div className="w-64 h-8 bg-grid-pattern opacity-30 ml-auto" />
615
+ </div>
616
+ </div>
617
+ </footer>
618
+
619
+ {/* ── VISION SECTION ───────────────────────────────────────── */}
620
+ <section className="text-ink py-32 flex items-center justify-center relative overflow-hidden">
621
+ <div className="max-w-6xl mx-auto px-6 text-center relative z-10">
622
+ <ScrollReveal>
623
+ <h2 className="text-5xl md:text-8xl font-black tracking-tighter leading-[0.9] mb-8">
624
+ AI MAKES AGENTS <span className="text-concrete">POWERFUL.</span><br />
625
+ WE MAKE THEM <span className="bg-voltage text-void px-2 inline-block transform -skew-x-12">SAFE.</span>
626
+ </h2>
627
+ <p className="font-mono text-xl md:text-3xl text-concrete italic tracking-tight">
628
+ —and they finally move money with guardrails.
629
+ </p>
630
+ </ScrollReveal>
631
+ </div>
632
+ </section>
633
+ </main>
634
+ );
635
+ };