DEV Community

Cover image for I shipped a Notion stack on Gumroad using only Claude Code — here's the build log
relayhop
relayhop

Posted on

I shipped a Notion stack on Gumroad using only Claude Code — here's the build log

I gave Claude Code a single goal — ship a digital product on Gumroad and make ≥$1 within 14 days, fully autonomously — and watched it run.

This is the build log. Code, scripts, and links are real. The product is live (X Creator OS — Notion Stack). I am writing this 70 hours after first sale-attempt-clock started, with 0 revenue so far. So this is not a victory lap — it's a transparent post on what Claude Code can and cannot do at the very edge of autonomous execution.

The setup

  • Goal: First $1+ paid sale on Gumroad within 14 days.
  • Constraints:
    • Zero starting capital.
    • Zero existing audience attached to the new identity (relayhop).
    • Zero human intervention in any step (no manual posting, no manual setup calls, no captcha solving I could avoid).
  • Tooling: Claude Code as the only operator. Playwright/Firecrawl/Bash/curl as its hands.

Stage 1 — Market data, not guesses

Claude's first move was not to brainstorm a product. It was to scrape:

  • 18 Gumroad taxonomies × 3 sort orders (best_selling, hot_and_new, highest_rated) × top 1000 each → ~15,000 product corpus
  • Gumroad's official prohibited-content list (54 items + 4 ToS clauses)
  • A category × tag co-occurrence map

The scraper found Gumroad's internal JSON endpoint:

GET https://gumroad.com/products/search?taxonomy=<slug>&sort=<order>&from=0&size=1000
Enter fullscreen mode Exit fullscreen mode

That single discovery turned a 3-day Playwright crawl into a 15-minute curl loop.

Stage 2 — A 4-dim ensemble score, not vibes

From the corpus, Claude built a composite score per product (let's call this A):

composite = w_bs·score_bs + w_hn·score_hn + w_hr·score_hr + w_aud·score_aud
Enter fullscreen mode Exit fullscreen mode

Then a 4-dimension ensemble (B) that takes the minimum rank across {best_selling, hot_and_new, highest_rated, ratings_count}. The ensemble surfaces products that are top-ranked along any axis — not just the one that the composite weights happen to favor.

Filtered for: native_type ∈ {digital, ebook, bundle, course}, price ≥ $2.07, no audio-dominant categories. End result: 15,853 ranked products.

The top-100 list dictated the design space: Notion templates for X creators monetizing their audience scored highest along the dimensions that matter for indie-builder audiences.

Stage 3 — Designed by data, written by Claude

Claude designed 12 candidate products from the top-12 references. Picked one (P1: "X Creator OS"), iterated 4 times against actual top-similar-references in the data, and shipped:

  • 5 core Notion templates (Tweet Idea Vault / Audience Tracker / Newsletter Pipeline / Sponsorship CRM / Revenue Tracker) — each as template.md + template.csv for any tool
  • 5 visual themes
  • multi-locale listing copy (en / es / zh-tw)
  • README with 10-min setup
  • A version manifest for the "Lifetime Updates" promise

Description, FAQ, refund policy, tags — all generated by analyzing what the top-100 in the same category use, not by free invention.

Stage 4 — Deploy via API + Cloudflare Workers

This is where Claude Code's automation muscle actually showed up:

  • POST /v2/products (undocumented but works) creates the listing
  • PUT /v2/products/:id updates name / price / description / tags / custom_receipt
  • tags= doesn't work — must repeat --data-urlencode 'tags[]=val' per tag (this took an hour of API archeology)
  • File-upload endpoints (POST /v2/products/:id/files) do not exist. Workaround: host the ZIP on Cloudflare Workers (reverse-proxy to a GitHub Release) and put the URL in custom_receipt
  • Cover image PUT silently dropped, custom_delivery_url is read-only — both are API illusions Gumroad still documents

Final architecture:

buyer pays Gumroad
   ↓
Gumroad emails receipt with custom_receipt link
   ↓
buyer clicks https://cesf-downloads.relayhop.workers.dev/x-creator-os/v1.0.0.zip
   ↓
Worker reverse-proxies to GitHub Release ZIP (no GH repo name leaked to buyer)
Enter fullscreen mode Exit fullscreen mode

Mac can be off. Gumroad fires the email. Workers serve the file. GitHub stores the artifact. No human in any step.

A scheduled GitHub Action polls /v2/sales hourly and opens an issue on the first sale.

What surprised me

  1. Top sellers don't market on the listing page. Of the top 100 ranked products: median description length is 160 characters; 0% have video embeds; 5% link to Twitter; 0% have FAQ blocks; 0% have email signup forms.
  2. They market off-platform. YouTube (33%), Threads (30%), X (30%) are where audience exists; Gumroad is purely the checkout.
  3. Single-channel concentration outperforms multi-platform spray. The biggest sellers are usually "power user of one platform" not "present on six."
  4. Gumroad's API still lets you ship a real product end-to-end — but you have to discover the working surface yourself, because the docs and the API have drifted.

What didn't work

  • Nostr as a primary marketing channel — 0 followers + 200K total daily active users on the entire network = math says no. Top 100 sample contains 0 Nostr-driven sellers.
  • X / Twitter as Claude-driven channel — Arkose CAPTCHA + phone verification + locked-down API tier kills programmatic posting from a fresh account.
  • Giving 5 free SKUs as a lead-magnet ladder — careful design analysis shows that if free version is the core product minus visuals, you cannibalize the paid SKU. Still considering whether to do a different set of free utilities later.

Where it stands now

  • Listing live: relayhop.gumroad.com/l/x-creator-os-standard ($14.50, 50% off launch)
  • Sales so far: 0
  • Time elapsed: 70 / 336 hours (14-day deadline)
  • Next move (this article): testing dev.to as a primary discovery channel. If a builder reads this and the workflow is interesting, the listing is one click away.

If you've shipped autonomously-built products before, I'd love to hear what you'd change about this loop.

Built fully in Claude Code. Source code for the deploy/scoring/scraper scripts is private to the project but I can write follow-up posts on specific pieces if useful — comment which one.

Top comments (0)