diff --git a/apps/web/.gitignore b/apps/web/.gitignore index fd9736ba7..cda387027 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -8,3 +8,4 @@ dist/ # OG image preview renders (generated via scripts/generate-og-image.mjs) scripts/*-preview.png +.vite-dev.log diff --git a/apps/web/.vite-dev.log b/apps/web/.vite-dev.log deleted file mode 100644 index f099edcd0..000000000 --- a/apps/web/.vite-dev.log +++ /dev/null @@ -1,227 +0,0 @@ - -> ade-web@0.0.0 dev -> vite - - - VITE v4.5.14 ready in 147 ms - - ➜ Local: http://localhost:4180/ - ➜ Network: use --host to expose -(node:10760) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead. -(Use `node --trace-deprecation ...` to show where the warning was created) -12:23:04 AM [vite] page reload package.json -12:23:32 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:23:33 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:24:14 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:24:15 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:24:35 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:26:31 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:26:32 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:26:32 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:28:13 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:28:15 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:28:15 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:28:17 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:28:29 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:31:26 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:31:30 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:31:30 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:31:33 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:31:33 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -12:31:46 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:31:47 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:32:20 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:32:23 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:32:24 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:39:08 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:39:08 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:39:08 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:39:09 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:53:38 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:53:41 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:53:42 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:53:43 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:53:46 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:53:50 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:53:56 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:03 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:18 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:18 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:18 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:18 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:54:19 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -12:55:56 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:55:58 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:56:21 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:56:23 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:57:38 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:57:58 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:57:59 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -12:57:59 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:58:15 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -12:58:18 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -12:59:22 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -1:01:45 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -1:01:54 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -1:02:02 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -1:02:17 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -1:02:20 AM [vite] hmr update /src/components/editorial/AgentBadge.tsx, /src/styles/globals.css -1:04:15 AM [vite] hmr update /src/app/pages/HomePage.tsx, /src/styles/globals.css -1:07:19 AM [vite] hmr update /src/components/editorial/HeroAgentBadges.tsx, /src/styles/globals.css -1:07:35 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -1:07:51 AM [vite] hmr update /src/components/editorial/DeviceComposition.tsx, /src/styles/globals.css -1:13:24 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:14:04 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:14:10 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:14:14 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:16:36 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:16:48 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:17:11 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:24:03 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:24:16 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:24:25 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:24:39 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:24:46 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -(node:73065) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead. -(Use `node --trace-deprecation ...` to show where the warning was created) - - VITE v4.5.14 ready in 303 ms - - ➜ Local: http://localhost:4180/ - ➜ Network: use --host to expose -1:37:20 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css -1:37:20 AM [vite] Internal server error: /Users/admin/Projects/ADE/.ade/worktrees/website-updates-f7d464db/apps/web/src/components/editorial/ShipShowcase.tsx: Unterminated JSX contents. (493:14) - - 491 | - 492 | -> 493 | - | ^ - 494 | ); - 495 | } - 496 | - Plugin: vite:react-babel - File: /Users/admin/Projects/ADE/.ade/worktrees/website-updates-f7d464db/apps/web/src/components/editorial/ShipShowcase.tsx:493:14 - 491| - 492| - 493| - | ^ - 494| ); - 495| } - at constructor (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:365:19) - at TypeScriptParserMixin.raise (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6599:19) - at TypeScriptParserMixin.jsxReadToken (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4448:20) - at TypeScriptParserMixin.getTokenFromCode (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4774:12) - at TypeScriptParserMixin.getTokenFromCode (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9987:11) - at TypeScriptParserMixin.nextToken (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5782:10) - at TypeScriptParserMixin.next (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5692:10) - at TypeScriptParserMixin.eat (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5696:12) - at TypeScriptParserMixin.expect (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6898:15) - at TypeScriptParserMixin.jsxParseClosingElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4680:10) - at TypeScriptParserMixin.jsxParseElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4695:37) - at TypeScriptParserMixin.jsxParseElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4698:32) - at TypeScriptParserMixin.jsxParseElement (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4749:17) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4759:19) - at TypeScriptParserMixin.parseExprSubscripts (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11081:23) - at TypeScriptParserMixin.parseUpdate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11066:21) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11046:23) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9837:18) - at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10899:61) - at TypeScriptParserMixin.parseExprOps (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10904:23) - at TypeScriptParserMixin.parseMaybeConditional (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10881:23) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10831:21) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9775:39 - at TypeScriptParserMixin.tryParse (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6907:20) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9775:18) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10800:39 - at TypeScriptParserMixin.allowInAnd (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12426:12) - at TypeScriptParserMixin.parseMaybeAssignAllowIn (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10800:17) - at TypeScriptParserMixin.parseMaybeAssignAllowInOrVoidPattern (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12493:17) - at TypeScriptParserMixin.parseParenAndDistinguishExpression (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11675:28) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11331:23) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4764:20) - at TypeScriptParserMixin.parseExprSubscripts (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11081:23) - at TypeScriptParserMixin.parseUpdate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11066:21) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11046:23) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9837:18) - at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10899:61) - at TypeScriptParserMixin.parseExprOps (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10904:23) - at TypeScriptParserMixin.parseMaybeConditional (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10881:23) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10831:21) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9786:20) - at TypeScriptParserMixin.parseExpressionBase (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10784:23) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10780:39 - at TypeScriptParserMixin.allowInAnd (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12421:16) - at TypeScriptParserMixin.parseExpression (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10780:17) - at TypeScriptParserMixin.parseReturnStatement (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:13142:28) - at TypeScriptParserMixin.parseStatementContent (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12798:21) - at TypeScriptParserMixin.parseStatementContent (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9508:18) - at TypeScriptParserMixin.parseStatementLike (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12767:17) - at TypeScriptParserMixin.parseStatementListItem (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12747:17) -1:37:20 AM [vite] Internal server error: /Users/admin/Projects/ADE/.ade/worktrees/website-updates-f7d464db/apps/web/src/components/editorial/ShipShowcase.tsx: Unterminated JSX contents. (493:14) - - 491 | - 492 | -> 493 | - | ^ - 494 | ); - 495 | } - 496 | - Plugin: vite:react-babel - File: /Users/admin/Projects/ADE/.ade/worktrees/website-updates-f7d464db/apps/web/src/components/editorial/ShipShowcase.tsx:493:14 - 491| - 492| - 493| - | ^ - 494| ); - 495| } - at constructor (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:365:19) - at TypeScriptParserMixin.raise (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6599:19) - at TypeScriptParserMixin.jsxReadToken (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4448:20) - at TypeScriptParserMixin.getTokenFromCode (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4774:12) - at TypeScriptParserMixin.getTokenFromCode (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9987:11) - at TypeScriptParserMixin.nextToken (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5782:10) - at TypeScriptParserMixin.next (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5692:10) - at TypeScriptParserMixin.eat (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:5696:12) - at TypeScriptParserMixin.expect (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6898:15) - at TypeScriptParserMixin.jsxParseClosingElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4680:10) - at TypeScriptParserMixin.jsxParseElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4695:37) - at TypeScriptParserMixin.jsxParseElementAt (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4698:32) - at TypeScriptParserMixin.jsxParseElement (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4749:17) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4759:19) - at TypeScriptParserMixin.parseExprSubscripts (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11081:23) - at TypeScriptParserMixin.parseUpdate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11066:21) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11046:23) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9837:18) - at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10899:61) - at TypeScriptParserMixin.parseExprOps (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10904:23) - at TypeScriptParserMixin.parseMaybeConditional (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10881:23) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10831:21) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9775:39 - at TypeScriptParserMixin.tryParse (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:6907:20) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9775:18) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10800:39 - at TypeScriptParserMixin.allowInAnd (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12426:12) - at TypeScriptParserMixin.parseMaybeAssignAllowIn (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10800:17) - at TypeScriptParserMixin.parseMaybeAssignAllowInOrVoidPattern (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12493:17) - at TypeScriptParserMixin.parseParenAndDistinguishExpression (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11675:28) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11331:23) - at TypeScriptParserMixin.parseExprAtom (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:4764:20) - at TypeScriptParserMixin.parseExprSubscripts (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11081:23) - at TypeScriptParserMixin.parseUpdate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11066:21) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:11046:23) - at TypeScriptParserMixin.parseMaybeUnary (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9837:18) - at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10899:61) - at TypeScriptParserMixin.parseExprOps (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10904:23) - at TypeScriptParserMixin.parseMaybeConditional (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10881:23) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10831:21) - at TypeScriptParserMixin.parseMaybeAssign (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9786:20) - at TypeScriptParserMixin.parseExpressionBase (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10784:23) - at /Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10780:39 - at TypeScriptParserMixin.allowInAnd (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12421:16) - at TypeScriptParserMixin.parseExpression (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:10780:17) - at TypeScriptParserMixin.parseReturnStatement (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:13142:28) - at TypeScriptParserMixin.parseStatementContent (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12798:21) - at TypeScriptParserMixin.parseStatementContent (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:9508:18) - at TypeScriptParserMixin.parseStatementLike (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12767:17) - at TypeScriptParserMixin.parseStatementListItem (/Users/admin/Projects/ADE/apps/web/node_modules/@babel/parser/lib/index.js:12747:17) -1:37:41 AM [vite] hmr update /src/components/editorial/ShipShowcase.tsx, /src/styles/globals.css diff --git a/apps/web/src/app/pages/HomePage.tsx b/apps/web/src/app/pages/HomePage.tsx index 99ccfe7ba..02566c45b 100644 --- a/apps/web/src/app/pages/HomePage.tsx +++ b/apps/web/src/app/pages/HomePage.tsx @@ -5,7 +5,6 @@ import { Masthead } from "../../components/editorial/Masthead"; import { CompetitorEquation } from "../../components/editorial/CompetitorEquation"; import { Lede } from "../../components/editorial/Lede"; import { DeviceComposition } from "../../components/editorial/DeviceComposition"; -import { HeroAgentBadges } from "../../components/editorial/HeroAgentBadges"; import { ShipShowcase } from "../../components/editorial/ShipShowcase"; import { FadeBand } from "../../components/editorial/FadeBand"; import { FeatureGrid } from "../../components/editorial/FeatureGrid"; @@ -43,15 +42,11 @@ export function HomePage() {
- {/* Badges span the full hero height (headline + devices) so they - scatter through the upper empty gutters, not just beside the - device stack. */} -
-
+
diff --git a/apps/web/src/components/editorial/AgentBadge.tsx b/apps/web/src/components/editorial/AgentBadge.tsx deleted file mode 100644 index 890b9faee..000000000 --- a/apps/web/src/components/editorial/AgentBadge.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import type { CSSProperties } from "react"; -import { motion, useReducedMotion } from "framer-motion"; -import { cn } from "../../lib/cn"; - -const VARIANTS = { - light: - "bg-[color:var(--color-paper)] border-[color:var(--color-ink-hairline-strong)] shadow-[0_10px_24px_-12px_rgba(24,21,15,0.5)]", - dark: - "bg-[#0f0d0a] border-[color:var(--color-ink)] shadow-[0_10px_24px_-12px_rgba(24,21,15,0.5)]", - hero: - "bg-[color:var(--color-paper)] border-[color:var(--color-ink-hairline-strong)] shadow-[0_10px_28px_-14px_rgba(0,0,0,0.55)]", -} as const; - -export function AgentBadge({ - src, - name, - className = "", - style, - rotate = 0, - variant = "light", - delay = 0, - floatPhase = 0, - anchor = "left", -}: { - src: string; - name: string; - className?: string; - style?: CSSProperties; - rotate?: number; - variant?: keyof typeof VARIANTS; - delay?: number; - floatPhase?: number; - anchor?: "left" | "right"; -}) { - const reduceMotion = useReducedMotion() ?? true; - - return ( -
- -
- -
-
-
- ); -} diff --git a/apps/web/src/components/editorial/CompetitorEquation.tsx b/apps/web/src/components/editorial/CompetitorEquation.tsx index 3d6bd6180..74b1ef059 100644 --- a/apps/web/src/components/editorial/CompetitorEquation.tsx +++ b/apps/web/src/components/editorial/CompetitorEquation.tsx @@ -63,7 +63,7 @@ export function CompetitorEquation() { )} -
+
{app.name} equals @@ -120,7 +120,7 @@ export function CompetitorEquation() { ADE
diff --git a/apps/web/src/components/editorial/DeviceComposition.tsx b/apps/web/src/components/editorial/DeviceComposition.tsx index b2de41e82..a8b51c67a 100644 --- a/apps/web/src/components/editorial/DeviceComposition.tsx +++ b/apps/web/src/components/editorial/DeviceComposition.tsx @@ -37,17 +37,18 @@ export function DeviceComposition() { style={{ background: "radial-gradient(ellipse 70% 60% at 50% 50%, rgba(124,58,237,0.45) 0%, rgba(124,58,237,0.12) 45%, transparent 78%)", - filter: "blur(14px)", zIndex: 0, }} />
- {/* Desktop — primary layer; container height follows this image */} + {/* Desktop — primary layer; container height follows this image. + Slightly narrower than the container so the TUI + phone overlap it + inside the viewport instead of hanging off-screen on laptops. */}
{/* Dynamic Island */} diff --git a/apps/web/src/components/editorial/FeatureGrid.tsx b/apps/web/src/components/editorial/FeatureGrid.tsx index 7dcb68a4a..7ce679378 100644 --- a/apps/web/src/components/editorial/FeatureGrid.tsx +++ b/apps/web/src/components/editorial/FeatureGrid.tsx @@ -104,10 +104,13 @@ const DEMOS: Demo[] = [ ]; /** - * One demo tile. The clip auto-plays (muted loop) while it's on screen and - * pauses the moment it scrolls away, so at most a couple play at once — alive - * but cheap. Click opens the full clip in a lightbox. Posters carry the static - * first frame for reduced-motion and pre-play. + * One demo tile. Every clip auto-plays (muted loop) while it's anywhere near + * the viewport — the whole grid running at once is the point of this section. + * The mp4s are faststart-encoded so they render frames while still streaming, + * and playback starts 300px before the tile scrolls in so the grid is already + * alive when it lands. Offscreen tiles pause to give the bandwidth back. + * Click opens the full clip in a lightbox. Posters carry the static first + * frame for reduced-motion and pre-play. */ function DemoTile({ demo, @@ -131,10 +134,13 @@ function DemoTile({ if (entry?.isIntersecting) void v.play().catch(() => {}); else v.pause(); }, - { threshold: 0.35 } + { threshold: 0.01, rootMargin: "300px 0px" } ); io.observe(el); - return () => io.disconnect(); + return () => { + io.disconnect(); + v.pause(); + }; }, [reduceMotion]); const Icon = demo.icon; diff --git a/apps/web/src/components/editorial/HeroAgentBadges.tsx b/apps/web/src/components/editorial/HeroAgentBadges.tsx deleted file mode 100644 index 63c8db2ad..000000000 --- a/apps/web/src/components/editorial/HeroAgentBadges.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { AgentBadge } from "./AgentBadge"; - -// `inset` = horizontal distance from the viewport edge. Varying it per badge -// scatters them across the gutter instead of stacking them in one straight line. -const LEFT_AGENTS = [ - // Vertical positions are intentionally uneven (not an even column) and the - // insets alternate deep/shallow so the badges scatter through the gutter. - // The bottom badge is pulled up off the corner into its own gap. Mid-height - // rows (headline band) keep shallow insets so they never cover the headline. - { src: "/images/models/claude-color.svg", name: "Claude", className: "top-[8%]", inset: "clamp(140px,16vw,340px)", rotate: -8, delay: 0.75, floatPhase: 0 }, - { src: "/images/models/openai.svg", name: "OpenAI", className: "top-[19%]", inset: "clamp(40px,5vw,116px)", rotate: 5, delay: 0.82, floatPhase: 0.6 }, - { src: "/images/models/grok.svg", name: "Grok", className: "top-[37%]", inset: "clamp(84px,9.5vw,196px)", rotate: -5, delay: 0.96, floatPhase: 1.8 }, - { src: "/images/models/anthropic.svg", name: "Anthropic", className: "top-[51%]", inset: "clamp(150px,16vw,332px)", rotate: -3, delay: 1.1, floatPhase: 3 }, - { src: "/images/models/mistral-color.svg", name: "Mistral", className: "top-[65%]", inset: "clamp(32px,4vw,88px)", rotate: 4, delay: 1.17, floatPhase: 3.6 }, - { src: "/images/models/cohere-color.svg", name: "Cohere", className: "top-[78%]", inset: "clamp(112px,12.5vw,262px)", rotate: -4, delay: 1.31, floatPhase: 4.8 }, -] as const; - -const RIGHT_AGENTS = [ - { src: "/images/models/gemini-color.svg", name: "Gemini", className: "top-[5%]", inset: "clamp(48px,6.5vw,132px)", rotate: 10, delay: 0.89, floatPhase: 1.2 }, - { src: "/images/models/deepseek-color.svg", name: "DeepSeek", className: "top-[22%]", inset: "clamp(150px,16vw,332px)", rotate: 7, delay: 1.03, floatPhase: 2.4 }, - { src: "/images/models/ollama.svg", name: "Ollama", className: "top-[35%]", inset: "clamp(70px,8vw,176px)", rotate: 6, delay: 1.52, floatPhase: 6.6 }, - { src: "/images/models/meta-color.svg", name: "Meta Llama", className: "top-[53%]", inset: "clamp(150px,16vw,344px)", rotate: -6, delay: 1.24, floatPhase: 4.2 }, - { src: "/images/models/perplexity-color.svg", name: "Perplexity", className: "top-[64%]", inset: "clamp(28px,3.5vw,76px)", rotate: -7, delay: 1.45, floatPhase: 6 }, - { src: "/images/models/qwen-color.svg", name: "Qwen", className: "top-[77%]", inset: "clamp(120px,13vw,284px)", rotate: 8, delay: 1.38, floatPhase: 5.4 }, -] as const; - -/** - * Model badges sit in viewport side gutters beside the device stack only. - */ -export function HeroAgentBadges() { - return ( -
- {LEFT_AGENTS.map((agent) => ( - - ))} - {RIGHT_AGENTS.map((agent) => ( - - ))} -
- ); -} diff --git a/apps/web/src/components/editorial/Lede.tsx b/apps/web/src/components/editorial/Lede.tsx index 9d0a2b07c..463337972 100644 --- a/apps/web/src/components/editorial/Lede.tsx +++ b/apps/web/src/components/editorial/Lede.tsx @@ -40,7 +40,7 @@ export function Lede() { variants={item} className="font-serif font-normal tracking-[-0.02em] text-[color:var(--color-cream)]" style={{ - fontSize: "clamp(48px, 6.4vw, 96px)", + fontSize: "clamp(40px, 5.4vw, 82px)", lineHeight: 1.02, margin: 0, paddingBottom: "0.08em", @@ -54,7 +54,7 @@ export function Lede() { Quick install · macOS @@ -77,41 +77,46 @@ export function Lede() { - - Download for Mac - - - Download for iOS - - - View on GitHub - - - Read the docs{" "} - - + +

+ + GitHub + + · + + Docs + + +

); diff --git a/apps/web/src/components/editorial/ShipShowcase.tsx b/apps/web/src/components/editorial/ShipShowcase.tsx index d13f13aba..350f46a02 100644 --- a/apps/web/src/components/editorial/ShipShowcase.tsx +++ b/apps/web/src/components/editorial/ShipShowcase.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from "react"; -import { AnimatePresence, motion, useReducedMotion } from "framer-motion"; +import { useReducedMotion } from "framer-motion"; import { cn } from "../../lib/cn"; const ROTATE_MS = 18000; @@ -236,7 +236,6 @@ function ShowcaseComposition({ trio }: { trio: DeviceTrio }) { style={{ background: "radial-gradient(ellipse 70% 60% at 50% 52%, rgba(124,58,237,0.42) 0%, rgba(124,58,237,0.1) 46%, transparent 78%)", - filter: "blur(16px)", zIndex: 0, }} /> @@ -245,7 +244,7 @@ function ShowcaseComposition({ trio }: { trio: DeviceTrio }) { {/* Desktop — base layer; defines composition height */}
@@ -327,7 +325,7 @@ function ChatComposition({ shots }: { shots: ChatShots }) { {/* #6 Desktop — base hero; defines composition height (largest) */}
@@ -424,7 +421,7 @@ function PrComposition({ shots }: { shots: PrShots }) { {/* Desktop — hero (largest) */}
@@ -490,7 +486,7 @@ function WorkToolsComposition({ shots }: { shots: ToolsShots }) { {/* Hero — browser pane (largest) */}
new Set([0, 1])); - const tab = TABS[active]!; + useEffect(() => { + setMountedTabs((prev) => { + const upcoming = (active + 1) % TABS.length; + if (prev.has(active) && prev.has(upcoming)) return prev; + const grown = new Set(prev); + grown.add(active); + grown.add(upcoming); + return grown; + }); + }, [active]); const selectTab = useCallback((index: number) => { setActive(index); @@ -672,19 +682,19 @@ export function ShipShowcase() { "radial-gradient(ellipse 50% 46% at 78% 42%, rgba(124,58,237,0.36) 0%, transparent 72%)", "radial-gradient(ellipse 44% 42% at 10% 72%, rgba(99,102,241,0.18) 0%, transparent 74%)", ].join(", "), - filter: "blur(22px)", }} /> - {/* Heading on the left, tab rail beside it (aligned to the headline) on wide screens */} -
-
+ {/* Heading on the left, tab rail to its right so the whole section header + fits one row on laptop screens and the stage starts higher. */} +
+

One repo, every surface

Ship code from{" "} @@ -700,8 +710,8 @@ export function ShipShowcase() {

- {/* Tab rail — nudged down + slightly right on wide screens to line up with the headline row */} -
+ {/* Tab rail — sits to the right of the headline, bottom-aligned with it */} +
-
- {/* Stage — copy + big image deck, crossfaded on tab change */} -
- - - - - - + {/* Stage — copy + big image deck. All four tabs stay mounted and stacked + in the same grid cell; switching only crossfades opacity, so the big + screenshots decode once instead of re-decoding on every tab change. */} +
+ {TABS.map((item, index) => { + const selected = index === active; + return ( +
+ {selected || mountedTabs.has(index) ? ( + <> + + + + ) : null} +
+ ); + })}
); diff --git a/apps/web/src/styles/globals.css b/apps/web/src/styles/globals.css index d3dee3785..712a4659d 100644 --- a/apps/web/src/styles/globals.css +++ b/apps/web/src/styles/globals.css @@ -168,6 +168,12 @@ body { to { background-position: 250% center; } } +/* ShipShowcase tab-rotation progress bar — compositor-only transform fill. */ +@keyframes ship-progress { + from { transform: scaleX(0); } + to { transform: scaleX(1); } +} + @media (prefers-reduced-motion: reduce) { .animate-marquee, .animate-marquee-reverse, diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 4f073f454..77c0410d1 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -3,7 +3,7 @@ import react from "@vitejs/plugin-react"; export default defineConfig({ plugins: [react()], - server: { port: 4180 }, + server: { port: 4180, allowedHosts: [".trycloudflare.com"] }, build: { sourcemap: true } });