diff --git a/docs/presentation/assets/p1-01.png b/docs/presentation/assets/p1-01.png new file mode 100644 index 0000000..88c40d0 Binary files /dev/null and b/docs/presentation/assets/p1-01.png differ diff --git a/docs/presentation/assets/p1-02.png b/docs/presentation/assets/p1-02.png new file mode 100644 index 0000000..4f76bdd Binary files /dev/null and b/docs/presentation/assets/p1-02.png differ diff --git a/docs/presentation/assets/p1-03.png b/docs/presentation/assets/p1-03.png new file mode 100644 index 0000000..e99b43f Binary files /dev/null and b/docs/presentation/assets/p1-03.png differ diff --git a/docs/presentation/assets/p1-04.png b/docs/presentation/assets/p1-04.png new file mode 100644 index 0000000..36ed8f1 Binary files /dev/null and b/docs/presentation/assets/p1-04.png differ diff --git a/docs/presentation/assets/p1-05.png b/docs/presentation/assets/p1-05.png new file mode 100644 index 0000000..8e83793 Binary files /dev/null and b/docs/presentation/assets/p1-05.png differ diff --git a/docs/presentation/assets/p2-01.png b/docs/presentation/assets/p2-01.png new file mode 100644 index 0000000..7161c4a Binary files /dev/null and b/docs/presentation/assets/p2-01.png differ diff --git a/docs/presentation/assets/p2-02.png b/docs/presentation/assets/p2-02.png new file mode 100644 index 0000000..4613f59 Binary files /dev/null and b/docs/presentation/assets/p2-02.png differ diff --git a/docs/presentation/assets/p2-03.png b/docs/presentation/assets/p2-03.png new file mode 100644 index 0000000..6e176ce Binary files /dev/null and b/docs/presentation/assets/p2-03.png differ diff --git a/docs/presentation/assets/p2-04.png b/docs/presentation/assets/p2-04.png new file mode 100644 index 0000000..85c3ff8 Binary files /dev/null and b/docs/presentation/assets/p2-04.png differ diff --git a/docs/presentation/assets/p3-01.png b/docs/presentation/assets/p3-01.png new file mode 100644 index 0000000..41de7de Binary files /dev/null and b/docs/presentation/assets/p3-01.png differ diff --git a/docs/presentation/assets/p3-02.png b/docs/presentation/assets/p3-02.png new file mode 100644 index 0000000..414a471 Binary files /dev/null and b/docs/presentation/assets/p3-02.png differ diff --git a/docs/presentation/assets/p3-03-alt.png b/docs/presentation/assets/p3-03-alt.png new file mode 100644 index 0000000..16074c6 Binary files /dev/null and b/docs/presentation/assets/p3-03-alt.png differ diff --git a/docs/presentation/assets/p3-03.png b/docs/presentation/assets/p3-03.png new file mode 100644 index 0000000..0ff0b77 Binary files /dev/null and b/docs/presentation/assets/p3-03.png differ diff --git a/docs/presentation/assets/p3-04.png b/docs/presentation/assets/p3-04.png new file mode 100644 index 0000000..8d51f88 Binary files /dev/null and b/docs/presentation/assets/p3-04.png differ diff --git a/docs/presentation/outline.md b/docs/presentation/outline.md new file mode 100644 index 0000000..3d0b9b4 --- /dev/null +++ b/docs/presentation/outline.md @@ -0,0 +1,181 @@ +# DeskClaw — Final Presentation Outline + +Working outline for the final-term presentation. Companion files: + +- [`scripts.md`](scripts.md) — spoken scripts, slide by slide. +- [`slides/`](slides/) — one self-contained, **full-page** HTML mock per slide (rich layout, not a fixed slide box), for copying layout/visuals into Canva. Open each `.html` in a browser. + +> Status: **COMPLETE — P1 + P2 + P3 all built** (13 slides + full scripts + demo ops checklist), synced to the final project state (PRs through #39, 97/97 + 14 evals verified). Remaining work is yours: rebuild in Canva from the HTML mocks, record the backup video, assign [P1]/[P2]/[P3], rehearse to time. + +--- + +## Logistics + +- **3 presenters**, **~15 minutes**, **live demo** (run on `main`, with a recorded backup). +- This is a **final** presentation: the proposal was already delivered (April 2026), so kept slides are **recapped, not re-explained** — the new job is to show the journey from proposal → delivered. + +### Presenter split + +| Block | Presenter | Theme | Time | Slides | +|---|---|---|---|---| +| **A** | P1 | Why & What (problem + scope decisions) | ~4.5 min | P1-01 … P1-05 | +| **B** | P2 | How it's built & verified (architecture, safety, eval) | ~5 min | P2-* | +| **C** | P3 | See it & where it goes (live demo + future) | ~5 min | P3-* | + +--- + +## Brand / design tokens (match these in Canva) + +Pulled from the proposal deck so the final matches. + +| Token | Value | Use | +|---|---|---| +| Cream (background) | `#F3EDD5` | Every slide background | +| Ink (text) | `#26241F` | Body text, rules, dark pill | +| Red (primary) | `#C62D2C` | DESKCLAW wordmark, display headings, accents | +| Red bright | `#FF4B45` | Mascot antennae, highlighter marks, "cut" markers | +| Teal | `#16D2C4` | Mascot eyes, journey dots, "kept/added" markers | +| Plum (deep) | `#7A1E1A` | Source captions, secondary accents, shadows | +| Display font | **Playfair Display**, *italic* | Big headline words (e.g. *Conversational Bottleneck*) | +| Label font | **Archivo**, 800 (uppercase, tracked) | Eyebrow labels (e.g. PROBLEM STATEMENT) | +| Wordmark font | **Archivo**, 900 | "DESKCLAW" | +| Body font | **Inter**, 400/600 | Bullets and supporting text | + +> In Canva: Playfair Display ≈ your italic serif; Archivo ≈ the bold label sans (or Helvetica/Arial Bold); Inter ≈ body. Same hex codes throughout. + +Extras the full-page mocks add (keep if you like them, drop if not): a faint paper-grain texture, soft drop-shadows on cards, a highlighter swipe behind key words, and a gentle entrance animation. All optional — the core palette/fonts above are what must match. + +### Real assets available (use instead of mockups where you can) + +In [`../assets/`](../assets/): `deskclaw-logo.png` + `deskclaw-logo-full.png` (swap for the mascot placeholder on the title slide), `storefront-catalogue.png`, `storefront-product.png`, `storefront-routines.png`, `admin-dashboard.png`. These are real product screenshots — ideal for P1-03 ("what it is"), the P2 agentic-loop / admin beat, and P3 (skills catalogue + demo backup stills). + +### Mascot pose set — ✅ GENERATED (in [`assets/`](assets/)) + +One slide-relevant pose of the DeskClaw crab per slide — recurring character, Duolingo-owl style. **All 13 poses are generated and live as `assets/p.png`** (e.g. `assets/p1-02.png`; `p3-03-alt.png` is an alternate shrug take — pick whichever reads better in Canva). The prompt table below is kept for regeneration. + +Placement rules: +- Big mascot on P1-01 / P3-02 / P3-04; **small corner accent** on dense slides (P2-04, P3-01). +- "Animation" = static pose + Canva element animation (rise/pop/wiggle). If one true animation, spend it on the title or the P2-03 alarm-clock beat. +- To regenerate a pose: attach the existing pose (or `docs/assets/deskclaw-logo-full.png`) as the reference image, prompt "this exact character, new pose", and append: `flat vector mascot, red crab with headset, simple shapes, no text, no extra characters, white background`. + +| Slide | Pose prompt (append the style string) | +|---|---| +| P1-01 | use the real logo as-is | +| P1-02 | overwhelmed crab buried under a pile of chat speech bubbles, sweat drop, frazzled antennae | +| P1-03 | friendly concierge crab, welcoming open claws, holding a small green leaf sprig | +| P1-04 | detective crab examining documents with a magnifying glass | +| P1-05 | tour-guide crab pointing proudly at a wooden signpost with arrows | +| P2-01 | builder crab in a yellow hard hat stacking three labeled blocks | +| P2-02 | guard crab holding a shield, other claw raised in a firm "stop" | +| P2-03 | sleepy-but-working crab at a desk at dawn, coffee cup, typing an email, alarm clock ringing | +| P2-04 | scientist crab in a lab coat holding a clipboard with a big checkmark | +| P3-01 | performer crab juggling ten small colorful icons | +| P3-02 | showman crab in a spotlight, ta-da pose, confetti | +| P3-03 | sincere crab shrugging with one claw open, honest smile | +| P3-04 | crab peeking from the bottom corner, waving one claw | + +--- + +## P1 — Why & What (Presenter 1, ~4.5 min) + +**Goal:** set up the problem, say plainly what DeskClaw is, and tell the proposal → delivery evolution story. **No architecture, safety mechanics, or eval** (those are P2). + +| # | Slide | Kept / New | Purpose | ~Time | File | +|---|---|---|---|---|---| +| P1-01 | Title | **Kept** (refresh: "Final") | Re-introduce DeskClaw + team | 20s | [`slides/p1-01-title.html`](slides/p1-01-title.html) | +| P1-02 | Problem — Conversational Bottleneck | **Kept** (recap) | Why this matters; the social-commerce stats | 45s | [`slides/p1-02-problem.html`](slides/p1-02-problem.html) | +| P1-03 | What DeskClaw is | **New** | One-line definition + the lifecycle + two surfaces + the proactive-owner teaser | 50s | [`slides/p1-03-what-is-deskclaw.html`](slides/p1-03-what-is-deskclaw.html) | +| P1-04 | From proposal to delivery | **New** | The evolution beat: what changed and why | 70s | [`slides/p1-04-evolution.html`](slides/p1-04-evolution.html) | +| P1-05 | What we built (scope) | **Adapted** (from Objectives) | Capabilities mapped to the journey; hand off to P2 | 45s | [`slides/p1-05-scope.html`](slides/p1-05-scope.html) | + +**Adjustment notes for kept slides:** +- **P1-01 / P1-02** were shown at proposal. Don't re-teach them — the script does a fast recap and pivots to "…and here's what we actually did about it." +- **P1-05** replaces the proposal's *Objectives* slide: same three pillars (Automated Support / Active Sales / Brand Safety) but reframed as *delivered* capabilities, and honest about the one pillar we deliberately narrowed (margin negotiation → cut). + +--- + +## Skill inventory (authoritative — source for the P3 catalogue) + +Two altitudes, on purpose: + +- **P1-05 = the *journey* (evergreen).** Six stages — Discover · Ask · Buy · Track · Return · Escalate. New skills slot into an existing stage, so this slide **never needs restructuring** as you add features. +- **P3 "All skills" = the *full list* (living).** This is the one slide you keep current. Design it as a card grid so adding a skill = adding one card. + +DeskClaw now has **two actors**, and the deck should show both: + +**A. Customer side** — the journey on P1-05. 9 customer-facing skills + storefront features: + +| Stage | Skill(s) / feature | Notes | +|---|---|---| +| Discover | `search-products`, `routine-concierge`, `/routines` builder | recommendations; conversational AM/PM routine-builder skill + the deterministic storefront page | +| Ask | `policy-oracle` | policy + product-compatibility + routine-ordering, answer-only-from-data | +| Buy | `cart-actions`, `checkout` | add/remove/update cart; mock checkout (no payment) | +| Track | `order-status` | read-only, identity-gated | +| Return | `returns-actions` | return/exchange **request** + refund-status read | +| Escalate | `sentiment-router` | classify + durable handoff record + **emails the owner** | +| Access (cross-cutting) | `account-registration`, web `/login` `/register` `/account` | create/link account; storefront auth (incl. admin role) | + +**B. Owner / ops side** — the agentic, human-in-the-loop layer (PRs #27–#30, 2026-06-10): + +| Capability | Skill / surface | Notes | +|---|---|---| +| Proactive digest | `ops-digest` skill (`npm run ops:digest`) | **autonomous** — scheduled run wakes the agent with no human prompt; read-only store inspection → owner email. **The showpiece.** | +| Outbound notify | `shop_owner_notify` (Resend) | first async outbound channel; **owner-only by construction**, model-composed body, rate-limited, live/dry. Used by `sentiment-router` + `checkout` + `ops-digest`. | +| Staff ops panel | web `/admin` (admin role) | resolve handoffs / advance orders / restock; audited; **no money movement**. Closes the loop the digest opens. | + +**10 skills total** (9 customer-facing + `ops-digest`) · **29 typed MCP tools** · **97 deterministic + 14 model-in-the-loop evals** (verified by running `shop:eval` 2026-06-11; README badges synced in PR #40) · CI green. Channels: terminal chat + **real WhatsApp** (OpenClaw plugin) + web storefront, with a **cross-channel bridge** (PR #35–#37: register in chat → get your account code → log in on the web with the same account; `shop_account_code_get` recovers it). **Project is feature-frozen as of PR #39 — treat as final.** + +> Persona note for the demo/scripts: to customers the agent is **"Amelya's Concierge" 🌿** (warm boutique tone); **"DeskClaw" is the platform name.** Title slide = DeskClaw; live demo, the agent introduces itself as Amelya's. + +> The project is **feature-frozen for the presentation** — but if anything does land late, the structure absorbs it: customer skills slot into their journey stage on P1-05 (no change) + a card on the P3 catalogue; owner/ops capabilities go in table B and the agentic-loop beat. These two tables are the source of truth. + +## P2 — How it's built & verified (Presenter 2, ~5 min) + +**Goal:** show that DeskClaw is *safe by design* and *proven*, and reveal the agentic loop. This is the engineering-credibility block. + +| # | Slide | Purpose | ~Time | File | +|---|---|---|---|---| +| P2-01 | Architecture — three layers + MCP boundary | The model never touches the database; everything goes through typed tools. Why a new skill is cheap. | 70s | [`slides/p2-01-architecture.html`](slides/p2-01-architecture.html) | +| P2-02 | The safety pipeline | identity → preview → confirm → audit; channel-bound identity; structural guarantees (owner-only email, no autonomous money movement). | 70s | [`slides/p2-02-safety.html`](slides/p2-02-safety.html) | +| P2-03 | The agentic loop *(showpiece)* | Scheduled run wakes the agent unprompted → reads the store → emails the owner → staff resolves in `/admin`. Verified live. | 80s | [`slides/p2-03-agentic-loop.html`](slides/p2-03-agentic-loop.html) | +| P2-04 | Evaluation — how we know it works | Two-layer harness (deterministic `shop:eval` 97/97 + 14 model-in-the-loop `agent:eval`) + GitHub Actions CI + live end-to-end verification. | 70s | [`slides/p2-04-evaluation.html`](slides/p2-04-evaluation.html) | + +**Notes:** +- P2-03 is the *concept/diagram* of the agentic loop; the **live run** of it is the demo climax in P3. Don't double-spend — P2 explains it, P3 shows it. +- Keep P2-01/02 at "how it's safe," not a code tour. The audience needs the *shape* (typed boundary, gated mutations), not the TypeScript. +- The honest caveat to state on P2-03: "proactive" fires only while the machine + gateway are up (local-first, no always-on server). + +## P3 — See it & where it goes (Presenter 3, ~5 min) + +**Goal:** the payoff. Fast skill catalogue, the live demo as the centerpiece, then an honest close. The demo *shows* what P2 explained — don't re-explain, narrate. + +| # | Slide | Purpose | ~Time | File | +|---|---|---|---|---| +| P3-01 | Ten skills, two sides | The living card grid — 9 customer skills + the owner loop. Narrate fast; the demo proves it. | 35s | [`slides/p3-01-skills-catalogue.html`](slides/p3-01-skills-catalogue.html) | +| P3-02 | Live demo | Stays on screen *during* the demo — the 5 beats as a visible path so the audience always knows where we are. | ~3.5 min | [`slides/p3-02-live-demo.html`](slides/p3-02-live-demo.html) | +| P3-03 | Honest close — limits & where it goes | Fenced-on-purpose vs honest limits vs future. | 45s | [`slides/p3-03-future-work.html`](slides/p3-03-future-work.html) | +| P3-04 | Takeaways + Thank You | One-line summary, stats, repo link, mascot. | 20s | [`slides/p3-04-thank-you.html`](slides/p3-04-thank-you.html) | + +### Demo arc (5 beats) + +1. **Register in chat** (`account-registration`) — new customer over WhatsApp/terminal; agent states the account code. *Pre-stage recommended (see below) — show the thread, don't type it live.* +2. **Routine concierge** — one ask ("AM/PM routine for dry skin under NT$2000") → regimen → bundle into cart, **confirmed per item** (the rails, live). +3. **Checkout** — preview → confirm → order placed (no payment, by design). +4. **Cross-channel bridge** — storefront login with the same account → the order is *there*. One identity, two doors. +5. **Climax: the agent wakes alone** — `npm run ops:digest` → model-composed email lands in the owner's Gmail → log into `/admin` → the dashboard mirrors the digest → resolve the handoff. + +### Demo ops — checklist & gotchas (the difference between a demo and an incident) + +**Night before:** `git pull` + `npm run build`; run `npm run shop:eval` (expect 97/97); **record the backup video** of the full arc; charge the phone (WhatsApp beat). + +**30 min before:** +- Start `openclaw gateway`; send one throwaway terminal message to confirm the model answers. +- **`npm run shop:reset`** — critical twice over: it seeds the demo-ready ops state (1 open handoff, 1 order stuck in processing, 2 low-stock products) **and clears `notifications`, which resets the ops-digest once-per-day dedupe.** If you fired a digest earlier that day without a reset, the live one will silently send nothing. +- Check `.env`: `RESEND_API_KEY`, `OWNER_EMAIL`, `DESKCLAW_NOTIFY_MODE=live` (default is `dry` = records but never sends). Resend's free sender only delivers to the signed-up owner inbox — that's fine, that's the demo. +- Open tabs in order: storefront home · `/login` · owner Gmail · terminal. Phone unlocked on the WhatsApp thread. + +**Pre-stage beat 1:** do the registration over WhatsApp *before* the talk and show the thread on screen ("we registered as a new customer this morning — here's the conversation"). Live registration takes 3–4 model turns and burns a minute of demo time for low drama. Beats 2–5 run live. + +**Fallback ladder:** model slow → talk over it (script has filler lines). Gateway dies → switch to the backup video, same narration. Email doesn't land in ~20s → show the owner's screenshot of the previously delivered live email (exists from the e2e verification) and move on; the `/admin` beat still works because the digest state is in the store. + +**Persona note:** on screen the agent answers as **Amelya's Concierge 🌿** — say once that DeskClaw is the platform, Amelya's is the brand it's serving. diff --git a/docs/presentation/scripts.md b/docs/presentation/scripts.md new file mode 100644 index 0000000..45a5237 --- /dev/null +++ b/docs/presentation/scripts.md @@ -0,0 +1,103 @@ +# DeskClaw — Final Presentation Scripts + +Spoken scripts, slide by slide. Companion to [`outline.md`](outline.md) and the HTML mocks in [`slides/`](slides/). + +**How to read this** +- `[click]` = advance slide. `[pause]` = beat for emphasis. +- Times are targets, not limits — say it naturally. +- **RECAP** marks a slide shown at the proposal: keep it fast, don't re-teach. +- Voice: first-person plural, warm, confident. This is a *final* — we're showing what we delivered, not what we hope to do. + +> Status: **COMPLETE — all three blocks scripted** (P1 why/what · P2 how/verified · P3 demo/close), aligned to the final project state (PRs through #39). Presenter assignments are placeholders: [P1] / [P2] / [P3]. + +--- + +## P1 — Presenter 1 (~4.5 min) + +### Opening line (before P1-01, ~10s) +> "Hi everyone — we're the team behind DeskClaw. Back in April we pitched you an idea; today we're going to show you what it became — and where it grew past the plan." + +*(Presenter blocks are placeholders — assign [P1] / [P2] / [P3] among yourselves; names live on the title slide only.)* + +### P1-01 — Title (~20s) · *RECAP* +> "Quick reminder of what DeskClaw is: a **full-lifecycle conversational commerce agent for local D2C brands**. [pause] You've seen the name — what's new today is everything *behind* it. Let's start with the problem we set out to solve." + +*[click]* + +### P1-02 — Problem: Conversational Bottleneck (~45s) · *RECAP* +> "You'll remember the core problem — the **conversational bottleneck**. Shopping has moved into the chat window: 60% of people discover products on Instagram, 90% of Taiwanese consumers use LINE every day, and roughly 90% of Asian users buy through social channels. [pause] But small D2C brands answer those chats by hand — the same questions over and over — or they bolt on a rigid chatbot that can't actually *do* anything. The result is repetitive queries, lost sales, and frustrated customers. [pause] That was our starting point. So — what did we build?" + +*[click]* + +### P1-03 — What DeskClaw is (~50s) · *NEW* +> "DeskClaw is a **local-first conversational commerce agent** for a small D2C skincare brand — we built a fictional one called **Amelya's** to make it real. [pause] The key word is **full-lifecycle**: it doesn't just answer FAQs. It walks the customer through the whole journey — **discover** a product, **buy** it, **track** the order, **return** it if needed — and it knows when to **hand off to a human**. [pause] It lives in two places that share one brain: the **chat agent** — which customers reach over **real WhatsApp** — and a companion **web storefront**. Same data, same rules, two front doors. [pause] And one more thing, which we'll come back to: it doesn't only *react*. DeskClaw also works **proactively, for the owner**." + +*[click]* + +### P1-04 — From proposal to delivery (~70s) · *NEW — the key slide* +> "Now, the honest part — what changed since April. [pause] We proposed three pillars: automated support, active sales, and brand safety. Two of them we delivered and went *further* on. The third — 'active sales' — we'd pitched as **margin-aware price negotiation**. [pause] When we actually researched what small skincare brands need, the evidence said: **don't** let a bot haggle or move money on its own — it's risky and it's not what customers actually ask for. So we **cut** it. [pause] And we spent that effort where the real demand was: the **post-purchase lifecycle** — cart, checkout, orders, returns — plus a proper **evaluation harness**, and then something we never promised in April: a **proactive ops agent** that emails the owner and a staff panel to act on it. You'll see both later. [pause] So the scope didn't shrink — it got *sharper*, and then it grew past the proposal. The word 'full-lifecycle' in our title is actually **more true today** than it was in the proposal. That's the story of this project: **evidence over ambition**." + +*[click]* + +### P1-05 — What we built / scope (~45s) · *ADAPTED from Objectives* +> "Here's the finished scope, mapped to that journey. **Discover** — product search, recommendations, even a full skincare-routine concierge. **Ask** — policy and product answers, grounded only in the brand's own documents. **Buy** — build a cart and check out, safely. **Track** — order and delivery status. **Return** — file a return or exchange request. And across all of it, **escalate** to a human the moment something's sensitive. [pause] Every one of these was chosen from research — including the things we *deliberately left out*, which we'll be upfront about at the end. [pause] So that's the *what*. [P2] will show you the *how* — how we make all of this safe by design." + +*[hand off to P2]* + +--- + +## P2 — Presenter 2 (~5 min) + +### P2-01 — Architecture: three layers + the MCP boundary (~70s) +> "So how is this built so it's actually safe? Three layers, with one hard rule between them. [click] At the top, the **skill** — that's just instructions, the agent's playbook for a situation. In the middle, **typed tools** — small, validated operations like 'preview adding this item' or 'look up this order.' And at the bottom, the **shared data**. [pause] Here's the rule that makes it safe: **the model never touches the database directly.** It can only act by calling a typed tool — there's no 'run this SQL' escape hatch. So every action the agent takes is one we defined, validated, and logged. [pause] And because the tools and data are shared, adding a new skill is cheap — most of the time it's new instructions plus maybe one new tool. That's how we got from four skills to ten without the thing collapsing under its own weight." + +*[click]* + +### P2-02 — The safety pipeline (~70s) +> "Every action that *changes* something runs through the same four steps. [click] **Identity** — and this is the important one — we never trust an ID the customer types. Identity comes from the channel itself: who sent the message. So you can't read someone else's orders by guessing an order number. **Preview** — the tool shows exactly what will happen. **Confirm** — nothing commits until the customer explicitly says yes. **Audit** — every action is logged. [pause] And some guarantees are *structural*, not just promises. The owner-notification tool has **no recipient field** — it can only email the owner, so a customer can never be emailed by accident. The agent **never moves money** — refunds and cancellations always go to a human. [pause] We didn't bolt safety on at the end. The pipeline *is* the architecture." + +*[click]* + +### P2-03 — The agentic loop (~80s) · *showpiece — concept here, live in the demo* +> "Now the part we're proudest of. DeskClaw isn't only reactive — it works **on its own**, for the owner. [click] Here's the loop. A **schedule** wakes the agent in the morning — **no human prompt at all.** It reads the shop, read-only — open handoffs, orders stuck in processing, low stock — and it **composes and sends the owner an email**: a morning ops digest, in its own words, not a template. [pause] The owner reads it, logs into the **admin panel**, and clears the queue — resolves the handoff, ships the order, restocks the product. And the next morning's digest reflects what's fixed. [pause] That's a full operational loop: the agent surfaces the work, a human closes it. And this isn't a mock-up — we've run it live: the agent triaged a real WhatsApp complaint, escalated it, and a real email landed in the owner's inbox. You'll see that in a minute. [pause] One honest caveat: it's local-first, so 'proactive' means *while our machine and gateway are running* — there's no always-on server. But the agent behavior is real." + +*[click]* + +### P2-04 — Evaluation: how we know it works (~70s) +> "Last thing from me — how do we *know* any of this works, instead of just hoping? We test it on two levels. [click] **Tool level** — deterministic tests with no model involved, that assert the safety guarantees directly: unlinked identity is refused, you can't confirm someone else's action, every mutation writes a log. That suite is at **97 passing, zero failing**. **Agent level** — we drive the *real* model through **14 scenarios** and check it routes to the right skill, answers only from data, and asks before mutating. [pause] Both run automatically in **CI** on every change. And the whole loop has been verified **live, end-to-end**. [pause] So when we say it's safe, that's not a claim — it's a test suite. [pause] Now — let's actually watch it work." + +*[hand off to P3 for the live demo]* + +## P3 — Presenter 3 (~5 min) + +### P3-01 — Ten skills, two sides of the counter (~35s) +> "Here's everything DeskClaw can do today — ten skills. [click] Nine face the **customer**: search, a routine concierge, policy answers, cart, checkout, order tracking, returns, account registration, and escalation. And one faces the **owner**: the proactive ops digest, with an email channel and an admin panel around it. [pause] I'm not going to walk through cards — it's faster to just show you. Let's run it for real." + +*[click → demo slide stays on screen; switch to the live windows]* + +### P3-02 — Live demo (~3.5 min) · *the centerpiece* + +**(Beat 1 — pre-staged registration, ~20s)** *[show the WhatsApp thread on the phone/screen]* +> "Before the talk, we registered as a brand-new customer — over **real WhatsApp**. Here's the conversation: we said 'I'd like an account', the agent — you'll see it answers as *Amelya's Concierge*, the brand DeskClaw is serving — confirmed the name, created the account, and gave us an **account code**. Keep that code in mind; it comes back in a minute. [pause] Notice what we *didn't* do: we never typed an ID to prove who we are. The WhatsApp number itself is the identity." + +**(Beat 2 — routine concierge, live, ~60s)** *[type: "can you build me a morning and night routine for dry skin, under NT$2000?"]* +> "Now, one natural ask — a full skincare routine, with a budget." *(while the model works:)* "What's happening behind the scenes: it's searching the catalog, checking the brand's own compatibility rules — which products pair, what order to apply — and pricing the bundle. No outside knowledge, only the brand's data." *[regimen appears]* "There's the regimen — morning and night, under budget. It offers to add the bundle… let's say yes." *[confirm; per-item previews appear]* "And here's the thing to watch: **it never adds a single item without asking.** Every line gets a preview and a yes. That's the safety rail from [P2]'s section — live." + +**(Beat 3 — checkout, live, ~30s)** *[type: "check out please" → preview → "yes"]* +> "Checkout: it previews the items and the total, waits for the yes… and the order is placed. No payment — that's by design, the agent never touches money — but it's a real order record, stock decremented, audit logged." + +**(Beat 4 — cross-channel bridge, live, ~40s)** *[switch to storefront, register/log in with the account code, open Orders]* +> "Now the bridge. Same brand, different door — the web storefront. We sign in using that **account code** from WhatsApp… and look at the orders page: **the order we just placed in chat is right there.** One identity, two channels, one brain. The web session resolves through exactly the same identity path as the chat did." + +**(Beat 5 — the climax: the agent wakes alone, ~60s)** *[terminal: `npm run ops:digest`]* +> "Last one — the part nobody asked for in chat. Every morning, a schedule wakes the agent with **no human prompt**. We'll trigger that morning right now." *(while it runs:)* "It's reading the shop on its own: open escalations, orders stuck in processing, products running low… and now it's writing the owner an email — its own words, not a template." *[switch to Gmail; the digest lands]* "There it is — a real email, in the owner's real inbox. [pause] And the loop closes on the human side:" *[log into `/admin`]* "the admin panel shows the same queues — there's the handoff from the digest — and a human resolves it. [pause] Agent surfaces the work, human closes it. That's the whole thesis on one screen." + +*[click → P3-03]* + +### P3-03 — Honest close: limits & where it goes (~45s) +> "Where this stands, honestly. Some things are **fenced on purpose** — the agent never moves money, never changes a shipping address, never messages customers unprompted. Those were research calls, not gaps. [pause] Some things are **real limits** — it's local-first, so 'proactive' only runs while our machine is up; the account code stands in for a real one-time code we'd deliver out-of-band in production. [pause] And the future is cheap by design: a new channel — Instagram, LINE, Telegram — is a **gateway adapter**, not a rewrite, because identity, tools, and safety all live below the channel." + +*[click]* + +### P3-04 — Takeaways + Thank You (~20s) +> "So: a full-lifecycle commerce agent — ten skills, twenty-nine typed tools, a hundred-plus tests — that can sell, support, escalate, and even run the morning ops — and **can't** spend a single dollar without a human. [pause] Evidence over ambition. Thanks — we're happy to take questions." diff --git a/docs/presentation/slides/p1-01-title.html b/docs/presentation/slides/p1-01-title.html new file mode 100644 index 0000000..3b19e34 --- /dev/null +++ b/docs/presentation/slides/p1-01-title.html @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
FINAL PRESENTATION · JUNE 2026
+ +
+

The shop that chats back —

+

DESKCLAW

+
Full-lifecycle conversational commerce agent for local D2C brands
+
+ +
+
June 2026
+
+ 1123522 Carlene + 1123542 Levinson + 1123543 Marvel +
+
+
+ + diff --git a/docs/presentation/slides/p1-02-problem.html b/docs/presentation/slides/p1-02-problem.html new file mode 100644 index 0000000..33f7103 --- /dev/null +++ b/docs/presentation/slides/p1-02-problem.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +
+
PROBLEM STATEMENT
+
+ +
+

Conversational
Bottleneck

+
Repetitive queries,
lost sales,
rigid chatbots.
+
+ +
+
+
60%
+
of users discover products on Instagram. + Social Commerce Boom — TikTok, IG Reels & WhatsApp Are Reshaping Retail
+
+
+
90%
+
of Taiwanese consumers use LINE every day. + Social Media Landscape Taiwan — Platform Guide for Brands
+
+
+
90%
+
of Asian users engage in social commerce. + Social commerce in the social media age — app continuance intention
+
+
+
+ + diff --git a/docs/presentation/slides/p1-03-what-is-deskclaw.html b/docs/presentation/slides/p1-03-what-is-deskclaw.html new file mode 100644 index 0000000..35a264b --- /dev/null +++ b/docs/presentation/slides/p1-03-what-is-deskclaw.html @@ -0,0 +1,80 @@ + + + + + + + + + + + +
+
WHAT IS DESKCLAW
+
+

Meet DeskClaw

+ +

A local-first conversational commerce agent for a small D2C skincare brand — + we built a fictional one, Amelya's, to make it real.

+ +
+
Discover
+
Buy
+
Track
+
Return
+
+ knows when to hand off to a human
+
+ +
+
+ Two front doors, one brain — + Chat agent + + + Web storefront + · same data, same rules. +
+
And it doesn’t only react — DeskClaw also works proactively for the owner.
+
+
+ + diff --git a/docs/presentation/slides/p1-04-evolution.html b/docs/presentation/slides/p1-04-evolution.html new file mode 100644 index 0000000..6623976 --- /dev/null +++ b/docs/presentation/slides/p1-04-evolution.html @@ -0,0 +1,88 @@ + + + + + + + + + + + +
+
FROM PROPOSAL TO DELIVERY
+
+

What Changed, and Why

+ +
+
+

We proposed · April

+
Automated support — policy-grounded answers
+
Active sales — product matchmaking
+
Margin-aware negotiation  (“Dynamic Negotiator”)
+
Brand safety — frustration → human handoff
+
+ +
+ +
+ +
+

We shipped · June

+
Policy & product answers, grounded in brand docs
+
Search & recommendations
+
Full post-purchase lifecycle — cart, checkout, orders, returns
+
Hardened handoff & a real evaluation harness
+
A proactive ops agent — emails the owner, staff panel resolves it
+
+
+ +
+ kept / went further + deliberately cut +
+ +
+

Evidence over ambition — the “full-lifecycle” title got truer.

+
+
+ + diff --git a/docs/presentation/slides/p1-05-scope.html b/docs/presentation/slides/p1-05-scope.html new file mode 100644 index 0000000..3705852 --- /dev/null +++ b/docs/presentation/slides/p1-05-scope.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +
+
WHAT WE BUILT
+
+

Scope, From Research

+ +
+
Discover
Search, recommend & build routines
search-products · routine-concierge
+
Ask
Policy & product answers
policy-oracle
+
Buy
Add, edit & check out
cart-actions · checkout
+
Track
Order & delivery status
order-status
+
Return
Return / exchange request
returns-actions
+
Escalate
Human handoff
sentiment-router
+
+ +
+
Every capability — and every one we deliberately left out — was chosen from research, not guesswork.
+ +
+
+ + diff --git a/docs/presentation/slides/p2-01-architecture.html b/docs/presentation/slides/p2-01-architecture.html new file mode 100644 index 0000000..e655589 --- /dev/null +++ b/docs/presentation/slides/p2-01-architecture.html @@ -0,0 +1,91 @@ + + + + + + + + + + + +
+
HOW IT'S BUILT · ARCHITECTURE
+
+

Three Layers, One Boundary

+ +
+
+
+ 💬 Chat🛍️ Storefront +
+
▼ customer message
+
Agent + Model gpt-5.5 (cloud) or Gemma (local)
+ +
Skill
the agent's playbook — instructions only
skills/
+ +
+ + 🔒 TYPED TOOLS ONLY · NO RAW DB + +
+ +
Inner Tools
small, validated operations
src/shop · MCP
+
▼ reads / writes
+
Shared Data
one resettable JSON store
data/
+
+ +
+

Why this is the point

+
1
The model never touches the database — it can only act through tools we defined and validated.
+
2
Every action is therefore shaped and logged by us — no surprise behaviour.
+
3
Adding a skill is cheap: new instructions + maybe one tool. That's how we reached 10 skills.
+
+
+
+ + diff --git a/docs/presentation/slides/p2-02-safety.html b/docs/presentation/slides/p2-02-safety.html new file mode 100644 index 0000000..d099b72 --- /dev/null +++ b/docs/presentation/slides/p2-02-safety.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +
+
HOW IT'S BUILT · SAFETY
+
+

Safe by Design

+
Every action that changes something runs the same four steps — and some guarantees are structural, not promises.
+ +
+
🪪
Identity
from the channel — never an ID the customer types
+
+
👁️
Preview
show exactly what will happen
+
+
Confirm
nothing commits without an explicit yes
+
+
📋
Audit
every action is logged
+
+ +
+
✉️
The notify tool has no recipient field — it can only email the owner, never a customer.
+
💸
The agent never moves money — refunds & cancellations always go to a human.
+
+
+ + diff --git a/docs/presentation/slides/p2-03-agentic-loop.html b/docs/presentation/slides/p2-03-agentic-loop.html new file mode 100644 index 0000000..d623f2b --- /dev/null +++ b/docs/presentation/slides/p2-03-agentic-loop.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +
+
HOW IT'S BUILT · THE AGENTIC LOOP + VERIFIED LIVE
+
+

DeskClaw Works While You Sleep

+
A scheduled run wakes the agent with no human prompt — it finds the work, a human closes it.
+ +
+
no prompt
Schedule
wakes the agent each morning
+
+
🤖
Agent reads
store, read-only: handoffs · stuck orders · low stock
+
+
✉️
Owner email
model-composed digest, sent via Resend
+
+
👤
Owner → /admin
opens the staff panel
+
+
🛠️
Staff resolves
handoff · ship order · restock
+
+ +
↻ next morning's digest reflects what's fixed
+ +
+
Proven end-to-end: the agent triaged a real WhatsApp complaint → escalated → a real email landed in the owner's inbox.
+
Honest caveat: local-first, so “proactive” means while our machine + gateway are running — no always-on server.
+
+
+ + diff --git a/docs/presentation/slides/p2-04-evaluation.html b/docs/presentation/slides/p2-04-evaluation.html new file mode 100644 index 0000000..b64e515 --- /dev/null +++ b/docs/presentation/slides/p2-04-evaluation.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +
+
HOW IT'S BUILT · EVALUATION
+
+

How We Know It Works

+
Not “trust us” — a test suite. We check it on two levels.
+ +
+
+
97/97
PASSING
+
Tool level · deterministic
+
No model, no flakiness
+
Unlinked identity is refused
+
You can't confirm someone else's action
+
Every mutation writes an audit log
+
+
+
14
SCENARIOS
+
Agent level · model-in-the-loop
+
The real model, real scenarios
+
Routes to the right skill
+
Answers only from data
+
Asks before it mutates
+
+
+ +
+
⚙️
Both run automatically in CI (GitHub Actions) on every change.
+
🟢
The whole loop verified live, end-to-end — chat → handoff → real email.
+
+
+ + diff --git a/docs/presentation/slides/p3-01-skills-catalogue.html b/docs/presentation/slides/p3-01-skills-catalogue.html new file mode 100644 index 0000000..81be569 --- /dev/null +++ b/docs/presentation/slides/p3-01-skills-catalogue.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +
+
WHAT IT DOES · ALL SKILLS
+
+

Ten Skills, Two Sides of the Counter

+ +
For the customer — 9 skills
+
+
search-products
recommendations by need, skin type, budget, gift
+
routine-concierge
one ask → AM/PM regimen → bundle, confirmed per item
+
policy-oracle
policy + ingredient-compatibility answers, only from brand data
+
cart-actions
add · remove · change quantity, preview → confirm → audit
+
checkout
cart → placed order (no payment, by design)
+
order-status
"where's my order?" — own orders only
+
returns-actions
return/exchange request + refund status; money goes to a human
+
account-registration
new account or code-gated link, bound to the channel identity
+
sentiment-router
frustration/safety → durable handoff + owner email
+
+ +
For the owner — the loop
+
+
ops-digest 🤖
wakes on schedule, no prompt — morning digest, in its own words
+
owner email ✉️
Resend channel, owner-only by construction, rate-limited
+
/admin panel 🛠️
human resolves handoffs, ships orders, restocks
+
+ +
+
+ 29 typed tools + 97 + 14 evals, CI green + WhatsApp · web · terminal +
+
Faster to show you — let's run it →
+
+
+ + diff --git a/docs/presentation/slides/p3-02-live-demo.html b/docs/presentation/slides/p3-02-live-demo.html new file mode 100644 index 0000000..0e065db --- /dev/null +++ b/docs/presentation/slides/p3-02-live-demo.html @@ -0,0 +1,81 @@ + + + + + + + + + + + +
+
SEE IT WORKLIVE DEMO
+
+

One Customer, One Owner, One Brain

+
Follow the numbers — real WhatsApp, real storefront, real email.
+ +
+
1
Register in chat
+
new customer over WhatsApp — the number is the identity; agent issues an account code
📱
+
2
Routine concierge
+
one ask → AM/PM regimen → bundle to cart, confirmed item by item
🌿
+
3
Checkout
+
preview → confirm → order placed — no payment, by design
🧾
+
4
Same account, web door
+
storefront login with the code — the chat order is right there
🔗
+
5
The agent wakes alone
+
scheduled run, no prompt → real email to the owner → resolved in /admin
+
+ +
+
On screen, the agent answers as Amelya's Concierge 🌿 — DeskClaw is the platform behind it.
+
backup recording ready
+
+
+ + diff --git a/docs/presentation/slides/p3-03-future-work.html b/docs/presentation/slides/p3-03-future-work.html new file mode 100644 index 0000000..c659f2f --- /dev/null +++ b/docs/presentation/slides/p3-03-future-work.html @@ -0,0 +1,87 @@ + + + + + + + + + + + +
+
WHERE IT STANDS · WHERE IT GOES
+
+

The Honest Close

+ +
+
+

🚫 Fenced on purpose

+
Research calls, not gaps — the agent is built to never cross these.
+
Moving money — refunds & cancellations go to a human
+
Address changes — the #1 account-takeover signal
+
Messaging customers unprompted — consent first
+
+ +
+

⚠️ Honest limits

+
Real constraints of a local-first prototype.
+
·
"Proactive" runs only while our machine + gateway are up
+
·
Account code is a stand-in for real out-of-band OTP delivery
+
·
Checkout is mock — no payment rails at all
+
+ + +
+ +
Still the same rule that built it: evidence over ambition.
+
+ + diff --git a/docs/presentation/slides/p3-04-thank-you.html b/docs/presentation/slides/p3-04-thank-you.html new file mode 100644 index 0000000..4418b0e --- /dev/null +++ b/docs/presentation/slides/p3-04-thank-you.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +
+

Thank You

+
A full-lifecycle commerce agent that can sell, support, escalate — even run the morning ops — + and can't spend a single dollar without a human. Evidence over ambition.
+
+ 10 skills + 29 typed tools + 97 + 14 evals · CI green + WhatsApp · web · terminal +
+
github.com/Lelevinson/deskclaw
+
+ + + + + + + + + + + + + + + + +