spinadd
v0.1.0
Published
Opt-in sponsor line for Claude Code's statusLine hook. Get paid to wait.
Downloads
163
Maintainers
Readme
spinadd-statusline
The MVP v0 of SpinAdd's Day-1 wedge: an opt-in sponsor line rendered inside Claude Code's own statusLine hook. Zero npm dependencies — pure Node stdlib, so there's nothing to audit beyond this folder.
What this actually does today
- Registers itself as your
statusLinecommand (user- or project-scoped). - Every render, prints your normal status (model · dir · git branch · session cost) plus one rotating sponsor line — only if you've opted in.
- Logs every sponsor impression to
~/.spinadd/impressions.jsonl(timestamp, sponsor id, cwd). This is the real telemetry primitive the business is built on: proof that a wait-state impression can be counted. - Background-syncs with a real backend (Supabase — see
docs/strategy/backend-v0.md): registers the device, uploads unsynced impressions, and refreshes the sponsor feed from Postgres — all off the hot path, so a slow network never adds latency to a render.sponsors.jsonis now only the bundled day-0/offline fallback. - Sponsors are managed through a real, self-serve pipeline: public intake
form (
site/sponsor.html) → admin approval (product/spinadd-admin) → publisher signs up onproduct/spinadd-publisher, creates a campaign, and pays for it via Stripe Checkout → CLI picks it up on its next sync. - Your prefs (opt-in and language) sync to the backend too —
spinadd lang en|frsets your language,spinadd syncpushes changes now. spinadd payoutstarts Stripe Connect onboarding so you can eventually receive your revenue share once payout logic ships (see gaps below).
Quickstart
One-time shortcut so you can just type spinadd from anywhere:
cd product/spinadd-statusline
npm linkThen, from the repo (or any project) you want to instrument:
spinadd init --project # or omit --project for your user-wide ~/.claude/settings.json(No npm link? Run it as node product/spinadd-statusline/bin/spinadd.js init --project instead — same thing, just typed out.)
Restart Claude Code (or start a new session) in that directory and the sponsor line appears under the normal status line, rotating every 10s.
spinadd stats # local impression counts
spinadd sponsors # current feed
spinadd sync # manually sync with the backend (verbose)
spinadd lang <en|fr> # set your language preference
spinadd payout <email> <CC> # link a Stripe payout account (first time only; e.g. `spinadd payout [email protected] CA`)
spinadd disable # sponsor line off, base status line keeps working
spinadd uninstall # fully remove, restores whatever statusLine config you had beforeWhat's real vs. stubbed (v0 honesty check)
| Piece | Status |
|---|---|
| statusLine integration | Real. Uses Claude Code's documented hook exactly as specified. |
| Opt-in / one-command disable / uninstall (restores prior config) | Real. |
| Impression logging | Real, synced to Postgres in the background (batched, at most once/minute). |
| Sponsor rotation | Real mechanism, backed by a real Postgres feed + admin approval flow. |
| Publisher intake + self-serve + admin approval | Real — site/sponsor.html → product/spinadd-admin → product/spinadd-publisher → Stripe Checkout. No paying sponsor yet, but a publisher could pay right now. |
| Revenue share payout to the developer | Half real. spinadd payout links a real Stripe Connect account. Computing and transferring an actual revenue-share balance isn't built yet. |
| SDK for other CLI tools (the platform play) | Not built. This package is the Claude Code wedge only. |
See docs/strategy/mvp-v0.md for the roadmap from here to a real marketplace.
