Skip to content

docs: fix Stripe webhook URL guidance to use app.tamci.app#80

Open
jhosepmyr wants to merge 1 commit into
developfrom
bugfix/docs-stripe-webhook-domain
Open

docs: fix Stripe webhook URL guidance to use app.tamci.app#80
jhosepmyr wants to merge 1 commit into
developfrom
bugfix/docs-stripe-webhook-domain

Conversation

@jhosepmyr

Copy link
Copy Markdown
Contributor

Description

Root-caused a real production incident: a user paid for a Pro upgrade, Stripe marked the checkout
complete, but the plan never activated. Traced through StripePaymentGatewayAdapter
StripeWebhookParserProcessPaymentWebhookCommandHandler — the code path is correct
(metadata, tenant handling via the public-schema subscriptions table, signature verification
all check out). The actual problem: docs/BILLING.md told readers to point the Stripe webhook at
https://your-api-domain.com/..., which in this deployment resolves to api.tamci.app — the bare
ALB domain, locked down to CloudFront-only ingress for security. Stripe's servers aren't
CloudFront, so the webhook delivery times out silently: zero log trace on the backend, since the
request never arrives. Confirmed via curl: api.tamci.app times out (000), app.tamci.app
(routed through CloudFront) reaches the app and gets a real response.

Fixes the guidance to use app.tamci.app (frontend domain, CloudFront-routed) for both the
demo/test-mode and production webhook setup sections, with an explicit warning explaining why.

Bounded context / area: billing (docs only)

Related issue / US: Production incident — paid Stripe checkout not activating the plan


Type of Change

  • feat — new feature
  • fix — bug fix
  • docs — documentation only
  • refactor — code change without behavior change
  • test — tests only
  • build / ci — build, dependencies, or CI/CD
  • chore — maintenance

Checklist

  • The PR targets develop (not main)
  • Branch name follows feature/*, bugfix/*, or hotfix/*
  • Commits follow Conventional Commits
  • ./gradlew build passes locally — N/A, Markdown only
  • New cross-module access respects module boundaries — N/A
  • Added/updated tests for the change — N/A
  • No secrets, credentials, or .pem keys are committed
  • CHANGELOG.md updated under [Unreleased] — N/A, docs correction, no product behavior change
  • Database changes are expressed as Flyway migrations — N/A

How to Test

Re-read the updated Deployed Test Environment and Production Deployment Checklist sections
and confirm the URL guidance and warning are accurate against reqsai-infra's ALB security group
(CloudFront-prefix-list-only ingress).

Notes / Screenshots (optional)

Immediate fix for the live incident is operational, not code: update the webhook Endpoint URL in
the Stripe Dashboard to https://app.tamci.app/api/billing/webhooks/stripe, then use Stripe's
"Resend" on the failed event to activate the plan without a new charge.

…amci.app

api.tamci.app resolves directly to the CloudFront-only ALB; a webhook
pointed there times out with zero trace on the backend (root cause of
a real production incident: paid checkout never activated the plan).
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