Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ tutorials/
├── langchain-deep-agent-py/ # Same pattern on the Deep Agents harness; paid tool in a subagent
├── langchain-langsmith-deployment-py/ # Route-level ASGI PaymentMiddleware (Python)
├── langchain-chat-ui-nvm/ # Next.js browser chat UI with the x402 card-delegation popup
├── catalog/ # Video showcase demos (song-from-the-headlines, diligence-in-a-box)
├── catalog/ # Discovery, paid outcome tutorials, redacted samples, and showcase media
└── mcp-examples/ # Model Context Protocol (MCP) examples
├── weather-mcp/ # TypeScript MCP server (has CLAUDE.md)
└── weather-mcp-py/ # Python MCP server
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ A collection of practical tutorials demonstrating how to integrate **Nevermined

💻 **Frontend repository**: [https://github.com/nevermined-io/demo-ui-monorepo/](https://github.com/nevermined-io/demo-ui-monorepo/)

## Catalog outcome tutorials

The [tutorials Showcase](https://tutorials.nevermined.app/) presents the Catalog discovery and paid-run recaps. The source tutorials and redacted representative results are in [catalog/](catalog/README.md), including the [SEC earnings evidence pack](catalog/sec-earnings-evidence-pack/README.md) and [competitive product teardown](catalog/competitive-product-teardown/README.md). Run a paid tutorial locally with your own key and a capped delegation; raw Router envelopes and payment records stay in ignored `out/` folders.

## What is Nevermined Payments?

Nevermined Payments is a platform that enables developers to monetize AI agents and services through blockchain-based credit systems with Stripe checkout integration. It provides:
Expand Down Expand Up @@ -206,4 +210,4 @@ distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions
and limitations under the License.
```
```
2 changes: 1 addition & 1 deletion catalog/competitive-product-teardown/BUILD_LOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ A fresh 25¢ / 10-minute delegation repeated all three steps with the shorter pr

The runner generated [redacted Markdown](sample/teardown.md) and [JSON](sample/teardown.json) from the paid responses. Both name the public Firefox source, cite five Brave search results, include bounded excerpts and a review action, mark model text as a hypothesis, and distinguish the $0.069 charge from the 8¢ cap consumption. The builder stripped HTML tags/entities from Brave snippets before writing these representative files. The sample contains no buyer key, email address, payment ID, or raw HTML tags; all six cited HTTPS URLs returned unauthenticated HTTP 200 on 2026-09-15. A later read-only Router audit found all three buyer-fee statuses `Settled`; the sample retains the immediate `Submitted` state to show what the runner saw before reconciliation. Private raw Router responses remain ignored in `out/` and are never part of the sample.

The sample folder and code are prepared locally; their GitHub URLs must be checked after publication before the Catalog outcome links are released. Prices, ranking, page copy, model output, buyer fees, and timing can change on another run.
The redacted sample folder and code were published on the tutorials repository's `main` branch in PR #77; their public GitHub URLs returned unauthenticated HTTP 200 after merge. Prices, ranking, page copy, model output, buyer fees, and timing can change on another run.

## 2026-09-15 local follow-up and fee reconciliation

Expand Down
4 changes: 2 additions & 2 deletions catalog/competitive-product-teardown/FRICTION.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# DevEx friction log

Preparation date: 2026-09-15. Separate capped paid **service smokes** confirmed the wrappers. The first three-call run stopped without an artifact after empty DeepSeek content; a fresh capped repeat produced a redacted sourced teardown. Publication and larger Catalog/Router changes remain pending.
Preparation date: 2026-09-15. Separate capped paid **service smokes** confirmed the wrappers. The first three-call run stopped without an artifact after empty DeepSeek content; a fresh capped repeat produced a redacted sourced teardown. The redacted sample is published; larger Catalog/Router changes remain pending.

| Step | Expected | Observed / reproduction | Impact | Proposed fix and acceptance check |
| --- | --- | --- | --- | --- |
Expand All @@ -10,4 +10,4 @@ Preparation date: 2026-09-15. Separate capped paid **service smokes** confirmed
| Reconcile delivery and receipts | A paid result has a body, settled merchant payment, and understandable buyer-fee status | Bounded `/router/route` smokes returned HTTP 201, `paid:true`, delivered bodies, and Settled merchant payments. Brave was $0.035, Serper $0.020; Serper had `feeCents=1` and immediate `feeStatus=Submitted`. The delegation's spent counter rounded the $0.065 combined charge to 7 cents. DeepSeek's tiny smoke was $0.004 merchant with zero fee cents and immediate Submitted fee status. | Treating Submitted as merchant failure incorrectly rejects useful paid output; treating it as terminal incorrectly claims buyer-fee settlement. | Show merchant and buyer-fee states separately, and expose rounded delegation spend. Acceptance: full teardown reports delivered body, merchant Settled, submitted/terminal buyer fee, exact recorded cents, and remaining cap after each call. |
| Produce a model-supported teardown | DeepSeek chat returns final model text after a paid response so the builder can assemble the report | First full run under a 25-cent cap settled Brave $0.035, Serper $0.020 plus a 1-cent buyer fee, and DeepSeek $0.004. The prior runner sent a longer evidence prompt with `max_tokens=250`; DeepSeek returned no usable `choices[0].message.content`, and the runner exited without a real artifact. | Three purchases succeeded but no deliverable resulted. A blind retry would be a fourth paid call and could obscure the original failure. | Shorter/redacted prompt, `max_tokens=1024`, private envelope and first-result timestamp are in the runner. A fresh capped repeat settled all three calls and produced redacted Markdown/JSON for $0.069, with first result in 14.44s; resolved for this sample. |

The wrapper-schema, quote/max-price, and buyer-fee-state gaps remain larger cross-team work. Internal nvm-monorepo #3508 records proposed acceptance checks and Router follow-up #3326. The sample files are local until publication; no stable GitHub artifact URL is claimed yet.
The wrapper-schema, quote/max-price, and buyer-fee-state gaps remain larger cross-team work. Internal nvm-monorepo #3508 records proposed acceptance checks and Router follow-up #3326. The redacted sample is published on the tutorials repository's `main` branch; raw paid responses and receipts remain private in ignored `out/`.
4 changes: 2 additions & 2 deletions catalog/competitive-product-teardown/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This one-off sample helps a product-marketing or strategy builder compare a public product page with rival search evidence and write a reviewable positioning hypothesis. It accepts a safe public HTTPS company URL and a rival product query. It produces redacted, sourced Markdown and JSON. It does **not** monitor pages over time, score leads, or make investment claims.

**Status: a bounded three-service Live repeat completed on 2026-09-15; publication is pending.** Separate small paid probes confirmed all three payable wrappers. The first complete-chain attempt settled all three merchants but DeepSeek returned no final text at a 250-token limit, so no artifact was counted. A new 25¢ capped run with a shorter prompt and 1024-token limit delivered the [redacted Markdown teardown](sample/teardown.md) and [JSON teardown](sample/teardown.json). It recorded **$0.069** in merchant-plus-buyer-fee charges, consumed **8¢** of cap, and delivered its first result in **14.44 seconds**. The immediate buyer-fee states were `Submitted`; a later Router audit found all three `Settled`. [`wrapper-contract.json`](wrapper-contract.json), [BUILD_LOG.md](BUILD_LOG.md), and [FRICTION.md](FRICTION.md) record the path from probe to repeat. The sample files are local until this folder is published.
**Status: a bounded three-service Live repeat completed on 2026-09-15; the redacted sample is published.** Separate small paid probes confirmed all three payable wrappers. The first complete-chain attempt settled all three merchants but DeepSeek returned no final text at a 250-token limit, so no artifact was counted. A new 25¢ capped run with a shorter prompt and 1024-token limit delivered the [redacted Markdown teardown](sample/teardown.md) and [JSON teardown](sample/teardown.json). It recorded **$0.069** in merchant-plus-buyer-fee charges, consumed **8¢** of cap, and delivered its first result in **14.44 seconds**. The immediate buyer-fee states were `Submitted`; a later Router audit found all three `Settled`. [`wrapper-contract.json`](wrapper-contract.json), [BUILD_LOG.md](BUILD_LOG.md), and [FRICTION.md](FRICTION.md) record the path from probe to repeat. Raw receipts and Router envelopes remain private.
Comment thread
aaitor marked this conversation as resolved.

A later local full run delivered its first result in **13.48 seconds** and again recorded **$0.069**. Its Brave buyer-fee status was `Submitted` at receipt time; a read-only ledger reconciliation found all three buyer-fee records **Settled**. The new generated teardown stays in ignored `out/`; the linked sample is from the earlier run.

Expand Down Expand Up @@ -53,4 +53,4 @@ The runner saves each raw Router envelope and any HTTP error body in private `ou

The `.app` production-live and `.dev` staging-live APIs are separate account backends. A key/wallet from one cannot be used on the other. The script accepts only those two exact API origins.

See [FRICTION.md](FRICTION.md) for the still-missing public payable schemas, dynamic AI price, quote handling, and the resolved empty model-content failure. The representative sample files have been scanned for the buyer key, emails, payment IDs, and raw HTML tags; all six source URLs returned 200 without authentication. The folder has not yet been published to stable public URLs.
See [FRICTION.md](FRICTION.md) for the still-missing public payable schemas, dynamic AI price, quote handling, and the resolved empty model-content failure. The representative sample files have been scanned for the buyer key, emails, payment IDs, and raw HTML tags; all six source URLs returned 200 without authentication. The redacted sample and runner are published on the repository's `main` branch.
Comment thread
aaitor marked this conversation as resolved.
7 changes: 4 additions & 3 deletions showcase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,10 @@ Each tutorial declares a **tier**:
200 + settlement` — with a real per-session credit balance that decrements per call and
responses that react to what you type. It talks to a **local sandbox agent**
(`lib/demo-agent.mjs`), so it spends no real money and needs no credentials or backend.
- **`recap`** — the two paid `catalog/` demos spend real crypto autonomously across chains, so they are
**watch-only**: embedded video, playable outputs, the on-chain receipt, and a "run it locally"
note.
- **`recap`** — paid `catalog/` demos are review-only in the browser. A recording and
playable outputs appear where public media exists; otherwise the page shows the
observed receipt and links to a redacted sample. Run the source tutorial locally
with your own capped buyer delegation to make fresh paid calls.
- **`discover`** — the catalog *discovery* demo (`discover-the-catalog`) is read-only and free, so its
`See it run` panel is **functional in the browser**: it queries the real, public catalog live (REST,
the Catalog MCP, and the ARD registry) through the `/api/catalog` same-origin proxy — no credentials,
Expand Down
17 changes: 11 additions & 6 deletions showcase/app/t/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ export default async function TutorialPage({ params }: { params: Promise<{ slug:
if (!t) notFound();

const isRecap = t.tier === "recap";
const evidenceOnly = t.run.kind === "recap" && !t.run.video;
const tierLabel = evidenceOnly
? "recap · review the run"
: isRecap
? "recap · watch it run"
: t.tier === "discover"
? "discover · free & live"
: "live · you pay per call";
// discover tutorials keep the demo (§4) and the video in a separate §5
const discoverVideo = t.run.kind === "discover" ? t.run.video : undefined;

Expand All @@ -55,11 +63,7 @@ export default async function TutorialPage({ params }: { params: Promise<{ slug:
</span>
))}
<span className={`tier ${t.tier}`}>
{t.tier === "recap"
? "recap · watch it run"
: t.tier === "discover"
? "discover · free & live"
: "live · you pay per call"}
{tierLabel}
</span>
</div>
<h1>{t.title}</h1>
Expand Down Expand Up @@ -183,7 +187,8 @@ export default async function TutorialPage({ params }: { params: Promise<{ slug:
{/* 4 — Run */}
<section className="block wide" id="run">
<div className="h2">
<span className="num">4</span> See it run
<span className="num">4</span>{" "}
{evidenceOnly ? "Review the run" : "See it run"}
</div>
{t.run.kind === "live" ? (
<LiveRunPanel slug={t.slug} run={t.run} title={t.title} />
Expand Down
Loading
Loading