One loop — every platform you are already on

The flywheel

Growth here is not a funnel you refill — it is a loop you turn. Every platform you are already on carries your attributed link, the backend verifies the minutes, and that same verification is the proof advertisers buy. Nothing here is a projection: each stage below says whether it is live today or still waiting on the platform backend.

The loop, in five stages

Every stage is code you can read: two live in the browser (assets/js/demo.js) and three are enforced server-side (backend/src/worker.js).

Capture

Every page reads ?ref= on arrival and remembers the referrer locally — even before a backend exists.

Activate

The last eligible referral click within 14 days receives attribution. Bonuses apply to base earnings in the referred user's first 30 days.

Earn

The user keeps 70% base plus a platform-funded 10% launch boost. Referrals add 5% of base to each person for the first 30 days, also platform-funded.

Share

The moment a balance moves, this page turns it into an artifact for whichever platform they are already on.

Advertise

/stats publishes verified minutes, the platform mix and held-vs-released referral cost. That is the buyer's proof — no dashboard theatre.

The back-edge is the whole point: more verified minutes → a more valuable auction → higher winning bids → bigger user balances → more sharing → more verified minutes. A funnel leaks at every step; a loop pays the people who close it.

Your share kit

One code, one link, ten artifacts. The code is generated in this browser and is deliberately not your device id — the device id is the only identifier the platform holds and GET /earnings/{deviceId} is public, so a share link must never carry it.

—

referees bound to your code

—

eligible users reported by backend

—

pending referral credit

No backend URL configured, so there is nothing to report yet — these read — rather than a fake zero. Set one in Profile → BACKEND API URL and they fill in from GET /referrals/{code}.

Where your people already are

Each artifact below is real: copy it, and whoever acts on it lands with your code attached — or, where a platform does not carry a referrer at all, this page says so instead of pretending.

Mac app (.dmg)

no referrer

The strongest artifact you have: it is the product. But a GitHub release download drops the query string on its redirect, and a .dmg cannot read its own URL, so no ref can ride along. Share the web-app link when the credit matters; share the .dmg when the friction matters.

Download

Homebrew

no referrer

A brew install cannot carry a referrer — Homebrew has no query string to put it in. Share the web-app link when the credit matters; share the command when the friction matters. We will not pretend the two are the same.

brew install --cask freecoffee

Web app (PWA)

attributed

Your link opens the installable web app on any machine — the same Mac status area placement mock, the same ledger, no DMG needed. Install prompts differ per browser; the page handles that itself.

Open

GitHub

link only

The public release repo (the dev repo is private). GitHub serves the repo page itself, so the ref is not applied until someone follows the link from there — useful reach, honest attribution.

Open

AI agent (MCP)

attributed

Hand the URL to an agent and it can read the ledger, publish a validated campaign, or check delivery from the tool manifest. Same attribution rules as a human visit.

Open

X

attributed

Opens the composer with the pitch and your attributed link pre-filled. Audience: indie Mac developers — the people who both use this and buy the next campaign slot.

Compose

LinkedIn

attributed

Share-to-feed with your link. Audience: the advertiser side — marketers and founders who buy desktop placements.

Share

Reddit

attributed

Submit with your link. Post where the honest day-zero framing is the interesting part — a Mac status area auction with an empty room is a better story than a fake one.

Submit

Hacker News

attributed

Submit the site. One caveat worth knowing: HN discussions of this shape go well when the numbers are published — which is exactly what model.html and /stats are for.

Submit

Email

attributed

The highest-converting artifact in the kit, and the one COLD-START-OUTREACH.md already scripts. Opens your mail client with the pitch and the link ready to send.

Compose

What is live today — and what is not

A flywheel you cannot audit is a slogan. Every row below points at the code that does the thing, so you can check it rather than trust it.

StageStatusWhere it lives
Capture ?ref= on any page Live demo.js → captureInboundRef() — memory stays local
Register a code / claim a code Live when a backend URL is set POST /referral — 14-day last-click attribution
First 30 days of referred-user earnings Live server-side applyReferralAccrual() — credit is held, not paid
5% of base to each person, 30 days, platform-funded Live server-side applyReferralCredit() — never out of the referred user's 70% base
Per-platform attribution (mac, pwa, agent…) Live on every report /track → platform, rolled up in aggregateStats()
Advertiser proof: mix + held vs released referral cost Live, aggregate-only, no token GET /stats → platforms[], referralSpend
Payout rails (Stripe / Whop) Simulated payouts.html — the rail choice is stored, no money moves
Real advertiser campaigns 0 live Feed is empty until the first review passes — advertisers.html

The same rule as everywhere else in this repo: no counter moves without a matching real state change. The public mix stays empty while the network is empty.

Why it compounds instead of leaking

Every user is a distribution surface. Ten artifacts from one code, on platforms they already open daily — no ad spend to acquire the second user.

Rewards follow earnings. Both 5% bonuses apply only to the referred user's base earnings in their first 30 days. No base earnings means no referral bonus.

Verification is the same asset twice. The minutes that pay users are the minutes advertisers buy — one measurement, two customers, and the public mix is checkable by both.

Day zero is the wedge. An empty auction with published economics is worth joining early; the first advertiser gets 100% share of voice on terms nobody can fake.

The loop's honest bottleneck is simple: campaign #1. Until a real campaign clears review, stages 1–4 turn and stage 5 waits — the launch offer is the wedge that starts it.