Skip to content

release: online-payments in the module catalog (S10) - #116

Merged
mahmutkaya merged 1 commit into
mainfrom
develop
Aug 10, 2026
Merged

mahmutkaya merged 1 commit into
mainfrom
develop

Conversation

@mahmutkaya

Copy link
Copy Markdown
Contributor

Release — the sofra half of the payments batch

One commit: #115, the online-payments catalog entry at €19/mo.

It ships inert. The entry carries sellable: false, so it appears on neither the public signup configurator nor the founder's provision picker. The vocabulary and the price list are the same array, so the id had to land for provisioning to accept it — the flag is what keeps it off the storefront.

The flag stays for now, by owner decision. Its original reason ("unbuilt") has expired — the whole path is built, merged and, as of today, released and live on prod. But §7 items 6–8 are open owner actions on the live Stripe account: Connect may not be enabled on acct_1TpwTDCHzplJfkIy, and provisioning's very first call is POST /v1/accounts. Listing it for sale first would sell something provisioning cannot deliver. Remove the flag once §7.6 is confirmed.

Completes the payments batch: backend #342 and frontend #487 are both released and verified live.

Verification after merge

  • sofrapiwas.com rolls, /api/health answers
  • the signup configurator shows no online-payments option (the sellable: false assertion)

🤖 Generated with Claude Code

#115)

* feat(catalog): add online-payments at €19, not yet sellable

Slice S10 of SOFRA-PAYMENTS-PLAN — the control-plane third of a four-way
lockstep (backend ModuleIds.cs, frontend modules.ts, deploy provision-tenant.sh).

€19/mo, priced on value rather than on UI surface. The catalog's usual rule
(staff surfaces 12, feature modules 9) reads it as a 9, but Sofra takes NO
commission and the restaurant pays Stripe's fees — so this module is the entire
revenue from enabling payments, and it is the one add-on whose value scales with
the tenant's turnover while its price does not. GloriaFood charges $29 for the
same capability. The support burden lands here too: chargebacks, KYC onboarding,
a 2FA step in the runbook.

NOT SELLABLE YET, and that is the load-bearing part of this commit. The
vocabulary and the price list are the SAME array, so adding an id to make
provisioning accept it also puts it on the public signup page — selling a module
with no endpoint, no enforcement and no Stripe onboarding flow. A `sellable`
flag now gates both purchase surfaces (SignupConfigurator and the founder's
ProvisionPicker), with tests pinning that it is known-but-unsellable and that no
bundle smuggles it in. Delete the flag in S9, when the flow works end to end.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(deps): patch the js-yaml and nanoid high CVEs

Lockfile only. These fail OSV-Scanner, Trivy and `npm audit` on EVERY sofra PR,
not just this one — they are pre-existing on develop and were blocking the merge
of a change that does not touch dependencies.

Regenerated with `npx npm@10`, not the local npm 11: npm 11 writes a lockfile
node-22 CI rejects, and CI pins node 22. lockfileVersion stays 3, `npm ci`
resolves clean, 261/261 tests and tsc green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@mahmutkaya
mahmutkaya merged commit 5977657 into main Aug 10, 2026
94 of 97 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant