{"id":51694380,"url":"https://github.com/barneywohl/builderperks","last_synced_at":"2026-07-16T04:04:13.309Z","repository":{"id":364337516,"uuid":"1267427912","full_name":"barneywohl/builderperks","owner":"barneywohl","description":"Useful devtool perks during AI wait time","archived":false,"fork":false,"pushed_at":"2026-06-12T16:40:11.000Z","size":177,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T17:25:45.672Z","etag":null,"topics":["ai-tools","builder-tools","chrome-extension","devtools","mvp"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barneywohl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T14:29:43.000Z","updated_at":"2026-06-12T16:40:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/barneywohl/builderperks","commit_stats":null,"previous_names":["barneywohl/builderperks"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/barneywohl/builderperks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barneywohl%2Fbuilderperks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barneywohl%2Fbuilderperks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barneywohl%2Fbuilderperks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barneywohl%2Fbuilderperks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barneywohl","download_url":"https://codeload.github.com/barneywohl/builderperks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barneywohl%2Fbuilderperks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35529751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-16T02:00:06.687Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-tools","builder-tools","chrome-extension","devtools","mvp"],"created_at":"2026-07-16T04:04:11.380Z","updated_at":"2026-07-16T04:04:13.302Z","avatar_url":"https://github.com/barneywohl.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BuilderPerks\n\nSponsored builder offers during AI wait states.\n\nLive beta: https://builderperks.netlify.app/\n\nBuilderPerks is looking for first testers. Try it for one AI coding work session and tell us whether it feels useful, neutral, or annoying.\n\n## Beta Tester CTA\n\n1. Download the beta extension ZIP from the live site or latest GitHub release.\n2. Load `extension/` as an unpacked Chrome extension, or unzip the packaged beta.\n3. Work normally in Claude, ChatGPT, Cursor, v0, Lovable, Bolt, or another AI build tool.\n4. Open a `Builder beta feedback` issue with the result.\n\nThe beta includes builder controls from the first complaint pass: dismiss any card, pause cards for the day, disable cards, and cap daily card appearances. Version 0.2.0 also locally matches offers to the page context and shows why a card appeared.\n\n## Advertiser Pilot CTA\n\nDevtool companies can test a manually approved launch placement:\n\n- $250 starter pilot.\n- 48-hour placement.\n- Manual approval before anything goes live.\n- Clicks, claims, and feedback tracked.\n\nOpen an `Advertiser pilot interest` issue or use the live buy form.\n\n## What Ships In This MVP\n\n- Advertiser buy request form with package selection.\n- Placement API that records pending ads.\n- Admin approval workflow for pending ads.\n- Public live placement feed.\n- Builder claim workflow.\n- Click tracking for advertiser reporting.\n- Builder/advertiser feedback capture.\n- Chrome extension that reads the live feed, locally matches offers to AI build context, and injects cards near wait-state text.\n- Supply-side ad stream API for terminal, IDE, extension, and agent publishers.\n\n## Publisher API Quickstart\n\nOne-command terminal/status-line install:\n\n```bash\ncurl -fsSL https://builderperks.netlify.app/install-statusline.sh | bash -s -- pub_x\n```\n\nThe installer downloads `~/.builderperks/statusline.sh` and writes `~/.builderperks/config.env`\nwith the publisher id plus safe keyword/category defaults.\n\nRun from any terminal, IDE task, Claude Code status line, or agent shell with no inline env vars:\n\n```bash\n~/.builderperks/statusline.sh\n```\n\nClaude Code statusLine settings snippet:\n\n```json\n\"statusLine\": { \"type\": \"command\", \"command\": \"~/.builderperks/statusline.sh\" }\n```\n\nVS Code / Cursor task snippet:\n\n```json\n{\n  \"version\": \"2.0.0\",\n  \"tasks\": [\n    {\n      \"label\": \"BuilderPerks sponsored line\",\n      \"type\": \"shell\",\n      \"command\": \"~/.builderperks/statusline.sh\",\n      \"problemMatcher\": []\n    }\n  ]\n}\n```\n\nThe helper prints one labeled sponsored line and fails quietly if the network or API is down.\nIt sends only broad preference keywords and category choices you choose. It does not send prompts or personal data.\nPublisher earnings are estimated revenue share for hosting a respectful sponsored line, not payment for watching or clicking ads.\n\nIf the command prints nothing during setup, run the same helper with diagnostics enabled:\n\n```bash\nBUILDERPERKS_DEBUG=1 ~/.builderperks/statusline.sh\n```\n\nDebug output goes to stderr and is intended for setup verification only, so normal terminal and status-line use stays quiet.\n\nRegister a publisher surface:\n\n```bash\ncurl -X POST https://builderperks.netlify.app/api/publishers \\\n  -H \"content-type: application/json\" \\\n  -d '{\"name\":\"My CLI\",\"email\":\"founder@example.com\",\"surface\":\"terminal\"}'\n```\n\nStream a labeled sponsored card:\n\n```bash\ncurl \"https://builderperks.netlify.app/api/ad-stream?publisherId=pub_x\u0026surface=terminal\u0026context=deploying%20an%20AI%20app\u0026keywords=typescript,react,postgres\u0026blockedKeywords=crypto,gambling\u0026blockedCategories=adult,gambling\u0026valueMode=relevant\u0026format=statusline\"\n```\n\nUse the returned `ad` and `render` fields in your UI and route clicks through the returned `clickUrl`.\nUse `keywords` for broad programming language, framework, and project targeting only.\nUse `blockedKeywords` for categories or sponsors you do not want in the workflow.\nUse `valueMode=passive|relevant|high_value` when the publisher wants a higher-value discovery mode.\nUse `allowedCategories` for explicit opt-ins and `blockedCategories` for category-level blocks.\nRegulated or restricted categories such as finance, legal, health, gambling, and adult are never default inventory.\nDo not send personal data or full prompts.\nTerminal publishers can render `render.statusLine` or `render.terminalLine` directly.\nIDE and agent UIs can render `render.ideCard`; Markdown surfaces can render `render.markdown`.\nVS Code and Cursor can start with the task snippet above, then graduate to rendering `render.ideCard` inside a native panel.\nPublisher earnings are estimated and unpaid until advertiser revenue and payout rails are approved.\nThe response includes `marketplace.categoryProfiles` and `marketplace.providerLanes` so publishers and advertisers can tell whether a match is BuilderPerks seed/direct demand, developer-network compatible demand, or a regulated/restricted partner lane.\n\n## KISS Scope\n\nNo auction engine, no wallet payouts, no revenue share ledger, no self-serve targeting dashboard.\nThe first product question is whether advertisers want this attention surface and whether builders tolerate or value the cards.\n\n## Local\n\n```bash\ncd projects/builderperks/web\nnpm install\nnpm run build\nnpm run check\nnpm run smoke\nnpm run smoke:api\n```\n\nUse `npm run dev` for Netlify local functions. `npm run smoke:api` defaults to `http://localhost:8888` and refuses to mutate a non-local site unless `BUILDERPERKS_MUTATE_LIVE=1` is set.\n\n## Admin\n\nSet `BUILDERPERKS_ADMIN_KEY` in production. Without it, the demo key is `demo-admin`.\n\nSet `BUILDERPERKS_CHECKOUT_URL` to route every buy request into Stripe or another checkout page.\nFor package-specific Stripe Payment Links, set:\n\n- `BUILDERPERKS_CHECKOUT_URL_STARTER`\n- `BUILDERPERKS_CHECKOUT_URL_LAUNCH`\n- `BUILDERPERKS_CHECKOUT_URL_TAKEOVER`\n\nFor dynamic Stripe Checkout Sessions, set:\n\n- `STRIPE_SECRET_KEY`\n- `STRIPE_WEBHOOK_SECRET`\n\nThen configure a Stripe webhook for `checkout.session.completed` pointing at `/api/stripe-webhook`.\nPaid sessions are marked `paid`; approval is still manual so bad offers cannot go live automatically.\nWithout Stripe credentials or checkout URLs, buy requests are stored as invoice/manual approval requests.\n\nJake/company must create or own the Stripe account because Stripe needs business, tax, ownership, and bank details. Once the live API keys exist, BuilderPerks can accept paid placement requests.\n\nStripe Connect is intentionally not in the first paid-pilot path because BuilderPerks is currently charging advertisers directly, not onboarding third-party merchants or paying out publishers. See `docs/STRIPE_CONNECT_DECISION.md`.\n\nStripe development/security checklist: `docs/STRIPE_DEVELOPMENT_CHECKLIST.md`.\n\n## Extension\n\nLoad `projects/builderperks/extension` as an unpacked Chrome extension, then set the deployed API URL in the popup.\n\n## Growth\n\n- Acquisition sprint: `docs/USER_ACQUISITION_SPRINT.md`\n- First-user campaign: `docs/FIRST_USER_CAMPAIGN.md`\n- First-user target queue: `docs/FIRST_USER_TARGETS.csv`\n- Outreach copy: `docs/OUTREACH.md`\n- Guerrilla launch playbook: `docs/GUERRILLA_LAUNCH_PLAYBOOK.md`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarneywohl%2Fbuilderperks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarneywohl%2Fbuilderperks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarneywohl%2Fbuilderperks/lists"}