diff --git a/public/nook/demo-expansion.mp4 b/public/nook/demo-expansion.mp4 new file mode 100644 index 0000000..40215a3 Binary files /dev/null and b/public/nook/demo-expansion.mp4 differ diff --git a/src/components/nook/FeatureBreakdowns.tsx b/src/components/nook/FeatureBreakdowns.tsx index e73265b..1955384 100644 --- a/src/components/nook/FeatureBreakdowns.tsx +++ b/src/components/nook/FeatureBreakdowns.tsx @@ -764,8 +764,12 @@ function CameraDemo() { }); }); createEffect(() => { - if (phase() === "live") videoRef?.play(); - else videoRef?.pause(); + if (phase() === "live" && videoRef) { + videoRef.currentTime = 0; + videoRef.play(); + } else { + videoRef?.pause(); + } }); return ( @@ -809,9 +813,9 @@ function CameraDemo() { ref={videoRef} src="/nook/cam-recording.mp4" muted - loop playsinline preload="metadata" + onEnded={() => setPhase("idle")} class="absolute inset-0 h-full w-full object-cover transition-opacity duration-700" style={{ opacity: phase() === "live" ? 1 : 0 }} /> @@ -1027,7 +1031,7 @@ export default function FeatureBreakdowns() { body="Gated tool calls hold right in the panel. Allow, deny, or demand a reason. Walking away? The same request lands on your phone and your tap flies back to the agent." bullets={[ "Permission and question cards pin above the session list", - "Push-to-phone over your own network — no cloud middleman", + "Push-to-phone over your own network — no cloud middleman (coming soon)", "Works across every hooked agent, local or remote" ]} reversed diff --git a/src/components/nook/FeatureCollage.tsx b/src/components/nook/FeatureCollage.tsx index 944ac43..759c167 100644 --- a/src/components/nook/FeatureCollage.tsx +++ b/src/components/nook/FeatureCollage.tsx @@ -46,7 +46,10 @@ function CollageCell(props: { */ function InkStage(props: { children: JSX.Element; class?: string }) { return ( -
+
{props.children}
); @@ -153,7 +156,10 @@ function RemoteMock() {
@@ -250,9 +259,7 @@ export default function FeatureCollage() {
{/* Hero: real collapsed pill on the island surface */} -
+

The island @@ -261,9 +268,9 @@ export default function FeatureCollage() { Every agent, one glance

- A pill tucked into your notch — a campfire for your whole - fleet on the left, live data on the right. Blue running, - green ready, amber needs you. + A pill tucked into your notch — a campfire for your whole fleet + on the left, live data on the right. Blue running, green ready, + amber needs you.

@@ -304,7 +311,7 @@ export default function FeatureCollage() {
diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 99c3909..e2465dc 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -3,6 +3,7 @@ import { PageHead } from "~/components/PageHead"; import { DarkModeToggle } from "~/components/DarkModeToggle"; import { Typewriter } from "~/components/Typewriter"; import { useSite } from "~/context/SiteContext"; +import { buildSubdomainUrl } from "~/lib/site-context"; import NessaLanding from "./nessa"; import LineageLanding from "./lineage"; import GazeLanding from "./gaze"; @@ -101,6 +102,32 @@ function MainHome(): JSX.Element {
Some of my recent projects:
+ {/* The Nook */} +
+
My macOS notch utility:
+ + The Nook + +
+
+
+ A native macOS island that lives in the notch: orchestration + for a fleet of coding agents, fan curve control, thermal + gauges, calendar and camera modules. One-time purchase - no + subscription, ever. +
+
{/* FlexLöve */}
@@ -213,6 +240,7 @@ function MainHome(): JSX.Element { one.
+
diff --git a/src/routes/nook/index.tsx b/src/routes/nook/index.tsx index c3d238b..f6a20e3 100644 --- a/src/routes/nook/index.tsx +++ b/src/routes/nook/index.tsx @@ -68,8 +68,9 @@ export default function NookLanding() { {/* ── Hero ─────────────────────────────────────────────────────── */} - {/* min-h = viewport − sticky header (h-14), so it ends at the fold */} -
+ {/* -mt-14 pulls the hero under the sticky header; pt-14 re-clears + content, so the gradient fills the full viewport incl. the bar */} +