jonesmusicalinstruments.com, on the new site, taking real money Β· written 2026β09β16
Those three commits shipped on Sep 16 in trc-beta-apps v242 per memory; live jmi-server equals HEAD (inference).
| # | Step | Owner | Time | Waits on | Status |
|---|---|---|---|---|---|
| 1 | Darryl reviews and approves the site | Darryl | 20 min | nothing | ready now |
| 2 | Stripe account exists and is activated Β· branch A, B or C | Darryl Greg | 30 min β 3 h | step 1 | needs Darryl's pick |
| 3 | Live account configured: tax, branding, key, webhook, secrets, deploy 3 fixes | Claude | 45 min | step 2 | blocked |
| 4 | $1 live purchase, refund, abandoned-hold check | Greg Claude | 20 min | step 3 | blocked |
| 5 | Domain cutover: two Cloudflare records | Darryl | 15 min + 1 h DNS | step 4 | needs his Cloudflare |
| 6 | Campaign #1 sends to 101 people | Greg | 10 min | step 5 | drafted, never sent |
| 7 | Darryl fills the three console data gaps | Darryl | 60β90 min | nothing | open since 9/3 |
| 8 | App Store: transfer to Darryl's account, or leave on TRC's | Darryl Greg | decision + 1β2 wk | nothing | in review now |
rk_live_) was going to be labelled "test" in the console while charging real cards. Widened to /^(sk|rk)_live_/, commit df717fc. Full suite green: 1,303 checks.fly secrets set STRIPE_SECRET_KEY=β¦. The real names are JMI_STRIPE_SECRET_KEY / JMI_STRIPE_WEBHOOK_SECRET. The bare names set variables nothing reads, and the shop keeps taking money on the sandbox key with no error. Commit 4b5e182.7b0b9e6. It stays broken until step 3 deploys.df717fc, 4b5e182 and 7b0b9e6 are committed, not shipped. The trc-beta-apps working tree is dirty with another agent's in-progress server.js edit, so deploying now would ship it too. Deploy during step 3, on a clean tree, with ./bin/deploy.| Branch | Who does the account | Owner | Time | What Darryl must supply | Ships when |
|---|---|---|---|---|---|
| A | Darryl opens and activates his own account, invites Greg as Developer | Darryl | 30 min + KYC | Everything, himself: entity type, EIN or SSN, address, bank account, ID. Nothing passes through Greg. | Same day he sits down |
| B | Greg opens it for him, activates it, then hands ownership over | Greg | 45 min + KYC | Business details by email. SSN, date of birth, bank numbers and photo ID on a call or in person in Tokyo, never by email or text. | As soon as they get 20 minutes together |
| C | Run the shop on The Recording Club's existing live account for now | Greg | 2β3 h | Nothing to start. A Wβ9 before the first payout. | Today, if Greg accepts being merchant of record |
info@therecording.club at Team with the Developer role.acct_1HJ2lhChrL42COq4, "The Recording Club by Tiny Room Studios". Charges and payouts are enabled today.jmi-server, write on Checkout Sessions only, and set it as JMI_STRIPE_SECRET_KEY.TRCTAX_STRIPE_SECRET_KEY from ~/.env. It is a full sk_live on TRC's account; handing it to the JMI server gives a bass shop unrestricted access to every dollar TRC takes.STRIPE_READ_KEY cannot be used either. It is read-only and cannot create a checkout session.tax/settings returns status: pending, no head office, no default tax code or behaviour, and zero tax registrations.#000000, and the statement descriptor THE RECORDING CLUB.THE RECORDING CLUB on their card statement, or TRC's own checkouts get re-branded as Jones Musical Instruments. The card-statement half is the bigger problem: an unrecognised descriptor is the commonest first-sale chargeback.JMI_STRIPE_WEBHOOK_SECRET does not collide with anything.checkout.session.completed, so every bass sale gets delivered to them as well: the TRC app at app.therecording.club (245 events, also takes expired, refunded and both async events) and interval-club.fly.dev.handled:false and it logs "nothing to do". It does write the event id into its stripe_webhook_events table, which is noise only.interval-club.fly.dev was not checked. Read its handler or narrow that endpoint's events before the first live sale.daryljones.gregspero.com until step 5, jonesmusicalinstruments.com after.${SITE_ORIGIN}/order?session_id=β¦ and cancel to ${SITE_ORIGIN}/bag. The Stripe account never appears in either URL.JMI_ secrets. Sales already taken stay on TRC's account and are TRC's to refund and to report.txcd_99999999, default behaviour exclusive.JONESMUSICALINSTRUMENTS.COM. An unrecognised descriptor is the commonest cause of a first-sale chargeback.jmi-server, write on Checkout Sessions and nothing else. That is the entire Stripe surface this server uses.https://jmi.gregspero.com/api/shop/stripe/webhook with six events, not five:checkout.session.completed Β· checkout.session.async_payment_succeeded Β· checkout.session.async_payment_failed Β· checkout.session.expired Β· charge.refunded Β· payment_intent.payment_failedcd ~/trc-beta-apps-deploy && ./bin/deploy. Ships df717fc, 4b5e182 and 7b0b9e6. Never a bare fly deploy.fly secrets set -a trc-beta-apps \
JMI_STRIPE_SECRET_KEY=rk_live_... \
JMI_STRIPE_WEBHOOK_SECRET=whsec_...curl -s -o /dev/null -w "%{http_code}" https://jmi.gregspero.com/api/shop/products returns 200.STRIPE_MOCK is not set on the machine.~/.env. That is why the sandbox key is not deleted until the very end.checkout.session.completed delivered 200. A 400 means the signing secret is wrong.charge.refunded is subscribed.checkout.session.expired.216.198.79.1 Β· proxy off (grey cloud)64.29.17.1 Β· proxy off2083afedd08121ec.vercel-dns-017.com Β· proxy off199.16.172.169 and 199.16.173.146.jonesmusicalinstruments-com.mail.protection.outlook.com. Email is untouched by this change./wp-admin. It is a separate zone and a separate A record.SITE_ORIGIN=https://jonesmusicalinstruments.com on Fly, or buyers land back on daryljones.gregspero.com after paying. One more restart.dig +short jonesmusicalinstruments.com returns the two Vercel addresses.jonesmusicalinstruments.com/order?session_id=β¦.SITE_ORIGIN.admin; the password lives in ~/.jmi-creds/UPDATES.md on Greg's Mac.~/trc-beta-apps-deploy/apps/jmi-server/DEPLOY-SHOP.md, corrected in 4b5e182.