Skip to content

Move staging web app to app-staging.useorbit.org - #640

Merged
thomasluizon merged 2 commits into
mainfrom
fix/ticket-833-app-staging-host
Sep 28, 2026
Merged

thomasluizon merged 2 commits into
mainfrom
fix/ticket-833-app-staging-host

Conversation

@thomasluizon

@thomasluizon thomasluizon commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Closes thomasluizon/orbit-tickets#833

Change

  • Add app-staging.useorbit.org to the staging Render custom domain set and point a new unproxied Cloudflare CNAME at the staging web service. Keep staging.useorbit.org attached for the web proxy's permanent redirect.
  • Use the new host for the staging Turnstile widget, API CORS and return URLs, web site URL, and upload bucket CORS. Production values and api-staging.useorbit.org stay as configured.
  • Document the rollout in infra/README.md.

The Terraform settings live in infra/variables.tf, infra/cloudflare.tf, infra/configuration.tf, and infra/uploads.tf. Keeping both Render custom domains lets the old host reach the existing web proxy while the new host becomes canonical. No web service resource configuration was added.

Cutover safety (review fix)

  • staging.useorbit.org stays a domain of orbit-web-staging and redirects to the new host. The staging API keeps it as Cors__AllowedOrigins__1 and as Google__AllowedRedirectUris__2, and the staging upload bucket CORS allows both hosts, so a tab still on the previous web build keeps working while the new build is released.
  • terraform fmt -check and terraform validate (providers installed with init -backend=false) passed; node --test infra/ses-isolation.test.mjs infra/check-web-plan.test.mjs passed.

Verification

  • terraform fmt -check infra/variables.tf infra/cloudflare.tf infra/configuration.tf infra/uploads.tf: passed.
  • terraform -chdir=infra validate: unavailable because the Render, Cloudflare, and AWS provider plugins are not cached in this worktree.
  • node tools/check-dashes.mjs --files infra/variables.tf infra/cloudflare.tf infra/configuration.tf infra/uploads.tf infra/README.md: passed.
  • node tools/check-timeless.mjs --base main: passed.
  • dotnet build Orbit.slnx: zero errors.
  • dotnet test Orbit.slnx --no-build: 6,875 passed, zero failed.
  • A targeted Terraform plan requires live provider access and was not run in this worker. The rollout owner must confirm that render_web_service.staging_web has no planned update.

Manual steps

  • In the Render dashboard for orbit-web-staging, add app-staging.useorbit.org under Custom Domains before the targeted Terraform apply. Confirm both staging hosts are attached and the targeted plan shows no update to render_web_service.staging_web.
  • In the orbit-ui-mobile GitHub repository, set the Actions variable STAGING_NEXT_PUBLIC_SITE_URL to https://app-staging.useorbit.org. Confirm the variable displays that exact value.
  • In the Google Cloud Console OAuth web client, add https://app-staging.useorbit.org/auth-callback to Authorized redirect URIs. Confirm an authorization request using that URI is accepted.
  • Apply the reviewed targeted Terraform plan for the new Cloudflare CNAME, Turnstile widget, staging environment groups, and staging upload bucket CORS. Confirm the plan touches no web service and the new DNS record resolves to the staging Render host.
  • Release the staging API and web from redesign/main. Confirm https://app-staging.useorbit.org/api/health reports the released commit, https://staging.useorbit.org/ responds with a permanent redirect to the new host, and email code and Google sign-in work on the new host.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

The documented cutover removes the old staging origin from the API and upload allowlists before the new web release, interrupting active staging sessions.

Reviewed changes The staging web hostname moves to app-staging.useorbit.org across DNS, Render domains, auth and billing configuration, upload CORS, and rollout instructions.

  • Routing: Adds the new unproxied CNAME while retaining the old Render custom domain for a permanent redirect.
  • Configuration: Switches staging Turnstile, API and web origins, OAuth redirect, Stripe return URLs, and upload CORS to the new hostname.
  • Rollout: Documents external OAuth and build-variable changes followed by Terraform apply and staging releases.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using GPT Sol | 𝕏

Comment thread infra/configuration.tf Resolved
staging.useorbit.org stays a domain of the staging web service and
redirects to app-staging.useorbit.org. The staging API CORS origins, its
Google redirect URIs and the staging upload bucket CORS keep the old host
beside the new one, so a tab still on the previous web build keeps
working while the new build is released.

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

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes The follow-up commit preserves access for tabs using the old staging hostname during the web cutover.

  • API access: Kept staging.useorbit.org alongside the new host in staging API CORS and Google redirect URI settings.
  • Uploads: Allowed both staging origins in the upload bucket CORS configuration while leaving the production origin unchanged.
  • Rollout: Documented the overlap for tabs running the previous web build.

Pullfrog  | View workflow run | Using GPT Sol | 𝕏

@sonarqubecloud

Copy link
Copy Markdown

@thomasluizon
thomasluizon merged commit 53c1d83 into main Sep 28, 2026
27 checks passed
@thomasluizon
thomasluizon deleted the fix/ticket-833-app-staging-host branch September 28, 2026 15:22
thomasluizon added a commit that referenced this pull request Sep 28, 2026
…ign main (#746) (#645)

* Move staging web app to app-staging.useorbit.org (#640)

* fix: move staging web host to app-staging.useorbit.org

* Keep the old staging host allowed through the host cutover

staging.useorbit.org stays a domain of the staging web service and
redirects to app-staging.useorbit.org. The staging API CORS origins, its
Google redirect URIs and the staging upload bucket CORS keep the old host
beside the new one, so a tab still on the previous web build keeps
working while the new build is released.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 53c1d83)

* fix: trust render operations OIDC subject for staging role (#642)

(cherry picked from commit 561fb43)

* fix: allow unlogging after due date advances (#643)

* fix: allow unlog and bulk replay after due date advances

* fix: preserve date limits when unlogging habits

Keep the future and overdue guards before the unlog branch, ignore deleted logs when toggling, and restore the next unresolved due date after a historical relog. Covers thomasluizon/orbit-tickets#874.

(cherry picked from commit d3552a8)

* Restore logged habits in calendar month (#644)

* Fix logged habit dates in calendar month

* fix: keep flexible calendar parent for logged child

* fix: send no calendar occurrences for an exhausted flexible parent

A flexible parent kept in the month only because a child logged there still
sent every projected day of its window, which the calendar drew as missed.
Send only its own logged dates when its target is exhausted.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 35e141d)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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