Skip to content

Commit 3573f3e

Browse files
committed
Add demo assets and recording flow
1 parent bbcc60d commit 3573f3e

11 files changed

Lines changed: 524 additions & 9 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ dist
22
node_modules
33
.paperclip-sdk
44
*.tgz
5+
.DS_Store

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@
1212
<p></p>
1313
</div>
1414

15+
## Demo
16+
17+
![Focus demo](./docs/assets/focus-demo.gif)
18+
19+
Short assets:
20+
21+
- GitHub demo GIF: [docs/assets/focus-demo.gif](./docs/assets/focus-demo.gif)
22+
- Twitter/MP4 demo: [docs/assets/focus-demo.mp4](./docs/assets/focus-demo.mp4)
23+
- Poster frame: [docs/assets/focus-demo-poster.png](./docs/assets/focus-demo-poster.png)
24+
- Live walkthrough guide: [docs/DEMO.md](./docs/DEMO.md)
25+
1526

1627
Paperclip Aperture treats Paperclip as the host runtime and UI shell, while importing [`@tomismeta/aperture-core`](https://www.npmjs.com/package/@tomismeta/aperture-core) as the judgment engine.
1728

@@ -37,8 +48,13 @@ Links:
3748
Choose one path:
3849

3950
- **install the plugin locally** if you want to run it in Paperclip today
51+
- **run the demo** if you want a short live walkthrough
4052
- **read the architecture** if you want to understand how Aperture is embedded inside the plugin
4153

54+
### Run The Demo
55+
56+
Use the live demo guide in [docs/DEMO.md](./docs/DEMO.md).
57+
4258
### Install The Plugin Locally
4359

4460
This plugin is not yet published to npm.

docs/DEMO.md

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
# Demo
2+
3+
This is the fastest way to demo `paperclip-aperture` live inside Paperclip.
4+
5+
## Demo Thesis
6+
7+
Paperclip already knows about approvals, issues, and operator actions.
8+
9+
Aperture adds judgment:
10+
11+
- what deserves attention now
12+
- what should wait next
13+
- what should stay ambient
14+
15+
The demo should prove that `Focus` is not just another inbox. It is a judgment surface.
16+
17+
## What To Show
18+
19+
In 3-5 minutes, show:
20+
21+
1. `Focus` exists as a first-class destination inside Paperclip.
22+
2. Pending approvals rise to the top as `now` and `next`.
23+
3. Lower-salience issue activity stays `ambient`.
24+
4. The operator can act from the Focus surface without leaving the plugin.
25+
5. The plugin is powered by Aperture, but still behaves like a native Paperclip plugin.
26+
27+
## Demo Environment
28+
29+
Use the local sandboxed Paperclip instance:
30+
31+
- App: `http://127.0.0.1:3100`
32+
- Focus page: `http://127.0.0.1:3100/CAM/aperture`
33+
34+
Recommended demo company:
35+
36+
- `Camera Paper Corp`
37+
- prefix: `CAM`
38+
39+
## Pre-Demo Checklist
40+
41+
Before demoing, confirm:
42+
43+
- Paperclip is running
44+
- the plugin is installed and `ready`
45+
- the left sidebar shows `Focus`
46+
- the Focus page loads without errors
47+
- there is at least:
48+
- one pending approval
49+
- one additional queued approval
50+
- one low-salience issue visible as ambient
51+
52+
If you do not already have live data in the sandbox:
53+
54+
- create a new agent while board approval is enabled
55+
- create a second approval-generating action
56+
- create or update one normal issue that should remain ambient
57+
58+
## Suggested Live Flow
59+
60+
### 1. Start At The Sidebar
61+
62+
Open Paperclip and point out:
63+
64+
- `Focus` appears in the main navigation
65+
- it sits naturally beside Inbox
66+
- it is not a separate app or sidecar
67+
68+
Suggested line:
69+
70+
> This is Aperture embedded inside Paperclip as a normal plugin. The operator opens `Focus`, not a separate runtime.
71+
72+
### 2. Open Focus
73+
74+
Navigate to `http://127.0.0.1:3100/CAM/aperture`.
75+
76+
Point out:
77+
78+
- `Focus` is the user-facing destination label
79+
- `Powered by Aperture` is secondary
80+
- the surface is organized into:
81+
- `now`
82+
- `next`
83+
- `ambient`
84+
85+
Suggested line:
86+
87+
> Paperclip is the host shell and workflow system. Aperture is the judgment engine deciding what belongs in now, next, and ambient.
88+
89+
### 3. Explain The Top Item
90+
91+
Use the active frame.
92+
93+
Point out:
94+
95+
- title
96+
- urgency / risk badges
97+
- operator actions
98+
- details disclosure
99+
100+
Suggested line:
101+
102+
> The top slot is reserved for the one thing the system thinks should own the operator right now.
103+
104+
### 4. Show The Queue
105+
106+
Move to `Next`.
107+
108+
Point out:
109+
110+
- ranked rows
111+
- compact treatment
112+
- lower visual weight than `Now`
113+
114+
Suggested line:
115+
116+
> This is not just a list of raw events. It is a ranked staging area behind the current focus.
117+
118+
### 5. Show Ambient
119+
120+
Move to `Ambient`.
121+
122+
Point out:
123+
124+
- low visual weight
125+
- quieter presentation
126+
- still visible for awareness
127+
128+
Suggested line:
129+
130+
> Ambient items are still visible, but they do not interrupt the operator.
131+
132+
### 6. Take An Action
133+
134+
Approve, reject, or request revision on one approval.
135+
136+
Point out:
137+
138+
- the action happens from inside Focus
139+
- the surface updates live
140+
- the operator does not need to go hunt in Inbox first
141+
142+
Suggested line:
143+
144+
> The goal is not to replace Paperclip. It is to add a judgment layer on top of Paperclip's existing control-plane primitives.
145+
146+
## Backup Narrative
147+
148+
If the live data is quiet, explain the architecture with this one-liner:
149+
150+
> Paperclip emits host facts, the plugin normalizes them, Aperture judges them, and Focus renders the result back inside Paperclip.
151+
152+
## Architecture Napkin
153+
154+
```text
155+
Paperclip host facts
156+
approvals / issues / failures
157+
|
158+
v
159+
paperclip-aperture plugin
160+
translate host facts into Aperture events
161+
|
162+
v
163+
@tomismeta/aperture-core
164+
judge now / next / ambient
165+
|
166+
v
167+
Focus inside Paperclip
168+
operator reviews and responds
169+
|
170+
v
171+
Paperclip host actions
172+
approve / reject / request revision / acknowledge
173+
```
174+
175+
## What To Say If Asked
176+
177+
### "Did this require changing Aperture core?"
178+
179+
No. Aperture core was embedded as-is. The integration work lives in the plugin layer.
180+
181+
### "Did this require changing Paperclip core?"
182+
183+
No for the current working path. The plugin uses Paperclip's normal plugin model and trusted same-origin UI.
184+
185+
### "What is the product boundary?"
186+
187+
- Paperclip = runtime, event source, host UI, host actions
188+
- Aperture = deterministic attention and judgment engine
189+
- `paperclip-aperture` = adapter + persistence + UI
190+
191+
## After The Demo
192+
193+
Good follow-up prompts:
194+
195+
- Should `Focus` become the default operator surface for certain roles?
196+
- Which Paperclip events deserve first-class treatment next?
197+
- How much of Aperture's `Why this?` reasoning should be exposed in the UI?

docs/assets/focus-demo-poster.png

56.4 KB
Loading

docs/assets/focus-demo.gif

155 KB
Loading

docs/assets/focus-demo.mp4

75.8 KB
Binary file not shown.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"build:rollup": "pnpm exec rollup --config ./rollup.config.ts --configPlugin @rollup/plugin-typescript",
2323
"dev": "tsx ./esbuild.config.ts --watch",
2424
"dev:ui": "paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177",
25+
"demo:record": "tsx ./scripts/demo/capture.ts",
2526
"prepack": "pnpm build",
2627
"test": "vitest run --config ./vitest.config.ts",
2728
"typecheck": "tsc --noEmit"
@@ -56,9 +57,10 @@
5657
"@types/react": "^19.0.8",
5758
"@types/react-dom": "^19.0.3",
5859
"esbuild": "^0.27.3",
60+
"playwright": "^1.58.2",
5961
"rollup": "^4.38.0",
60-
"tsx": "^4.20.5",
6162
"tslib": "^2.8.1",
63+
"tsx": "^4.20.5",
6264
"typescript": "^5.7.3",
6365
"vitest": "^3.0.5"
6466
},

pnpm-lock.yaml

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)