Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
1330a83
port the animation, adjust theme colors, fix mobile overflow, get rid…
PickleNik Sep 11, 2025
d0a17ee
fix animation sync, account for 1st-step edge case and last step asci…
PickleNik Sep 14, 2025
72a586d
cleanup, add datawire to show data flow
PickleNik Sep 14, 2025
d1ef0de
more line animation, 2nd transition polish
PickleNik Sep 14, 2025
cc07982
a little cleanup, fix the restart button
PickleNik Sep 18, 2025
39cad16
update theme and demo layout
PickleNik Oct 3, 2025
873048f
fix step selection, improve chat panel interactions and add backgroun…
PickleNik Oct 3, 2025
29113e0
more small ui adjustments to match new theme
PickleNik Oct 3, 2025
6ce9e99
improve url select 1st step copypaste animation visuals, adjust anima…
PickleNik Oct 6, 2025
988c556
branded meta key asset, adjust keycap animation timing
PickleNik Oct 6, 2025
f38a363
select-none draggable=false on keycap images
PickleNik Oct 6, 2025
d0d54dd
eliminate a race condition that broke animation on middle step select…
PickleNik Oct 6, 2025
6f70ffb
tweak animation timing, seer colors, add v1 of tabs ui for installati…
PickleNik Oct 7, 2025
46af73e
working tabs
PickleNik Oct 8, 2025
bcfd7d9
add overflow styles and client logos
PickleNik Oct 8, 2025
33c34e7
new layout
PickleNik Oct 13, 2025
e1c957c
couple adjustments
PickleNik Oct 13, 2025
79f6fdd
install in cursor button styles, cleanup new layout, add key componen…
PickleNik Oct 14, 2025
4ece8aa
cursor button transition styles
PickleNik Oct 24, 2025
bb83dcd
open chat letter animation
PickleNik Oct 25, 2025
cfef7c8
darker theme
PickleNik Oct 25, 2025
3efb84d
temp docs contents
PickleNik Oct 25, 2025
cdc10e5
new seer animation and step4 canvas animation
PickleNik Oct 25, 2025
ce90734
better validations summary step visual icons, cleanup BrowserAnimatio…
PickleNik Oct 28, 2025
b74facd
tweak seer opacity and timing, add seer drawer bg, tweak datawire col…
PickleNik Oct 28, 2025
168d512
fix sidebar text on smaller breakpoints, adjust footer for chat sideb…
PickleNik Oct 28, 2025
877bcc9
add respect for reduced-motion preference
PickleNik Oct 28, 2025
29453e1
cleanup some unused code, reorganize global css, fix reduced-motion p…
PickleNik Oct 28, 2025
dde263b
use cases section and a new getting started section, fix hero block o…
PickleNik Oct 30, 2025
54f692c
fixes to chat panel after the rebase, header icon size and chat panel…
PickleNik Oct 31, 2025
4da98ef
reorg index.css, replace hardcoded hex colors with tailwind using css…
PickleNik Oct 31, 2025
fc89641
equally space chat sidebar top controls in a grid
PickleNik Nov 3, 2025
bb8bcbd
remove blur from diff animation for performance
PickleNik Nov 3, 2025
644e793
adjust seer for narrower screens, remove blur from more demo transiti…
PickleNik Nov 3, 2025
e92891c
fix toc opening chat sidebar
PickleNik Nov 3, 2025
635c9ad
small adjustments to feature cards, reposition seer root cause animat…
PickleNik Nov 3, 2025
0bc4756
Cloud/Stdio tabs for getting-started section
PickleNik Nov 3, 2025
eb5bd07
rename integrations.tsx to getting-started.tsx
PickleNik Nov 3, 2025
3bbd43d
adjust padding in getting-started to match the rest of landing sections
PickleNik Nov 3, 2025
95ee86b
set installation tab icons by id within the tabs component itself ins…
PickleNik Nov 3, 2025
990b9e9
auto-scroll tabs to the end
PickleNik Nov 3, 2025
c97924e
fix missed step styles
PickleNik Nov 3, 2025
9bec370
remove extra tabs to the left of line numbers in diffs, cache demo.ca…
PickleNik Nov 3, 2025
4e80b2e
add chat sidebar ui grid spacer for logged-out state, change stepper …
PickleNik Nov 4, 2025
d7a0d04
demo steps without asciinema remounts
PickleNik Nov 4, 2025
5170e3c
adjust line# per-step, fix speed display, fix mobile layout overlap w…
PickleNik Nov 5, 2025
d5419df
change tools to skills
PickleNik Nov 5, 2025
f6f6152
fixed number of rows in the terminal demo, fix mobile overlap and adj…
PickleNik Nov 6, 2025
18d963c
adjust pause timing for mobile, adjust >>speedx size on mobile
PickleNik Nov 6, 2025
6e8ef10
add copy to feature cards
PickleNik Nov 6, 2025
fa2839e
move asciinema-player to runtime deps
PickleNik Nov 6, 2025
08c70c3
cleanup unused import after rebase
PickleNik Nov 12, 2025
a5f88b5
fix minor chat sidebar top controls background clipping issue on mobi
PickleNik Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "0.0.1",
"private": true,
"type": "module",
"packageManager": "pnpm@10.8.1",
"packageManager": "pnpm@10.15.1",
"engines": {
"node": ">=20"
},
Expand Down
5 changes: 2 additions & 3 deletions packages/mcp-cloudflare/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
"private": true,
"type": "module",
"license": "FSL-1.1-ALv2",
"files": [
"./dist/*"
],
"files": ["./dist/*"],
"exports": {
".": {
"types": "./dist/index.ts",
Expand Down Expand Up @@ -55,6 +53,7 @@
"@sentry/react": "catalog:",
"agents": "catalog:",
"ai": "catalog:",
"asciinema-player": "^3.10.0",
"better-sqlite3": "catalog:",
"class-variance-authority": "catalog:",
"clsx": "catalog:",
Expand Down
4,604 changes: 4,604 additions & 0 deletions packages/mcp-cloudflare/public/demo.cast

Large diffs are not rendered by default.

Binary file added packages/mcp-cloudflare/public/keycap-c.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/mcp-cloudflare/public/keycap-v.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/mcp-cloudflare/public/keycap-⌘.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 38 additions & 51 deletions packages/mcp-cloudflare/src/client/app.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
import { Header } from "./components/ui/header";
import { useState, useEffect } from "react";
import { Chat } from "./components/chat";
import { useAuth } from "./contexts/auth-context";
import { useState, useEffect } from "react";

import { Header } from "./components/ui/header";
import { HeaderDivider } from "./components/hero/header-divider";
import { Sidebars } from "./components/home-layout/sidebars";

import HeroBlock from "./components/hero/hero-block";
import UseCases from "./components/usecases";
import GettingStarted from "./components/getting-started";

import TableOfContents from "./components/docs/toc";
import Home from "./pages/home";

import Footer from "./components/home-layout/footer";

export default function App() {
const { isAuthenticated, handleLogout } = useAuth();

Expand All @@ -16,14 +27,8 @@ export default function App() {
return urlParams.get("chat") !== "0";
}

// Default based on screen size to avoid flash on mobile
// Note: This is safe for SSR since we handle the correction in useEffect
if (typeof window !== "undefined") {
return window.innerWidth >= 768; // Desktop: open, Mobile: closed
}

// SSR fallback - default to true for desktop-first approach
return true;
// default to false for mobile and to avoid scroll lock on desktop
return false;
});

// Adjust initial state for mobile after component mounts
Expand Down Expand Up @@ -71,56 +76,38 @@ export default function App() {
return () => window.removeEventListener("popstate", handlePopState);
}, []);

// Handle window resize to adjust chat state appropriately
useEffect(() => {
const handleResize = () => {
// If no explicit URL state, adjust based on screen size
const urlParams = new URLSearchParams(window.location.search);
if (!urlParams.has("chat")) {
const isDesktop = window.innerWidth >= 768;
setIsChatOpen(isDesktop); // Open on desktop, closed on mobile
}
};

window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);

return (
<div className="min-h-screen text-white">
{/* Mobile layout: Single column with overlay chat */}
<div className="md:hidden h-screen flex flex-col">
<div className="flex-1 overflow-y-auto sm:p-8 p-4">
<div className="max-w-3xl mx-auto">
<Header isAuthenticated={isAuthenticated} onLogout={handleLogout} />
<Home onChatClick={() => toggleChat(true)} />
</div>
</div>
</div>

{/* Desktop layout: Main content adjusts width based on chat state */}
<div className="hidden md:flex h-screen">
<div
className={`flex flex-col ${isChatOpen ? "w-1/2" : "flex-1"} md:transition-all md:duration-300`}
<div className="overflow-x-clip max-w-screen relative">
{/* //!NOTE: order matters for z- */}
<Sidebars isChatOpen={isChatOpen} toggleChat={toggleChat} />
<Header toggleChat={toggleChat} isChatOpen={isChatOpen} />
<HeaderDivider />

<HeroBlock />
<UseCases />
<GettingStarted />

{/* main content */}
<div className="relative container mx-auto">
<aside className="max-xl:hidden absolute h-full right-15 inset-y-0">
<TableOfContents />
</aside>
<main
className={`max-w-3xl px-4 sm:px-8 xl:max-w-1/2 mx-auto motion-safe:duration-300 ease-[cubic-bezier(0.25,0.46,0.45,0.94)] ${
isChatOpen ? "xl:-translate-x-1/2" : ""
}`}
>
<div className="flex-1 overflow-y-auto sm:p-8 p-4">
<div className="max-w-3xl mx-auto">
<Header
isAuthenticated={isAuthenticated}
onLogout={handleLogout}
/>
<Home onChatClick={() => toggleChat(true)} />
</div>
</div>
</div>
<Home onChatClick={() => toggleChat(true)} />
</main>
</div>

{/* Single Chat component - handles both mobile and desktop layouts */}
<Chat
isOpen={isChatOpen}
onClose={() => toggleChat(false)}
onLogout={handleLogout}
/>

<Footer isChatOpen={isChatOpen} />
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import BrowserWindow from "./browser-ui/BrowserWindow";
import IDEWindow from "./browser-ui/IDEWindow";
import LoadingSquares from "./browser-ui/LoadingSquares";
import ValidationSummary from "./tests";

export default function BrowserAnimation({
globalIndex,
}: {
globalIndex: number;
}) {
return (
<div className="relative h-full w-full hidden md:block bg-dots bg-fixed">
<IDEWindow step={globalIndex} />
<BrowserWindow step={globalIndex} />
<LoadingSquares step={globalIndex} />
<ValidationSummary step={globalIndex} />
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
type DatarWireProps = {
active?: boolean;
direction?: "ltr" | "rtl";
baseColorClass?: string; // solid wire color
pulseColorClass?: string; // pulse highlight
heightClass?: string; // Tailwind height, e.g. "h-1"
periodSec?: number; // cycle duration
pulseWidthPct?: number; // width of pulse %
delaySec?: number; // NEW: delay before animation starts
className?: string;
};

export default function DataWire({
active = true,
direction = "ltr",
baseColorClass = "bg-white/0",
pulseColorClass = "text-violet-400",
heightClass = "h-0.5",
periodSec = 0.5,
pulseWidthPct = 100,
delaySec = 0,
className = "",
}: DatarWireProps) {
return (
<div
className={[
"wire w-full",
heightClass,
baseColorClass,
pulseColorClass,
active ? "" : "wire-paused",
direction === "rtl" ? "wire-rtl" : "",
className,
].join(" ")}
style={
{
"--period": `${periodSec}s`,
"--pulse-w": `${pulseWidthPct}%`,
"--delay": `${delaySec}s`,
} as React.CSSProperties
}
/>
);
}
Loading